[AArch64] Wrong CC access in CSINC-conditional branch sequence

This is a follow up to commit r219742. It removes the CCInMI variable
and accesses the CC in CSCINC directly. In the case of a conditional
branch accessing the CC with CCInMI was wrong.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219748 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Gerolf Hoflehner 2014-10-14 23:55:00 +00:00
parent 1a0afd82b1
commit cd27f3fb33

View File

@ -2869,24 +2869,20 @@ bool AArch64InstrInfo::optimizeCondBranch(MachineInstr *MI) const {
case AArch64::CBZW:
case AArch64::CBZX:
TargetBBInMI = 1;
CCInMI = 2;
break;
case AArch64::CBNZW:
case AArch64::CBNZX:
TargetBBInMI = 1;
CCInMI = 2;
IsNegativeBranch = true;
break;
case AArch64::TBZW:
case AArch64::TBZX:
TargetBBInMI = 2;
CCInMI = 3;
IsTestAndBranch = true;
break;
case AArch64::TBNZW:
case AArch64::TBNZX:
TargetBBInMI = 2;
CCInMI = 3;
IsNegativeBranch = true;
IsTestAndBranch = true;
break;
@ -2921,7 +2917,7 @@ bool AArch64InstrInfo::optimizeCondBranch(MachineInstr *MI) const {
return false;
AArch64CC::CondCode CC =
(AArch64CC::CondCode)DefMI->getOperand(CCInMI).getImm();
(AArch64CC::CondCode)DefMI->getOperand(3).getImm();
bool CheckOnlyCCWrites = true;
// Convert only when the condition code is not modified between
// the CSINC and the branch. The CC may be used by other