[llvm-commits] [llvm] r90905 - /llvm/trunk/lib/Analysis/CaptureTracking.cpp

Chris Lattner clattner at apple.com
Tue Dec 8 16:04:52 PST 2009


Ok, typo 'conservativelty' though.  You might as well bump up the  
'small' datastructures to 32 so that they are "really" unlikely to  
have to resize as well.

-Chris

On Dec 8, 2009, at 3:59 PM, Dan Gohman wrote:

> Author: djg
> Date: Tue Dec  8 17:59:12 2009
> New Revision: 90905
>
> URL: http://llvm.org/viewvc/llvm-project?rev=90905&view=rev
> Log:
> Put a threshold on the number of users PointerMayBeCaptured
> examines; fall back to a conservative answer if there are
> more. This works around some several compile time problems
> resulting from BasicAliasAnalysis calling PointerMayBeCaptured.
>
> The value has been chosen arbitrarily.
>
> This fixes rdar://7438917 and may partially address PR5708.
>
> Modified:
>    llvm/trunk/lib/Analysis/CaptureTracking.cpp
>
> Modified: llvm/trunk/lib/Analysis/CaptureTracking.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/CaptureTracking.cpp?rev=90905&r1=90904&r2=90905&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/Analysis/CaptureTracking.cpp (original)
> +++ llvm/trunk/lib/Analysis/CaptureTracking.cpp Tue Dec  8 17:59:12  
> 2009
> @@ -25,6 +25,16 @@
> #include "llvm/Support/CallSite.h"
> using namespace llvm;
>
> +/// As its comment mentions, PointerMayBeCaptured can be expensive.
> +/// However, it's not easy for BasicAA to cache the result, because
> +/// it's an ImmutablePass. To work around this, bound queries at a
> +/// fixed number of uses.
> +///
> +/// TODO: Write a new FunctionPass AliasAnalysis so that it can keep
> +/// a cache. Then we can move the code from BasicAliasAnalysis into
> +/// that path, and remove this threshold.
> +static int const Threshold = 20;
> +
> /// PointerMayBeCaptured - Return true if this pointer value may be  
> captured
> /// by the enclosing function (which is required to exist).  This  
> routine can
> /// be expensive, so consider caching the results.  The boolean  
> ReturnCaptures
> @@ -37,12 +47,18 @@
>   assert(isa<PointerType>(V->getType()) && "Capture is for pointers  
> only!");
>   SmallVector<Use*, 16> Worklist;
>   SmallSet<Use*, 16> Visited;
> +  int Count = 0;
>
>   for (Value::use_const_iterator UI = V->use_begin(), UE = V- 
> >use_end();
>        UI != UE; ++UI) {
>     Use *U = &UI.getUse();
>     Visited.insert(U);
>     Worklist.push_back(U);
> +
> +    // If there are lots of uses, conservativelty say that the value
> +    // is captured to avoid taking too much compile time.
> +    if (Count++ >= Threshold)
> +      return true;
>   }
>
>   while (!Worklist.empty()) {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list