1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 12:12:47 +01:00

[NFC] Optionally pass a function to emitInstrCountChangedRemark

In basic block, loop, and function passes, we already have a function that
we can use to emit optimization remarks. We can use that instead of searching
the module for the first suitable function (that is, one that contains at
least one basic block.)

llvm-svn: 341253
This commit is contained in:
Jessica Paquette 2018-08-31 20:54:37 +00:00
parent 7550fc6490
commit 77c57aa86c
3 changed files with 22 additions and 16 deletions

View File

@ -410,8 +410,10 @@ public:
/// Emit a remark signifying that the number of IR instructions in the module
/// changed.
/// \p F is optionally passed by passes which run on Functions, and thus
/// always know whether or not a non-empty function is available.
void emitInstrCountChangedRemark(Pass *P, Module &M, int64_t Delta,
unsigned CountBefore);
unsigned CountBefore, Function *F = nullptr);
protected:
// Top level manager.

View File

@ -226,7 +226,7 @@ bool LPPassManager::runOnFunction(Function &F) {
if (NewSize != FunctionSize) {
int64_t Delta = static_cast<int64_t>(NewSize) -
static_cast<int64_t>(FunctionSize);
emitInstrCountChangedRemark(P, M, Delta, InstrCount);
emitInstrCountChangedRemark(P, M, Delta, InstrCount, &F);
InstrCount = static_cast<int64_t>(InstrCount) + Delta;
FunctionSize = NewSize;
}

View File

@ -143,7 +143,8 @@ unsigned PMDataManager::initSizeRemarkInfo(Module &M) {
void PMDataManager::emitInstrCountChangedRemark(Pass *P, Module &M,
int64_t Delta,
unsigned CountBefore) {
unsigned CountBefore,
Function *F) {
// If it's a pass manager, don't emit a remark. (This hinges on the assumption
// that the only passes that return non-null with getAsPMDataManager are pass
// managers.) The reason we have to do this is to avoid emitting remarks for
@ -151,19 +152,22 @@ void PMDataManager::emitInstrCountChangedRemark(Pass *P, Module &M,
if (P->getAsPMDataManager())
return;
// We need a function containing at least one basic block in order to output
// remarks. Since it's possible that the first function in the module doesn't
// actually contain a basic block, we have to go and find one that's suitable
// for emitting remarks.
auto It = std::find_if(M.begin(), M.end(),
[](const Function &Fn) { return !Fn.empty(); });
// Do we have a function we can use to emit a remark?
if (F == nullptr) {
// We need a function containing at least one basic block in order to output
// remarks. Since it's possible that the first function in the module
// doesn't actually contain a basic block, we have to go and find one that's
// suitable for emitting remarks.
auto It = std::find_if(M.begin(), M.end(),
[](const Function &Fn) { return !Fn.empty(); });
// Didn't find a function. Quit.
if (It == M.end())
return;
// Didn't find a function. Quit.
if (It == M.end())
return;
// We found a function containing at least one basic block.
Function *F = &*It;
// We found a function containing at least one basic block.
F = &*It;
}
int64_t CountAfter = static_cast<int64_t>(CountBefore) + Delta;
BasicBlock &BB = *F->begin();
OptimizationRemarkAnalysis R("size-info", "IRSizeChange",
@ -1306,7 +1310,7 @@ bool BBPassManager::runOnFunction(Function &F) {
if (NewSize != BBSize) {
int64_t Delta =
static_cast<int64_t>(NewSize) - static_cast<int64_t>(BBSize);
emitInstrCountChangedRemark(BP, M, Delta, InstrCount);
emitInstrCountChangedRemark(BP, M, Delta, InstrCount, &F);
InstrCount = static_cast<int64_t>(InstrCount) + Delta;
BBSize = NewSize;
}
@ -1543,7 +1547,7 @@ bool FPPassManager::runOnFunction(Function &F) {
if (NewSize != FunctionSize) {
int64_t Delta = static_cast<int64_t>(NewSize) -
static_cast<int64_t>(FunctionSize);
emitInstrCountChangedRemark(FP, M, Delta, InstrCount);
emitInstrCountChangedRemark(FP, M, Delta, InstrCount, &F);
InstrCount = static_cast<int64_t>(InstrCount) + Delta;
FunctionSize = NewSize;
}