1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 19:52:54 +01:00

[NFC] Pre-calculate function IR counts in size remarks.

Size remarks are slow due to lots of recalculation of the module.

Pre-calculate the module size and initial function size for a remark. Use
deltas calculated using the less-expensive function IR count to update the
module counts for Function passes.

1/6

llvm-svn: 341245
This commit is contained in:
Jessica Paquette 2018-08-31 20:19:41 +00:00
parent ef5a14b22c
commit 576c480097

View File

@ -1510,8 +1510,14 @@ bool FPPassManager::runOnFunction(Function &F) {
// Collect inherited analysis from Module level pass manager.
populateInheritedAnalysis(TPM->activeStack);
unsigned InstrCount = 0;
unsigned InstrCount, FunctionSize = 0;
bool EmitICRemark = M.shouldEmitInstrCountChangedRemark();
// Collect the initial size of the module.
if (EmitICRemark) {
InstrCount = initSizeRemarkInfo(M);
FunctionSize = F.getInstructionCount();
}
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
FunctionPass *FP = getContainedPass(Index);
bool LocalChanged = false;
@ -1524,11 +1530,20 @@ bool FPPassManager::runOnFunction(Function &F) {
{
PassManagerPrettyStackEntry X(FP, F);
TimeRegion PassTimer(getPassTimer(FP));
if (EmitICRemark)
InstrCount = initSizeRemarkInfo(M);
LocalChanged |= FP->runOnFunction(F);
if (EmitICRemark)
emitInstrCountChangedRemark(FP, 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(FP, M, InstrCount);
int64_t Delta = static_cast<int64_t>(NewSize) -
static_cast<int64_t>(FunctionSize);
InstrCount = static_cast<int64_t>(InstrCount) + Delta;
FunctionSize = NewSize;
}
}
}
Changed |= LocalChanged;