@@ -788,28 +788,49 @@ bool AAResultsWrapperPass::runOnFunction(Function &F) {
788788 AAR.reset (
789789 new AAResults (getAnalysis<TargetLibraryInfoWrapperPass>().getTLI (F)));
790790
791+ // Add any target-specific alias analyses that should be run early.
792+ auto *ExtWrapperPass = getAnalysisIfAvailable<ExternalAAWrapperPass>();
793+ if (ExtWrapperPass && ExtWrapperPass->runEarly () && ExtWrapperPass->CB ) {
794+ LLVM_DEBUG (dbgs () << " AAResults register Early ExternalAA: "
795+ << ExtWrapperPass->getPassName () << " \n " );
796+ ExtWrapperPass->CB (*this , F, *AAR);
797+ }
798+
791799 // BasicAA is always available for function analyses. Also, we add it first
792800 // so that it can trump TBAA results when it proves MustAlias.
793801 // FIXME: TBAA should have an explicit mode to support this and then we
794802 // should reconsider the ordering here.
795- if (!DisableBasicAA)
803+ if (!DisableBasicAA) {
804+ LLVM_DEBUG (dbgs () << " AAResults register BasicAA\n " );
796805 AAR->addAAResult (getAnalysis<BasicAAWrapperPass>().getResult ());
806+ }
797807
798808 // Populate the results with the currently available AAs.
799- if (auto *WrapperPass = getAnalysisIfAvailable<ScopedNoAliasAAWrapperPass>())
809+ if (auto *WrapperPass =
810+ getAnalysisIfAvailable<ScopedNoAliasAAWrapperPass>()) {
811+ LLVM_DEBUG (dbgs () << " AAResults register ScopedNoAliasAA\n " );
800812 AAR->addAAResult (WrapperPass->getResult ());
801- if (auto *WrapperPass = getAnalysisIfAvailable<TypeBasedAAWrapperPass>())
813+ }
814+ if (auto *WrapperPass = getAnalysisIfAvailable<TypeBasedAAWrapperPass>()) {
815+ LLVM_DEBUG (dbgs () << " AAResults register TypeBasedAA\n " );
802816 AAR->addAAResult (WrapperPass->getResult ());
803- if (auto *WrapperPass = getAnalysisIfAvailable<GlobalsAAWrapperPass>())
817+ }
818+ if (auto *WrapperPass = getAnalysisIfAvailable<GlobalsAAWrapperPass>()) {
819+ LLVM_DEBUG (dbgs () << " AAResults register GlobalsAA\n " );
804820 AAR->addAAResult (WrapperPass->getResult ());
805- if (auto *WrapperPass = getAnalysisIfAvailable<SCEVAAWrapperPass>())
821+ }
822+ if (auto *WrapperPass = getAnalysisIfAvailable<SCEVAAWrapperPass>()) {
823+ LLVM_DEBUG (dbgs () << " AAResults register SCEVAA\n " );
806824 AAR->addAAResult (WrapperPass->getResult ());
825+ }
807826
808827 // If available, run an external AA providing callback over the results as
809828 // well.
810- if (auto *WrapperPass = getAnalysisIfAvailable<ExternalAAWrapperPass>())
811- if (WrapperPass->CB )
812- WrapperPass->CB (*this , F, *AAR);
829+ if (ExtWrapperPass && !ExtWrapperPass->runEarly () && ExtWrapperPass->CB ) {
830+ LLVM_DEBUG (dbgs () << " AAResults register Late ExternalAA: "
831+ << ExtWrapperPass->getPassName () << " \n " );
832+ ExtWrapperPass->CB (*this , F, *AAR);
833+ }
813834
814835 // Analyses don't mutate the IR, so return false.
815836 return false ;
0 commit comments