[llvm] 6053b37 - [AA] Thread AAQI through getModRefBehavior() (NFC)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 6 01:02:57 PDT 2022
Author: Nikita Popov
Date: 2022-10-06T09:57:42+02:00
New Revision: 6053b37e454c056d25a31b39a06279cafd35edc8
URL: https://github.com/llvm/llvm-project/commit/6053b37e454c056d25a31b39a06279cafd35edc8
DIFF: https://github.com/llvm/llvm-project/commit/6053b37e454c056d25a31b39a06279cafd35edc8.diff
LOG: [AA] Thread AAQI through getModRefBehavior() (NFC)
This is in preparation for D94363, as we will need AAQI to
perform the recursive call to the function variant.
Added:
Modified:
llvm/include/llvm/Analysis/AliasAnalysis.h
llvm/include/llvm/Analysis/BasicAliasAnalysis.h
llvm/include/llvm/Analysis/TypeBasedAliasAnalysis.h
llvm/lib/Analysis/AliasAnalysis.cpp
llvm/lib/Analysis/BasicAliasAnalysis.cpp
llvm/lib/Analysis/TypeBasedAliasAnalysis.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/AliasAnalysis.h b/llvm/include/llvm/Analysis/AliasAnalysis.h
index 7195c93e467f5..de4fb7b017c86 100644
--- a/llvm/include/llvm/Analysis/AliasAnalysis.h
+++ b/llvm/include/llvm/Analysis/AliasAnalysis.h
@@ -883,6 +883,8 @@ class AAResults {
ModRefInfo callCapturesBefore(const Instruction *I,
const MemoryLocation &MemLoc, DominatorTree *DT,
AAQueryInfo &AAQIP);
+ FunctionModRefBehavior getModRefBehavior(const CallBase *Call,
+ AAQueryInfo &AAQI);
class Concept;
@@ -937,7 +939,7 @@ class BatchAAResults {
return AA.getArgModRefInfo(Call, ArgIdx);
}
FunctionModRefBehavior getModRefBehavior(const CallBase *Call) {
- return AA.getModRefBehavior(Call);
+ return AA.getModRefBehavior(Call, AAQI);
}
bool isMustAlias(const MemoryLocation &LocA, const MemoryLocation &LocB) {
return alias(LocA, LocB) == AliasResult::MustAlias;
@@ -1005,7 +1007,8 @@ class AAResults::Concept {
unsigned ArgIdx) = 0;
/// Return the behavior of the given call site.
- virtual FunctionModRefBehavior getModRefBehavior(const CallBase *Call) = 0;
+ virtual FunctionModRefBehavior getModRefBehavior(const CallBase *Call,
+ AAQueryInfo &AAQI) = 0;
/// Return the behavior when calling the given function.
virtual FunctionModRefBehavior getModRefBehavior(const Function *F) = 0;
@@ -1056,8 +1059,9 @@ template <typename AAResultT> class AAResults::Model final : public Concept {
return Result.getArgModRefInfo(Call, ArgIdx);
}
- FunctionModRefBehavior getModRefBehavior(const CallBase *Call) override {
- return Result.getModRefBehavior(Call);
+ FunctionModRefBehavior getModRefBehavior(const CallBase *Call,
+ AAQueryInfo &AAQI) override {
+ return Result.getModRefBehavior(Call, AAQI);
}
FunctionModRefBehavior getModRefBehavior(const Function *F) override {
@@ -1134,9 +1138,10 @@ template <typename DerivedT> class AAResultBase {
: CurrentResult.getArgModRefInfo(Call, ArgIdx);
}
- FunctionModRefBehavior getModRefBehavior(const CallBase *Call) {
- return AAR ? AAR->getModRefBehavior(Call)
- : CurrentResult.getModRefBehavior(Call);
+ FunctionModRefBehavior getModRefBehavior(const CallBase *Call,
+ AAQueryInfo &AAQI) {
+ return AAR ? AAR->getModRefBehavior(Call, AAQI)
+ : CurrentResult.getModRefBehavior(Call, AAQI);
}
FunctionModRefBehavior getModRefBehavior(const Function *F) {
@@ -1190,7 +1195,8 @@ template <typename DerivedT> class AAResultBase {
return ModRefInfo::ModRef;
}
- FunctionModRefBehavior getModRefBehavior(const CallBase *Call) {
+ FunctionModRefBehavior getModRefBehavior(const CallBase *Call,
+ AAQueryInfo &AAQI) {
return FunctionModRefBehavior::unknown();
}
diff --git a/llvm/include/llvm/Analysis/BasicAliasAnalysis.h b/llvm/include/llvm/Analysis/BasicAliasAnalysis.h
index 46f14a21a9ff0..f58db19024074 100644
--- a/llvm/include/llvm/Analysis/BasicAliasAnalysis.h
+++ b/llvm/include/llvm/Analysis/BasicAliasAnalysis.h
@@ -85,7 +85,8 @@ class BasicAAResult : public AAResultBase<BasicAAResult> {
ModRefInfo getArgModRefInfo(const CallBase *Call, unsigned ArgIdx);
/// Returns the behavior when calling the given call site.
- FunctionModRefBehavior getModRefBehavior(const CallBase *Call);
+ FunctionModRefBehavior getModRefBehavior(const CallBase *Call,
+ AAQueryInfo &AAQI);
/// Returns the behavior when calling the given function. For use when the
/// call site is not known.
diff --git a/llvm/include/llvm/Analysis/TypeBasedAliasAnalysis.h b/llvm/include/llvm/Analysis/TypeBasedAliasAnalysis.h
index 345f11a3aad5c..dffdc18d9085e 100644
--- a/llvm/include/llvm/Analysis/TypeBasedAliasAnalysis.h
+++ b/llvm/include/llvm/Analysis/TypeBasedAliasAnalysis.h
@@ -44,7 +44,8 @@ class TypeBasedAAResult : public AAResultBase<TypeBasedAAResult> {
AAQueryInfo &AAQI);
bool pointsToConstantMemory(const MemoryLocation &Loc, AAQueryInfo &AAQI,
bool OrLocal);
- FunctionModRefBehavior getModRefBehavior(const CallBase *Call);
+ FunctionModRefBehavior getModRefBehavior(const CallBase *Call,
+ AAQueryInfo &AAQI);
FunctionModRefBehavior getModRefBehavior(const Function *F);
ModRefInfo getModRefInfo(const CallBase *Call, const MemoryLocation &Loc,
AAQueryInfo &AAQI);
diff --git a/llvm/lib/Analysis/AliasAnalysis.cpp b/llvm/lib/Analysis/AliasAnalysis.cpp
index 2a2b49fdf7e42..5f477ed3b3902 100644
--- a/llvm/lib/Analysis/AliasAnalysis.cpp
+++ b/llvm/lib/Analysis/AliasAnalysis.cpp
@@ -238,7 +238,7 @@ ModRefInfo AAResults::getModRefInfo(const CallBase *Call,
// We can completely ignore inaccessible memory here, because MemoryLocations
// can only reference accessible memory.
- auto MRB = getModRefBehavior(Call).getWithoutLoc(
+ auto MRB = getModRefBehavior(Call, AAQI).getWithoutLoc(
FunctionModRefBehavior::InaccessibleMem);
if (MRB.doesNotAccessMemory())
return ModRefInfo::NoModRef;
@@ -296,11 +296,11 @@ ModRefInfo AAResults::getModRefInfo(const CallBase *Call1,
// aggregate set of AA results.
// If Call1 or Call2 are readnone, they don't interact.
- auto Call1B = getModRefBehavior(Call1);
+ auto Call1B = getModRefBehavior(Call1, AAQI);
if (Call1B.doesNotAccessMemory())
return ModRefInfo::NoModRef;
- auto Call2B = getModRefBehavior(Call2);
+ auto Call2B = getModRefBehavior(Call2, AAQI);
if (Call2B.doesNotAccessMemory())
return ModRefInfo::NoModRef;
@@ -387,11 +387,12 @@ ModRefInfo AAResults::getModRefInfo(const CallBase *Call1,
return Result;
}
-FunctionModRefBehavior AAResults::getModRefBehavior(const CallBase *Call) {
+FunctionModRefBehavior AAResults::getModRefBehavior(const CallBase *Call,
+ AAQueryInfo &AAQI) {
FunctionModRefBehavior Result = FunctionModRefBehavior::unknown();
for (const auto &AA : AAs) {
- Result &= AA->getModRefBehavior(Call);
+ Result &= AA->getModRefBehavior(Call, AAQI);
// Early-exit the moment we reach the bottom of the lattice.
if (Result.doesNotAccessMemory())
@@ -401,6 +402,11 @@ FunctionModRefBehavior AAResults::getModRefBehavior(const CallBase *Call) {
return Result;
}
+FunctionModRefBehavior AAResults::getModRefBehavior(const CallBase *Call) {
+ SimpleAAQueryInfo AAQI;
+ return getModRefBehavior(Call, AAQI);
+}
+
FunctionModRefBehavior AAResults::getModRefBehavior(const Function *F) {
FunctionModRefBehavior Result = FunctionModRefBehavior::unknown();
@@ -662,7 +668,7 @@ ModRefInfo AAResults::getModRefInfo(const Instruction *I,
AAQueryInfo &AAQIP) {
if (OptLoc == None) {
if (const auto *Call = dyn_cast<CallBase>(I))
- return getModRefBehavior(Call).getModRef();
+ return getModRefBehavior(Call, AAQIP).getModRef();
}
const MemoryLocation &Loc = OptLoc.value_or(MemoryLocation());
diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
index 27c485dea2b9f..461c7742e1d98 100644
--- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp
+++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
@@ -760,7 +760,8 @@ static FunctionModRefBehavior getModRefBehaviorFromAttrs(AttributeSet Attrs) {
}
/// Returns the behavior when calling the given call site.
-FunctionModRefBehavior BasicAAResult::getModRefBehavior(const CallBase *Call) {
+FunctionModRefBehavior BasicAAResult::getModRefBehavior(const CallBase *Call,
+ AAQueryInfo &AAQI) {
FunctionModRefBehavior Min =
getModRefBehaviorFromAttrs(Call->getAttributes().getFnAttrs());
@@ -1012,12 +1013,12 @@ ModRefInfo BasicAAResult::getModRefInfo(const CallBase *Call1,
// possibilities for guard intrinsics.
if (isIntrinsicCall(Call1, Intrinsic::experimental_guard))
- return isModSet(getModRefBehavior(Call2).getModRef())
+ return isModSet(getModRefBehavior(Call2, AAQI).getModRef())
? ModRefInfo::Ref
: ModRefInfo::NoModRef;
if (isIntrinsicCall(Call2, Intrinsic::experimental_guard))
- return isModSet(getModRefBehavior(Call1).getModRef())
+ return isModSet(getModRefBehavior(Call1, AAQI).getModRef())
? ModRefInfo::Mod
: ModRefInfo::NoModRef;
diff --git a/llvm/lib/Analysis/TypeBasedAliasAnalysis.cpp b/llvm/lib/Analysis/TypeBasedAliasAnalysis.cpp
index 1751e99415549..f5a451bee2bf5 100644
--- a/llvm/lib/Analysis/TypeBasedAliasAnalysis.cpp
+++ b/llvm/lib/Analysis/TypeBasedAliasAnalysis.cpp
@@ -405,9 +405,10 @@ bool TypeBasedAAResult::pointsToConstantMemory(const MemoryLocation &Loc,
}
FunctionModRefBehavior
-TypeBasedAAResult::getModRefBehavior(const CallBase *Call) {
+TypeBasedAAResult::getModRefBehavior(const CallBase *Call,
+ AAQueryInfo &AAQI) {
if (!EnableTBAA)
- return AAResultBase::getModRefBehavior(Call);
+ return AAResultBase::getModRefBehavior(Call, AAQI);
// If this is an "immutable" type, we can assume the call doesn't write
// to memory.
@@ -416,7 +417,7 @@ TypeBasedAAResult::getModRefBehavior(const CallBase *Call) {
(isStructPathTBAA(M) && TBAAStructTagNode(M).isTypeImmutable()))
return FunctionModRefBehavior::readOnly();
- return AAResultBase::getModRefBehavior(Call);
+ return AAResultBase::getModRefBehavior(Call, AAQI);
}
FunctionModRefBehavior TypeBasedAAResult::getModRefBehavior(const Function *F) {
More information about the llvm-commits
mailing list