diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2017-04-27 13:16:57 -0400 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2017-05-02 14:01:01 -0400 |
| commit | f23a7bc98a221db000991f6a618602a9a4b35759 (patch) | |
| tree | dca399327c1884b00704138a66cb9d48bc28cc53 | |
| parent | 668886a6ccaf294bf0ab3742e693997ce39b716b (diff) | |
| download | rust-f23a7bc98a221db000991f6a618602a9a4b35759.tar.gz rust-f23a7bc98a221db000991f6a618602a9a4b35759.zip | |
move to only def-id passes
this temporary disables `inline`
| -rw-r--r-- | src/librustc/mir/transform.rs | 16 | ||||
| -rw-r--r-- | src/librustc_driver/driver.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/transform/dump_mir.rs | 4 |
3 files changed, 13 insertions, 9 deletions
diff --git a/src/librustc/mir/transform.rs b/src/librustc/mir/transform.rs index cfe8254d1bb..8ecfbfdb5c3 100644 --- a/src/librustc/mir/transform.rs +++ b/src/librustc/mir/transform.rs @@ -93,7 +93,7 @@ pub fn default_name<T: ?Sized>() -> Cow<'static, str> { pub trait PassHook { fn on_mir_pass<'a, 'tcx>(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>, - pass: &Pass, + pass_name: &str, pass_num: usize, is_after: bool); } @@ -173,7 +173,7 @@ pub struct Passes { #[derive(Clone)] struct PassSet { - passes: Vec<Rc<Pass>>, + passes: Vec<Rc<DefIdPass>>, } /// The number of "pass sets" that we have: @@ -208,19 +208,23 @@ impl<'a, 'tcx> Passes { // 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 { - hook.on_mir_pass(tcx, &**pass, pass_num, true); + hook.on_mir_pass(tcx, &pass.name(), pass_num, true); } } } /// 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)); } diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs index 89f01226113..4c984559428 100644 --- a/src/librustc_driver/driver.rs +++ b/src/librustc_driver/driver.rs @@ -929,7 +929,7 @@ pub fn phase_3_run_analysis_passes<'tcx, F, R>(sess: &'tcx Session, 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); diff --git a/src/librustc_mir/transform/dump_mir.rs b/src/librustc_mir/transform/dump_mir.rs index 43fb0acf2dd..62b480494c3 100644 --- a/src/librustc_mir/transform/dump_mir.rs +++ b/src/librustc_mir/transform/dump_mir.rs @@ -50,7 +50,7 @@ impl PassHook for DumpMir { fn on_mir_pass<'a, 'tcx>( &self, tcx: TyCtxt<'a, 'tcx, 'tcx>, - pass: &Pass, + pass_name: &str, pass_num: usize, is_after: bool) { @@ -66,7 +66,7 @@ impl PassHook for DumpMir { mir_util::dump_mir( tcx, pass_num, - &*pass.name(), + &pass_name, &Disambiguator { is_after }, source, &mir |
