diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2017-04-25 15:56:02 -0400 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2017-05-02 14:01:00 -0400 |
| commit | 0e5e2f36345fbf44c72c60fda0929aceba5d74dd (patch) | |
| tree | d23f9af496cdd1b86d30f39a273ca384d482eedc /src/librustc_mir/transform | |
| parent | ed1f26ddda15b2bcf613a257e813e8b02ee14dff (diff) | |
| download | rust-0e5e2f36345fbf44c72c60fda0929aceba5d74dd.tar.gz rust-0e5e2f36345fbf44c72c60fda0929aceba5d74dd.zip | |
introduce `mir_keys()`
Each MIR key is a DefId that has MIR associated with it
Diffstat (limited to 'src/librustc_mir/transform')
| -rw-r--r-- | src/librustc_mir/transform/dump_mir.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/transform/inline.rs | 38 | ||||
| -rw-r--r-- | src/librustc_mir/transform/qualify_consts.rs | 11 |
3 files changed, 13 insertions, 38 deletions
diff --git a/src/librustc_mir/transform/dump_mir.rs b/src/librustc_mir/transform/dump_mir.rs index 5b3113f962b..6895facd6af 100644 --- a/src/librustc_mir/transform/dump_mir.rs +++ b/src/librustc_mir/transform/dump_mir.rs @@ -81,6 +81,6 @@ pub fn emit_mir<'a, 'tcx>( { let path = outputs.path(OutputType::Mir); let mut f = File::create(&path)?; - mir_util::write_mir_pretty(tcx, tcx.maps.mir.borrow().keys().into_iter(), &mut f)?; + mir_util::write_mir_pretty(tcx, None, &mut f)?; Ok(()) } diff --git a/src/librustc_mir/transform/inline.rs b/src/librustc_mir/transform/inline.rs index 45bdff9195c..fcd5f970882 100644 --- a/src/librustc_mir/transform/inline.rs +++ b/src/librustc_mir/transform/inline.rs @@ -10,7 +10,7 @@ //! Inlining pass for MIR functions -use rustc::hir::def_id::DefId; +use rustc::hir::def_id::{DefId, LOCAL_CRATE}; use rustc_data_structures::bitvec::BitVector; use rustc_data_structures::indexed_vec::{Idx, IndexVec}; @@ -58,24 +58,15 @@ impl<'tcx> MirMapPass<'tcx> for Inline { tcx: tcx, }; - let def_ids = tcx.maps.mir.borrow().keys(); - for &def_id in &def_ids { - if !def_id.is_local() { continue; } - + for &def_id in tcx.mir_keys(LOCAL_CRATE).iter() { let _task = tcx.dep_graph.in_task(DepNode::Mir(def_id)); - let mut mir = if let Some(mir) = tcx.maps.mir.borrow().get(&def_id) { - mir.borrow_mut() - } else { - continue; - }; - - tcx.dep_graph.write(DepNode::Mir(def_id)); + let mir = &tcx.item_mir(def_id); let id = tcx.hir.as_local_node_id(def_id).unwrap(); let src = MirSource::from_node(tcx, id); for hook in &mut *hooks { - hook.on_mir_pass(tcx, src, &mut mir, self, false); + hook.on_mir_pass(tcx, src, mir, self, false); } } @@ -83,18 +74,15 @@ impl<'tcx> MirMapPass<'tcx> for Inline { inliner.inline_scc(&callgraph, &scc); } - for def_id in def_ids { - if !def_id.is_local() { continue; } - + for &def_id in tcx.mir_keys(LOCAL_CRATE).iter() { let _task = tcx.dep_graph.in_task(DepNode::Mir(def_id)); - let mut mir = tcx.maps.mir.borrow()[&def_id].borrow_mut(); - tcx.dep_graph.write(DepNode::Mir(def_id)); + let mir = &tcx.item_mir(def_id); let id = tcx.hir.as_local_node_id(def_id).unwrap(); let src = MirSource::from_node(tcx, id); for hook in &mut *hooks { - hook.on_mir_pass(tcx, src, &mut mir, self, true); + hook.on_mir_pass(tcx, src, mir, self, true); } } } @@ -200,11 +188,7 @@ impl<'a, 'tcx> Inliner<'a, 'tcx> { }; - let mut caller_mir = { - let map = self.tcx.maps.mir.borrow(); - let mir = map.get(&callsite.caller).unwrap(); - mir.borrow_mut() - }; + let mut caller_mir = self.tcx.mir(callsite.caller).borrow_mut(); let start = caller_mir.basic_blocks().len(); @@ -256,11 +240,7 @@ impl<'a, 'tcx> Inliner<'a, 'tcx> { let _task = self.tcx.dep_graph.in_task(DepNode::Mir(def_id)); self.tcx.dep_graph.write(DepNode::Mir(def_id)); - let mut caller_mir = { - let map = self.tcx.maps.mir.borrow(); - let mir = map.get(&def_id).unwrap(); - mir.borrow_mut() - }; + let mut caller_mir = self.tcx.mir(def_id).borrow_mut(); debug!("Running simplify cfg on {:?}", def_id); CfgSimplifier::new(&mut caller_mir).simplify(); diff --git a/src/librustc_mir/transform/qualify_consts.rs b/src/librustc_mir/transform/qualify_consts.rs index afb775aa01e..f5662295296 100644 --- a/src/librustc_mir/transform/qualify_consts.rs +++ b/src/librustc_mir/transform/qualify_consts.rs @@ -19,7 +19,7 @@ use rustc_data_structures::indexed_vec::{IndexVec, Idx}; use rustc::dep_graph::DepNode; use rustc::hir; use rustc::hir::map as hir_map; -use rustc::hir::def_id::DefId; +use rustc::hir::def_id::{DefId, LOCAL_CRATE}; use rustc::hir::map::blocks::FnLikeNode; use rustc::traits::{self, Reveal}; use rustc::ty::{self, TyCtxt, Ty, TypeFoldable}; @@ -946,12 +946,7 @@ impl<'tcx> MirMapPass<'tcx> for QualifyAndPromoteConstants { tcx: TyCtxt<'a, 'tcx, 'tcx>, hooks: &mut [Box<for<'s> MirPassHook<'s>>]) { - let def_ids = tcx.maps.mir.borrow().keys(); - for def_id in def_ids { - if !def_id.is_local() { - continue; - } - + for &def_id in tcx.mir_keys(LOCAL_CRATE).iter() { let _task = tcx.dep_graph.in_task(DepNode::Mir(def_id)); let id = tcx.hir.as_local_node_id(def_id).unwrap(); let src = MirSource::from_node(tcx, id); @@ -961,7 +956,7 @@ impl<'tcx> MirMapPass<'tcx> for QualifyAndPromoteConstants { continue; } - let mir = &mut tcx.maps.mir.borrow()[&def_id].borrow_mut(); + let mir = &mut tcx.mir(def_id).borrow_mut(); tcx.dep_graph.write(DepNode::Mir(def_id)); for hook in &mut *hooks { |
