diff options
Diffstat (limited to 'llvm/lib/Analysis/BasicAliasAnalysis.cpp')
| -rw-r--r-- | llvm/lib/Analysis/BasicAliasAnalysis.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp index b110c2017b9e..e6675256fd5a 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, |
