this temporary disables `inline`
pub trait PassHook {
fn on_mir_pass<'a, 'tcx>(&self,
tcx: TyCtxt<'a, 'tcx, 'tcx>,
pub trait PassHook {
fn on_mir_pass<'a, 'tcx>(&self,
tcx: TyCtxt<'a, 'tcx, 'tcx>,
pass_num: usize,
is_after: bool);
}
pass_num: usize,
is_after: bool);
}
#[derive(Clone)]
struct PassSet {
#[derive(Clone)]
struct PassSet {
+ passes: Vec<Rc<DefIdPass>>,
}
/// The number of "pass sets" that we have:
}
/// The number of "pass sets" that we have:
// NB: passes are numbered from 1, since "construction" is zero.
for (pass, pass_num) in set.passes.iter().zip(start_num + 1..) {
for hook in &self.pass_hooks {
// NB: passes are numbered from 1, since "construction" is zero.
for (pass, pass_num) in set.passes.iter().zip(start_num + 1..) {
for hook in &self.pass_hooks {
- hook.on_mir_pass(tcx, &**pass, pass_num, false);
+ hook.on_mir_pass(tcx, &pass.name(), pass_num, false);
- time(tcx.sess.time_passes(), &*pass.name(), || pass.run_pass(tcx));
+ time(tcx.sess.time_passes(), &*pass.name(), || {
+ for &def_id in tcx.mir_keys(LOCAL_CRATE).iter() {
+ pass.run_pass(tcx, def_id);
+ }
+ });
for hook in &self.pass_hooks {
for hook in &self.pass_hooks {
- hook.on_mir_pass(tcx, &**pass, pass_num, true);
+ hook.on_mir_pass(tcx, &pass.name(), pass_num, true);
}
}
}
/// Pushes a built-in pass.
}
}
}
/// Pushes a built-in pass.
- pub fn push_pass<T: Pass + 'static>(&mut self, set: usize, pass: T) {
+ pub fn push_pass<T: DefIdPass + 'static>(&mut self, set: usize, pass: T) {
self.sets[set].passes.push(Rc::new(pass));
}
self.sets[set].passes.push(Rc::new(pass));
}
passes.push_pass(MIR_OPTIMIZED, mir::transform::simplify::SimplifyCfg::new("elaborate-drops"));
// No lifetime analysis based on borrowing can be done from here on out.
passes.push_pass(MIR_OPTIMIZED, mir::transform::simplify::SimplifyCfg::new("elaborate-drops"));
// No lifetime analysis based on borrowing can be done from here on out.
- passes.push_pass(MIR_OPTIMIZED, mir::transform::inline::Inline);
+ // passes.push_pass(MIR_OPTIMIZED, mir::transform::inline::Inline); // TODO re-enable
passes.push_pass(MIR_OPTIMIZED, mir::transform::instcombine::InstCombine);
passes.push_pass(MIR_OPTIMIZED, mir::transform::deaggregator::Deaggregator);
passes.push_pass(MIR_OPTIMIZED, mir::transform::copy_prop::CopyPropagation);
passes.push_pass(MIR_OPTIMIZED, mir::transform::instcombine::InstCombine);
passes.push_pass(MIR_OPTIMIZED, mir::transform::deaggregator::Deaggregator);
passes.push_pass(MIR_OPTIMIZED, mir::transform::copy_prop::CopyPropagation);
fn on_mir_pass<'a, 'tcx>(
&self,
tcx: TyCtxt<'a, 'tcx, 'tcx>,
fn on_mir_pass<'a, 'tcx>(
&self,
tcx: TyCtxt<'a, 'tcx, 'tcx>,
pass_num: usize,
is_after: bool)
{
pass_num: usize,
is_after: bool)
{
mir_util::dump_mir(
tcx,
pass_num,
mir_util::dump_mir(
tcx,
pass_num,
&Disambiguator { is_after },
source,
&mir
&Disambiguator { is_after },
source,
&mir