Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

simplify_cfg: rename some passes so that they make more sense #122656

Merged
merged 1 commit into from
Mar 18, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
simplify_cfg: rename some passes so that they make more sense
RalfJung committed Mar 17, 2024
commit 23a4ad12ce047a8e175f1298000553435ab835a0
4 changes: 2 additions & 2 deletions compiler/rustc_mir_transform/src/lib.rs
Original file line number Diff line number Diff line change
@@ -507,7 +507,7 @@ fn run_analysis_cleanup_passes<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
let passes: &[&dyn MirPass<'tcx>] = &[
&cleanup_post_borrowck::CleanupPostBorrowck,
&remove_noop_landing_pads::RemoveNoopLandingPads,
&simplify::SimplifyCfg::EarlyOpt,
&simplify::SimplifyCfg::PostAnalysis,
&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>] = &[
&lower_intrinsics::LowerIntrinsics,
&remove_place_mention::RemovePlaceMention,
&simplify::SimplifyCfg::ElaborateDrops,
&simplify::SimplifyCfg::PreOptimizations,
];

pm::run_passes(tcx, body, passes, Some(MirPhase::Runtime(RuntimePhase::PostCleanup)));
11 changes: 7 additions & 4 deletions compiler/rustc_mir_transform/src/simplify.rs
Original file line number Diff line number Diff line change
@@ -37,8 +37,11 @@ pub enum SimplifyCfg {
Initial,
PromoteConsts,
RemoveFalseEdges,
EarlyOpt,
ElaborateDrops,
/// Runs at the beginning of "analysis to runtime" lowering, *before* drop elaboration.
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,
MakeShim,
AfterUninhabitedEnumBranching,
@@ -50,8 +53,8 @@ impl SimplifyCfg {
SimplifyCfg::Initial => "SimplifyCfg-initial",
SimplifyCfg::PromoteConsts => "SimplifyCfg-promote-consts",
SimplifyCfg::RemoveFalseEdges => "SimplifyCfg-remove-false-edges",
SimplifyCfg::EarlyOpt => "SimplifyCfg-early-opt",
SimplifyCfg::ElaborateDrops => "SimplifyCfg-elaborate-drops",
SimplifyCfg::PostAnalysis => "SimplifyCfg-post-analysis",
SimplifyCfg::PreOptimizations => "SimplifyCfg-pre-optimizations",
SimplifyCfg::Final => "SimplifyCfg-final",
SimplifyCfg::MakeShim => "SimplifyCfg-make_shim",
SimplifyCfg::AfterUninhabitedEnumBranching => {
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// MIR for `main` after SimplifyCfg-elaborate-drops
// MIR for `main` after SimplifyCfg-pre-optimizations

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

fn main() -> () {
let mut _0: ();
4 changes: 2 additions & 2 deletions tests/mir-opt/array_index_is_temporary.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//@ unit-test: SimplifyCfg-elaborate-drops
//@ unit-test: SimplifyCfg-pre-optimizations
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// Retagging (from Stacked Borrows) relies on the array index being a fresh
// 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() {
// CHECK-LABEL: fn main(
// CHECK: debug x => [[x:_.*]];
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// MIR for `main` after SimplifyCfg-elaborate-drops
// MIR for `main` after SimplifyCfg-pre-optimizations

fn main() -> () {
let mut _0: ();
2 changes: 1 addition & 1 deletion tests/mir-opt/byte_slice.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// skip-filecheck
//@ 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() {
let x = b"foo";
let y = [5u8, b'x'];
Original file line number Diff line number Diff line change
@@ -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] = {
let mut _0: &[&i32; 1];
Original file line number Diff line number Diff line change
@@ -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] = {
let mut _0: &[&i32; 1];
4 changes: 2 additions & 2 deletions tests/mir-opt/const_promotion_extern_static.rs
Original file line number Diff line number Diff line change
@@ -6,11 +6,11 @@ extern "C" {
static Y: i32 = 42;

// 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();

// 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();

// EMIT_MIR const_promotion_extern_static.BOP.built.after.mir
2 changes: 1 addition & 1 deletion tests/mir-opt/no_drop_for_inactive_variant.rs
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@
// Ensure that there are no drop terminators in `unwrap<T>` (except the one along the cleanup
// 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 {
match opt {
Some(x) => x,
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// MIR for `unwrap` after SimplifyCfg-elaborate-drops
// MIR for `unwrap` after SimplifyCfg-pre-optimizations

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

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

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

fn main() -> () {
let mut _0: ();
2 changes: 1 addition & 1 deletion tests/mir-opt/packed_struct_drop_aligned.rs
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@
// 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() {
let mut x = Packed(Aligned(Droppy(0)));
x.0 = Aligned(Droppy(0));
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// MIR for `array_casts` after SimplifyCfg-elaborate-drops
// MIR for `array_casts` after SimplifyCfg-pre-optimizations

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

fn array_casts() -> () {
let mut _0: ();
Original file line number Diff line number Diff line change
@@ -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 {
debug x => _2;
Original file line number Diff line number Diff line change
@@ -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 {
debug x => _2;
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// MIR for `main` after SimplifyCfg-elaborate-drops
// MIR for `main` after SimplifyCfg-pre-optimizations

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

fn main() -> () {
let mut _0: ();
10 changes: 5 additions & 5 deletions tests/mir-opt/retag.rs
Original file line number Diff line number Diff line change
@@ -8,8 +8,8 @@

struct Test(i32);

// EMIT_MIR retag.{impl#0}-foo.SimplifyCfg-elaborate-drops.after.mir
// EMIT_MIR retag.{impl#0}-foo_shr.SimplifyCfg-elaborate-drops.after.mir
// EMIT_MIR retag.{impl#0}-foo.SimplifyCfg-pre-optimizations.after.mir
// EMIT_MIR retag.{impl#0}-foo_shr.SimplifyCfg-pre-optimizations.after.mir
impl Test {
// 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 {
@@ -26,8 +26,8 @@ impl Drop for Test {
fn drop(&mut self) {}
}

// EMIT_MIR retag.main.SimplifyCfg-elaborate-drops.after.mir
// EMIT_MIR retag.main-{closure#0}.SimplifyCfg-elaborate-drops.after.mir
// EMIT_MIR retag.main.SimplifyCfg-pre-optimizations.after.mir
// EMIT_MIR retag.main-{closure#0}.SimplifyCfg-pre-optimizations.after.mir
pub fn main() {
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.
// EMIT_MIR retag.array_casts.SimplifyCfg-elaborate-drops.after.mir
// EMIT_MIR retag.array_casts.SimplifyCfg-pre-optimizations.after.mir
fn array_casts() {
let mut x: [usize; 2] = [0, 0];
let p = &mut x as *mut usize;
Original file line number Diff line number Diff line change
@@ -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 {
debug self => _1;
Original file line number Diff line number Diff line change
@@ -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 {
debug self => _1;
Original file line number Diff line number Diff line change
@@ -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 {
debug self => _1;
Original file line number Diff line number Diff line change
@@ -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 {
debug self => _1;
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
- // MIR for `main` before SimplifyCfg-early-opt
+ // MIR for `main` after SimplifyCfg-early-opt
- // MIR for `main` before SimplifyCfg-post-analysis
+ // MIR for `main` after SimplifyCfg-post-analysis

fn main() -> () {
let mut _0: ();
2 changes: 1 addition & 1 deletion tests/mir-opt/simplify_cfg.rs
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@
//@ no-prefer-dynamic

// 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() {
loop {
if bar() {