Skip to content

Commit a6e0fb4

Browse files
authored
Rollup merge of #122656 - RalfJung:simplify-cfg, r=compiler-errors
simplify_cfg: rename some passes so that they make more sense I was extremely confused by `SimplifyCfg::ElaborateDrops`, since it runs way later than drop elaboration. It is used e.g. in `mir-opt/retag.rs` even though that pass doesn't care about drop elaboration at all. "Early opt" is also very confusing since that makes it sounds like it runs early during optimizations, i.e. on runtime MIR, but actually it runs way before that. So I decided to rename - early-opt -> post-analysis - elaborate-drops -> pre-optimizations I am open to other suggestions.
2 parents 1139bc5 + 23a4ad1 commit a6e0fb4

File tree

29 files changed

+43
-40
lines changed

29 files changed

+43
-40
lines changed

compiler/rustc_mir_transform/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ fn run_analysis_cleanup_passes<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
507507
let passes: &[&dyn MirPass<'tcx>] = &[
508508
&cleanup_post_borrowck::CleanupPostBorrowck,
509509
&remove_noop_landing_pads::RemoveNoopLandingPads,
510-
&simplify::SimplifyCfg::EarlyOpt,
510+
&simplify::SimplifyCfg::PostAnalysis,
511511
&deref_separator::Derefer,
512512
];
513513

@@ -544,7 +544,7 @@ fn run_runtime_cleanup_passes<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
544544
let passes: &[&dyn MirPass<'tcx>] = &[
545545
&lower_intrinsics::LowerIntrinsics,
546546
&remove_place_mention::RemovePlaceMention,
547-
&simplify::SimplifyCfg::ElaborateDrops,
547+
&simplify::SimplifyCfg::PreOptimizations,
548548
];
549549

550550
pm::run_passes(tcx, body, passes, Some(MirPhase::Runtime(RuntimePhase::PostCleanup)));

compiler/rustc_mir_transform/src/simplify.rs

