[llvm] cc569a3 - [AA] Export the isBaseOfObject() API (NFC)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 9 07:19:44 PST 2024
Author: Nikita Popov
Date: 2024-12-09T16:19:35+01:00
New Revision: cc569a3702d36d5f2fbd3ae8c143d770d62f22d7
URL: https://github.com/llvm/llvm-project/commit/cc569a3702d36d5f2fbd3ae8c143d770d62f22d7
DIFF: https://github.com/llvm/llvm-project/commit/cc569a3702d36d5f2fbd3ae8c143d770d62f22d7.diff
LOG: [AA] Export the isBaseOfObject() API (NFC)
This is also useful outside BasicAA.
Added:
Modified:
llvm/include/llvm/Analysis/AliasAnalysis.h
llvm/lib/Analysis/AliasAnalysis.cpp
llvm/lib/Analysis/BasicAliasAnalysis.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/AliasAnalysis.h b/llvm/include/llvm/Analysis/AliasAnalysis.h
index 60875577561dc4..acc580f92b40a3 100644
--- a/llvm/include/llvm/Analysis/AliasAnalysis.h
+++ b/llvm/include/llvm/Analysis/AliasAnalysis.h
@@ -875,6 +875,13 @@ bool isIdentifiedObject(const Value *V);
/// IdentifiedObjects.
bool isIdentifiedFunctionLocal(const Value *V);
+/// Return true if we know V to the base address of the corresponding memory
+/// object. This implies that any address less than V must be out of bounds
+/// for the underlying object. Note that just being isIdentifiedObject() is
+/// not enough - For example, a negative offset from a noalias argument or call
+/// can be inbounds w.r.t the actual underlying object.
+bool isBaseOfObject(const Value *V);
+
/// Returns true if the pointer is one which would have been considered an
/// escape by isNonEscapingLocalObject.
bool isEscapeSource(const Value *V);
diff --git a/llvm/lib/Analysis/AliasAnalysis.cpp b/llvm/lib/Analysis/AliasAnalysis.cpp
index 02f2a3bcdb8bf9..62cdce56fe3881 100644
--- a/llvm/lib/Analysis/AliasAnalysis.cpp
+++ b/llvm/lib/Analysis/AliasAnalysis.cpp
@@ -828,6 +828,14 @@ bool llvm::isIdentifiedFunctionLocal(const Value *V) {
return isa<AllocaInst>(V) || isNoAliasCall(V) || isNoAliasOrByValArgument(V);
}
+bool llvm::isBaseOfObject(const Value *V) {
+ // TODO: We can handle other cases here
+ // 1) For GC languages, arguments to functions are often required to be
+ // base pointers.
+ // 2) Result of allocation routines are often base pointers. Leverage TLI.
+ return (isa<AllocaInst>(V) || isa<GlobalVariable>(V));
+}
+
bool llvm::isEscapeSource(const Value *V) {
if (auto *CB = dyn_cast<CallBase>(V))
return !isIntrinsicReturningPointerAliasingArgumentWithoutCapturing(CB,
diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
index 648a22deaf6ba4..dc54d566e55b12 100644
--- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp
+++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
@@ -1074,19 +1074,6 @@ ModRefInfo BasicAAResult::getModRefInfo(const CallBase *Call1,
return ModRefInfo::ModRef;
}
-/// Return true if we know V to the base address of the corresponding memory
-/// object. This implies that any address less than V must be out of bounds
-/// for the underlying object. Note that just being isIdentifiedObject() is
-/// not enough - For example, a negative offset from a noalias argument or call
-/// can be inbounds w.r.t the actual underlying object.
-static bool isBaseOfObject(const Value *V) {
- // TODO: We can handle other cases here
- // 1) For GC languages, arguments to functions are often required to be
- // base pointers.
- // 2) Result of allocation routines are often base pointers. Leverage TLI.
- return (isa<AllocaInst>(V) || isa<GlobalVariable>(V));
-}
-
/// Provides a bunch of ad-hoc rules to disambiguate a GEP instruction against
/// another pointer.
///
More information about the llvm-commits
mailing list