[llvm] [AA] Merge isNonEscapingLocalObject() into SimpleCaptureAnalysis (NFC) (PR #142971)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 5 07:03:13 PDT 2025
https://github.com/nikic created https://github.com/llvm/llvm-project/pull/142971
isNonEscapingLocalObject() is only used by SimpleCaptureAnalysis and tightly integrated with its implementation (in particular its cache), so inline and simplify the implementation.
>From c59a9048aaf049d5f66c8d3d25c26504957a4ca5 Mon Sep 17 00:00:00 2001
From: Nikita Popov <npopov at redhat.com>
Date: Thu, 5 Jun 2025 16:00:24 +0200
Subject: [PATCH] [AA] Merge isNonEscapingLocalObject() into
SimpleCaptureAnalysis (NFC)
isNonEscapingLocalObject() is only used by SimpleCaptureAnalysis
and tightly integrated with its implementation (in particular its
cache), so inline and simplify the implementation.
---
llvm/include/llvm/Analysis/CaptureTracking.h | 6 -----
llvm/lib/Analysis/BasicAliasAnalysis.cpp | 12 +++++++++-
llvm/lib/Analysis/CaptureTracking.cpp | 24 --------------------
3 files changed, 11 insertions(+), 31 deletions(-)
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<const Value *, bool, 8> *IsCapturedCache = nullptr);
} // end namespace llvm
#endif
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<const Value *, bool, 8> *IsCapturedCache) {
- SmallDenseMap<const Value *, bool, 8>::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;
-}
More information about the llvm-commits
mailing list