Index: llvm/trunk/lib/Target/X86/X86PadShortFunction.cpp =================================================================== --- llvm/trunk/lib/Target/X86/X86PadShortFunction.cpp +++ llvm/trunk/lib/Target/X86/X86PadShortFunction.cpp @@ -21,7 +21,7 @@ #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/Passes.h" -#include "llvm/CodeGen/TargetInstrInfo.h" +#include "llvm/CodeGen/TargetSchedule.h" #include "llvm/IR/Function.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" @@ -49,7 +49,7 @@ struct PadShortFunc : public MachineFunctionPass { static char ID; PadShortFunc() : MachineFunctionPass(ID) - , Threshold(4), STI(nullptr), TII(nullptr) {} + , Threshold(4) {} bool runOnMachineFunction(MachineFunction &MF) override; @@ -82,8 +82,7 @@ // VisitedBBs - Cache of previously visited BBs. DenseMap VisitedBBs; - const X86Subtarget *STI; - const TargetInstrInfo *TII; + TargetSchedModel TSM; }; char PadShortFunc::ID = 0; @@ -99,15 +98,13 @@ if (skipFunction(MF.getFunction())) return false; - if (MF.getFunction().optForSize()) { + if (MF.getFunction().optForSize()) return false; - } - STI = &MF.getSubtarget(); - if (!STI->padShortFunctions()) + if (!MF.getSubtarget().padShortFunctions()) return false; - TII = STI->getInstrInfo(); + TSM.init(&MF.getSubtarget()); // Search through basic blocks and mark the ones that have early returns ReturnBBs.clear(); @@ -195,7 +192,7 @@ return true; } - CyclesToEnd += TII->getInstrLatency(STI->getInstrItineraryData(), MI); + CyclesToEnd += TSM.computeInstrLatency(&MI); } VisitedBBs[MBB] = VisitedBBInfo(false, CyclesToEnd); @@ -209,9 +206,8 @@ MachineBasicBlock::iterator &MBBI, unsigned int NOOPsToAdd) { DebugLoc DL = MBBI->getDebugLoc(); + unsigned IssueWidth = TSM.getIssueWidth(); - while (NOOPsToAdd-- > 0) { - BuildMI(*MBB, MBBI, DL, TII->get(X86::NOOP)); - BuildMI(*MBB, MBBI, DL, TII->get(X86::NOOP)); - } + for (unsigned i = 0, e = IssueWidth * NOOPsToAdd; i != e; ++i) + BuildMI(*MBB, MBBI, DL, TSM.getInstrInfo()->get(X86::NOOP)); }