@@ -837,28 +837,49 @@ bool AAResultsWrapperPass::runOnFunction(Function &F) {
837837 AAR.reset (
838838 new AAResults (getAnalysis<TargetLibraryInfoWrapperPass>().getTLI (F)));
839839
840+ // Add any target-specific alias analyses that should be run early.
841+ auto *ExtWrapperPass = getAnalysisIfAvailable<ExternalAAWrapperPass>();
842+ if (ExtWrapperPass && ExtWrapperPass->runEarly () && ExtWrapperPass->CB ) {
843+ LLVM_DEBUG (dbgs () << " AAResults register Early ExternalAA: "
844+ << ExtWrapperPass->getPassName () << " \n " );
845+ ExtWrapperPass->CB (*this , F, *AAR);
846+ }
847+
840848 // BasicAA is always available for function analyses. Also, we add it first
841849 // so that it can trump TBAA results when it proves MustAlias.
842850 // FIXME: TBAA should have an explicit mode to support this and then we
843851 // should reconsider the ordering here.
844- if (!DisableBasicAA)
852+ if (!DisableBasicAA) {
853+ LLVM_DEBUG (dbgs () << " AAResults register BasicAA\n " );
845854 AAR->addAAResult (getAnalysis<BasicAAWrapperPass>().getResult ());
855+ }
846856
847857 // Populate the results with the currently available AAs.
848- if (auto *WrapperPass = getAnalysisIfAvailable<ScopedNoAliasAAWrapperPass>())
858+ if (auto *WrapperPass =
859+ getAnalysisIfAvailable<ScopedNoAliasAAWrapperPass>()) {
860+ LLVM_DEBUG (dbgs () << " AAResults register ScopedNoAliasAA\n " );
849861 AAR->addAAResult (WrapperPass->getResult ());
850- if (auto *WrapperPass = getAnalysisIfAvailable<TypeBasedAAWrapperPass>())
862+ }
863+ if (auto *WrapperPass = getAnalysisIfAvailable<TypeBasedAAWrapperPass>()) {
864+ LLVM_DEBUG (dbgs () << " AAResults register TypeBasedAA\n " );
851865 AAR->addAAResult (WrapperPass->getResult ());
852- if (auto *WrapperPass = getAnalysisIfAvailable<GlobalsAAWrapperPass>())
866+ }
867+ if (auto *WrapperPass = getAnalysisIfAvailable<GlobalsAAWrapperPass>()) {
868+ LLVM_DEBUG (dbgs () << " AAResults register GlobalsAA\n " );
853869 AAR->addAAResult (WrapperPass->getResult ());
854- if (auto *WrapperPass = getAnalysisIfAvailable<SCEVAAWrapperPass>())
870+ }
871+ if (auto *WrapperPass = getAnalysisIfAvailable<SCEVAAWrapperPass>()) {
872+ LLVM_DEBUG (dbgs () << " AAResults register SCEVAA\n " );
855873 AAR->addAAResult (WrapperPass->getResult ());
874+ }
856875
857876 // If available, run an external AA providing callback over the results as
858877 // well.
859- if (auto *WrapperPass = getAnalysisIfAvailable<ExternalAAWrapperPass>())
860- if (WrapperPass->CB )
861- WrapperPass->CB (*this , F, *AAR);
878+ if (ExtWrapperPass && !ExtWrapperPass->runEarly () && ExtWrapperPass->CB ) {
879+ LLVM_DEBUG (dbgs () << " AAResults register Late ExternalAA: "
880+ << ExtWrapperPass->getPassName () << " \n " );
881+ ExtWrapperPass->CB (*this , F, *AAR);
882+ }
862883
863884 // Analyses don't mutate the IR, so return false.
864885 return false ;
0 commit comments