1
Fork 0

Simplify pass manager's run_passes logic

This commit is contained in:
Jakob Degen 2022-08-07 17:19:16 -07:00
parent aad14c701e
commit d56751cc34

View file

@ -99,40 +99,35 @@ fn run_passes_inner<'tcx>(
let overridden_passes = &tcx.sess.opts.unstable_opts.mir_enable_passes; let overridden_passes = &tcx.sess.opts.unstable_opts.mir_enable_passes;
trace!(?overridden_passes); trace!(?overridden_passes);
if validate {
validate_body(tcx, body, format!("start of phase transition from {:?}", start_phase));
}
for pass in passes { for pass in passes {
let name = pass.name(); let name = pass.name();
if let Some((_, polarity)) = overridden_passes.iter().rev().find(|(s, _)| s == &*name) { // Gather information about what we should be doing for this pass
let overriden =
overridden_passes.iter().rev().find(|(s, _)| s == &*name).map(|(_name, polarity)| {
trace!( trace!(
pass = %name, pass = %name,
"{} as requested by flag", "{} as requested by flag",
if *polarity { "Running" } else { "Not running" }, if *polarity { "Running" } else { "Not running" },
); );
if !polarity { *polarity
continue; });
} let is_enabled = overriden.unwrap_or_else(|| pass.is_enabled(&tcx.sess));
} else { let new_phase = pass.phase_change();
if !pass.is_enabled(&tcx.sess) { let dump_enabled = (is_enabled && pass.is_mir_dump_enabled()) || new_phase.is_some();
continue; let validate = (validate && is_enabled)
} || new_phase == Some(MirPhase::Runtime(RuntimePhase::Optimized));
}
let dump_enabled = pass.is_mir_dump_enabled();
if dump_enabled { if dump_enabled {
dump_mir(tcx, body, start_phase, &name, cnt, false); dump_mir(tcx, body, start_phase, &name, cnt, false);
} }
if is_enabled {
pass.run_pass(tcx, body); pass.run_pass(tcx, body);
}
if dump_enabled { if dump_enabled {
dump_mir(tcx, body, start_phase, &name, cnt, true); dump_mir(tcx, body, start_phase, &name, cnt, true);
cnt += 1; cnt += 1;
} }
if let Some(new_phase) = pass.phase_change() { if let Some(new_phase) = pass.phase_change() {
if body.phase >= new_phase { if body.phase >= new_phase {
panic!("Invalid MIR phase transition from {:?} to {:?}", body.phase, new_phase); panic!("Invalid MIR phase transition from {:?} to {:?}", body.phase, new_phase);
@ -140,15 +135,10 @@ fn run_passes_inner<'tcx>(
body.phase = new_phase; body.phase = new_phase;
} }
if validate { if validate {
validate_body(tcx, body, format!("after pass {}", pass.name())); validate_body(tcx, body, format!("after pass {}", name));
} }
} }
if validate || body.phase == MirPhase::Runtime(RuntimePhase::Optimized) {
validate_body(tcx, body, format!("end of phase transition to {:?}", body.phase));
}
} }
pub fn validate_body<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>, when: String) { pub fn validate_body<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>, when: String) {