diff --git a/compiler/rustc_mir_transform/src/lib.rs b/compiler/rustc_mir_transform/src/lib.rs index 5d253d7384df4..3801013cc4d6e 100644 --- a/compiler/rustc_mir_transform/src/lib.rs +++ b/compiler/rustc_mir_transform/src/lib.rs @@ -597,7 +597,7 @@ fn run_optimization_passes<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) { &gvn::GVN, &simplify::SimplifyLocals::AfterGVN, &dataflow_const_prop::DataflowConstProp, - &single_use_consts::SingleUseConsts, + &single_use_consts::SingleUseConsts::Initial, &o1(simplify_branches::SimplifyConstCondition::AfterConstProp), &jump_threading::JumpThreading, &early_otherwise_branch::EarlyOtherwiseBranch, @@ -607,6 +607,7 @@ fn run_optimization_passes<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) { &o1(remove_noop_landing_pads::RemoveNoopLandingPads), &o1(simplify::SimplifyCfg::Final), ©_prop::CopyProp, + &single_use_consts::SingleUseConsts::Final, &dead_store_elimination::DeadStoreElimination::Final, &nrvo::RenameReturnPlace, &simplify::SimplifyLocals::Final, diff --git a/compiler/rustc_mir_transform/src/single_use_consts.rs b/compiler/rustc_mir_transform/src/single_use_consts.rs index 93736e55996ec..5a36e21318911 100644 --- a/compiler/rustc_mir_transform/src/single_use_consts.rs +++ b/compiler/rustc_mir_transform/src/single_use_consts.rs @@ -18,13 +18,23 @@ use rustc_middle::ty::TyCtxt; /// /// It also removes *never*-used constants, since it had all the information /// needed to do that too, including updating the debug info. -pub struct SingleUseConsts; +pub enum SingleUseConsts { + Initial, + Final, +} impl<'tcx> MirPass<'tcx> for SingleUseConsts { fn is_enabled(&self, sess: &rustc_session::Session) -> bool { sess.mir_opt_level() > 0 } + fn name(&self) -> &'static str { + match self { + SingleUseConsts::Initial => "SingleUseConsts-initial", + SingleUseConsts::Final => "SingleUseConsts-final", + } + } + fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) { let mut finder = SingleUseConstsFinder { ineligible_locals: BitSet::new_empty(body.local_decls.len()), diff --git a/tests/mir-opt/const_debuginfo.main.SingleUseConsts.diff b/tests/mir-opt/const_debuginfo.main.SingleUseConsts-final.diff similarity index 97% rename from tests/mir-opt/const_debuginfo.main.SingleUseConsts.diff rename to tests/mir-opt/const_debuginfo.main.SingleUseConsts-final.diff index 8088984bc77ab..435bf57816900 100644 --- a/tests/mir-opt/const_debuginfo.main.SingleUseConsts.diff +++ b/tests/mir-opt/const_debuginfo.main.SingleUseConsts-final.diff @@ -1,5 +1,5 @@ -- // MIR for `main` before SingleUseConsts -+ // MIR for `main` after SingleUseConsts +- // MIR for `main` before SingleUseConsts-final ++ // MIR for `main` after SingleUseConsts-final fn main() -> () { let mut _0: (); diff --git a/tests/mir-opt/const_debuginfo.rs b/tests/mir-opt/const_debuginfo.rs index 3b2bc4559ced9..be61c736bc2d5 100644 --- a/tests/mir-opt/const_debuginfo.rs +++ b/tests/mir-opt/const_debuginfo.rs @@ -1,4 +1,4 @@ -//@ test-mir-pass: SingleUseConsts +//@ test-mir-pass: SingleUseConsts-final //@ compile-flags: -C overflow-checks=no -Zmir-enable-passes=+GVN -Zdump-mir-exclude-alloc-bytes #![allow(unused)] @@ -8,7 +8,7 @@ struct Point { y: u32, } -// EMIT_MIR const_debuginfo.main.SingleUseConsts.diff +// EMIT_MIR const_debuginfo.main.SingleUseConsts-final.diff fn main() { // CHECK-LABEL: fn main( // CHECK: debug x => const 1_u8; diff --git a/tests/mir-opt/single_use_consts.assign_const_to_return.SingleUseConsts.panic-abort.diff b/tests/mir-opt/single_use_consts.assign_const_to_return.SingleUseConsts-initial.panic-abort.diff similarity index 54% rename from tests/mir-opt/single_use_consts.assign_const_to_return.SingleUseConsts.panic-abort.diff rename to tests/mir-opt/single_use_consts.assign_const_to_return.SingleUseConsts-initial.panic-abort.diff index 8818c891e94b1..5f57f8b3a0d8b 100644 --- a/tests/mir-opt/single_use_consts.assign_const_to_return.SingleUseConsts.panic-abort.diff +++ b/tests/mir-opt/single_use_consts.assign_const_to_return.SingleUseConsts-initial.panic-abort.diff @@ -1,5 +1,5 @@ -- // MIR for `assign_const_to_return` before SingleUseConsts -+ // MIR for `assign_const_to_return` after SingleUseConsts +- // MIR for `assign_const_to_return` before SingleUseConsts-initial ++ // MIR for `assign_const_to_return` after SingleUseConsts-initial fn assign_const_to_return() -> bool { let mut _0: bool; diff --git a/tests/mir-opt/single_use_consts.assign_const_to_return.SingleUseConsts.panic-unwind.diff b/tests/mir-opt/single_use_consts.assign_const_to_return.SingleUseConsts-initial.panic-unwind.diff similarity index 54% rename from tests/mir-opt/single_use_consts.assign_const_to_return.SingleUseConsts.panic-unwind.diff rename to tests/mir-opt/single_use_consts.assign_const_to_return.SingleUseConsts-initial.panic-unwind.diff index 8818c891e94b1..5f57f8b3a0d8b 100644 --- a/tests/mir-opt/single_use_consts.assign_const_to_return.SingleUseConsts.panic-unwind.diff +++ b/tests/mir-opt/single_use_consts.assign_const_to_return.SingleUseConsts-initial.panic-unwind.diff @@ -1,5 +1,5 @@ -- // MIR for `assign_const_to_return` before SingleUseConsts -+ // MIR for `assign_const_to_return` after SingleUseConsts +- // MIR for `assign_const_to_return` before SingleUseConsts-initial ++ // MIR for `assign_const_to_return` after SingleUseConsts-initial fn assign_const_to_return() -> bool { let mut _0: bool; diff --git a/tests/mir-opt/single_use_consts.if_const.SingleUseConsts.panic-unwind.diff b/tests/mir-opt/single_use_consts.if_const.SingleUseConsts-initial.panic-abort.diff similarity index 83% rename from tests/mir-opt/single_use_consts.if_const.SingleUseConsts.panic-unwind.diff rename to tests/mir-opt/single_use_consts.if_const.SingleUseConsts-initial.panic-abort.diff index 468076e5ee3ce..f691f07c1cf82 100644 --- a/tests/mir-opt/single_use_consts.if_const.SingleUseConsts.panic-unwind.diff +++ b/tests/mir-opt/single_use_consts.if_const.SingleUseConsts-initial.panic-abort.diff @@ -1,5 +1,5 @@ -- // MIR for `if_const` before SingleUseConsts -+ // MIR for `if_const` after SingleUseConsts +- // MIR for `if_const` before SingleUseConsts-initial ++ // MIR for `if_const` after SingleUseConsts-initial fn if_const() -> i32 { let mut _0: i32; diff --git a/tests/mir-opt/single_use_consts.if_const.SingleUseConsts.panic-abort.diff b/tests/mir-opt/single_use_consts.if_const.SingleUseConsts-initial.panic-unwind.diff similarity index 83% rename from tests/mir-opt/single_use_consts.if_const.SingleUseConsts.panic-abort.diff rename to tests/mir-opt/single_use_consts.if_const.SingleUseConsts-initial.panic-unwind.diff index 468076e5ee3ce..f691f07c1cf82 100644 --- a/tests/mir-opt/single_use_consts.if_const.SingleUseConsts.panic-abort.diff +++ b/tests/mir-opt/single_use_consts.if_const.SingleUseConsts-initial.panic-unwind.diff @@ -1,5 +1,5 @@ -- // MIR for `if_const` before SingleUseConsts -+ // MIR for `if_const` after SingleUseConsts +- // MIR for `if_const` before SingleUseConsts-initial ++ // MIR for `if_const` after SingleUseConsts-initial fn if_const() -> i32 { let mut _0: i32; diff --git a/tests/mir-opt/single_use_consts.if_const_debug.SingleUseConsts.panic-abort.diff b/tests/mir-opt/single_use_consts.if_const_debug.SingleUseConsts-initial.panic-abort.diff similarity index 88% rename from tests/mir-opt/single_use_consts.if_const_debug.SingleUseConsts.panic-abort.diff rename to tests/mir-opt/single_use_consts.if_const_debug.SingleUseConsts-initial.panic-abort.diff index ad1a2b300f2a9..73ae583b7a00d 100644 --- a/tests/mir-opt/single_use_consts.if_const_debug.SingleUseConsts.panic-abort.diff +++ b/tests/mir-opt/single_use_consts.if_const_debug.SingleUseConsts-initial.panic-abort.diff @@ -1,5 +1,5 @@ -- // MIR for `if_const_debug` before SingleUseConsts -+ // MIR for `if_const_debug` after SingleUseConsts +- // MIR for `if_const_debug` before SingleUseConsts-initial ++ // MIR for `if_const_debug` after SingleUseConsts-initial fn if_const_debug() -> i32 { let mut _0: i32; diff --git a/tests/mir-opt/single_use_consts.if_const_debug.SingleUseConsts.panic-unwind.diff b/tests/mir-opt/single_use_consts.if_const_debug.SingleUseConsts-initial.panic-unwind.diff similarity index 88% rename from tests/mir-opt/single_use_consts.if_const_debug.SingleUseConsts.panic-unwind.diff rename to tests/mir-opt/single_use_consts.if_const_debug.SingleUseConsts-initial.panic-unwind.diff index 827a292e5d024..7db6ed106eae4 100644 --- a/tests/mir-opt/single_use_consts.if_const_debug.SingleUseConsts.panic-unwind.diff +++ b/tests/mir-opt/single_use_consts.if_const_debug.SingleUseConsts-initial.panic-unwind.diff @@ -1,5 +1,5 @@ -- // MIR for `if_const_debug` before SingleUseConsts -+ // MIR for `if_const_debug` after SingleUseConsts +- // MIR for `if_const_debug` before SingleUseConsts-initial ++ // MIR for `if_const_debug` after SingleUseConsts-initial fn if_const_debug() -> i32 { let mut _0: i32; diff --git a/tests/mir-opt/single_use_consts.keep_parameter.SingleUseConsts.panic-abort.diff b/tests/mir-opt/single_use_consts.keep_parameter.SingleUseConsts-initial.panic-abort.diff similarity index 63% rename from tests/mir-opt/single_use_consts.keep_parameter.SingleUseConsts.panic-abort.diff rename to tests/mir-opt/single_use_consts.keep_parameter.SingleUseConsts-initial.panic-abort.diff index f7d823af9e3d7..e143f2b3d2641 100644 --- a/tests/mir-opt/single_use_consts.keep_parameter.SingleUseConsts.panic-abort.diff +++ b/tests/mir-opt/single_use_consts.keep_parameter.SingleUseConsts-initial.panic-abort.diff @@ -1,5 +1,5 @@ -- // MIR for `keep_parameter` before SingleUseConsts -+ // MIR for `keep_parameter` after SingleUseConsts +- // MIR for `keep_parameter` before SingleUseConsts-initial ++ // MIR for `keep_parameter` after SingleUseConsts-initial fn keep_parameter(_1: i32) -> () { debug other => _1; diff --git a/tests/mir-opt/single_use_consts.keep_parameter.SingleUseConsts.panic-unwind.diff b/tests/mir-opt/single_use_consts.keep_parameter.SingleUseConsts-initial.panic-unwind.diff similarity index 63% rename from tests/mir-opt/single_use_consts.keep_parameter.SingleUseConsts.panic-unwind.diff rename to tests/mir-opt/single_use_consts.keep_parameter.SingleUseConsts-initial.panic-unwind.diff index f7d823af9e3d7..e143f2b3d2641 100644 --- a/tests/mir-opt/single_use_consts.keep_parameter.SingleUseConsts.panic-unwind.diff +++ b/tests/mir-opt/single_use_consts.keep_parameter.SingleUseConsts-initial.panic-unwind.diff @@ -1,5 +1,5 @@ -- // MIR for `keep_parameter` before SingleUseConsts -+ // MIR for `keep_parameter` after SingleUseConsts +- // MIR for `keep_parameter` before SingleUseConsts-initial ++ // MIR for `keep_parameter` after SingleUseConsts-initial fn keep_parameter(_1: i32) -> () { debug other => _1; diff --git a/tests/mir-opt/single_use_consts.match_const.SingleUseConsts.panic-abort.diff b/tests/mir-opt/single_use_consts.match_const.SingleUseConsts-initial.panic-abort.diff similarity index 85% rename from tests/mir-opt/single_use_consts.match_const.SingleUseConsts.panic-abort.diff rename to tests/mir-opt/single_use_consts.match_const.SingleUseConsts-initial.panic-abort.diff index 8d87438a47aec..d150752b80105 100644 --- a/tests/mir-opt/single_use_consts.match_const.SingleUseConsts.panic-abort.diff +++ b/tests/mir-opt/single_use_consts.match_const.SingleUseConsts-initial.panic-abort.diff @@ -1,5 +1,5 @@ -- // MIR for `match_const` before SingleUseConsts -+ // MIR for `match_const` after SingleUseConsts +- // MIR for `match_const` before SingleUseConsts-initial ++ // MIR for `match_const` after SingleUseConsts-initial fn match_const() -> &str { let mut _0: &str; diff --git a/tests/mir-opt/single_use_consts.match_const.SingleUseConsts.panic-unwind.diff b/tests/mir-opt/single_use_consts.match_const.SingleUseConsts-initial.panic-unwind.diff similarity index 85% rename from tests/mir-opt/single_use_consts.match_const.SingleUseConsts.panic-unwind.diff rename to tests/mir-opt/single_use_consts.match_const.SingleUseConsts-initial.panic-unwind.diff index 8d87438a47aec..d150752b80105 100644 --- a/tests/mir-opt/single_use_consts.match_const.SingleUseConsts.panic-unwind.diff +++ b/tests/mir-opt/single_use_consts.match_const.SingleUseConsts-initial.panic-unwind.diff @@ -1,5 +1,5 @@ -- // MIR for `match_const` before SingleUseConsts -+ // MIR for `match_const` after SingleUseConsts +- // MIR for `match_const` before SingleUseConsts-initial ++ // MIR for `match_const` after SingleUseConsts-initial fn match_const() -> &str { let mut _0: &str; diff --git a/tests/mir-opt/single_use_consts.match_const_debug.SingleUseConsts.panic-abort.diff b/tests/mir-opt/single_use_consts.match_const_debug.SingleUseConsts-initial.panic-abort.diff similarity index 87% rename from tests/mir-opt/single_use_consts.match_const_debug.SingleUseConsts.panic-abort.diff rename to tests/mir-opt/single_use_consts.match_const_debug.SingleUseConsts-initial.panic-abort.diff index f192f3feb96e5..98b7adcc2fe13 100644 --- a/tests/mir-opt/single_use_consts.match_const_debug.SingleUseConsts.panic-abort.diff +++ b/tests/mir-opt/single_use_consts.match_const_debug.SingleUseConsts-initial.panic-abort.diff @@ -1,5 +1,5 @@ -- // MIR for `match_const_debug` before SingleUseConsts -+ // MIR for `match_const_debug` after SingleUseConsts +- // MIR for `match_const_debug` before SingleUseConsts-initial ++ // MIR for `match_const_debug` after SingleUseConsts-initial fn match_const_debug() -> &str { let mut _0: &str; diff --git a/tests/mir-opt/single_use_consts.match_const_debug.SingleUseConsts.panic-unwind.diff b/tests/mir-opt/single_use_consts.match_const_debug.SingleUseConsts-initial.panic-unwind.diff similarity index 87% rename from tests/mir-opt/single_use_consts.match_const_debug.SingleUseConsts.panic-unwind.diff rename to tests/mir-opt/single_use_consts.match_const_debug.SingleUseConsts-initial.panic-unwind.diff index 261faf415f3bc..4f466e922e52d 100644 --- a/tests/mir-opt/single_use_consts.match_const_debug.SingleUseConsts.panic-unwind.diff +++ b/tests/mir-opt/single_use_consts.match_const_debug.SingleUseConsts-initial.panic-unwind.diff @@ -1,5 +1,5 @@ -- // MIR for `match_const_debug` before SingleUseConsts -+ // MIR for `match_const_debug` after SingleUseConsts +- // MIR for `match_const_debug` before SingleUseConsts-initial ++ // MIR for `match_const_debug` after SingleUseConsts-initial fn match_const_debug() -> &str { let mut _0: &str; diff --git a/tests/mir-opt/single_use_consts.never_used_debug.SingleUseConsts.panic-abort.diff b/tests/mir-opt/single_use_consts.never_used_debug.SingleUseConsts-initial.panic-abort.diff similarity index 75% rename from tests/mir-opt/single_use_consts.never_used_debug.SingleUseConsts.panic-abort.diff rename to tests/mir-opt/single_use_consts.never_used_debug.SingleUseConsts-initial.panic-abort.diff index 8ef94a790a343..50e76c909c55e 100644 --- a/tests/mir-opt/single_use_consts.never_used_debug.SingleUseConsts.panic-abort.diff +++ b/tests/mir-opt/single_use_consts.never_used_debug.SingleUseConsts-initial.panic-abort.diff @@ -1,5 +1,5 @@ -- // MIR for `never_used_debug` before SingleUseConsts -+ // MIR for `never_used_debug` after SingleUseConsts +- // MIR for `never_used_debug` before SingleUseConsts-initial ++ // MIR for `never_used_debug` after SingleUseConsts-initial fn never_used_debug() -> () { let mut _0: (); diff --git a/tests/mir-opt/single_use_consts.never_used_debug.SingleUseConsts.panic-unwind.diff b/tests/mir-opt/single_use_consts.never_used_debug.SingleUseConsts-initial.panic-unwind.diff similarity index 75% rename from tests/mir-opt/single_use_consts.never_used_debug.SingleUseConsts.panic-unwind.diff rename to tests/mir-opt/single_use_consts.never_used_debug.SingleUseConsts-initial.panic-unwind.diff index 8ef94a790a343..50e76c909c55e 100644 --- a/tests/mir-opt/single_use_consts.never_used_debug.SingleUseConsts.panic-unwind.diff +++ b/tests/mir-opt/single_use_consts.never_used_debug.SingleUseConsts-initial.panic-unwind.diff @@ -1,5 +1,5 @@ -- // MIR for `never_used_debug` before SingleUseConsts -+ // MIR for `never_used_debug` after SingleUseConsts +- // MIR for `never_used_debug` before SingleUseConsts-initial ++ // MIR for `never_used_debug` after SingleUseConsts-initial fn never_used_debug() -> () { let mut _0: (); diff --git a/tests/mir-opt/single_use_consts.rs b/tests/mir-opt/single_use_consts.rs index ecb602c647a50..d296f1ea11058 100644 --- a/tests/mir-opt/single_use_consts.rs +++ b/tests/mir-opt/single_use_consts.rs @@ -1,4 +1,4 @@ -//@ test-mir-pass: SingleUseConsts +//@ test-mir-pass: SingleUseConsts-initial //@ compile-flags: -C debuginfo=full // EMIT_MIR_FOR_EACH_PANIC_STRATEGY @@ -7,14 +7,14 @@ trait MyTrait { const ASSOC_INT: i32; } -// EMIT_MIR single_use_consts.if_const.SingleUseConsts.diff +// EMIT_MIR single_use_consts.if_const.SingleUseConsts-initial.diff fn if_const() -> i32 { // CHECK-LABEL: fn if_const( // CHECK: switchInt(const ::ASSOC_BOOL) if T::ASSOC_BOOL { 7 } else { 42 } } -// EMIT_MIR single_use_consts.match_const.SingleUseConsts.diff +// EMIT_MIR single_use_consts.match_const.SingleUseConsts-initial.diff fn match_const() -> &'static str { // CHECK-LABEL: fn match_const( // CHECK: switchInt(const ::ASSOC_INT) @@ -25,7 +25,7 @@ fn match_const() -> &'static str { } } -// EMIT_MIR single_use_consts.if_const_debug.SingleUseConsts.diff +// EMIT_MIR single_use_consts.if_const_debug.SingleUseConsts-initial.diff fn if_const_debug() -> i32 { // CHECK-LABEL: fn if_const_debug( // CHECK: my_bool => const ::ASSOC_BOOL; @@ -37,7 +37,7 @@ fn if_const_debug() -> i32 { if my_bool { 7 } else { 42 } } -// EMIT_MIR single_use_consts.match_const_debug.SingleUseConsts.diff +// EMIT_MIR single_use_consts.match_const_debug.SingleUseConsts-initial.diff fn match_const_debug() -> &'static str { // CHECK-LABEL: fn match_const_debug( // CHECK: my_int => const ::ASSOC_INT; @@ -51,7 +51,7 @@ fn match_const_debug() -> &'static str { } } -// EMIT_MIR single_use_consts.never_used_debug.SingleUseConsts.diff +// EMIT_MIR single_use_consts.never_used_debug.SingleUseConsts-initial.diff #[allow(unused_variables)] fn never_used_debug() { // CHECK-LABEL: fn never_used_debug( @@ -62,14 +62,14 @@ fn never_used_debug() { let my_int = T::ASSOC_INT; } -// EMIT_MIR single_use_consts.assign_const_to_return.SingleUseConsts.diff +// EMIT_MIR single_use_consts.assign_const_to_return.SingleUseConsts-initial.diff fn assign_const_to_return() -> bool { // CHECK-LABEL: fn assign_const_to_return( // CHECK: _0 = const ::ASSOC_BOOL; T::ASSOC_BOOL } -// EMIT_MIR single_use_consts.keep_parameter.SingleUseConsts.diff +// EMIT_MIR single_use_consts.keep_parameter.SingleUseConsts-initial.diff fn keep_parameter(mut other: i32) { // CHECK-LABEL: fn keep_parameter( // CHECK: _1 = const ::ASSOC_INT;