Split phase change from MirPass
This commit is contained in:
parent
1ca6777c01
commit
be2401b8bf
6 changed files with 101 additions and 76 deletions
|
@ -116,11 +116,6 @@ pub trait MirPass<'tcx> {
|
|||
|
||||
fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>);
|
||||
|
||||
/// If this pass causes the MIR to enter a new phase, return that phase.
|
||||
fn phase_change(&self) -> Option<MirPhase> {
|
||||
None
|
||||
}
|
||||
|
||||
fn is_mir_dump_enabled(&self) -> bool {
|
||||
true
|
||||
}
|
||||
|
@ -145,6 +140,35 @@ impl MirPhase {
|
|||
}
|
||||
}
|
||||
|
||||
impl Display for MirPhase {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
||||
match self {
|
||||
MirPhase::Built => write!(f, "built"),
|
||||
MirPhase::Analysis(p) => write!(f, "analysis-{}", p),
|
||||
MirPhase::Runtime(p) => write!(f, "runtime-{}", p),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for AnalysisPhase {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
||||
match self {
|
||||
AnalysisPhase::Initial => write!(f, "initial"),
|
||||
AnalysisPhase::PostCleanup => write!(f, "post_cleanup"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for RuntimePhase {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
||||
match self {
|
||||
RuntimePhase::Initial => write!(f, "initial"),
|
||||
RuntimePhase::PostCleanup => write!(f, "post_cleanup"),
|
||||
RuntimePhase::Optimized => write!(f, "optimized"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Where a specific `mir::Body` comes from.
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||
#[derive(HashStable, TyEncodable, TyDecodable, TypeFoldable, TypeVisitable)]
|
||||
|
@ -207,6 +231,9 @@ pub struct Body<'tcx> {
|
|||
/// us to see the difference and forego optimization on the inlined promoted items.
|
||||
pub phase: MirPhase,
|
||||
|
||||
/// How many passses we have executed since starting the current phase. Used for debug output.
|
||||
pub pass_count: usize,
|
||||
|
||||
pub source: MirSource<'tcx>,
|
||||
|
||||
/// A list of source scopes; these are referenced by statements
|
||||
|
@ -292,6 +319,7 @@ impl<'tcx> Body<'tcx> {
|
|||
|
||||
let mut body = Body {
|
||||
phase: MirPhase::Built,
|
||||
pass_count: 1,
|
||||
source,
|
||||
basic_blocks: BasicBlocks::new(basic_blocks),
|
||||
source_scopes,
|
||||
|
@ -325,6 +353,7 @@ impl<'tcx> Body<'tcx> {
|
|||
pub fn new_cfg_only(basic_blocks: IndexVec<BasicBlock, BasicBlockData<'tcx>>) -> Self {
|
||||
let mut body = Body {
|
||||
phase: MirPhase::Built,
|
||||
pass_count: 1,
|
||||
source: MirSource::item(CRATE_DEF_ID.to_def_id()),
|
||||
basic_blocks: BasicBlocks::new(basic_blocks),
|
||||
source_scopes: IndexVec::new(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue