mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-19 02:42:58 +00:00
OptDiag: Summarize the instruction count in asm-printer
Add an optimization remark to asm-printer that summarizes the number of instructions emitted per function. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296053 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
04ea7c64e2
commit
52ab9f0e65
@ -53,6 +53,7 @@ class MachineInstr;
|
||||
class MachineJumpTableInfo;
|
||||
class MachineLoopInfo;
|
||||
class MachineModuleInfo;
|
||||
class MachineOptimizationRemarkEmitter;
|
||||
class MCAsmInfo;
|
||||
class MCCFIInstruction;
|
||||
class MCContext;
|
||||
@ -93,6 +94,9 @@ public:
|
||||
/// This is a pointer to the current MachineModuleInfo.
|
||||
MachineModuleInfo *MMI = nullptr;
|
||||
|
||||
/// Optimization remark emitter.
|
||||
MachineOptimizationRemarkEmitter *ORE;
|
||||
|
||||
/// The symbol for the current function. This is recalculated at the beginning
|
||||
/// of each call to runOnMachineFunction().
|
||||
///
|
||||
|
@ -45,6 +45,7 @@
|
||||
#include "llvm/CodeGen/MachineMemOperand.h"
|
||||
#include "llvm/CodeGen/MachineModuleInfoImpls.h"
|
||||
#include "llvm/CodeGen/MachineOperand.h"
|
||||
#include "llvm/CodeGen/MachineOptimizationRemarkEmitter.h"
|
||||
#include "llvm/IR/BasicBlock.h"
|
||||
#include "llvm/IR/Constant.h"
|
||||
#include "llvm/IR/Constants.h"
|
||||
@ -213,6 +214,7 @@ void AsmPrinter::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesAll();
|
||||
MachineFunctionPass::getAnalysisUsage(AU);
|
||||
AU.addRequired<MachineModuleInfo>();
|
||||
AU.addRequired<MachineOptimizationRemarkEmitterPass>();
|
||||
AU.addRequired<GCModuleInfo>();
|
||||
if (isVerbose())
|
||||
AU.addRequired<MachineLoopInfo>();
|
||||
@ -925,6 +927,7 @@ void AsmPrinter::EmitFunctionBody() {
|
||||
|
||||
// Print out code for the function.
|
||||
bool HasAnyRealCode = false;
|
||||
int NumInstsInFunction = 0;
|
||||
for (auto &MBB : *MF) {
|
||||
// Print a label for the basic block.
|
||||
EmitBasicBlockStart(MBB);
|
||||
@ -934,7 +937,7 @@ void AsmPrinter::EmitFunctionBody() {
|
||||
if (!MI.isPosition() && !MI.isImplicitDef() && !MI.isKill() &&
|
||||
!MI.isDebugValue()) {
|
||||
HasAnyRealCode = true;
|
||||
++EmittedInsts;
|
||||
++NumInstsInFunction;
|
||||
}
|
||||
|
||||
if (ShouldPrintDebugScopes) {
|
||||
@ -995,6 +998,14 @@ void AsmPrinter::EmitFunctionBody() {
|
||||
EmitBasicBlockEnd(MBB);
|
||||
}
|
||||
|
||||
EmittedInsts += NumInstsInFunction;
|
||||
MachineOptimizationRemarkAnalysis R(DEBUG_TYPE, "InstructionCount",
|
||||
MF->getFunction()->getSubprogram(),
|
||||
&MF->front());
|
||||
R << ore::NV("NumInstructions", NumInstsInFunction)
|
||||
<< " instructions in function";
|
||||
ORE->emit(R);
|
||||
|
||||
// If the function is empty and the object file uses .subsections_via_symbols,
|
||||
// then we need to emit *something* to the function body to prevent the
|
||||
// labels from collapsing together. Just emit a noop.
|
||||
@ -1353,6 +1364,7 @@ void AsmPrinter::SetupMachineFunction(MachineFunction &MF) {
|
||||
CurrentFnSymForSize = CurrentFnBegin;
|
||||
}
|
||||
|
||||
ORE = &getAnalysis<MachineOptimizationRemarkEmitterPass>().getORE();
|
||||
if (isVerbose())
|
||||
LI = &getAnalysis<MachineLoopInfo>();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user