saturating_float_casts: bool = (false, parse_bool, [TRACKED],
"make float->int casts UB-free: numbers outside the integer type's range are clipped to \
the max/min integer respectively, and NaN is mapped to 0"),
- lower_128bit_ops: bool = (false, parse_bool, [TRACKED],
+ lower_128bit_ops: Option<bool> = (None, parse_opt_bool, [TRACKED],
"rewrite operators on i128 and u128 into lang item calls (typically provided \
- by compiler-builtins) so translation doesn't need to support them"),
+ by compiler-builtins) so translation doesn't need to support them,
+ overriding the default for the current target"),
}
pub fn default_lib_output() -> CrateType {
/// Whether library functions call lowering/optimization is disabled in LLVM
/// for this target unconditionally.
pub no_builtins: bool,
+
+ /// Whether to lower 128-bit operations to compiler_builtins calls. Use if
+ /// your backend only supports 64-bit and smaller math.
+ pub i128_lowering: bool,
}
impl Default for TargetOptions {
requires_lto: false,
singlethread: false,
no_builtins: false,
+ i128_lowering: false,
}
}
}
tcx: TyCtxt<'a, 'tcx, 'tcx>,
_src: MirSource,
mir: &mut Mir<'tcx>) {
- if !tcx.sess.opts.debugging_opts.lower_128bit_ops {
+ let debugging_override = tcx.sess.opts.debugging_opts.lower_128bit_ops;
+ let target_default = tcx.sess.host.options.i128_lowering;
+ if !debugging_override.unwrap_or(target_default) {
return
}