diff options
author | Andrew Trick <atrick@apple.com> | 2012-02-22 06:08:11 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2012-02-22 06:08:11 +0000 |
commit | b4566a999970b514d7c6973d99e293a6625d3f70 (patch) | |
tree | e1dab12fabb7e460c56467210a23c15d87138e2f /lib/CodeGen/MachineScheduler.cpp | |
parent | 44d23825d61d530b8d562329ec8fc2d4f843bb8d (diff) |
Initialize SUnits before DAG building.
Affect on SD scheduling and postRA scheduling:
Printing the DAG will display the nodes in top-down topological order.
This matches the order within the MBB and makes my life much easier in general.
Affect on misched:
We don't need to track virtual register uses at all. This is awesome.
I also intend to rely on the SUnit ID as a topo-sort index. So if A < B then we cannot have an edge B -> A.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151135 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/MachineScheduler.cpp')
-rw-r--r-- | lib/CodeGen/MachineScheduler.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/CodeGen/MachineScheduler.cpp b/lib/CodeGen/MachineScheduler.cpp index 6034c9082c..8a485e0fde 100644 --- a/lib/CodeGen/MachineScheduler.cpp +++ b/lib/CodeGen/MachineScheduler.cpp @@ -149,7 +149,8 @@ protected: MachineScheduler *Pass; public: ScheduleTopDownLive(MachineScheduler *P): - ScheduleDAGInstrs(*P->MF, *P->MLI, *P->MDT, /*IsPostRA=*/false), Pass(P) {} + ScheduleDAGInstrs(*P->MF, *P->MLI, *P->MDT, /*IsPostRA=*/false, P->LIS), + Pass(P) {} /// ScheduleDAGInstrs callback. void Schedule(); @@ -310,7 +311,8 @@ class DefaultMachineScheduler : public ScheduleDAGInstrs { MachineScheduler *Pass; public: DefaultMachineScheduler(MachineScheduler *P): - ScheduleDAGInstrs(*P->MF, *P->MLI, *P->MDT, /*IsPostRA=*/false), Pass(P) {} + ScheduleDAGInstrs(*P->MF, *P->MLI, *P->MDT, /*IsPostRA=*/false, P->LIS), + Pass(P) {} /// Schedule - This is called back from ScheduleDAGInstrs::Run() when it's /// time to do some work. @@ -348,15 +350,14 @@ void DefaultMachineScheduler::Schedule() { #ifndef NDEBUG namespace { -// Nodes with a higher number have lower priority. This way we attempt to +// Nodes with a higher number have higher priority. This way we attempt to // schedule the latest instructions earliest. // // TODO: Relies on the property of the BuildSchedGraph that results in SUnits -// being ordered in sequence bottom-up. This will be formalized, probably be -// constructing SUnits in a prepass. +// being ordered in sequence top-down. struct ShuffleSUnitOrder { bool operator()(SUnit *A, SUnit *B) const { - return A->NodeNum > B->NodeNum; + return A->NodeNum < B->NodeNum; } }; |