diff options
author | David Goodwin <david_goodwin@apple.com> | 2009-08-19 16:08:58 +0000 |
---|---|---|
committer | David Goodwin <david_goodwin@apple.com> | 2009-08-19 16:08:58 +0000 |
commit | dc4bdcdef1c8dd1a28b82deb08df039e5c0ffc5a (patch) | |
tree | 04180f2fa8fa18847ed96566e292e20b73099084 /lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp | |
parent | 774350a60694fee45403d87b5edfeff27ac54d58 (diff) | |
download | llvm-dc4bdcdef1c8dd1a28b82deb08df039e5c0ffc5a.tar.gz llvm-dc4bdcdef1c8dd1a28b82deb08df039e5c0ffc5a.tar.bz2 llvm-dc4bdcdef1c8dd1a28b82deb08df039e5c0ffc5a.tar.xz |
Use the schedule itinerary operand use/def cycle information to adjust dependence edge latency for post-RA scheduling.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79425 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp')
-rw-r--r-- | lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp index ca4ba565d4..a580b93c83 100644 --- a/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp +++ b/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp @@ -155,6 +155,9 @@ void ScheduleDAGSDNodes::BuildSchedUnits() { void ScheduleDAGSDNodes::AddSchedEdges() { const TargetSubtarget &ST = TM.getSubtarget<TargetSubtarget>(); + // Check to see if the scheduler cares about latencies. + bool UnitLatencies = ForceUnitLatencies(); + // Pass 2: add the preds, succs, etc. for (unsigned su = 0, e = SUnits.size(); su != e; ++su) { SUnit *SU = &SUnits[su]; @@ -212,8 +215,10 @@ void ScheduleDAGSDNodes::AddSchedEdges() { const SDep& dep = SDep(OpSU, isChain ? SDep::Order : SDep::Data, OpSU->Latency, PhysReg); - if (!isChain) - ST.adjustSchedDependency((SDep &)dep); + if (!isChain && !UnitLatencies) { + ComputeOperandLatency(OpSU, SU, (SDep &)dep); + ST.adjustSchedDependency(OpSU, SU, (SDep &)dep); + } SU->addPred(dep); } @@ -242,8 +247,8 @@ void ScheduleDAGSDNodes::ComputeLatency(SUnit *SU) { for (SDNode *N = SU->getNode(); N; N = N->getFlaggedNode()) if (N->isMachineOpcode()) { SawMachineOpcode = true; - SU->Latency += - InstrItins.getLatency(TII->get(N->getMachineOpcode()).getSchedClass()); + SU->Latency += InstrItins. + getStageLatency(TII->get(N->getMachineOpcode()).getSchedClass()); } } |