mirror of
https://github.com/RPCSX/llvm.git
synced 2025-03-02 18:06:17 +00:00
Add an option to the MI scheduler to cut off scheduling after a fixed number of
instructions have been scheduled. Handy for tracking down scheduler bugs, or bugs exposed by scheduling. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153045 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8c0134a776
commit
23f1cbbd68
@ -39,6 +39,9 @@ static cl::opt<bool> ForceBottomUp("misched-bottomup", cl::Hidden,
|
||||
#ifndef NDEBUG
|
||||
static cl::opt<bool> ViewMISchedDAGs("view-misched-dags", cl::Hidden,
|
||||
cl::desc("Pop up a window to show MISched dags after they are processed"));
|
||||
|
||||
static cl::opt<unsigned> MISchedCutoff("misched-cutoff", cl::Hidden,
|
||||
cl::desc("Stop scheduling after N instructions"), cl::init(~0U));
|
||||
#else
|
||||
static bool ViewMISchedDAGs = false;
|
||||
#endif // NDEBUG
|
||||
@ -281,10 +284,15 @@ class ScheduleDAGMI : public ScheduleDAGInstrs {
|
||||
|
||||
/// The bottom of the unscheduled zone.
|
||||
MachineBasicBlock::iterator CurrentBottom;
|
||||
|
||||
/// The number of instructions scheduled so far. Used to cut off the
|
||||
/// scheduler at the point determined by misched-cutoff.
|
||||
unsigned NumInstrsScheduled;
|
||||
public:
|
||||
ScheduleDAGMI(MachineSchedContext *C, MachineSchedStrategy *S):
|
||||
ScheduleDAGInstrs(*C->MF, *C->MLI, *C->MDT, /*IsPostRA=*/false, C->LIS),
|
||||
AA(C->AA), SchedImpl(S), CurrentTop(), CurrentBottom() {}
|
||||
AA(C->AA), SchedImpl(S), CurrentTop(), CurrentBottom(),
|
||||
NumInstrsScheduled(0) {}
|
||||
|
||||
~ScheduleDAGMI() {
|
||||
delete SchedImpl;
|
||||
@ -398,6 +406,16 @@ void ScheduleDAGMI::schedule() {
|
||||
CurrentBottom = RegionEnd;
|
||||
bool IsTopNode = false;
|
||||
while (SUnit *SU = SchedImpl->pickNode(IsTopNode)) {
|
||||
|
||||
#ifndef NDEBUG
|
||||
// Enable break
|
||||
if (NumInstrsScheduled == MISchedCutoff && MISchedCutoff != ~0U) {
|
||||
CurrentTop = CurrentBottom;
|
||||
break;
|
||||
}
|
||||
++NumInstrsScheduled;
|
||||
#endif
|
||||
|
||||
DEBUG(dbgs() << "*** " << (IsTopNode ? "Top" : "Bottom")
|
||||
<< " Scheduling Instruction:\n"; SU->dump(this));
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user