diff options
| author | Taylor Cramer <cramertj@google.com> | 2017-06-11 21:16:26 -0700 |
|---|---|---|
| committer | Taylor Cramer <cramertj@google.com> | 2017-06-13 23:10:59 -0700 |
| commit | 9f710530a7c0be1acaa099b12163ec1af8b8cf30 (patch) | |
| tree | 9436a2b30746e14a32545a03fdf37be8a26aeee2 /src/librustc_mir/transform | |
| parent | e40ef964fe491b19c22dfb8dd36d1eab14223c36 (diff) | |
| download | rust-9f710530a7c0be1acaa099b12163ec1af8b8cf30.tar.gz rust-9f710530a7c0be1acaa099b12163ec1af8b8cf30.zip | |
On-demand is_const_fn
Diffstat (limited to 'src/librustc_mir/transform')
| -rw-r--r-- | src/librustc_mir/transform/copy_prop.rs | 3 | ||||
| -rw-r--r-- | src/librustc_mir/transform/qualify_consts.rs | 17 |
2 files changed, 3 insertions, 17 deletions
diff --git a/src/librustc_mir/transform/copy_prop.rs b/src/librustc_mir/transform/copy_prop.rs index 08a4961c6cd..dec0717e9e3 100644 --- a/src/librustc_mir/transform/copy_prop.rs +++ b/src/librustc_mir/transform/copy_prop.rs @@ -34,7 +34,6 @@ use rustc::mir::transform::{MirPass, MirSource}; use rustc::mir::visit::MutVisitor; use rustc::ty::TyCtxt; use util::def_use::DefUseAnalysis; -use transform::qualify_consts; pub struct CopyPropagation; @@ -55,7 +54,7 @@ impl MirPass for CopyPropagation { return } MirSource::Fn(function_node_id) => { - if qualify_consts::is_const_fn(tcx, tcx.hir.local_def_id(function_node_id)) { + if tcx.is_const_fn(tcx.hir.local_def_id(function_node_id)) { // Don't run on const functions, as, again, trans might not be able to evaluate // the optimized IR. return diff --git a/src/librustc_mir/transform/qualify_consts.rs b/src/librustc_mir/transform/qualify_consts.rs index d60e761bc0b..8342d0ff491 100644 --- a/src/librustc_mir/transform/qualify_consts.rs +++ b/src/librustc_mir/transform/qualify_consts.rs @@ -19,7 +19,6 @@ use rustc_data_structures::indexed_vec::{IndexVec, Idx}; use rustc::hir; use rustc::hir::map as hir_map; use rustc::hir::def_id::DefId; -use rustc::hir::map::blocks::FnLikeNode; use rustc::traits::{self, Reveal}; use rustc::ty::{self, TyCtxt, Ty, TypeFoldable}; use rustc::ty::cast::CastTy; @@ -109,18 +108,6 @@ impl fmt::Display for Mode { } } -pub fn is_const_fn(tcx: TyCtxt, def_id: DefId) -> bool { - if let Some(node_id) = tcx.hir.as_local_node_id(def_id) { - if let Some(fn_like) = FnLikeNode::from_node(tcx.hir.get(node_id)) { - fn_like.constness() == hir::Constness::Const - } else { - false - } - } else { - tcx.sess.cstore.is_const_fn(def_id) - } -} - struct Qualifier<'a, 'gcx: 'a+'tcx, 'tcx: 'a> { mode: Mode, span: Span, @@ -766,7 +753,7 @@ impl<'a, 'tcx> Visitor<'tcx> for Qualifier<'a, 'tcx, 'tcx> { ty::TyFnDef(def_id, _, f) => { (f.abi() == Abi::PlatformIntrinsic && self.tcx.item_name(def_id).as_str().starts_with("simd_shuffle"), - is_const_fn(self.tcx, def_id)) + self.tcx.is_const_fn(def_id)) } _ => (false, false) }; @@ -957,7 +944,7 @@ impl MirPass for QualifyAndPromoteConstants { let def_id = tcx.hir.local_def_id(id); let mode = match src { MirSource::Fn(_) => { - if is_const_fn(tcx, def_id) { + if tcx.is_const_fn(def_id) { Mode::ConstFn } else { Mode::Fn |
