Latency between CPSR def and branch is zero.
authorEvan Cheng <evan.cheng@apple.com>
Sat, 23 Oct 2010 02:04:38 +0000 (02:04 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Sat, 23 Oct 2010 02:04:38 +0000 (02:04 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117192 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMBaseInstrInfo.cpp

index 0b5b2437abc37cd32083d7d64d4509cfa25e25c7..8399cd5ff4b7327cdafb5698e3812cfc7c9a5c86 100644 (file)
@@ -1892,7 +1892,13 @@ ARMBaseInstrInfo::getOperandLatency(const InstrItineraryData *ItinData,
   if (!ItinData || ItinData->isEmpty())
     return DefTID.mayLoad() ? 3 : 1;
 
+
   const TargetInstrDesc &UseTID = UseMI->getDesc();
+  const MachineOperand &DefMO = DefMI->getOperand(DefIdx);
+  if (DefMO.getReg() == ARM::CPSR && UseTID.isBranch())
+    // CPSR set and branch can be paired in the same cycle.
+    return 0;
+
   unsigned DefAlign = DefMI->hasOneMemOperand()
     ? (*DefMI->memoperands_begin())->getAlignment() : 0;
   unsigned UseAlign = UseMI->hasOneMemOperand()