Index: llvm/lib/Analysis/CallGraphSCCPass.cpp =================================================================== --- llvm/lib/Analysis/CallGraphSCCPass.cpp +++ llvm/lib/Analysis/CallGraphSCCPass.cpp @@ -467,15 +467,18 @@ initializeAnalysisImpl(P); // Actually run this pass on the current SCC. - Changed |= RunPassOnSCC(P, CurSCC, CG, - CallGraphUpToDate, DevirtualizedCall); + bool LocalChanged = + RunPassOnSCC(P, CurSCC, CG, CallGraphUpToDate, DevirtualizedCall); - if (Changed) + Changed |= LocalChanged; + + if (LocalChanged) dumpPassInfo(P, MODIFICATION_MSG, ON_CG_MSG, ""); dumpPreservedSet(P); verifyPreservedAnalysis(P); - removeNotPreservedAnalysis(P); + if (LocalChanged) + removeNotPreservedAnalysis(P); recordAvailableAnalysis(P); removeDeadPasses(P, "", ON_CG_MSG); } Index: llvm/lib/Analysis/LoopPass.cpp =================================================================== --- llvm/lib/Analysis/LoopPass.cpp +++ llvm/lib/Analysis/LoopPass.cpp @@ -241,7 +241,8 @@ F.getContext().yield(); } - removeNotPreservedAnalysis(P); + if (LocalChanged) + removeNotPreservedAnalysis(P); recordAvailableAnalysis(P); removeDeadPasses(P, CurrentLoopDeleted ? "" Index: llvm/lib/Analysis/RegionPass.cpp =================================================================== --- llvm/lib/Analysis/RegionPass.cpp +++ llvm/lib/Analysis/RegionPass.cpp @@ -89,16 +89,18 @@ } initializeAnalysisImpl(P); + bool LocalChanged; { PassManagerPrettyStackEntry X(P, *CurrentRegion->getEntry()); TimeRegion PassTimer(getPassTimer(P)); - Changed |= P->runOnRegion(CurrentRegion, *this); + LocalChanged = P->runOnRegion(CurrentRegion, *this); + Changed |= LocalChanged; } if (isPassDebuggingExecutionsOrMore()) { - if (Changed) + if (LocalChanged) dumpPassInfo(P, MODIFICATION_MSG, ON_REGION_MSG, skipThisRegion ? "" : CurrentRegion->getNameStr()); @@ -120,7 +122,8 @@ verifyPreservedAnalysis(P); } - removeNotPreservedAnalysis(P); + if (LocalChanged) + removeNotPreservedAnalysis(P); recordAvailableAnalysis(P); removeDeadPasses(P, (!isPassDebuggingExecutionsOrMore() || skipThisRegion) ?