[llvm] [AA] Change RunEarly to be a Boolean Flag in ExternalAAWrapper (PR #139158)

via llvm-commits llvm-commits at lists.llvm.org
Fri May 9 15:46:26 PDT 2025


https://github.com/Chengjunp updated https://github.com/llvm/llvm-project/pull/139158

>From b950df7b6ef389270235deac67eafe0e7deb1817 Mon Sep 17 00:00:00 2001
From: chengjunp <chengjunp at nvidia.com>
Date: Thu, 8 May 2025 21:12:57 +0000
Subject: [PATCH 1/3] Change RunEarly to be a boolean flag in ExternalAAWrapper

---
 llvm/include/llvm/Analysis/AliasAnalysis.h | 2 +-
 llvm/lib/Analysis/AliasAnalysis.cpp        | 4 ++--
 llvm/lib/Target/NVPTX/NVPTXAliasAnalysis.h | 6 +++---
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/llvm/include/llvm/Analysis/AliasAnalysis.h b/llvm/include/llvm/Analysis/AliasAnalysis.h
index d23b81854c9ea..6235e6103d05d 100644
--- a/llvm/include/llvm/Analysis/AliasAnalysis.h
+++ b/llvm/include/llvm/Analysis/AliasAnalysis.h
@@ -1023,7 +1023,7 @@ struct ExternalAAWrapperPass : ImmutablePass {
   /// particularly useful when the external AA can provide more precise results
   /// than Basic AA so that Basic AA does not need to spend time recomputing
   /// them.
-  virtual bool runEarly() { return false; }
+  bool RunEarly = false;
 
   void getAnalysisUsage(AnalysisUsage &AU) const override {
     AU.setPreservesAll();
diff --git a/llvm/lib/Analysis/AliasAnalysis.cpp b/llvm/lib/Analysis/AliasAnalysis.cpp
index 27bd179a58ede..20c8ce67acbac 100644
--- a/llvm/lib/Analysis/AliasAnalysis.cpp
+++ b/llvm/lib/Analysis/AliasAnalysis.cpp
@@ -741,7 +741,7 @@ bool AAResultsWrapperPass::runOnFunction(Function &F) {
 
   // Add any target-specific alias analyses that should be run early.
   auto *ExtWrapperPass = getAnalysisIfAvailable<ExternalAAWrapperPass>();
-  if (ExtWrapperPass && ExtWrapperPass->runEarly() && ExtWrapperPass->CB) {
+  if (ExtWrapperPass && ExtWrapperPass->RunEarly && ExtWrapperPass->CB) {
     LLVM_DEBUG(dbgs() << "AAResults register Early ExternalAA: "
                       << ExtWrapperPass->getPassName() << "\n");
     ExtWrapperPass->CB(*this, F, *AAR);
@@ -777,7 +777,7 @@ bool AAResultsWrapperPass::runOnFunction(Function &F) {
 
   // If available, run an external AA providing callback over the results as
   // well.
-  if (ExtWrapperPass && !ExtWrapperPass->runEarly() && ExtWrapperPass->CB) {
+  if (ExtWrapperPass && !ExtWrapperPass->RunEarly && ExtWrapperPass->CB) {
     LLVM_DEBUG(dbgs() << "AAResults register Late ExternalAA: "
                       << ExtWrapperPass->getPassName() << "\n");
     ExtWrapperPass->CB(*this, F, *AAR);
diff --git a/llvm/lib/Target/NVPTX/NVPTXAliasAnalysis.h b/llvm/lib/Target/NVPTX/NVPTXAliasAnalysis.h
index 430fcd741c1b6..e706f1ebc00fa 100644
--- a/llvm/lib/Target/NVPTX/NVPTXAliasAnalysis.h
+++ b/llvm/lib/Target/NVPTX/NVPTXAliasAnalysis.h
@@ -90,14 +90,14 @@ class NVPTXExternalAAWrapper : public ExternalAAWrapperPass {
 public:
   static char ID;
 
-  bool runEarly() override { return true; }
-
   NVPTXExternalAAWrapper()
       : ExternalAAWrapperPass([](Pass &P, Function &, AAResults &AAR) {
           if (auto *WrapperPass =
                   P.getAnalysisIfAvailable<NVPTXAAWrapperPass>())
             AAR.addAAResult(WrapperPass->getResult());
-        }) {}
+        }) {
+    RunEarly = true;
+  }
 
   StringRef getPassName() const override {
     return "NVPTX Address space based Alias Analysis Wrapper";

>From fd8898743c43a7c55e53088d7c62d190993644a7 Mon Sep 17 00:00:00 2001
From: chengjunp <chengjunp at nvidia.com>
Date: Thu, 8 May 2025 21:23:38 +0000
Subject: [PATCH 2/3] Update comment

---
 llvm/include/llvm/Analysis/AliasAnalysis.h | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/llvm/include/llvm/Analysis/AliasAnalysis.h b/llvm/include/llvm/Analysis/AliasAnalysis.h
index 6235e6103d05d..fad8bf7c8faea 100644
--- a/llvm/include/llvm/Analysis/AliasAnalysis.h
+++ b/llvm/include/llvm/Analysis/AliasAnalysis.h
@@ -1013,10 +1013,15 @@ struct ExternalAAWrapperPass : ImmutablePass {
 
   explicit ExternalAAWrapperPass(CallbackT CB);
 
-  /// Returns whether this external AA should run before Basic AA.
+  /// Flag indicating whether this external AA should run before Basic AA.
   ///
-  /// By default, external AA passes are run after Basic AA. If this returns
-  /// true, the external AA will be run before Basic AA during alias analysis.
+  /// This flag is for LegacyPassManager only. To run an external AA early
+  /// with the NewPassManager, override the registerEarlyDefaultAliasAnalyses
+  /// method on the target machine.
+  ///
+  /// By default, external AA passes are run after Basic AA. If this flag is
+  /// set to true, the external AA will be run before Basic AA during alias
+  /// analysis.
   ///
   /// For some targets, we prefer to run the external AA early to improve
   /// compile time as it has more target-specific information. This is

>From d8477551df14b8ca2d07653f52934d9d21472446 Mon Sep 17 00:00:00 2001
From: chengjunp <chengjunp at nvidia.com>
Date: Fri, 9 May 2025 22:54:42 +0000
Subject: [PATCH 3/3] Make RunEarly a constructor argument

---
 llvm/include/llvm/Analysis/AliasAnalysis.h |  2 +-
 llvm/lib/Analysis/AliasAnalysis.cpp        |  4 ++--
 llvm/lib/Target/NVPTX/NVPTXAliasAnalysis.h | 14 +++++++-------
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/llvm/include/llvm/Analysis/AliasAnalysis.h b/llvm/include/llvm/Analysis/AliasAnalysis.h
index fad8bf7c8faea..16f54c394788d 100644
--- a/llvm/include/llvm/Analysis/AliasAnalysis.h
+++ b/llvm/include/llvm/Analysis/AliasAnalysis.h
@@ -1011,7 +1011,7 @@ struct ExternalAAWrapperPass : ImmutablePass {
 
   ExternalAAWrapperPass();
 
-  explicit ExternalAAWrapperPass(CallbackT CB);
+  explicit ExternalAAWrapperPass(CallbackT CB, bool RunEarly = false);
 
   /// Flag indicating whether this external AA should run before Basic AA.
   ///
diff --git a/llvm/lib/Analysis/AliasAnalysis.cpp b/llvm/lib/Analysis/AliasAnalysis.cpp
index 20c8ce67acbac..2afabb75c7cc5 100644
--- a/llvm/lib/Analysis/AliasAnalysis.cpp
+++ b/llvm/lib/Analysis/AliasAnalysis.cpp
@@ -693,8 +693,8 @@ AnalysisKey AAManager::Key;
 
 ExternalAAWrapperPass::ExternalAAWrapperPass() : ImmutablePass(ID) {}
 
-ExternalAAWrapperPass::ExternalAAWrapperPass(CallbackT CB)
-    : ImmutablePass(ID), CB(std::move(CB)) {}
+ExternalAAWrapperPass::ExternalAAWrapperPass(CallbackT CB, bool RunEarly)
+    : ImmutablePass(ID), CB(std::move(CB)), RunEarly(RunEarly) {}
 
 char ExternalAAWrapperPass::ID = 0;
 
diff --git a/llvm/lib/Target/NVPTX/NVPTXAliasAnalysis.h b/llvm/lib/Target/NVPTX/NVPTXAliasAnalysis.h
index e706f1ebc00fa..caef8fe790adb 100644
--- a/llvm/lib/Target/NVPTX/NVPTXAliasAnalysis.h
+++ b/llvm/lib/Target/NVPTX/NVPTXAliasAnalysis.h
@@ -91,13 +91,13 @@ class NVPTXExternalAAWrapper : public ExternalAAWrapperPass {
   static char ID;
 
   NVPTXExternalAAWrapper()
-      : ExternalAAWrapperPass([](Pass &P, Function &, AAResults &AAR) {
-          if (auto *WrapperPass =
-                  P.getAnalysisIfAvailable<NVPTXAAWrapperPass>())
-            AAR.addAAResult(WrapperPass->getResult());
-        }) {
-    RunEarly = true;
-  }
+      : ExternalAAWrapperPass(
+            [](Pass &P, Function &, AAResults &AAR) {
+              if (auto *WrapperPass =
+                      P.getAnalysisIfAvailable<NVPTXAAWrapperPass>())
+                AAR.addAAResult(WrapperPass->getResult());
+            },
+            /*RunEarly=*/true) {}
 
   StringRef getPassName() const override {
     return "NVPTX Address space based Alias Analysis Wrapper";



More information about the llvm-commits mailing list