summaryrefslogtreecommitdiff
path: root/src/librustc_mir
diff options
context:
space:
mode:
authorMark Rousskov <mark.simulacrum@gmail.com>2018-11-08 18:15:01 -0700
committerGitHub <noreply@github.com>2018-11-08 18:15:01 -0700
commit96ee13a56d856f6d0d58da796389c0b49f438bc8 (patch)
tree2f76aab85c66fe05ff6a358d39d65071c1008ceb /src/librustc_mir
parente873984fa8fff9df303df902bb1dc10528cd99ec (diff)
parente72afa9573ab8cb7ca2482f53b234bb59e3040ef (diff)
downloadrust-96ee13a56d856f6d0d58da796389c0b49f438bc8.tar.gz
Rollup merge of #55739 - wesleywiser:mir_inline_fuel, r=nikomatsakis
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!
Diffstat (limited to 'src/librustc_mir')
-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>)