diff options
| author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-08-08 18:19:58 +0000 |
|---|---|---|
| committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-08-08 18:19:58 +0000 |
| commit | e71b6c6b209fa4266fc12b525f139f0b4eac9822 (patch) | |
| tree | f55b71078d5ca5d5454b239c033207db66f01c5d /llvm/lib/CodeGen | |
| parent | 661d7ff913a07ac12b89b3864855f86cb5d9e062 (diff) | |
| download | bcm5719-llvm-e71b6c6b209fa4266fc12b525f139f0b4eac9822.tar.gz bcm5719-llvm-e71b6c6b209fa4266fc12b525f139f0b4eac9822.zip | |
Get the MispredictPenalty from MCSchedModel.
Thanks, Andy!
llvm-svn: 161507
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/EarlyIfConversion.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/llvm/lib/CodeGen/EarlyIfConversion.cpp b/llvm/lib/CodeGen/EarlyIfConversion.cpp index 8adaa6dd0bf..0db442a3bc6 100644 --- a/llvm/lib/CodeGen/EarlyIfConversion.cpp +++ b/llvm/lib/CodeGen/EarlyIfConversion.cpp @@ -31,6 +31,7 @@ #include "llvm/CodeGen/MachineLoopInfo.h" #include "llvm/CodeGen/MachineRegisterInfo.h" #include "llvm/CodeGen/Passes.h" +#include "llvm/MC/MCInstrItineraries.h" #include "llvm/Target/TargetInstrInfo.h" #include "llvm/Target/TargetRegisterInfo.h" #include "llvm/Support/CommandLine.h" @@ -513,6 +514,7 @@ namespace { class EarlyIfConverter : public MachineFunctionPass { const TargetInstrInfo *TII; const TargetRegisterInfo *TRI; + const MCSchedModel *SchedModel; MachineRegisterInfo *MRI; MachineDominatorTree *DomTree; MachineLoopInfo *Loops; @@ -602,9 +604,6 @@ bool EarlyIfConverter::shouldConvertIf() { if (!MinInstr) MinInstr = Traces->getEnsemble(MachineTraceMetrics::TS_MinInstrCount); - // MCSchedModel doesn't yet provide a misprediction penalty. - unsigned MispredictPenalty = 10; - // Compare the critical path through TBB and FBB. If the difference is // greater than the branch misprediction penalty, it would never pay to // if-convert. The triangle/diamond topology guarantees that these traces @@ -615,8 +614,9 @@ bool EarlyIfConverter::shouldConvertIf() { unsigned TBBCrit = TBBTrace.getCriticalPath(); unsigned FBBCrit = FBBTrace.getCriticalPath(); unsigned ExtraCrit = TBBCrit > FBBCrit ? TBBCrit-FBBCrit : FBBCrit-TBBCrit; - if (ExtraCrit >= MispredictPenalty) { - DEBUG(dbgs() << "Critical path difference too large.\n"); + if (ExtraCrit >= SchedModel->MispredictPenalty) { + DEBUG(dbgs() << "Critical path difference larger than " + << SchedModel->MispredictPenalty << ".\n"); return false; } return true; @@ -644,6 +644,7 @@ bool EarlyIfConverter::runOnMachineFunction(MachineFunction &MF) { << ((Value*)MF.getFunction())->getName() << '\n'); TII = MF.getTarget().getInstrInfo(); TRI = MF.getTarget().getRegisterInfo(); + SchedModel = MF.getTarget().getInstrItineraryData()->SchedModel; MRI = &MF.getRegInfo(); DomTree = &getAnalysis<MachineDominatorTree>(); Loops = getAnalysisIfAvailable<MachineLoopInfo>(); |

