diff options
author | Evan Cheng <evan.cheng@apple.com> | 2010-09-29 22:42:35 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2010-09-29 22:42:35 +0000 |
commit | 3881cb7a5d54c0011b40997adcd742e1c7b91abd (patch) | |
tree | aeeed4ca9a75fe9bb1619a0595be07a06bb3edc2 /lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp | |
parent | 6406d004c98af569632ecc1db5d852ac7da9b7c8 (diff) |
Model Cortex-a9 load to SUB, RSB, ADD, ADC, SBC, RSC, CMN, MVN, or CMP
pipeline forwarding path.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115098 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp')
-rw-r--r-- | lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp index fbf621d0bb..23ff9c5807 100644 --- a/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp +++ b/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp @@ -457,24 +457,24 @@ void ScheduleDAGSDNodes::ComputeOperandLatency(SDNode *Def, SDNode *Use, return; unsigned DefIdx = Use->getOperand(OpIdx).getResNo(); - if (Def->isMachineOpcode()) { - const TargetInstrDesc &II = TII->get(Def->getMachineOpcode()); - if (DefIdx >= II.getNumDefs()) - return; - int DefCycle = InstrItins->getOperandCycle(II.getSchedClass(), DefIdx); - if (DefCycle < 0) - return; - int UseCycle = 1; - if (Use->isMachineOpcode()) { - const unsigned UseClass = TII->get(Use->getMachineOpcode()).getSchedClass(); - UseCycle = InstrItins->getOperandCycle(UseClass, OpIdx); - } - if (UseCycle >= 0) { - int Latency = DefCycle - UseCycle + 1; - if (Latency >= 0) - dep.setLatency(Latency); - } + if (!Def->isMachineOpcode()) + return; + + const TargetInstrDesc &II = TII->get(Def->getMachineOpcode()); + if (DefIdx >= II.getNumDefs()) + return; + + int Latency = 0; + if (!Use->isMachineOpcode()) { + Latency = InstrItins->getOperandCycle(II.getSchedClass(), DefIdx); + } else { + unsigned DefClass = II.getSchedClass(); + unsigned UseClass = TII->get(Use->getMachineOpcode()).getSchedClass(); + Latency = InstrItins->getOperandLatency(DefClass, DefIdx, UseClass, OpIdx); } + + if (Latency >= 0) + dep.setLatency(Latency); } void ScheduleDAGSDNodes::dumpNode(const SUnit *SU) const { |