[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