about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWesley Wiser <wwiser@gmail.com>2018-10-21 11:58:39 -0400
committerWesley Wiser <wwiser@gmail.com>2018-11-07 08:17:21 -0500
commite72afa9573ab8cb7ca2482f53b234bb59e3040ef (patch)
tree5a36e1a7c11dfc3a281fc2142c78afd8d0ca8181
parentddd4b194a0c28065a277c1f964aa931cc021b5c6 (diff)
downloadrust-e72afa9573ab8cb7ca2482f53b234bb59e3040ef.tar.gz
rust-e72afa9573ab8cb7ca2482f53b234bb59e3040ef.zip
Consume optimization fuel from the MIR inliner
This makes it easier to debug mis-optimizations that occur during
inlining. Thanks to @nikomatsakis for the suggestion!
-rw-r--r--src/librustc_mir/transform/inline.rs14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/librustc_mir/transform/inline.rs b/src/librustc_mir/transform/inline.rs
index 199cf5650fd..2db3bbda323 100644
--- a/src/librustc_mir/transform/inline.rs
+++ b/src/librustc_mir/transform/inline.rs
@@ -137,7 +137,7 @@ impl<'a, 'tcx> Inliner<'a, 'tcx> {
 
                 let callee_mir = match self.tcx.try_optimized_mir(callsite.location.span,
                                                                   callsite.callee) {
-                    Ok(callee_mir) if self.should_inline(callsite, callee_mir) => {
+                    Ok(callee_mir) if self.consider_optimizing(callsite, callee_mir) => {
                         self.tcx.subst_and_normalize_erasing_regions(
                             &callsite.substs,
                             param_env,
@@ -198,6 +198,18 @@ impl<'a, 'tcx> Inliner<'a, 'tcx> {
         }
     }
 
+    fn consider_optimizing(&self,
+                           callsite: CallSite<'tcx>,
+                           callee_mir: &Mir<'tcx>)
+                           -> bool
+    {
+        debug!("consider_optimizing({:?})", callsite);
+        self.should_inline(callsite, callee_mir)
+            && self.tcx.consider_optimizing(|| format!("Inline {:?} into {:?}",
+                                                       callee_mir.span,
+                                                       callsite))
+    }
+
     fn should_inline(&self,
                      callsite: CallSite<'tcx>,
                      callee_mir: &Mir<'tcx>)