diff --git a/llvm/include/llvm/Analysis/AliasAnalysis.h b/llvm/include/llvm/Analysis/AliasAnalysis.h index d23b81854c9ea..16f54c394788d 100644 --- a/llvm/include/llvm/Analysis/AliasAnalysis.h +++ b/llvm/include/llvm/Analysis/AliasAnalysis.h @@ -1011,19 +1011,24 @@ struct ExternalAAWrapperPass : ImmutablePass { ExternalAAWrapperPass(); - explicit ExternalAAWrapperPass(CallbackT CB); + explicit ExternalAAWrapperPass(CallbackT CB, bool RunEarly = false); - /// 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 /// 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..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; @@ -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..caef8fe790adb 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()); - }) {} + : 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";