From: Wei Mi Date: Wed, 5 Aug 2015 23:40:30 +0000 (+0000) Subject: Add a stat to show how often the limit to decompose GEPs in BasicAA is reached. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=9a461c756e8a4c7427e5df2b7600366b0d55ecd5;p=oota-llvm.git Add a stat to show how often the limit to decompose GEPs in BasicAA is reached. Differential Revision: http://reviews.llvm.org/D9689 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244174 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index 511ea4bbfab..2e639f04d5a 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -16,6 +16,7 @@ #include "llvm/Analysis/Passes.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/Statistic.h" #include "llvm/Analysis/AliasAnalysis.h" #include "llvm/Analysis/AssumptionCache.h" #include "llvm/Analysis/CFG.h" @@ -46,6 +47,14 @@ using namespace llvm; static cl::opt EnableRecPhiAnalysis("basicaa-recphi", cl::Hidden, cl::init(false)); +/// SearchLimitReached / SearchTimes shows how often the limit of +/// to decompose GEPs is reached. It will affect the precision +/// of basic alias analysis. +#define DEBUG_TYPE "basicaa" +STATISTIC(SearchLimitReached, "Number of times the limit to " + "decompose GEPs is reached"); +STATISTIC(SearchTimes, "Number of times a GEP is decomposed"); + /// Cutoff after which to stop analysing a set of phi nodes potentially involved /// in a cycle. Because we are analysing 'through' phi nodes we need to be /// careful with value equivalence. We use reachability to make sure a value @@ -301,6 +310,7 @@ DecomposeGEPExpression(const Value *V, int64_t &BaseOffs, // Limit recursion depth to limit compile time in crazy cases. unsigned MaxLookup = MaxLookupSearchDepth; MaxLookupReached = false; + SearchTimes++; BaseOffs = 0; do { @@ -420,6 +430,7 @@ DecomposeGEPExpression(const Value *V, int64_t &BaseOffs, // If the chain of expressions is too deep, just return early. MaxLookupReached = true; + SearchLimitReached++; return V; }