diff --git a/lib/VMCore/PassManager.cpp b/lib/VMCore/PassManager.cpp index 8362034fcf2..3a8a9e25e3c 100644 --- a/lib/VMCore/PassManager.cpp +++ b/lib/VMCore/PassManager.cpp @@ -1654,6 +1654,18 @@ void MPPassManager::addLowerLevelRequiredPass(Pass *P, Pass *RequiredPass) { OnTheFlyManagers[P] = FPP; } + + // If RequiredPass is an analysis pass and it is available then do not + // generate the analysis again. Stale analysis info should not be + // available at this point. + const PassInfo *PI = + PassRegistry::getPassRegistry()->getPassInfo(RequiredPass->getPassID()); + if (PI && PI->isAnalysis() && + FPP->getTopLevelManager()->findAnalysisPass(RequiredPass->getPassID())) { + delete RequiredPass; + return; + } + FPP->add(RequiredPass); // Register P as the last user of RequiredPass.