Add flag to control whether or not delay slots are filled during

instruction scheduling (this is off by default).

llvm-svn: 8553
This commit is contained in:
Vikram S. Adve 2003-09-16 05:55:15 +00:00
parent 67fdd43bff
commit 8579a9a38c
1 changed files with 7 additions and 1 deletions

View File

@ -17,6 +17,9 @@
SchedDebugLevel_t SchedDebugLevel; SchedDebugLevel_t SchedDebugLevel;
static cl::opt<bool> EnableFillingDelaySlots("sched-fill-delay-slots",
cl::desc("Fill branch delay slots during local scheduling"));
static cl::opt<SchedDebugLevel_t, true> static cl::opt<SchedDebugLevel_t, true>
SDL_opt("dsched", cl::Hidden, cl::location(SchedDebugLevel), SDL_opt("dsched", cl::Hidden, cl::location(SchedDebugLevel),
cl::desc("enable instruction scheduling debugging information"), cl::desc("enable instruction scheduling debugging information"),
@ -1255,7 +1258,8 @@ ChooseInstructionsForDelaySlots(SchedulingManager& S, MachineBasicBlock &MBB,
std::vector<SchedGraphNode*> delayNodeVec; std::vector<SchedGraphNode*> delayNodeVec;
const MachineInstr* brInstr = NULL; const MachineInstr* brInstr = NULL;
if (termInstr->getOpcode() != Instruction::Ret) if (EnableFillingDelaySlots &&
termInstr->getOpcode() != Instruction::Ret)
{ {
// To find instructions that need delay slots without searching the full // To find instructions that need delay slots without searching the full
// machine code, we assume that the only delayed instructions are CALLs // machine code, we assume that the only delayed instructions are CALLs
@ -1285,6 +1289,8 @@ ChooseInstructionsForDelaySlots(SchedulingManager& S, MachineBasicBlock &MBB,
// Also mark delay slots for other delayed instructions to hold NOPs. // Also mark delay slots for other delayed instructions to hold NOPs.
// Simply passing in an empty delayNodeVec will have this effect. // Simply passing in an empty delayNodeVec will have this effect.
// If brInstr is not handled above (EnableFillingDelaySlots == false),
// brInstr will be NULL so this will handle the branch instrs. as well.
// //
delayNodeVec.clear(); delayNodeVec.clear();
for (unsigned i=0; i < MBB.size(); ++i) for (unsigned i=0; i < MBB.size(); ++i)