diff --git a/llvm/include/llvm/Analysis/AliasAnalysis.h b/llvm/include/llvm/Analysis/AliasAnalysis.h index d8d88639b85a1..0e736b92e550e 100644 --- a/llvm/include/llvm/Analysis/AliasAnalysis.h +++ b/llvm/include/llvm/Analysis/AliasAnalysis.h @@ -912,7 +912,7 @@ LLVM_ABI bool isIdentifiedFunctionLocal(const Value *V); LLVM_ABI bool isBaseOfObject(const Value *V); /// Returns true if the pointer is one which would have been considered an -/// escape by isNonEscapingLocalObject. +/// escape by isNotCapturedBefore. LLVM_ABI bool isEscapeSource(const Value *V); /// Return true if Object memory is not visible after an unwind, in the sense diff --git a/llvm/include/llvm/Analysis/CaptureTracking.h b/llvm/include/llvm/Analysis/CaptureTracking.h index ed160ca3596e8..dd6a7f9b14dc6 100644 --- a/llvm/include/llvm/Analysis/CaptureTracking.h +++ b/llvm/include/llvm/Analysis/CaptureTracking.h @@ -195,12 +195,6 @@ namespace llvm { /// implicit captures such as for external globals. LLVM_ABI void PointerMayBeCaptured(const Value *V, CaptureTracker *Tracker, unsigned MaxUsesToExplore = 0); - - /// Returns true if the pointer is to a function-local object that never - /// escapes from the function. - LLVM_ABI bool isNonEscapingLocalObject( - const Value *V, - SmallDenseMap *IsCapturedCache = nullptr); } // end namespace llvm #endif diff --git a/llvm/lib/Analysis/AliasAnalysis.cpp b/llvm/lib/Analysis/AliasAnalysis.cpp index 2afabb75c7cc5..3ec009ca4adde 100644 --- a/llvm/lib/Analysis/AliasAnalysis.cpp +++ b/llvm/lib/Analysis/AliasAnalysis.cpp @@ -857,13 +857,13 @@ bool llvm::isEscapeSource(const Value *V) { return !CB->hasArgumentWithAdditionalReturnCaptureComponents(); } - // The load case works because isNonEscapingLocalObject considers all + // The load case works because isNotCapturedBefore considers all // stores to be escapes (it passes true for the StoreCaptures argument // to PointerMayBeCaptured). if (isa(V)) return true; - // The inttoptr case works because isNonEscapingLocalObject considers all + // The inttoptr case works because isNotCapturedBefore considers all // means of converting or equating a pointer to an int (ptrtoint, ptr store // which could be followed by an integer load, ptr<->int compare) as // escaping, and objects located at well-known addresses via platform-specific diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp index b110c2017b9eb..e6675256fd5a0 100644 --- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp +++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp @@ -199,7 +199,17 @@ CaptureAnalysis::~CaptureAnalysis() = default; bool SimpleCaptureAnalysis::isNotCapturedBefore(const Value *Object, const Instruction *I, bool OrAt) { - return isNonEscapingLocalObject(Object, &IsCapturedCache); + if (!isIdentifiedFunctionLocal(Object)) + return false; + + auto [CacheIt, Inserted] = IsCapturedCache.insert({Object, false}); + if (!Inserted) + return CacheIt->second; + + bool Ret = !capturesAnything(PointerMayBeCaptured( + Object, /*ReturnCaptures=*/false, CaptureComponents::Provenance)); + CacheIt->second = Ret; + return Ret; } static bool isNotInCycle(const Instruction *I, const DominatorTree *DT, diff --git a/llvm/lib/Analysis/CaptureTracking.cpp b/llvm/lib/Analysis/CaptureTracking.cpp index 2550b7a4732c1..d08ed17a655e4 100644 --- a/llvm/lib/Analysis/CaptureTracking.cpp +++ b/llvm/lib/Analysis/CaptureTracking.cpp @@ -447,27 +447,3 @@ void llvm::PointerMayBeCaptured(const Value *V, CaptureTracker *Tracker, // All uses examined. } - -bool llvm::isNonEscapingLocalObject( - const Value *V, SmallDenseMap *IsCapturedCache) { - SmallDenseMap::iterator CacheIt; - if (IsCapturedCache) { - bool Inserted; - std::tie(CacheIt, Inserted) = IsCapturedCache->insert({V, false}); - if (!Inserted) - // Found cached result, return it! - return CacheIt->second; - } - - // If this is an identified function-local object, check to see if it escapes. - // We only care about provenance here, not address capture. - if (isIdentifiedFunctionLocal(V)) { - bool Ret = !capturesAnything(PointerMayBeCaptured( - V, /*ReturnCaptures=*/false, CaptureComponents::Provenance)); - if (IsCapturedCache) - CacheIt->second = Ret; - return Ret; - } - - return false; -}