Index: include/llvm/Analysis/CaptureTracking.h =================================================================== --- include/llvm/Analysis/CaptureTracking.h +++ include/llvm/Analysis/CaptureTracking.h @@ -33,12 +33,12 @@ /// counts as capturing it or not. The boolean StoreCaptures specified /// whether storing the value (or part of it) into memory anywhere /// automatically counts as capturing it or not. - /// MaxUsesToExplore specifies how many uses should the analysis explore for - /// one value before giving up due too "too many uses". + /// MaxUsesToExplore specifies how many uses the analysis should explore for + /// one value before giving up due too "too many uses". If MaxUsesToExplore + /// is zero, a default value is assumed. bool PointerMayBeCaptured(const Value *V, bool ReturnCaptures, bool StoreCaptures, - unsigned MaxUsesToExplore = - getDefaultMaxUsesToExploreForCaptureTracking()); + unsigned MaxUsesToExplore = 0); /// PointerMayBeCapturedBefore - Return true if this pointer value may be /// captured by the enclosing function (which is required to exist). If a @@ -50,13 +50,13 @@ /// (or part of it) into memory anywhere automatically counts as capturing it /// or not. Captures by the provided instruction are considered if the /// final parameter is true. - /// MaxUsesToExplore specifies how many uses should the analysis explore for - /// one value before giving up due too "too many uses". + /// MaxUsesToExplore specifies how many uses the analysis should explore for + /// one value before giving up due too "too many uses". If MaxUsesToExplore + /// is zero, a default value is assumed. bool PointerMayBeCapturedBefore( const Value *V, bool ReturnCaptures, bool StoreCaptures, const Instruction *I, const DominatorTree *DT, bool IncludeI = false, - unsigned MaxUsesToExplore = - getDefaultMaxUsesToExploreForCaptureTracking()); + unsigned MaxUsesToExplore = 0); /// This callback is used in conjunction with PointerMayBeCaptured. In /// addition to the interface here, you'll need to provide your own getters @@ -89,11 +89,11 @@ /// PointerMayBeCaptured - Visit the value and the values derived from it and /// find values which appear to be capturing the pointer value. This feeds /// results into and is controlled by the CaptureTracker object. - /// MaxUsesToExplore specifies how many uses should the analysis explore for - /// one value before giving up due too "too many uses". + /// MaxUsesToExplore specifies how many uses the analysis should explore for + /// one value before giving up due too "too many uses". If MaxUsesToExplore + /// is zero, a default value is assumed. void PointerMayBeCaptured(const Value *V, CaptureTracker *Tracker, - unsigned MaxUsesToExplore = - getDefaultMaxUsesToExploreForCaptureTracking()); + unsigned MaxUsesToExplore = 0); } // end namespace llvm #endif Index: lib/Analysis/CaptureTracking.cpp =================================================================== --- lib/Analysis/CaptureTracking.cpp +++ lib/Analysis/CaptureTracking.cpp @@ -230,6 +230,9 @@ void llvm::PointerMayBeCaptured(const Value *V, CaptureTracker *Tracker, unsigned MaxUsesToExplore) { assert(V->getType()->isPointerTy() && "Capture is for pointers only!"); + if (MaxUsesToExplore == 0) + MaxUsesToExplore = DefaultMaxUsesToExplore; + SmallVector Worklist; Worklist.reserve(getDefaultMaxUsesToExploreForCaptureTracking()); SmallSet Visited;