From: Jakob Stoklund Olesen Date: Wed, 8 Aug 2012 18:19:58 +0000 (+0000) Subject: Get the MispredictPenalty from MCSchedModel. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0fac6aa076450f5474feb2ec697b7d63d33fa567;p=oota-llvm.git Get the MispredictPenalty from MCSchedModel. Thanks, Andy! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161507 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/EarlyIfConversion.cpp b/lib/CodeGen/EarlyIfConversion.cpp index 8adaa6dd0bf..0db442a3bc6 100644 --- a/lib/CodeGen/EarlyIfConversion.cpp +++ b/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(); Loops = getAnalysisIfAvailable();