simplify_cfg: rename some passes so that they make more sense

This commit is contained in:
Ralf Jung 2024-03-17 19:36:55 +01:00
parent 35dfc67d94
commit 23a4ad12ce
29 changed files with 43 additions and 40 deletions

View File

@ -507,7 +507,7 @@ fn run_analysis_cleanup_passes<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
let passes: &[&dyn MirPass<'tcx>] = &[ let passes: &[&dyn MirPass<'tcx>] = &[
&cleanup_post_borrowck::CleanupPostBorrowck, &cleanup_post_borrowck::CleanupPostBorrowck,
&remove_noop_landing_pads::RemoveNoopLandingPads, &remove_noop_landing_pads::RemoveNoopLandingPads,
&simplify::SimplifyCfg::EarlyOpt, &simplify::SimplifyCfg::PostAnalysis,
&deref_separator::Derefer, &deref_separator::Derefer,
]; ];
@ -544,7 +544,7 @@ fn run_runtime_cleanup_passes<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
let passes: &[&dyn MirPass<'tcx>] = &[ let passes: &[&dyn MirPass<'tcx>] = &[
&lower_intrinsics::LowerIntrinsics, &lower_intrinsics::LowerIntrinsics,
&remove_place_mention::RemovePlaceMention, &remove_place_mention::RemovePlaceMention,
&simplify::SimplifyCfg::ElaborateDrops, &simplify::SimplifyCfg::PreOptimizations,
]; ];
pm::run_passes(tcx, body, passes, Some(MirPhase::Runtime(RuntimePhase::PostCleanup))); pm::run_passes(tcx, body, passes, Some(MirPhase::Runtime(RuntimePhase::PostCleanup)));

View File

