[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
This commit is contained in:
Jessica Paquette 2018-08-31 20:20:54 +00:00
parent 9eda13e976
commit 872a4c92b2
1 changed files with 18 additions and 5 deletions

View File

@ -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)
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<int64_t>(NewSize) -
static_cast<int64_t>(FunctionSize);
InstrCount = static_cast<int64_t>(InstrCount) + Delta;
FunctionSize = NewSize;
}
}
}
if (Changed)