From 2296182181521c0b1803a0cd10b098fcfdab1c92 Mon Sep 17 00:00:00 2001 From: serge-sans-paille Date: Fri, 28 Aug 2020 10:24:48 +0200 Subject: [PATCH] Skip analysis re-computation when no changes are reported This is a follow-up to https://reviews.llvm.org/D80707, generalized to CallGraphSCC, Loop and Region Differential Revision: https://reviews.llvm.org/D86442 --- llvm/lib/Analysis/CallGraphSCCPass.cpp | 3 ++- llvm/lib/Analysis/LoopPass.cpp | 3 ++- llvm/lib/Analysis/RegionPass.cpp | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/llvm/lib/Analysis/CallGraphSCCPass.cpp b/llvm/lib/Analysis/CallGraphSCCPass.cpp index 17dd4dd..2de18fe 100644 --- a/llvm/lib/Analysis/CallGraphSCCPass.cpp +++ b/llvm/lib/Analysis/CallGraphSCCPass.cpp @@ -489,7 +489,8 @@ bool CGPassManager::RunAllPassesOnSCC(CallGraphSCC &CurSCC, CallGraph &CG, dumpPreservedSet(P); verifyPreservedAnalysis(P); - removeNotPreservedAnalysis(P); + if (LocalChanged) + removeNotPreservedAnalysis(P); recordAvailableAnalysis(P); removeDeadPasses(P, "", ON_CG_MSG); } diff --git a/llvm/lib/Analysis/LoopPass.cpp b/llvm/lib/Analysis/LoopPass.cpp index 317b957..50ed1cf 100644 --- a/llvm/lib/Analysis/LoopPass.cpp +++ b/llvm/lib/Analysis/LoopPass.cpp @@ -254,7 +254,8 @@ bool LPPassManager::runOnFunction(Function &F) { F.getContext().yield(); } - removeNotPreservedAnalysis(P); + if (LocalChanged) + removeNotPreservedAnalysis(P); recordAvailableAnalysis(P); removeDeadPasses(P, CurrentLoopDeleted ? "" diff --git a/llvm/lib/Analysis/RegionPass.cpp b/llvm/lib/Analysis/RegionPass.cpp index 1e1971f..ace6824 100644 --- a/llvm/lib/Analysis/RegionPass.cpp +++ b/llvm/lib/Analysis/RegionPass.cpp @@ -135,7 +135,8 @@ bool RGPassManager::runOnFunction(Function &F) { verifyPreservedAnalysis(P); } - removeNotPreservedAnalysis(P); + if (LocalChanged) + removeNotPreservedAnalysis(P); recordAvailableAnalysis(P); removeDeadPasses(P, (!isPassDebuggingExecutionsOrMore() || skipThisRegion) ? -- 2.7.4