Skip to content

Commit 62f9084

Browse files
committed
Remove false edges in CleanupPostBorrowck
1 parent 4c3efc7 commit 62f9084

File tree

3 files changed

+16
-46
lines changed

3 files changed

+16
-46
lines changed

compiler/rustc_mir_transform/src/cleanup_post_borrowck.rs

+15-13
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,26 @@
1-
//! This module provides a pass to replacing the following statements with
2-
//! [`Nop`]s
1+
//! This module provides a pass that removes parts of MIR that are no longer relevant after
2+
//! analysis phase and borrowck. In particular, it removes false edges, user type annotations and
3+
//! replaces following statements with [`Nop`]s:
34
//!
45
//! - [`AscribeUserType`]
56
//! - [`FakeRead`]
67
//! - [`Assign`] statements with a [`Shallow`] borrow
78
//!
8-
//! The `CleanFakeReadsAndBorrows` "pass" is actually implemented as two
9-
//! traversals (aka visits) of the input MIR. The first traversal,
10-
//! `DeleteAndRecordFakeReads`, deletes the fake reads and finds the
11-
//! temporaries read by [`ForMatchGuard`] reads, and `DeleteFakeBorrows`
12-
//! deletes the initialization of those temporaries.
13-
//!
149
//! [`AscribeUserType`]: rustc_middle::mir::StatementKind::AscribeUserType
15-
//! [`Shallow`]: rustc_middle::mir::BorrowKind::Shallow
16-
//! [`FakeRead`]: rustc_middle::mir::StatementKind::FakeRead
1710
//! [`Assign`]: rustc_middle::mir::StatementKind::Assign
18-
//! [`ForMatchGuard`]: rustc_middle::mir::FakeReadCause::ForMatchGuard
11+
//! [`FakeRead`]: rustc_middle::mir::StatementKind::FakeRead
1912
//! [`Nop`]: rustc_middle::mir::StatementKind::Nop
13+
//! [`Shallow`]: rustc_middle::mir::BorrowKind::Shallow
2014
2115
use crate::MirPass;
22-
use rustc_middle::mir::{Body, BorrowKind, Rvalue, StatementKind};
16+
use rustc_middle::mir::{Body, BorrowKind, Rvalue, StatementKind, TerminatorKind};
2317
use rustc_middle::ty::TyCtxt;
2418

2519
pub struct CleanupPostBorrowck;
2620

2721
impl<'tcx> MirPass<'tcx> for CleanupPostBorrowck {
2822
fn run_pass(&self, _tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
29-
for basic_block in body.basic_blocks.as_mut_preserves_cfg() {
23+
for basic_block in body.basic_blocks.as_mut() {
3024
for statement in basic_block.statements.iter_mut() {
3125
match statement.kind {
3226
StatementKind::AscribeUserType(..)
@@ -35,6 +29,14 @@ impl<'tcx> MirPass<'tcx> for CleanupPostBorrowck {
3529
_ => (),
3630
}
3731
}
32+
let terminator = basic_block.terminator_mut();
33+
match terminator.kind {
34+
TerminatorKind::FalseEdge { real_target, .. }
35+
| TerminatorKind::FalseUnwind { real_target, .. } => {
36+
terminator.kind = TerminatorKind::Goto { target: real_target };
37+
}
38+
_ => {}
39+
}
3840
}
3941

4042
body.user_type_annotations.raw.clear();

compiler/rustc_mir_transform/src/lib.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,6 @@ mod match_branches;
7777
mod multiple_return_terminators;
7878
mod normalize_array_len;
7979
mod nrvo;
80-
// This pass is public to allow external drivers to perform MIR cleanup
81-
pub mod remove_false_edges;
8280
mod remove_noop_landing_pads;
8381
mod remove_storage_markers;
8482
mod remove_uninit_drops;
@@ -494,10 +492,9 @@ fn run_analysis_to_runtime_passes<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>
494492
/// After this series of passes, no lifetime analysis based on borrowing can be done.
495493
fn run_analysis_cleanup_passes<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
496494
let passes: &[&dyn MirPass<'tcx>] = &[
497-
&remove_false_edges::RemoveFalseEdges,
495+
&cleanup_post_borrowck::CleanupPostBorrowck,
498496
&simplify_branches::SimplifyConstCondition::new("initial"),
499497
&remove_noop_landing_pads::RemoveNoopLandingPads,
500-
&cleanup_post_borrowck::CleanupPostBorrowck,
501498
&simplify::SimplifyCfg::new("early-opt"),
502499
&deref_separator::Derefer,
503500
];

compiler/rustc_mir_transform/src/remove_false_edges.rs

-29
This file was deleted.

0 commit comments

Comments
 (0)