From 872a4c92b24d225cd781b9def6f02aa82b8a5da5 Mon Sep 17 00:00:00 2001 From: Jessica Paquette Date: Fri, 31 Aug 2018 20:20:54 +0000 Subject: [PATCH] [NFC] Pre-calculate loop IR counts in size remarks. Another commit reducing compile time in size remarks. Cache the size of the module and loop, and update values based off of deltas instead. Avoid recalculating the size of the whole module whenever possible. 3/6 llvm-svn: 341247 --- llvm/lib/Analysis/LoopPass.cpp | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/llvm/lib/Analysis/LoopPass.cpp b/llvm/lib/Analysis/LoopPass.cpp index f4f00f0..191d5f0 100644 --- a/llvm/lib/Analysis/LoopPass.cpp +++ b/llvm/lib/Analysis/LoopPass.cpp @@ -194,8 +194,13 @@ bool LPPassManager::runOnFunction(Function &F) { } // Walk Loops - unsigned InstrCount = 0; + unsigned InstrCount, FunctionSize = 0; bool EmitICRemark = M.shouldEmitInstrCountChangedRemark(); + // Collect the initial size of the module and the function we're looking at. + if (EmitICRemark) { + InstrCount = initSizeRemarkInfo(M); + FunctionSize = F.getInstructionCount(); + } while (!LQ.empty()) { CurrentLoopDeleted = false; CurrentLoop = LQ.back(); @@ -213,11 +218,19 @@ bool LPPassManager::runOnFunction(Function &F) { { PassManagerPrettyStackEntry X(P, *CurrentLoop->getHeader()); TimeRegion PassTimer(getPassTimer(P)); - if (EmitICRemark) - InstrCount = initSizeRemarkInfo(M); Changed |= P->runOnLoop(CurrentLoop, *this); - if (EmitICRemark) - emitInstrCountChangedRemark(P, M, InstrCount); + if (EmitICRemark) { + unsigned NewSize = F.getInstructionCount(); + // Update the size of the function, emit a remark, and update the + // size of the module. + if (NewSize != FunctionSize) { + emitInstrCountChangedRemark(P, M, InstrCount); + int64_t Delta = static_cast(NewSize) - + static_cast(FunctionSize); + InstrCount = static_cast(InstrCount) + Delta; + FunctionSize = NewSize; + } + } } if (Changed) -- 2.7.4