Add two statistics to help track how we are computing the inline cost.
authorChandler Carruth <chandlerc@gmail.com>
Wed, 11 Apr 2012 10:15:10 +0000 (10:15 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Wed, 11 Apr 2012 10:15:10 +0000 (10:15 +0000)
Yea, 'NumCallerCallersAnalyzed' isn't a great name, suggestions welcome.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154492 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/InlineCost.cpp
lib/Transforms/IPO/Inliner.cpp

index c4599c805d6b77a6ebb229e5987c176f2d66d9b0..3e3d2ab75380bde84f494209b3506eb8e14a6b3a 100644 (file)
 #include "llvm/ADT/SetVector.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/SmallPtrSet.h"
+#include "llvm/ADT/Statistic.h"
 
 using namespace llvm;
 
+STATISTIC(NumCallsAnalyzed, "Number of call sites analyzed");
+
 namespace {
 
 class CallAnalyzer : public InstVisitor<CallAnalyzer, bool> {
@@ -802,6 +805,8 @@ ConstantInt *CallAnalyzer::stripAndComputeInBoundsConstantOffsets(Value *&V) {
 /// is below the computed threshold, then inlining was forcibly disabled by
 /// some artifact of the rountine.
 bool CallAnalyzer::analyzeCall(CallSite CS) {
+  ++NumCallsAnalyzed;
+
   // Track whether the post-inlining function would have more than one basic
   // block. A single basic block is often intended for inlining. Balloon the
   // threshold by 50% until we pass the single-BB phase.
index 8a9d14977a734d301733167e215d60ef4f78e1c2..dc9cbfb05e29137646730c66d72d2a500a46b208 100644 (file)
@@ -36,6 +36,11 @@ STATISTIC(NumCallsDeleted, "Number of call sites deleted, not inlined");
 STATISTIC(NumDeleted, "Number of functions deleted because all callers found");
 STATISTIC(NumMergedAllocas, "Number of allocas merged together");
 
+// This weirdly named statistic tracks the number of times that, when attemting
+// to inline a function A into B, we analyze the callers of B in order to see
+// if those would be more profitable and blocked inline steps.
+STATISTIC(NumCallerCallersAnalyzed, "Number of caller-callers analyzed");
+
 static cl::opt<int>
 InlineLimit("inline-threshold", cl::Hidden, cl::init(225), cl::ZeroOrMore,
         cl::desc("Control the amount of inlining to perform (default = 225)"));
@@ -277,6 +282,7 @@ bool Inliner::shouldInline(CallSite CS) {
       }
 
       InlineCost IC2 = getInlineCost(CS2);
+      ++NumCallerCallersAnalyzed;
       if (!IC2) {
         callerWillBeRemoved = false;
         continue;