@@ -739,28 +739,49 @@ bool AAResultsWrapperPass::runOnFunction(Function &F) {
739739 AAR.reset (
740740 new AAResults (getAnalysis<TargetLibraryInfoWrapperPass>().getTLI (F)));
741741
742+ // Add any target-specific alias analyses that should be run early.
743+ auto *ExtWrapperPass = getAnalysisIfAvailable<ExternalAAWrapperPass>();
744+ if (ExtWrapperPass && ExtWrapperPass->runEarly () && ExtWrapperPass->CB ) {
745+ LLVM_DEBUG (dbgs () << " AAResults register Early ExternalAA: "
746+ << ExtWrapperPass->getPassName () << " \n " );
747+ ExtWrapperPass->CB (*this , F, *AAR);
748+ }
749+
742750 // BasicAA is always available for function analyses. Also, we add it first
743751 // so that it can trump TBAA results when it proves MustAlias.
744752 // FIXME: TBAA should have an explicit mode to support this and then we
745753 // should reconsider the ordering here.
746- if (!DisableBasicAA)
754+ if (!DisableBasicAA) {
755+ LLVM_DEBUG (dbgs () << " AAResults register BasicAA\n " );
747756 AAR->addAAResult (getAnalysis<BasicAAWrapperPass>().getResult ());
757+ }
748758
749759 // Populate the results with the currently available AAs.
750- if (auto *WrapperPass = getAnalysisIfAvailable<ScopedNoAliasAAWrapperPass>())
760+ if (auto *WrapperPass =
761+ getAnalysisIfAvailable<ScopedNoAliasAAWrapperPass>()) {
762+ LLVM_DEBUG (dbgs () << " AAResults register ScopedNoAliasAA\n " );
751763 AAR->addAAResult (WrapperPass->getResult ());
752- if (auto *WrapperPass = getAnalysisIfAvailable<TypeBasedAAWrapperPass>())
764+ }
765+ if (auto *WrapperPass = getAnalysisIfAvailable<TypeBasedAAWrapperPass>()) {
766+ LLVM_DEBUG (dbgs () << " AAResults register TypeBasedAA\n " );
753767 AAR->addAAResult (WrapperPass->getResult ());
754- if (auto *WrapperPass = getAnalysisIfAvailable<GlobalsAAWrapperPass>())
768+ }
769+ if (auto *WrapperPass = getAnalysisIfAvailable<GlobalsAAWrapperPass>()) {
770+ LLVM_DEBUG (dbgs () << " AAResults register GlobalsAA\n " );
755771 AAR->addAAResult (WrapperPass->getResult ());
756- if (auto *WrapperPass = getAnalysisIfAvailable<SCEVAAWrapperPass>())
772+ }
773+ if (auto *WrapperPass = getAnalysisIfAvailable<SCEVAAWrapperPass>()) {
774+ LLVM_DEBUG (dbgs () << " AAResults register SCEVAA\n " );
757775 AAR->addAAResult (WrapperPass->getResult ());
776+ }
758777
759778 // If available, run an external AA providing callback over the results as
760779 // well.
761- if (auto *WrapperPass = getAnalysisIfAvailable<ExternalAAWrapperPass>())
762- if (WrapperPass->CB )
763- WrapperPass->CB (*this , F, *AAR);
780+ if (ExtWrapperPass && !ExtWrapperPass->runEarly () && ExtWrapperPass->CB ) {
781+ LLVM_DEBUG (dbgs () << " AAResults register Late ExternalAA: "
782+ << ExtWrapperPass->getPassName () << " \n " );
783+ ExtWrapperPass->CB (*this , F, *AAR);
784+ }
764785
765786 // Analyses don't mutate the IR, so return false.
766787 return false ;
0 commit comments