From: Dan Gohman Date: Mon, 8 Nov 2010 20:26:19 +0000 (+0000) Subject: Re-introduce the MaxLookup limit to BasicAliasAnalysis' X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=3fcfc9fafac268d282d1373ea4517b6901fc510d;p=oota-llvm.git Re-introduce the MaxLookup limit to BasicAliasAnalysis' pointsToConstantMemory code to guard against possible compile time slowdowns. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118440 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index db493eeedca..73114fe5aab 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -524,6 +524,7 @@ bool BasicAliasAnalysis::pointsToConstantMemory(const Location &Loc, bool OrLocal) { assert(Visited.empty() && "Visited must be cleared after use!"); + unsigned MaxLookup = 8; SmallVector Worklist; Worklist.push_back(Loc.Ptr); do { @@ -559,6 +560,11 @@ BasicAliasAnalysis::pointsToConstantMemory(const Location &Loc, bool OrLocal) { // If all values incoming to a phi node point to local memory, then so does // the phi. if (const PHINode *PN = dyn_cast(V)) { + // Don't bother inspecting phi nodes with many operands. + if (PN->getNumIncomingValues() > MaxLookup) { + Visited.clear(); + return AliasAnalysis::pointsToConstantMemory(Loc, OrLocal); + } for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) Worklist.push_back(PN->getIncomingValue(i)); continue; @@ -568,10 +574,10 @@ BasicAliasAnalysis::pointsToConstantMemory(const Location &Loc, bool OrLocal) { Visited.clear(); return AliasAnalysis::pointsToConstantMemory(Loc, OrLocal); - } while (!Worklist.empty()); + } while (!Worklist.empty() && --MaxLookup); Visited.clear(); - return true; + return Worklist.empty(); } /// getModRefBehavior - Return the behavior when calling the given call site.