From b950df7b6ef389270235deac67eafe0e7deb1817 Mon Sep 17 00:00:00 2001 From: chengjunp 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(); - 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()) 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 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 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()) - AAR.addAAResult(WrapperPass->getResult()); - }) { - RunEarly = true; - } + : ExternalAAWrapperPass( + [](Pass &P, Function &, AAResults &AAR) { + if (auto *WrapperPass = + P.getAnalysisIfAvailable()) + AAR.addAAResult(WrapperPass->getResult()); + }, + /*RunEarly=*/true) {} StringRef getPassName() const override { return "NVPTX Address space based Alias Analysis Wrapper";