forked from OSchip/llvm-project
[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:
parent
9eda13e976
commit
872a4c92b2
|
@ -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<int64_t>(NewSize) -
|
||||
static_cast<int64_t>(FunctionSize);
|
||||
InstrCount = static_cast<int64_t>(InstrCount) + Delta;
|
||||
FunctionSize = NewSize;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Changed)
|
||||
|
|
Loading…
Reference in New Issue