Lines Matching refs:CmpInstr
1440 MachineInstr &CmpInstr, Register SrcReg, Register SrcReg2, int CmpMask, in optimizeCompareInstr() argument
1442 assert(CmpInstr.getParent()); in optimizeCompareInstr()
1446 int DeadNZCVIdx = CmpInstr.findRegisterDefOperandIdx(AArch64::NZCV, true); in optimizeCompareInstr()
1448 if (CmpInstr.definesRegister(AArch64::WZR) || in optimizeCompareInstr()
1449 CmpInstr.definesRegister(AArch64::XZR)) { in optimizeCompareInstr()
1450 CmpInstr.eraseFromParent(); in optimizeCompareInstr()
1453 unsigned Opc = CmpInstr.getOpcode(); in optimizeCompareInstr()
1454 unsigned NewOpc = convertToNonFlagSettingOpc(CmpInstr); in optimizeCompareInstr()
1458 CmpInstr.setDesc(MCID); in optimizeCompareInstr()
1459 CmpInstr.RemoveOperand(DeadNZCVIdx); in optimizeCompareInstr()
1460 bool succeeded = UpdateOperandRegClass(CmpInstr); in optimizeCompareInstr()
1466 if (CmpInstr.getOpcode() == AArch64::PTEST_PP) in optimizeCompareInstr()
1467 return optimizePTestInstr(&CmpInstr, SrcReg, SrcReg2, MRI); in optimizeCompareInstr()
1476 if (!MRI->use_nodbg_empty(CmpInstr.getOperand(0).getReg())) in optimizeCompareInstr()
1479 if (CmpValue == 0 && substituteCmpToZero(CmpInstr, SrcReg, *MRI)) in optimizeCompareInstr()
1482 removeCmpToZeroOrOne(CmpInstr, SrcReg, CmpValue, *MRI); in optimizeCompareInstr()
1655 examineCFlagsUse(MachineInstr &MI, MachineInstr &CmpInstr, in examineCFlagsUse() argument
1658 MachineBasicBlock *CmpParent = CmpInstr.getParent(); in examineCFlagsUse()
1667 std::next(CmpInstr.getIterator()), CmpParent->instr_end())) { in examineCFlagsUse()
1703 static bool canInstrSubstituteCmpInstr(MachineInstr &MI, MachineInstr &CmpInstr, in canInstrSubstituteCmpInstr() argument
1707 const unsigned CmpOpcode = CmpInstr.getOpcode(); in canInstrSubstituteCmpInstr()
1711 if (!examineCFlagsUse(MI, CmpInstr, TRI)) in canInstrSubstituteCmpInstr()
1717 return !areCFlagsAccessedBetweenInstrs(&MI, &CmpInstr, &TRI, AccessToCheck); in canInstrSubstituteCmpInstr()
1725 MachineInstr &CmpInstr, unsigned SrcReg, in substituteCmpToZero() argument
1738 if (!canInstrSubstituteCmpInstr(*MI, CmpInstr, TRI)) in substituteCmpToZero()
1743 CmpInstr.eraseFromParent(); in substituteCmpToZero()
1755 static bool canCmpInstrBeRemoved(MachineInstr &MI, MachineInstr &CmpInstr, in canCmpInstrBeRemoved() argument
1784 const unsigned CmpOpcode = CmpInstr.getOpcode(); in canCmpInstrBeRemoved()
1797 examineCFlagsUse(MI, CmpInstr, TRI, &CCUseInstrs); in canCmpInstrBeRemoved()
1811 if (areCFlagsAccessedBetweenInstrs(&MI, &CmpInstr, &TRI, AK_Write)) in canCmpInstrBeRemoved()
1850 MachineInstr &CmpInstr, unsigned SrcReg, int CmpValue, in removeCmpToZeroOrOne() argument
1858 if (!canCmpInstrBeRemoved(*MI, CmpInstr, CmpValue, TRI, CCUseInstrs, in removeCmpToZeroOrOne()
1862 CmpInstr.eraseFromParent(); in removeCmpToZeroOrOne()