From c9a5b9e38b442c2ae6b115213a07df3fcd14708d Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Tue, 23 Dec 2008 18:36:58 +0000 Subject: [PATCH] Rename BuildSchedUnits to BuildSchedGraph, and refactor the code in ScheduleDAGSDNodes' BuildSchedGraph into separate functions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61376 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/ScheduleDAG.h | 4 ++-- include/llvm/CodeGen/ScheduleDAGInstrs.h | 4 ++-- include/llvm/CodeGen/ScheduleDAGSDNodes.h | 13 +++++++++---- lib/CodeGen/PostRASchedulerList.cpp | 6 +++--- lib/CodeGen/ScheduleDAGInstrs.cpp | 2 +- lib/CodeGen/SelectionDAG/ScheduleDAGFast.cpp | 4 ++-- lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp | 4 ++-- lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp | 4 ++-- .../SelectionDAG/ScheduleDAGSDNodes.cpp | 18 ++++++++++++++---- 9 files changed, 37 insertions(+), 22 deletions(-) diff --git a/include/llvm/CodeGen/ScheduleDAG.h b/include/llvm/CodeGen/ScheduleDAG.h index b90e5254ffd..03d11e2d828 100644 --- a/include/llvm/CodeGen/ScheduleDAG.h +++ b/include/llvm/CodeGen/ScheduleDAG.h @@ -442,10 +442,10 @@ namespace llvm { /// void Run(); - /// BuildSchedUnits - Build SUnits and set up their Preds and Succs + /// BuildSchedGraph - Build SUnits and set up their Preds and Succs /// to form the scheduling dependency graph. /// - virtual void BuildSchedUnits() = 0; + virtual void BuildSchedGraph() = 0; /// ComputeLatency - Compute node latency. /// diff --git a/include/llvm/CodeGen/ScheduleDAGInstrs.h b/include/llvm/CodeGen/ScheduleDAGInstrs.h index cfea3e08895..96d3f0f212a 100644 --- a/include/llvm/CodeGen/ScheduleDAGInstrs.h +++ b/include/llvm/CodeGen/ScheduleDAGInstrs.h @@ -45,9 +45,9 @@ namespace llvm { return &SUnits.back(); } - /// BuildSchedUnits - Build SUnits from the MachineBasicBlock that we are + /// BuildSchedGraph - Build SUnits from the MachineBasicBlock that we are /// input. - virtual void BuildSchedUnits(); + virtual void BuildSchedGraph(); /// ComputeLatency - Compute node latency. /// diff --git a/include/llvm/CodeGen/ScheduleDAGSDNodes.h b/include/llvm/CodeGen/ScheduleDAGSDNodes.h index b3ec2807d77..d7f0ea49d48 100644 --- a/include/llvm/CodeGen/ScheduleDAGSDNodes.h +++ b/include/llvm/CodeGen/ScheduleDAGSDNodes.h @@ -118,10 +118,11 @@ namespace llvm { virtual SelectionDAG *getDAG() { return DAG; } - /// BuildSchedUnits - Build SUnits from the selection dag that we are input. - /// This SUnit graph is similar to the SelectionDAG, but represents flagged - /// together nodes with a single SUnit. - virtual void BuildSchedUnits(); + /// BuildSchedGraph - Build the SUnit graph from the selection dag that we + /// are input. This SUnit graph is similar to the SelectionDAG, but + /// excludes nodes that aren't interesting to scheduling, and represents + /// flagged together nodes with a single SUnit. + virtual void BuildSchedGraph(); /// ComputeLatency - Compute node latency. /// @@ -189,6 +190,10 @@ namespace llvm { void CreateVirtualRegisters(SDNode *Node, MachineInstr *MI, const TargetInstrDesc &II, DenseMap &VRBaseMap); + + /// BuildSchedUnits, AddSchedEdges - Helper functions for BuildSchedGraph. + void BuildSchedUnits(); + void AddSchedEdges(); }; } diff --git a/lib/CodeGen/PostRASchedulerList.cpp b/lib/CodeGen/PostRASchedulerList.cpp index 18a073c44ec..dc11400094c 100644 --- a/lib/CodeGen/PostRASchedulerList.cpp +++ b/lib/CodeGen/PostRASchedulerList.cpp @@ -121,8 +121,8 @@ bool PostRAScheduler::runOnMachineFunction(MachineFunction &Fn) { void SchedulePostRATDList::Schedule() { DOUT << "********** List Scheduling **********\n"; - // Build scheduling units. - BuildSchedUnits(); + // Build the scheduling graph. + BuildSchedGraph(); if (EnableAntiDepBreaking) { if (BreakAntiDependencies()) { @@ -133,7 +133,7 @@ void SchedulePostRATDList::Schedule() { // that register, and add new anti-dependence and output-dependence // edges based on the next live range of the register. SUnits.clear(); - BuildSchedUnits(); + BuildSchedGraph(); } } diff --git a/lib/CodeGen/ScheduleDAGInstrs.cpp b/lib/CodeGen/ScheduleDAGInstrs.cpp index c47dddaf189..8cff5b55585 100644 --- a/lib/CodeGen/ScheduleDAGInstrs.cpp +++ b/lib/CodeGen/ScheduleDAGInstrs.cpp @@ -89,7 +89,7 @@ ScheduleDAGInstrs::ScheduleDAGInstrs(MachineBasicBlock *bb, const MachineDominatorTree &mdt) : ScheduleDAG(0, bb, tm), MLI(mli), MDT(mdt) {} -void ScheduleDAGInstrs::BuildSchedUnits() { +void ScheduleDAGInstrs::BuildSchedGraph() { SUnits.clear(); SUnits.reserve(BB->size()); diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAGFast.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAGFast.cpp index d917386967c..113dfb1751d 100644 --- a/lib/CodeGen/SelectionDAG/ScheduleDAGFast.cpp +++ b/lib/CodeGen/SelectionDAG/ScheduleDAGFast.cpp @@ -114,8 +114,8 @@ void ScheduleDAGFast::Schedule() { LiveRegDefs.resize(TRI->getNumRegs(), NULL); LiveRegCycles.resize(TRI->getNumRegs(), 0); - // Build scheduling units. - BuildSchedUnits(); + // Build the scheduling graph. + BuildSchedGraph(); DEBUG(for (unsigned su = 0, e = SUnits.size(); su != e; ++su) SUnits[su].dumpAll(this)); diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp index d42c8d88673..fea74ca3038 100644 --- a/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp +++ b/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp @@ -91,8 +91,8 @@ HazardRecognizer::~HazardRecognizer() {} void ScheduleDAGList::Schedule() { DOUT << "********** List Scheduling **********\n"; - // Build scheduling units. - BuildSchedUnits(); + // Build the scheduling graph. + BuildSchedGraph(); AvailableQueue->initNodes(SUnits); diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp index c3b6137ae36..aededf44440 100644 --- a/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp +++ b/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp @@ -170,8 +170,8 @@ void ScheduleDAGRRList::Schedule() { LiveRegDefs.resize(TRI->getNumRegs(), NULL); LiveRegCycles.resize(TRI->getNumRegs(), 0); - // Build scheduling units. - BuildSchedUnits(); + // Build the scheduling graph. + BuildSchedGraph(); DEBUG(for (unsigned su = 0, e = SUnits.size(); su != e; ++su) SUnits[su].dumpAll(this)); diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp index 4a7920acedb..347410ae7d6 100644 --- a/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp +++ b/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp @@ -64,9 +64,6 @@ static void CheckForPhysRegDependency(SDNode *Def, SDNode *User, unsigned Op, } } -/// BuildSchedUnits - Build SUnits from the selection dag that we are input. -/// This SUnit graph is similar to the SelectionDAG, but represents flagged -/// together nodes with a single SUnit. void ScheduleDAGSDNodes::BuildSchedUnits() { // During scheduling, the NodeId field of SDNode is used to map SDNodes // to their associated SUnits by holding SUnits table indices. A value @@ -146,7 +143,9 @@ void ScheduleDAGSDNodes::BuildSchedUnits() { else ComputeLatency(NodeSUnit); } - +} + +void ScheduleDAGSDNodes::AddSchedEdges() { // Pass 2: add the preds, succs, etc. for (unsigned su = 0, e = SUnits.size(); su != e; ++su) { SUnit *SU = &SUnits[su]; @@ -196,6 +195,17 @@ void ScheduleDAGSDNodes::BuildSchedUnits() { } } +/// BuildSchedGraph - Build the SUnit graph from the selection dag that we +/// are input. This SUnit graph is similar to the SelectionDAG, but +/// excludes nodes that aren't interesting to scheduling, and represents +/// flagged together nodes with a single SUnit. +void ScheduleDAGSDNodes::BuildSchedGraph() { + // Populate the SUnits array. + BuildSchedUnits(); + // Compute all the scheduling dependencies between nodes. + AddSchedEdges(); +} + void ScheduleDAGSDNodes::ComputeLatency(SUnit *SU) { const InstrItineraryData &InstrItins = TM.getInstrItineraryData();