mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 22:24:07 +00:00
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
This commit is contained in:
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user