+7-4
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,11 @@ pub enum SimplifyCfg {
3737
Initial,
3838
PromoteConsts,
3939
RemoveFalseEdges,
40-
EarlyOpt,
41-
ElaborateDrops,
40+
/// Runs at the beginning of "analysis to runtime" lowering, *before* drop elaboration.
41+
PostAnalysis,
42+
/// Runs at the end of "analysis to runtime" lowering, *after* drop elaboration.
43+
/// This is before the main optimization passes on runtime MIR kick in.
44+
PreOptimizations,
4245
Final,
4346
MakeShim,
4447
AfterUninhabitedEnumBranching,
@@ -50,8 +53,8 @@ impl SimplifyCfg {
5053
SimplifyCfg::Initial => "SimplifyCfg-initial",
5154
SimplifyCfg::PromoteConsts => "SimplifyCfg-promote-consts",
5255
SimplifyCfg::RemoveFalseEdges => "SimplifyCfg-remove-false-edges",
53-
SimplifyCfg::EarlyOpt => "SimplifyCfg-early-opt",
54-
SimplifyCfg::ElaborateDrops => "SimplifyCfg-elaborate-drops",
56+
SimplifyCfg::PostAnalysis => "SimplifyCfg-post-analysis",
57+
SimplifyCfg::PreOptimizations => "SimplifyCfg-pre-optimizations",
5558
SimplifyCfg::Final => "SimplifyCfg-final",
5659
SimplifyCfg::MakeShim => "SimplifyCfg-make_shim",
5760
SimplifyCfg::AfterUninhabitedEnumBranching => {

tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-pre-optimizations.after.panic-abort.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `main` after SimplifyCfg-elaborate-drops
1+
// MIR for `main` after SimplifyCfg-pre-optimizations
22

33
fn main() -> () {
44
let mut _0: ();

tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir tests/mir-opt/array_index_is_temporary.main.SimplifyCfg-pre-optimizations.after.panic-unwind.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `main` after SimplifyCfg-elaborate-drops
1+
// MIR for `main` after SimplifyCfg-pre-optimizations
22

33
fn main() -> () {
44
let mut _0: ();

tests/mir-opt/array_index_is_temporary.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//@ unit-test: SimplifyCfg-elaborate-drops
1+
//@ unit-test: SimplifyCfg-pre-optimizations
22
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
33
// Retagging (from Stacked Borrows) relies on the array index being a fresh
44
// temporary, so that side-effects cannot change it.
@@ -10,7 +10,7 @@ unsafe fn foo(z: *mut usize) -> u32 {
1010
}
1111

1212

13-
// EMIT_MIR array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.mir
13+
// EMIT_MIR array_index_is_temporary.main.SimplifyCfg-pre-optimizations.after.mir
1414
fn main() {
1515
// CHECK-LABEL: fn main(
1616
// CHECK: debug x => [[x:_.*]];

tests/mir-opt/byte_slice.main.SimplifyCfg-elaborate-drops.after.mir tests/mir-opt/byte_slice.main.SimplifyCfg-pre-optimizations.after.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `main` after SimplifyCfg-elaborate-drops
1+
// MIR for `main` after SimplifyCfg-pre-optimizations
22

33
fn main() -> () {
44
let mut _0: ();

tests/mir-opt/byte_slice.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// skip-filecheck
22
//@ compile-flags: -Z mir-opt-level=0
33

4-
// EMIT_MIR byte_slice.main.SimplifyCfg-elaborate-drops.after.mir
4+
// EMIT_MIR byte_slice.main.SimplifyCfg-pre-optimizations.after.mir
55
fn main() {
66
let x = b"foo";
77
let y = [5u8, b'x'];

tests/mir-opt/const_promotion_extern_static.BAR-promoted[0].SimplifyCfg-elaborate-drops.after.mir tests/mir-opt/const_promotion_extern_static.BAR-promoted[0].SimplifyCfg-pre-optimizations.after.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `BAR::promoted[0]` after SimplifyCfg-elaborate-drops
1+
// MIR for `BAR::promoted[0]` after SimplifyCfg-pre-optimizations
22

33
const BAR::promoted[0]: &[&i32; 1] = {
44
let mut _0: &[&i32; 1];

tests/mir-opt/const_promotion_extern_static.FOO-promoted[0].SimplifyCfg-elaborate-drops.after.mir tests/mir-opt/const_promotion_extern_static.FOO-promoted[0].SimplifyCfg-pre-optimizations.after.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `FOO::promoted[0]` after SimplifyCfg-elaborate-drops
1+
// MIR for `FOO::promoted[0]` after SimplifyCfg-pre-optimizations
22

33
const FOO::promoted[0]: &[&i32; 1] = {
44
let mut _0: &[&i32; 1];

tests/mir-opt/const_promotion_extern_static.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ extern "C" {
66
static Y: i32 = 42;
77

88
// EMIT_MIR const_promotion_extern_static.BAR.PromoteTemps.diff
9-
// EMIT_MIR const_promotion_extern_static.BAR-promoted[0].SimplifyCfg-elaborate-drops.after.mir
9+
// EMIT_MIR const_promotion_extern_static.BAR-promoted[0].SimplifyCfg-pre-optimizations.after.mir
1010
static mut BAR: *const &i32 = [&Y].as_ptr();
1111

1212
// EMIT_MIR const_promotion_extern_static.FOO.PromoteTemps.diff
13-
// EMIT_MIR const_promotion_extern_static.FOO-promoted[0].SimplifyCfg-elaborate-drops.after.mir
13+
// EMIT_MIR const_promotion_extern_static.FOO-promoted[0].SimplifyCfg-pre-optimizations.after.mir
1414
static mut FOO: *const &i32 = [unsafe { &X }].as_ptr();
1515

1616
// EMIT_MIR const_promotion_extern_static.BOP.built.after.mir

tests/mir-opt/no_drop_for_inactive_variant.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// Ensure that there are no drop terminators in `unwrap<T>` (except the one along the cleanup
55
// path).
66

7-
// EMIT_MIR no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.mir
7+
// EMIT_MIR no_drop_for_inactive_variant.unwrap.SimplifyCfg-pre-optimizations.after.mir
88
fn unwrap<T>(opt: Option<T>) -> T {
99
match opt {
1010
Some(x) => x,

tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.panic-abort.mir tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-pre-optimizations.after.panic-abort.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `unwrap` after SimplifyCfg-elaborate-drops
1+
// MIR for `unwrap` after SimplifyCfg-pre-optimizations
22

33
fn unwrap(_1: Option<T>) -> T {
44
debug opt => _1;

tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.panic-unwind.mir tests/mir-opt/no_drop_for_inactive_variant.unwrap.SimplifyCfg-pre-optimizations.after.panic-unwind.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `unwrap` after SimplifyCfg-elaborate-drops
1+
// MIR for `unwrap` after SimplifyCfg-pre-optimizations
22

33
fn unwrap(_1: Option<T>) -> T {
44
debug opt => _1;

tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-pre-optimizations.after.panic-abort.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `main` after SimplifyCfg-elaborate-drops
1+
// MIR for `main` after SimplifyCfg-pre-optimizations
22

33
fn main() -> () {
44
let mut _0: ();

tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir tests/mir-opt/packed_struct_drop_aligned.main.SimplifyCfg-pre-optimizations.after.panic-unwind.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `main` after SimplifyCfg-elaborate-drops
1+
// MIR for `main` after SimplifyCfg-pre-optimizations
22

33
fn main() -> () {
44
let mut _0: ();

tests/mir-opt/packed_struct_drop_aligned.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
33

44

5-
// EMIT_MIR packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.mir
5+
// EMIT_MIR packed_struct_drop_aligned.main.SimplifyCfg-pre-optimizations.after.mir
66
fn main() {
77
let mut x = Packed(Aligned(Droppy(0)));
88
x.0 = Aligned(Droppy(0));

tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.panic-abort.mir tests/mir-opt/retag.array_casts.SimplifyCfg-pre-optimizations.after.panic-abort.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `array_casts` after SimplifyCfg-elaborate-drops
1+
// MIR for `array_casts` after SimplifyCfg-pre-optimizations
22

33
fn array_casts() -> () {
44
let mut _0: ();

tests/mir-opt/retag.array_casts.SimplifyCfg-elaborate-drops.after.panic-unwind.mir tests/mir-opt/retag.array_casts.SimplifyCfg-pre-optimizations.after.panic-unwind.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `array_casts` after SimplifyCfg-elaborate-drops
1+
// MIR for `array_casts` after SimplifyCfg-pre-optimizations
22

33
fn array_casts() -> () {
44
let mut _0: ();

tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.panic-unwind.mir tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-pre-optimizations.after.panic-abort.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `main::{closure#0}` after SimplifyCfg-elaborate-drops
1+
// MIR for `main::{closure#0}` after SimplifyCfg-pre-optimizations
22

33
fn main::{closure#0}(_1: &{closure@main::{closure#0}}, _2: &i32) -> &i32 {
44
debug x => _2;

tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.panic-abort.mir tests/mir-opt/retag.main-{closure#0}.SimplifyCfg-pre-optimizations.after.panic-unwind.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `main::{closure#0}` after SimplifyCfg-elaborate-drops
1+
// MIR for `main::{closure#0}` after SimplifyCfg-pre-optimizations
22

33
fn main::{closure#0}(_1: &{closure@main::{closure#0}}, _2: &i32) -> &i32 {
44
debug x => _2;

tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.panic-abort.mir tests/mir-opt/retag.main.SimplifyCfg-pre-optimizations.after.panic-abort.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `main` after SimplifyCfg-elaborate-drops
1+
// MIR for `main` after SimplifyCfg-pre-optimizations
22

33
fn main() -> () {
44
let mut _0: ();

tests/mir-opt/retag.main.SimplifyCfg-elaborate-drops.after.panic-unwind.mir tests/mir-opt/retag.main.SimplifyCfg-pre-optimizations.after.panic-unwind.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `main` after SimplifyCfg-elaborate-drops
1+
// MIR for `main` after SimplifyCfg-pre-optimizations
22

33
fn main() -> () {
44
let mut _0: ();

tests/mir-opt/retag.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
struct Test(i32);
1010

11-
// EMIT_MIR retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.mir
12-
// EMIT_MIR retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.mir
11+
// EMIT_MIR retag.{impl#0}-foo.SimplifyCfg-pre-optimizations.after.mir
12+
// EMIT_MIR retag.{impl#0}-foo_shr.SimplifyCfg-pre-optimizations.after.mir
1313
impl Test {
1414
// Make sure we run the pass on a method, not just on bare functions.
1515
fn foo<'x>(&self, x: &'x mut i32) -> &'x mut i32 {
@@ -26,8 +26,8 @@ impl Drop for Test {
2626
fn drop(&mut self) {}
2727
}
2828

29-
// EMIT_MIR retag.main.SimplifyCfg-elaborate-drops.after.mir
30-
// EMIT_MIR retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.mir
29+
// EMIT_MIR retag.main.SimplifyCfg-pre-optimizations.after.mir
30+
// EMIT_MIR retag.main-{closure#0}.SimplifyCfg-pre-optimizations.after.mir
3131
pub fn main() {
3232
let mut x = 0;
3333
{
@@ -55,7 +55,7 @@ pub fn main() {
5555
}
5656

5757
/// Casting directly to an array should also go through `&raw` and thus add appropriate retags.
58-
// EMIT_MIR retag.array_casts.SimplifyCfg-elaborate-drops.after.mir
58+
// EMIT_MIR retag.array_casts.SimplifyCfg-pre-optimizations.after.mir
5959
fn array_casts() {
6060
let mut x: [usize; 2] = [0, 0];
6161
let p = &mut x as *mut usize;

tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.panic-unwind.mir tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-pre-optimizations.after.panic-abort.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo` after SimplifyCfg-elaborate-drops
1+
// MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo` after SimplifyCfg-pre-optimizations
22

33
fn <impl at $DIR/retag.rs:13:1: 13:10>::foo(_1: &Test, _2: &mut i32) -> &mut i32 {
44
debug self => _1;

tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.panic-abort.mir tests/mir-opt/retag.{impl#0}-foo.SimplifyCfg-pre-optimizations.after.panic-unwind.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo` after SimplifyCfg-elaborate-drops
1+
// MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo` after SimplifyCfg-pre-optimizations
22

33
fn <impl at $DIR/retag.rs:13:1: 13:10>::foo(_1: &Test, _2: &mut i32) -> &mut i32 {
44
debug self => _1;

tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.panic-abort.mir tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-pre-optimizations.after.panic-abort.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo_shr` after SimplifyCfg-elaborate-drops
1+
// MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo_shr` after SimplifyCfg-pre-optimizations
22

33
fn <impl at $DIR/retag.rs:13:1: 13:10>::foo_shr(_1: &Test, _2: &i32) -> &i32 {
44
debug self => _1;

tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.panic-unwind.mir tests/mir-opt/retag.{impl#0}-foo_shr.SimplifyCfg-pre-optimizations.after.panic-unwind.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo_shr` after SimplifyCfg-elaborate-drops
1+
// MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo_shr` after SimplifyCfg-pre-optimizations
22

33
fn <impl at $DIR/retag.rs:13:1: 13:10>::foo_shr(_1: &Test, _2: &i32) -> &i32 {
44
debug self => _1;

tests/mir-opt/simplify_cfg.main.SimplifyCfg-early-opt.diff tests/mir-opt/simplify_cfg.main.SimplifyCfg-post-analysis.diff

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
- // MIR for `main` before SimplifyCfg-early-opt
2-
+ // MIR for `main` after SimplifyCfg-early-opt
1+
- // MIR for `main` before SimplifyCfg-post-analysis
2+
+ // MIR for `main` after SimplifyCfg-post-analysis
33

44
fn main() -> () {
55
let mut _0: ();

tests/mir-opt/simplify_cfg.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
//@ no-prefer-dynamic
55

66
// EMIT_MIR simplify_cfg.main.SimplifyCfg-initial.diff
7-
// EMIT_MIR simplify_cfg.main.SimplifyCfg-early-opt.diff
7+
// EMIT_MIR simplify_cfg.main.SimplifyCfg-post-analysis.diff
88
fn main() {
99
loop {
1010
if bar() {

0 commit comments

Comments
 (0)