Give NamedRegionTimer an Enabled flag, allowing all its clients to

switch from this:

  if (TimePassesIsEnabled) {
    NamedRegionTimer T(Name, GroupName);
    do_something();
  } else {
    do_something(); // duplicate the code, this time without a timer!
  }

to this:

  {
    NamedRegionTimer T(Name, GroupName, TimePassesIsEnabled);
    do_something();
  }


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106285 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman
2010-06-18 15:56:31 +00:00
parent 27445f0375
commit 03c3dc7b68
5 changed files with 57 additions and 103 deletions

View File

@ -150,8 +150,10 @@ public:
/// is primarily used for debugging and for hunting performance problems. /// is primarily used for debugging and for hunting performance problems.
/// ///
struct NamedRegionTimer : public TimeRegion { struct NamedRegionTimer : public TimeRegion {
explicit NamedRegionTimer(StringRef Name); explicit NamedRegionTimer(StringRef Name,
explicit NamedRegionTimer(StringRef Name, StringRef GroupName); bool Enabled = true);
explicit NamedRegionTimer(StringRef Name, StringRef GroupName,
bool Enabled = true);
}; };

View File

@ -427,20 +427,12 @@ void AsmPrinter::EmitFunctionHeader() {
// Emit pre-function debug and/or EH information. // Emit pre-function debug and/or EH information.
if (DE) { if (DE) {
if (TimePassesIsEnabled) { NamedRegionTimer T(EHTimerName, DWARFGroupName, TimePassesIsEnabled);
NamedRegionTimer T(EHTimerName, DWARFGroupName);
DE->BeginFunction(MF); DE->BeginFunction(MF);
} else {
DE->BeginFunction(MF);
}
} }
if (DD) { if (DD) {
if (TimePassesIsEnabled) { NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
NamedRegionTimer T(DbgTimerName, DWARFGroupName);
DD->beginFunction(MF); DD->beginFunction(MF);
} else {
DD->beginFunction(MF);
}
} }
} }
@ -610,12 +602,8 @@ void AsmPrinter::EmitFunctionBody() {
} }
if (ShouldPrintDebugScopes) { if (ShouldPrintDebugScopes) {
if (TimePassesIsEnabled) { NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
NamedRegionTimer T(DbgTimerName, DWARFGroupName);
DD->beginScope(II); DD->beginScope(II);
} else {
DD->beginScope(II);
}
} }
if (isVerbose()) if (isVerbose())
@ -648,12 +636,8 @@ void AsmPrinter::EmitFunctionBody() {
} }
if (ShouldPrintDebugScopes) { if (ShouldPrintDebugScopes) {
if (TimePassesIsEnabled) { NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
NamedRegionTimer T(DbgTimerName, DWARFGroupName);
DD->endScope(II); DD->endScope(II);
} else {
DD->endScope(II);
}
} }
} }
} }
@ -691,20 +675,12 @@ void AsmPrinter::EmitFunctionBody() {
// Emit post-function debug information. // Emit post-function debug information.
if (DD) { if (DD) {
if (TimePassesIsEnabled) { NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
NamedRegionTimer T(DbgTimerName, DWARFGroupName);
DD->endFunction(MF); DD->endFunction(MF);
} else {
DD->endFunction(MF);
}
} }
if (DE) { if (DE) {
if (TimePassesIsEnabled) { NamedRegionTimer T(EHTimerName, DWARFGroupName, TimePassesIsEnabled);
NamedRegionTimer T(EHTimerName, DWARFGroupName);
DE->EndFunction(); DE->EndFunction();
} else {
DE->EndFunction();
}
} }
MMI->EndFunction(); MMI->EndFunction();
@ -729,19 +705,15 @@ bool AsmPrinter::doFinalization(Module &M) {
// Finalize debug and EH information. // Finalize debug and EH information.
if (DE) { if (DE) {
if (TimePassesIsEnabled) { {
NamedRegionTimer T(EHTimerName, DWARFGroupName); NamedRegionTimer T(EHTimerName, DWARFGroupName, TimePassesIsEnabled);
DE->EndModule();
} else {
DE->EndModule(); DE->EndModule();
} }
delete DE; DE = 0; delete DE; DE = 0;
} }
if (DD) { if (DD) {
if (TimePassesIsEnabled) { {
NamedRegionTimer T(DbgTimerName, DWARFGroupName); NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
DD->endModule();
} else {
DD->endModule(); DD->endModule();
} }
delete DD; DD = 0; delete DD; DD = 0;

View File

@ -322,10 +322,8 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
DwarfStrSectionSym = TextSectionSym = 0; DwarfStrSectionSym = TextSectionSym = 0;
DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = 0; DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = 0;
FunctionBeginSym = FunctionEndSym = 0; FunctionBeginSym = FunctionEndSym = 0;
if (TimePassesIsEnabled) { {
NamedRegionTimer T(DbgTimerName, DWARFGroupName); NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
beginModule(M);
} else {
beginModule(M); beginModule(M);
} }
} }

View File

@ -443,10 +443,8 @@ MachineBasicBlock *SelectionDAGISel::CodeGenAndEmitDAG(MachineBasicBlock *BB) {
if (ViewDAGCombine1) CurDAG->viewGraph("dag-combine1 input for " + BlockName); if (ViewDAGCombine1) CurDAG->viewGraph("dag-combine1 input for " + BlockName);
// Run the DAG combiner in pre-legalize mode. // Run the DAG combiner in pre-legalize mode.
if (TimePassesIsEnabled) { {
NamedRegionTimer T("DAG Combining 1", GroupName); NamedRegionTimer T("DAG Combining 1", GroupName, TimePassesIsEnabled);
CurDAG->Combine(Unrestricted, *AA, OptLevel);
} else {
CurDAG->Combine(Unrestricted, *AA, OptLevel); CurDAG->Combine(Unrestricted, *AA, OptLevel);
} }
@ -459,10 +457,8 @@ MachineBasicBlock *SelectionDAGISel::CodeGenAndEmitDAG(MachineBasicBlock *BB) {
BlockName); BlockName);
bool Changed; bool Changed;
if (TimePassesIsEnabled) { {
NamedRegionTimer T("Type Legalization", GroupName); NamedRegionTimer T("Type Legalization", GroupName, TimePassesIsEnabled);
Changed = CurDAG->LegalizeTypes();
} else {
Changed = CurDAG->LegalizeTypes(); Changed = CurDAG->LegalizeTypes();
} }
@ -474,10 +470,9 @@ MachineBasicBlock *SelectionDAGISel::CodeGenAndEmitDAG(MachineBasicBlock *BB) {
CurDAG->viewGraph("dag-combine-lt input for " + BlockName); CurDAG->viewGraph("dag-combine-lt input for " + BlockName);
// Run the DAG combiner in post-type-legalize mode. // Run the DAG combiner in post-type-legalize mode.
if (TimePassesIsEnabled) { {
NamedRegionTimer T("DAG Combining after legalize types", GroupName); NamedRegionTimer T("DAG Combining after legalize types", GroupName,
CurDAG->Combine(NoIllegalTypes, *AA, OptLevel); TimePassesIsEnabled);
} else {
CurDAG->Combine(NoIllegalTypes, *AA, OptLevel); CurDAG->Combine(NoIllegalTypes, *AA, OptLevel);
} }
@ -485,18 +480,14 @@ MachineBasicBlock *SelectionDAGISel::CodeGenAndEmitDAG(MachineBasicBlock *BB) {
DEBUG(CurDAG->dump()); DEBUG(CurDAG->dump());
} }
if (TimePassesIsEnabled) { {
NamedRegionTimer T("Vector Legalization", GroupName); NamedRegionTimer T("Vector Legalization", GroupName, TimePassesIsEnabled);
Changed = CurDAG->LegalizeVectors();
} else {
Changed = CurDAG->LegalizeVectors(); Changed = CurDAG->LegalizeVectors();
} }
if (Changed) { if (Changed) {
if (TimePassesIsEnabled) { {
NamedRegionTimer T("Type Legalization 2", GroupName); NamedRegionTimer T("Type Legalization 2", GroupName, TimePassesIsEnabled);
CurDAG->LegalizeTypes();
} else {
CurDAG->LegalizeTypes(); CurDAG->LegalizeTypes();
} }
@ -504,10 +495,9 @@ MachineBasicBlock *SelectionDAGISel::CodeGenAndEmitDAG(MachineBasicBlock *BB) {
CurDAG->viewGraph("dag-combine-lv input for " + BlockName); CurDAG->viewGraph("dag-combine-lv input for " + BlockName);
// Run the DAG combiner in post-type-legalize mode. // Run the DAG combiner in post-type-legalize mode.
if (TimePassesIsEnabled) { {
NamedRegionTimer T("DAG Combining after legalize vectors", GroupName); NamedRegionTimer T("DAG Combining after legalize vectors", GroupName,
CurDAG->Combine(NoIllegalOperations, *AA, OptLevel); TimePassesIsEnabled);
} else {
CurDAG->Combine(NoIllegalOperations, *AA, OptLevel); CurDAG->Combine(NoIllegalOperations, *AA, OptLevel);
} }
@ -517,10 +507,8 @@ MachineBasicBlock *SelectionDAGISel::CodeGenAndEmitDAG(MachineBasicBlock *BB) {
if (ViewLegalizeDAGs) CurDAG->viewGraph("legalize input for " + BlockName); if (ViewLegalizeDAGs) CurDAG->viewGraph("legalize input for " + BlockName);
if (TimePassesIsEnabled) { {
NamedRegionTimer T("DAG Legalization", GroupName); NamedRegionTimer T("DAG Legalization", GroupName, TimePassesIsEnabled);
CurDAG->Legalize(OptLevel);
} else {
CurDAG->Legalize(OptLevel); CurDAG->Legalize(OptLevel);
} }
@ -530,10 +518,8 @@ MachineBasicBlock *SelectionDAGISel::CodeGenAndEmitDAG(MachineBasicBlock *BB) {
if (ViewDAGCombine2) CurDAG->viewGraph("dag-combine2 input for " + BlockName); if (ViewDAGCombine2) CurDAG->viewGraph("dag-combine2 input for " + BlockName);
// Run the DAG combiner in post-legalize mode. // Run the DAG combiner in post-legalize mode.
if (TimePassesIsEnabled) { {
NamedRegionTimer T("DAG Combining 2", GroupName); NamedRegionTimer T("DAG Combining 2", GroupName, TimePassesIsEnabled);
CurDAG->Combine(NoIllegalOperations, *AA, OptLevel);
} else {
CurDAG->Combine(NoIllegalOperations, *AA, OptLevel); CurDAG->Combine(NoIllegalOperations, *AA, OptLevel);
} }
@ -547,10 +533,8 @@ MachineBasicBlock *SelectionDAGISel::CodeGenAndEmitDAG(MachineBasicBlock *BB) {
// Third, instruction select all of the operations to machine code, adding the // Third, instruction select all of the operations to machine code, adding the
// code to the MachineBasicBlock. // code to the MachineBasicBlock.
if (TimePassesIsEnabled) { {
NamedRegionTimer T("Instruction Selection", GroupName); NamedRegionTimer T("Instruction Selection", GroupName, TimePassesIsEnabled);
DoInstructionSelection();
} else {
DoInstructionSelection(); DoInstructionSelection();
} }
@ -561,10 +545,9 @@ MachineBasicBlock *SelectionDAGISel::CodeGenAndEmitDAG(MachineBasicBlock *BB) {
// Schedule machine code. // Schedule machine code.
ScheduleDAGSDNodes *Scheduler = CreateScheduler(); ScheduleDAGSDNodes *Scheduler = CreateScheduler();
if (TimePassesIsEnabled) { {
NamedRegionTimer T("Instruction Scheduling", GroupName); NamedRegionTimer T("Instruction Scheduling", GroupName,
Scheduler->Run(CurDAG, BB, BB->end()); TimePassesIsEnabled);
} else {
Scheduler->Run(CurDAG, BB, BB->end()); Scheduler->Run(CurDAG, BB, BB->end());
} }
@ -572,18 +555,15 @@ MachineBasicBlock *SelectionDAGISel::CodeGenAndEmitDAG(MachineBasicBlock *BB) {
// Emit machine code to BB. This can change 'BB' to the last block being // Emit machine code to BB. This can change 'BB' to the last block being
// inserted into. // inserted into.
if (TimePassesIsEnabled) { {
NamedRegionTimer T("Instruction Creation", GroupName); NamedRegionTimer T("Instruction Creation", GroupName, TimePassesIsEnabled);
BB = Scheduler->EmitSchedule();
} else {
BB = Scheduler->EmitSchedule(); BB = Scheduler->EmitSchedule();
} }
// Free the scheduler state. // Free the scheduler state.
if (TimePassesIsEnabled) { {
NamedRegionTimer T("Instruction Scheduling Cleanup", GroupName); NamedRegionTimer T("Instruction Scheduling Cleanup", GroupName,
delete Scheduler; TimePassesIsEnabled);
} else {
delete Scheduler; delete Scheduler;
} }

View File

@ -236,11 +236,13 @@ static Timer &getNamedRegionTimer(StringRef Name) {
return T; return T;
} }
NamedRegionTimer::NamedRegionTimer(StringRef Name) NamedRegionTimer::NamedRegionTimer(StringRef Name,
: TimeRegion(getNamedRegionTimer(Name)) {} bool Enabled)
: TimeRegion(!Enabled ? 0 : &getNamedRegionTimer(Name)) {}
NamedRegionTimer::NamedRegionTimer(StringRef Name, StringRef GroupName) NamedRegionTimer::NamedRegionTimer(StringRef Name, StringRef GroupName,
: TimeRegion(NamedGroupedTimers->get(Name, GroupName)) {} bool Enabled)
: TimeRegion(!Enabled ? 0 : &NamedGroupedTimers->get(Name, GroupName)) {}
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// TimerGroup Implementation // TimerGroup Implementation