@ -37,8 +37,11 @@ pub enum SimplifyCfg {
Initial, Initial,
PromoteConsts, PromoteConsts,
RemoveFalseEdges, RemoveFalseEdges,
EarlyOpt, /// Runs at the beginning of "analysis to runtime" lowering, *before* drop elaboration.
ElaborateDrops, PostAnalysis,
/// Runs at the end of "analysis to runtime" lowering, *after* drop elaboration.
/// This is before the main optimization passes on runtime MIR kick in.
PreOptimizations,
Final, Final,
MakeShim, MakeShim,
AfterUninhabitedEnumBranching, AfterUninhabitedEnumBranching,
@ -50,8 +53,8 @@ pub fn name(&self) -> &'static str {
SimplifyCfg::Initial => "SimplifyCfg-initial", SimplifyCfg::Initial => "SimplifyCfg-initial",
SimplifyCfg::PromoteConsts => "SimplifyCfg-promote-consts", SimplifyCfg::PromoteConsts => "SimplifyCfg-promote-consts",
SimplifyCfg::RemoveFalseEdges => "SimplifyCfg-remove-false-edges", SimplifyCfg::RemoveFalseEdges => "SimplifyCfg-remove-false-edges",
SimplifyCfg::EarlyOpt => "SimplifyCfg-early-opt", SimplifyCfg::PostAnalysis => "SimplifyCfg-post-analysis",
SimplifyCfg::ElaborateDrops => "SimplifyCfg-elaborate-drops", SimplifyCfg::PreOptimizations => "SimplifyCfg-pre-optimizations",
SimplifyCfg::Final => "SimplifyCfg-final", SimplifyCfg::Final => "SimplifyCfg-final",
SimplifyCfg::MakeShim => "SimplifyCfg-make_shim", SimplifyCfg::MakeShim => "SimplifyCfg-make_shim",
SimplifyCfg::AfterUninhabitedEnumBranching => { SimplifyCfg::AfterUninhabitedEnumBranching => {

View File

@ -1,4 +1,4 @@
// MIR for `main` after SimplifyCfg-elaborate-drops // MIR for `main` after SimplifyCfg-pre-optimizations
fn main() -> () { fn main() -> () {
let mut _0: (); let mut _0: ();

View File

@ -1,4 +1,4 @@
// MIR for `main` after SimplifyCfg-elaborate-drops // MIR for `main` after SimplifyCfg-pre-optimizations
fn main() -> () { fn main() -> () {
let mut _0: (); let mut _0: ();

View File

@ -1,4 +1,4 @@
//@ unit-test: SimplifyCfg-elaborate-drops //@ unit-test: SimplifyCfg-pre-optimizations
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY // EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Retagging (from Stacked Borrows) relies on the array index being a fresh // Retagging (from Stacked Borrows) relies on the array index being a fresh
// temporary, so that side-effects cannot change it. // temporary, so that side-effects cannot change it.
@ -10,7 +10,7 @@ unsafe fn foo(z: *mut usize) -> u32 {
} }
// EMIT_MIR array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.mir // EMIT_MIR array_index_is_temporary.main.SimplifyCfg-pre-optimizations.after.mir
fn main() { fn main() {
// CHECK-LABEL: fn main( // CHECK-LABEL: fn main(
// CHECK: debug x => [[x:_.*]]; // CHECK: debug x => [[x:_.*]];

View File

@ -1,4 +1,4 @@
// MIR for `main` after SimplifyCfg-elaborate-drops // MIR for `main` after SimplifyCfg-pre-optimizations
fn main() -> () { fn main() -> () {
let mut _0: (); let mut _0: ();

View File

@ -1,7 +1,7 @@
// skip-filecheck // skip-filecheck
//@ compile-flags: -Z mir-opt-level=0 //@ compile-flags: -Z mir-opt-level=0
// EMIT_MIR byte_slice.main.SimplifyCfg-elaborate-drops.after.mir // EMIT_MIR byte_slice.main.SimplifyCfg-pre-optimizations.after.mir
fn main() { fn main() {
let x = b"foo"; let x = b"foo";
let y = [5u8, b'x']; let y = [5u8, b'x'];

View File

@ -1,4 +1,4 @@
// MIR for `BAR::promoted[0]` after SimplifyCfg-elaborate-drops // MIR for `BAR::promoted[0]` after SimplifyCfg-pre-optimizations
const BAR::promoted[0]: &[&i32; 1] = { const BAR::promoted[0]: &[&i32; 1] = {
let mut _0: &[&i32; 1]; let mut _0: &[&i32; 1];

View File

@ -1,4 +1,4 @@
// MIR for `FOO::promoted[0]` after SimplifyCfg-elaborate-drops // MIR for `FOO::promoted[0]` after SimplifyCfg-pre-optimizations
const FOO::promoted[0]: &[&i32; 1] = { const FOO::promoted[0]: &[&i32; 1] = {
let mut _0: &[&i32; 1]; let mut _0: &[&i32; 1];

View File

@ -6,11 +6,11 @@
static Y: i32 = 42; static Y: i32 = 42;
// EMIT_MIR const_promotion_extern_static.BAR.PromoteTemps.diff // EMIT_MIR const_promotion_extern_static.BAR.PromoteTemps.diff
// EMIT_MIR const_promotion_extern_static.BAR-promoted[0].SimplifyCfg-elaborate-drops.after.mir // EMIT_MIR const_promotion_extern_static.BAR-promoted[0].SimplifyCfg-pre-optimizations.after.mir
static mut BAR: *const &i32 = [&Y].as_ptr(); static mut BAR: *const &i32 = [&Y].as_ptr();
// EMIT_MIR const_promotion_extern_static.FOO.PromoteTemps.diff // EMIT_MIR const_promotion_extern_static.FOO.PromoteTemps.diff
// EMIT_MIR const_promotion_extern_static.FOO-promoted[0].SimplifyCfg-elaborate-drops.after.mir // EMIT_MIR const_promotion_extern_static.FOO-promoted[0].SimplifyCfg-pre-optimizations.after.mir
static mut FOO: *const &i32 = [unsafe { &X }].as_ptr(); static mut FOO: *const &i32 = [unsafe { &X }].as_ptr();
// EMIT_MIR const_promotion_extern_static.BOP.built.after.mir // EMIT_MIR const_promotion_extern_static.BOP.built.after.mir

View File

@ -4,7 +4,7 @@
// Ensure that there are no drop terminators in `unwrap<T>` (except the one along the cleanup // Ensure that there are no drop terminators in `unwrap<T>` (except the one along the cleanup
// path). // path).
// EMIT_MIR no_drop_for_inactive_variant.unwrap.SimplifyCfg-elaborate-drops.after.mir // EMIT_MIR no_drop_for_inactive_variant.unwrap.SimplifyCfg-pre-optimizations.after.mir
fn unwrap<T>(opt: Option<T>) -> T { fn unwrap<T>(opt: Option<T>) -> T {
match opt { match opt {
Some(x) => x, Some(x) => x,

View File

@ -1,4 +1,4 @@
// MIR for `unwrap` after SimplifyCfg-elaborate-drops // MIR for `unwrap` after SimplifyCfg-pre-optimizations
fn unwrap(_1: Option<T>) -> T { fn unwrap(_1: Option<T>) -> T {
debug opt => _1; debug opt => _1;

View File

@ -1,4 +1,4 @@
// MIR for `unwrap` after SimplifyCfg-elaborate-drops // MIR for `unwrap` after SimplifyCfg-pre-optimizations
fn unwrap(_1: Option<T>) -> T { fn unwrap(_1: Option<T>) -> T {
debug opt => _1; debug opt => _1;

View File

@ -1,4 +1,4 @@
// MIR for `main` after SimplifyCfg-elaborate-drops // MIR for `main` after SimplifyCfg-pre-optimizations
fn main() -> () { fn main() -> () {
let mut _0: (); let mut _0: ();

View File

@ -1,4 +1,4 @@
// MIR for `main` after SimplifyCfg-elaborate-drops // MIR for `main` after SimplifyCfg-pre-optimizations
fn main() -> () { fn main() -> () {
let mut _0: (); let mut _0: ();

View File

@ -2,7 +2,7 @@
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY // EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// EMIT_MIR packed_struct_drop_aligned.main.SimplifyCfg-elaborate-drops.after.mir // EMIT_MIR packed_struct_drop_aligned.main.SimplifyCfg-pre-optimizations.after.mir
fn main() { fn main() {
let mut x = Packed(Aligned(Droppy(0))); let mut x = Packed(Aligned(Droppy(0)));
x.0 = Aligned(Droppy(0)); x.0 = Aligned(Droppy(0));

View File

@ -1,4 +1,4 @@
// MIR for `array_casts` after SimplifyCfg-elaborate-drops // MIR for `array_casts` after SimplifyCfg-pre-optimizations
fn array_casts() -> () { fn array_casts() -> () {
let mut _0: (); let mut _0: ();

View File

@ -1,4 +1,4 @@
// MIR for `array_casts` after SimplifyCfg-elaborate-drops // MIR for `array_casts` after SimplifyCfg-pre-optimizations
fn array_casts() -> () { fn array_casts() -> () {
let mut _0: (); let mut _0: ();

View File

@ -1,4 +1,4 @@
// MIR for `main::{closure#0}` after SimplifyCfg-elaborate-drops // MIR for `main::{closure#0}` after SimplifyCfg-pre-optimizations
fn main::{closure#0}(_1: &{closure@main::{closure#0}}, _2: &i32) -> &i32 { fn main::{closure#0}(_1: &{closure@main::{closure#0}}, _2: &i32) -> &i32 {
debug x => _2; debug x => _2;

View File

@ -1,4 +1,4 @@
// MIR for `main::{closure#0}` after SimplifyCfg-elaborate-drops // MIR for `main::{closure#0}` after SimplifyCfg-pre-optimizations
fn main::{closure#0}(_1: &{closure@main::{closure#0}}, _2: &i32) -> &i32 { fn main::{closure#0}(_1: &{closure@main::{closure#0}}, _2: &i32) -> &i32 {
debug x => _2; debug x => _2;

View File

@ -1,4 +1,4 @@
// MIR for `main` after SimplifyCfg-elaborate-drops // MIR for `main` after SimplifyCfg-pre-optimizations
fn main() -> () { fn main() -> () {
let mut _0: (); let mut _0: ();

View File

@ -1,4 +1,4 @@
// MIR for `main` after SimplifyCfg-elaborate-drops // MIR for `main` after SimplifyCfg-pre-optimizations
fn main() -> () { fn main() -> () {
let mut _0: (); let mut _0: ();

View File

@ -8,8 +8,8 @@
struct Test(i32); struct Test(i32);
// EMIT_MIR retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.mir // EMIT_MIR retag.{impl#0}-foo.SimplifyCfg-pre-optimizations.after.mir
// EMIT_MIR retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.mir // EMIT_MIR retag.{impl#0}-foo_shr.SimplifyCfg-pre-optimizations.after.mir
impl Test { impl Test {
// Make sure we run the pass on a method, not just on bare functions. // Make sure we run the pass on a method, not just on bare functions.
fn foo<'x>(&self, x: &'x mut i32) -> &'x mut i32 { fn foo<'x>(&self, x: &'x mut i32) -> &'x mut i32 {
@ -26,8 +26,8 @@ impl Drop for Test {
fn drop(&mut self) {} fn drop(&mut self) {}
} }
// EMIT_MIR retag.main.SimplifyCfg-elaborate-drops.after.mir // EMIT_MIR retag.main.SimplifyCfg-pre-optimizations.after.mir
// EMIT_MIR retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.mir // EMIT_MIR retag.main-{closure#0}.SimplifyCfg-pre-optimizations.after.mir
pub fn main() { pub fn main() {
let mut x = 0; let mut x = 0;
{ {
@ -55,7 +55,7 @@ pub fn main() {
} }
/// Casting directly to an array should also go through `&raw` and thus add appropriate retags. /// Casting directly to an array should also go through `&raw` and thus add appropriate retags.
// EMIT_MIR retag.array_casts.SimplifyCfg-elaborate-drops.after.mir // EMIT_MIR retag.array_casts.SimplifyCfg-pre-optimizations.after.mir
fn array_casts() { fn array_casts() {
let mut x: [usize; 2] = [0, 0]; let mut x: [usize; 2] = [0, 0];
let p = &mut x as *mut usize; let p = &mut x as *mut usize;

View File

@ -1,4 +1,4 @@
// MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo` after SimplifyCfg-elaborate-drops // MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo` after SimplifyCfg-pre-optimizations
fn <impl at $DIR/retag.rs:13:1: 13:10>::foo(_1: &Test, _2: &mut i32) -> &mut i32 { fn <impl at $DIR/retag.rs:13:1: 13:10>::foo(_1: &Test, _2: &mut i32) -> &mut i32 {
debug self => _1; debug self => _1;

View File

@ -1,4 +1,4 @@
// MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo` after SimplifyCfg-elaborate-drops // MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo` after SimplifyCfg-pre-optimizations
fn <impl at $DIR/retag.rs:13:1: 13:10>::foo(_1: &Test, _2: &mut i32) -> &mut i32 { fn <impl at $DIR/retag.rs:13:1: 13:10>::foo(_1: &Test, _2: &mut i32) -> &mut i32 {
debug self => _1; debug self => _1;

View File

@ -1,4 +1,4 @@
// MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo_shr` after SimplifyCfg-elaborate-drops // MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo_shr` after SimplifyCfg-pre-optimizations
fn <impl at $DIR/retag.rs:13:1: 13:10>::foo_shr(_1: &Test, _2: &i32) -> &i32 { fn <impl at $DIR/retag.rs:13:1: 13:10>::foo_shr(_1: &Test, _2: &i32) -> &i32 {
debug self => _1; debug self => _1;

View File

@ -1,4 +1,4 @@
// MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo_shr` after SimplifyCfg-elaborate-drops // MIR for `<impl at $DIR/retag.rs:13:1: 13:10>::foo_shr` after SimplifyCfg-pre-optimizations
fn <impl at $DIR/retag.rs:13:1: 13:10>::foo_shr(_1: &Test, _2: &i32) -> &i32 { fn <impl at $DIR/retag.rs:13:1: 13:10>::foo_shr(_1: &Test, _2: &i32) -> &i32 {
debug self => _1; debug self => _1;

View File

@ -1,5 +1,5 @@
- // MIR for `main` before SimplifyCfg-early-opt - // MIR for `main` before SimplifyCfg-post-analysis
+ // MIR for `main` after SimplifyCfg-early-opt + // MIR for `main` after SimplifyCfg-post-analysis
fn main() -> () { fn main() -> () {
let mut _0: (); let mut _0: ();

View File

@ -4,7 +4,7 @@
//@ no-prefer-dynamic //@ no-prefer-dynamic
// EMIT_MIR simplify_cfg.main.SimplifyCfg-initial.diff // EMIT_MIR simplify_cfg.main.SimplifyCfg-initial.diff
// EMIT_MIR simplify_cfg.main.SimplifyCfg-early-opt.diff // EMIT_MIR simplify_cfg.main.SimplifyCfg-post-analysis.diff
fn main() { fn main() {
loop { loop {
if bar() { if bar() {