Auto merge of #66074 - wesleywiser:test_run_const_prop, r=oli-obk
[mir-opt] Turn on the `ConstProp` pass by default perf.rlo shows that running the `ConstProp` pass results in across-the-board wins regardless of debug or opt complilation mode. As a result, we're turning it on to get the compile time benefits.
This commit is contained in:
commit
d1da8023da
@ -648,8 +648,21 @@ impl<'mir, 'tcx> ConstPropagator<'mir, 'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
fn should_const_prop(&self) -> bool {
|
||||
self.tcx.sess.opts.debugging_opts.mir_opt_level >= 2
|
||||
fn should_const_prop(&mut self, op: OpTy<'tcx>) -> bool {
|
||||
if self.tcx.sess.opts.debugging_opts.mir_opt_level >= 2 {
|
||||
return true;
|
||||
} else if self.tcx.sess.opts.debugging_opts.mir_opt_level == 0 {
|
||||
return false;
|
||||
}
|
||||
|
||||
match *op {
|
||||
interpret::Operand::Immediate(Immediate::Scalar(ScalarMaybeUndef::Scalar(s))) =>
|
||||
s.is_bits(),
|
||||
interpret::Operand::Immediate(Immediate::ScalarPair(ScalarMaybeUndef::Scalar(l),
|
||||
ScalarMaybeUndef::Scalar(r))) =>
|
||||
l.is_bits() && r.is_bits(),
|
||||
_ => false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -749,15 +762,15 @@ impl<'mir, 'tcx> MutVisitor<'tcx> for ConstPropagator<'mir, 'tcx> {
|
||||
if self.can_const_prop[local] {
|
||||
trace!("propagated into {:?}", local);
|
||||
|
||||
if self.should_const_prop() {
|
||||
let value =
|
||||
self.get_const(local).expect("local was dead/uninitialized");
|
||||
trace!("replacing {:?} with {:?}", rval, value);
|
||||
self.replace_with_const(
|
||||
rval,
|
||||
value,
|
||||
statement.source_info,
|
||||
);
|
||||
if let Some(value) = self.get_const(local) {
|
||||
if self.should_const_prop(value) {
|
||||
trace!("replacing {:?} with {:?}", rval, value);
|
||||
self.replace_with_const(
|
||||
rval,
|
||||
value,
|
||||
statement.source_info,
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
trace!("can't propagate into {:?}", local);
|
||||
@ -859,7 +872,7 @@ impl<'mir, 'tcx> MutVisitor<'tcx> for ConstPropagator<'mir, 'tcx> {
|
||||
&msg,
|
||||
);
|
||||
} else {
|
||||
if self.should_const_prop() {
|
||||
if self.should_const_prop(value) {
|
||||
if let ScalarMaybeUndef::Scalar(scalar) = value_const {
|
||||
*cond = self.operand_from_scalar(
|
||||
scalar,
|
||||
@ -872,8 +885,8 @@ impl<'mir, 'tcx> MutVisitor<'tcx> for ConstPropagator<'mir, 'tcx> {
|
||||
}
|
||||
},
|
||||
TerminatorKind::SwitchInt { ref mut discr, switch_ty, .. } => {
|
||||
if self.should_const_prop() {
|
||||
if let Some(value) = self.eval_operand(&discr, source_info) {
|
||||
if let Some(value) = self.eval_operand(&discr, source_info) {
|
||||
if self.should_const_prop(value) {
|
||||
if let ScalarMaybeUndef::Scalar(scalar) =
|
||||
self.ecx.read_scalar(value).unwrap() {
|
||||
*discr = self.operand_from_scalar(scalar, switch_ty, source_info.span);
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
// CHECK-LABEL: define i32 @nothing
|
||||
// CHECK-SAME: [[NOTHING_ATTRS:#[0-9]+]]
|
||||
// NO-OPT: ret i32 %_1.0
|
||||
// NO-OPT: ret i32 4
|
||||
// SIZE-OPT: ret i32 4
|
||||
// SPEEC-OPT: ret i32 4
|
||||
#[no_mangle]
|
||||
@ -18,7 +18,7 @@ pub fn nothing() -> i32 {
|
||||
|
||||
// CHECK-LABEL: define i32 @size
|
||||
// CHECK-SAME: [[SIZE_ATTRS:#[0-9]+]]
|
||||
// NO-OPT: ret i32 %_1.0
|
||||
// NO-OPT: ret i32 6
|
||||
// SIZE-OPT: ret i32 6
|
||||
// SPEED-OPT: ret i32 6
|
||||
#[optimize(size)]
|
||||
@ -31,7 +31,7 @@ pub fn size() -> i32 {
|
||||
// NO-OPT-SAME: [[NOTHING_ATTRS]]
|
||||
// SPEED-OPT-SAME: [[NOTHING_ATTRS]]
|
||||
// SIZE-OPT-SAME: [[SPEED_ATTRS:#[0-9]+]]
|
||||
// NO-OPT: ret i32 %_1.0
|
||||
// NO-OPT: ret i32 8
|
||||
// SIZE-OPT: ret i32 8
|
||||
// SPEED-OPT: ret i32 8
|
||||
#[optimize(speed)]
|
||||
|
@ -48,7 +48,7 @@ pub fn change_loop_condition() {
|
||||
}
|
||||
|
||||
#[cfg(not(cfail1))]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, mir_built, optimized_mir")]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, mir_built")]
|
||||
#[rustc_clean(cfg="cfail3")]
|
||||
pub fn change_loop_condition() {
|
||||
let mut _x = 0;
|
||||
@ -70,7 +70,7 @@ pub fn add_break() {
|
||||
}
|
||||
|
||||
#[cfg(not(cfail1))]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, mir_built, optimized_mir, typeck_tables_of")]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, mir_built, typeck_tables_of")]
|
||||
#[rustc_clean(cfg="cfail3")]
|
||||
pub fn add_break() {
|
||||
let mut _x = 0;
|
||||
@ -141,7 +141,7 @@ pub fn change_break_label() {
|
||||
}
|
||||
|
||||
#[cfg(not(cfail1))]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, mir_built, optimized_mir")]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, mir_built")]
|
||||
#[rustc_clean(cfg="cfail3")]
|
||||
pub fn change_break_label() {
|
||||
let mut _x = 0;
|
||||
@ -191,7 +191,7 @@ pub fn change_continue_label() {
|
||||
}
|
||||
|
||||
#[cfg(not(cfail1))]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, mir_built, optimized_mir")]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, mir_built")]
|
||||
#[rustc_clean(cfg="cfail3")]
|
||||
pub fn change_continue_label() {
|
||||
let mut _x = 0;
|
||||
@ -216,7 +216,7 @@ pub fn change_continue_to_break() {
|
||||
}
|
||||
|
||||
#[cfg(not(cfail1))]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, mir_built, optimized_mir")]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, mir_built")]
|
||||
#[rustc_clean(cfg="cfail3")]
|
||||
pub fn change_continue_to_break() {
|
||||
let mut _x = 0;
|
||||
|
@ -48,7 +48,7 @@ pub fn change_loop_condition() {
|
||||
}
|
||||
|
||||
#[cfg(not(cfail1))]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, mir_built, optimized_mir")]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, mir_built")]
|
||||
#[rustc_clean(cfg="cfail3")]
|
||||
pub fn change_loop_condition() {
|
||||
let mut _x = 0;
|
||||
@ -191,7 +191,7 @@ pub fn change_continue_label() {
|
||||
}
|
||||
|
||||
#[cfg(not(cfail1))]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, mir_built, optimized_mir")]
|
||||
#[rustc_clean(cfg="cfail2", except="HirBody, mir_built")]
|
||||
#[rustc_clean(cfg="cfail3")]
|
||||
pub fn change_continue_label() {
|
||||
let mut _x = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user