summaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/BasicAliasAnalysis.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Analysis/BasicAliasAnalysis.cpp')
-rw-r--r--llvm/lib/Analysis/BasicAliasAnalysis.cpp12
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,