Lines Matching full:ppc
16 #include "PPC.h"
42 #define DEBUG_TYPE "ppc-instr-info"
49 opt<bool> DisableCTRLoopAnal("disable-ppc-ctrloop-analysis", cl::Hidden,
52 static cl::opt<bool> DisableCmpOpt("disable-ppc-cmp-opt",
55 static cl::opt<bool> VSXSelfCopyCrash("crash-on-ppc-vsx-self-copy",
63 : PPCGenInstrInfo(PPC::ADJCALLSTACKDOWN, PPC::ADJCALLSTACKUP),
73 if (Directive == PPC::DIR_440 || Directive == PPC::DIR_A2 ||
74 Directive == PPC::DIR_E500mc || Directive == PPC::DIR_E5500) {
91 if (Directive == PPC::DIR_PWR7 || Directive == PPC::DIR_PWR8)
95 if (Directive != PPC::DIR_440 && Directive != PPC::DIR_A2 &&
96 Directive != PPC::DIR_E500mc && Directive != PPC::DIR_E5500) {
120 IsRegCR = MRI->getRegClass(Reg)->hasSuperClassEq(&PPC::CRRCRegClass) ||
121 MRI->getRegClass(Reg)->hasSuperClassEq(&PPC::CRBITRCRegClass);
123 IsRegCR = PPC::CRRCRegClass.contains(Reg) ||
124 PPC::CRBITRCRegClass.contains(Reg);
136 case PPC::DIR_7400:
137 case PPC::DIR_750:
138 case PPC::DIR_970:
139 case PPC::DIR_E5500:
140 case PPC::DIR_PWR4:
141 case PPC::DIR_PWR5:
142 case PPC::DIR_PWR5X:
143 case PPC::DIR_PWR6:
144 case PPC::DIR_PWR6X:
145 case PPC::DIR_PWR7:
146 case PPC::DIR_PWR8:
161 case PPC::EXTSW:
162 case PPC::EXTSW_32_64:
165 SubIdx = PPC::sub_32;
175 case PPC::LD:
176 case PPC::LWZ:
177 case PPC::LFS:
178 case PPC::LFD:
179 case PPC::RESTORE_CR:
180 case PPC::RESTORE_CRBIT:
181 case PPC::LVX:
182 case PPC::LXVD2X:
183 case PPC::QVLFDX:
184 case PPC::QVLFSXs:
185 case PPC::QVLFDXb:
186 case PPC::RESTORE_VRSAVE:
204 case PPC::STD:
205 case PPC::STW:
206 case PPC::STFS:
207 case PPC::STFD:
208 case PPC::SPILL_CR:
209 case PPC::SPILL_CRBIT:
210 case PPC::STVX:
211 case PPC::STXVD2X:
212 case PPC::QVSTFDX:
213 case PPC::QVSTFSXs:
214 case PPC::QVSTFDXb:
215 case PPC::SPILL_VRSAVE:
235 if (MI->getOpcode() != PPC::RLWIMI &&
236 MI->getOpcode() != PPC::RLWIMIo)
239 // 64-bit instruction (so we don't handle PPC::RLWIMI8 here), because
313 int AltOpc = PPC::getAltVSXFMAOpcode(MI->getOpcode());
329 default: Opcode = PPC::NOP; break;
330 case PPC::DIR_PWR6: Opcode = PPC::NOP_GT_PWR6; break;
331 case PPC::DIR_PWR7: Opcode = PPC::NOP_GT_PWR7; break;
332 case PPC::DIR_PWR8: Opcode = PPC::NOP_GT_PWR7; break; /* FIXME: Update when P8 InstrScheduling model is ready */
341 NopInst.setOpcode(PPC::NOP);
371 if (LastInst->getOpcode() == PPC::B) {
376 } else if (LastInst->getOpcode() == PPC::BCC) {
384 } else if (LastInst->getOpcode() == PPC::BC) {
389 Cond.push_back(MachineOperand::CreateImm(PPC::PRED_BIT_SET));
392 } else if (LastInst->getOpcode() == PPC::BCn) {
397 Cond.push_back(MachineOperand::CreateImm(PPC::PRED_BIT_UNSET));
400 } else if (LastInst->getOpcode() == PPC::BDNZ8 ||
401 LastInst->getOpcode() == PPC::BDNZ) {
408 Cond.push_back(MachineOperand::CreateReg(isPPC64 ? PPC::CTR8 : PPC::CTR,
411 } else if (LastInst->getOpcode() == PPC::BDZ8 ||
412 LastInst->getOpcode() == PPC::BDZ) {
419 Cond.push_back(MachineOperand::CreateReg(isPPC64 ? PPC::CTR8 : PPC::CTR,
436 // If the block ends with PPC::B and PPC:BCC, handle it.
437 if (SecondLastInst->getOpcode() == PPC::BCC &&
438 LastInst->getOpcode() == PPC::B) {
447 } else if (SecondLastInst->getOpcode() == PPC::BC &&
448 LastInst->getOpcode() == PPC::B) {
453 Cond.push_back(MachineOperand::CreateImm(PPC::PRED_BIT_SET));
457 PPC::BCn &&
458 LastInst->getOpcode() == PPC::B) {
463 Cond.push_back(MachineOperand::CreateImm(PPC::PRED_BIT_UNSET));
467 } else if ((SecondLastInst->getOpcode() == PPC::BDNZ8 ||
468 SecondLastInst->getOpcode() == PPC::BDNZ) &&
469 LastInst->getOpcode() == PPC::B) {
477 Cond.push_back(MachineOperand::CreateReg(isPPC64 ? PPC::CTR8 : PPC::CTR,
481 } else if ((SecondLastInst->getOpcode() == PPC::BDZ8 ||
482 SecondLastInst->getOpcode() == PPC::BDZ) &&
483 LastInst->getOpcode() == PPC::B) {
491 Cond.push_back(MachineOperand::CreateReg(isPPC64 ? PPC::CTR8 : PPC::CTR,
497 // If the block ends with two PPC:Bs, handle it. The second one is not
499 if (SecondLastInst->getOpcode() == PPC::B &&
500 LastInst->getOpcode() == PPC::B) {
523 if (I->getOpcode() != PPC::B && I->getOpcode() != PPC::BCC &&
524 I->getOpcode() != PPC::BC && I->getOpcode() != PPC::BCn &&
525 I->getOpcode() != PPC::BDNZ8 && I->getOpcode() != PPC::BDNZ &&
526 I->getOpcode() != PPC::BDZ8 && I->getOpcode() != PPC::BDZ)
536 if (I->getOpcode() != PPC::BCC &&
537 I->getOpcode() != PPC::BC && I->getOpcode() != PPC::BCn &&
538 I->getOpcode() != PPC::BDNZ8 && I->getOpcode() != PPC::BDNZ &&
539 I->getOpcode() != PPC::BDZ8 && I->getOpcode() != PPC::BDZ)
555 "PPC branch conditions have two components!");
562 BuildMI(&MBB, DL, get(PPC::B)).addMBB(TBB);
563 else if (Cond[1].getReg() == PPC::CTR || Cond[1].getReg() == PPC::CTR8)
565 (isPPC64 ? PPC::BDNZ8 : PPC::BDNZ) :
566 (isPPC64 ? PPC::BDZ8 : PPC::BDZ))).addMBB(TBB);
567 else if (Cond[0].getImm() == PPC::PRED_BIT_SET)
568 BuildMI(&MBB, DL, get(PPC::BC)).addOperand(Cond[1]).addMBB(TBB);
569 else if (Cond[0].getImm() == PPC::PRED_BIT_UNSET)
570 BuildMI(&MBB, DL, get(PPC::BCn)).addOperand(Cond[1]).addMBB(TBB);
572 BuildMI(&MBB, DL, get(PPC::BCC))
578 if (Cond[1].getReg() == PPC::CTR || Cond[1].getReg() == PPC::CTR8)
580 (isPPC64 ? PPC::BDNZ8 : PPC::BDNZ) :
581 (isPPC64 ? PPC::BDZ8 : PPC::BDZ))).addMBB(TBB);
582 else if (Cond[0].getImm() == PPC::PRED_BIT_SET)
583 BuildMI(&MBB, DL, get(PPC::BC)).addOperand(Cond[1]).addMBB(TBB);
584 else if (Cond[0].getImm() == PPC::PRED_BIT_UNSET)
585 BuildMI(&MBB, DL, get(PPC::BCn)).addOperand(Cond[1]).addMBB(TBB);
587 BuildMI(&MBB, DL, get(PPC::BCC))
589 BuildMI(&MBB, DL, get(PPC::B)).addMBB(FBB);
606 if (Cond[1].getReg() == PPC::CTR || Cond[1].getReg() == PPC::CTR8)
617 if (!PPC::GPRCRegClass.hasSubClassEq(RC) &&
618 !PPC::GPRC_NOR0RegClass.hasSubClassEq(RC) &&
619 !PPC::G8RCRegClass.hasSubClassEq(RC) &&
620 !PPC::G8RC_NOX0RegClass.hasSubClassEq(RC))
640 "PPC branch conditions have two components!");
651 bool Is64Bit = PPC::G8RCRegClass.hasSubClassEq(RC) ||
652 PPC::G8RC_NOX0RegClass.hasSubClassEq(RC);
654 PPC::GPRCRegClass.hasSubClassEq(RC) ||
655 PPC::GPRC_NOR0RegClass.hasSubClassEq(RC)) &&
658 unsigned OpCode = Is64Bit ? PPC::ISEL8 : PPC::ISEL;
665 case PPC::PRED_EQ: SubIdx = PPC::sub_eq; SwapOps = false; break;
666 case PPC::PRED_NE: SubIdx = PPC::sub_eq; SwapOps = true; break;
667 case PPC::PRED_LT: SubIdx = PPC::sub_lt; SwapOps = false; break;
668 case PPC::PRED_GE: SubIdx = PPC::sub_lt; SwapOps = true; break;
669 case PPC::PRED_GT: SubIdx = PPC::sub_gt; SwapOps = false; break;
670 case PPC::PRED_LE: SubIdx = PPC::sub_gt; SwapOps = true; break;
671 case PPC::PRED_UN: SubIdx = PPC::sub_un; SwapOps = false; break;
672 case PPC::PRED_NU: SubIdx = PPC::sub_un; SwapOps = true; break;
673 case PPC::PRED_BIT_SET: SubIdx = 0; SwapOps = false; break;
674 case PPC::PRED_BIT_UNSET: SubIdx = 0; SwapOps = true; break;
683 if (MRI.getRegClass(FirstReg)->contains(PPC::R0) ||
684 MRI.getRegClass(FirstReg)->contains(PPC::X0)) {
686 MRI.getRegClass(FirstReg)->contains(PPC::X0) ?
687 &PPC::G8RC_NOX0RegClass : &PPC::GPRC_NOR0RegClass;
701 if (CRBit == PPC::CR0LT || CRBit == PPC::CR1LT ||
702 CRBit == PPC::CR2LT || CRBit == PPC::CR3LT ||
703 CRBit == PPC::CR4LT || CRBit == PPC::CR5LT ||
704 CRBit == PPC::CR6LT || CRBit == PPC::CR7LT)
706 if (CRBit == PPC::CR0GT || CRBit == PPC::CR1GT ||
707 CRBit == PPC::CR2GT || CRBit == PPC::CR3GT ||
708 CRBit == PPC::CR4GT || CRBit == PPC::CR5GT ||
709 CRBit == PPC::CR6GT || CRBit == PPC::CR7GT)
711 if (CRBit == PPC::CR0EQ || CRBit == PPC::CR1EQ ||
712 CRBit == PPC::CR2EQ || CRBit == PPC::CR3EQ ||
713 CRBit == PPC::CR4EQ || CRBit == PPC::CR5EQ ||
714 CRBit == PPC::CR6EQ || CRBit == PPC::CR7EQ)
716 if (CRBit == PPC::CR0UN || CRBit == PPC::CR1UN ||
717 CRBit == PPC::CR2UN || CRBit == PPC::CR3UN ||
718 CRBit == PPC::CR4UN || CRBit == PPC::CR5UN ||
719 CRBit == PPC::CR6UN || CRBit == PPC::CR7UN)
733 if (PPC::F8RCRegClass.contains(DestReg) &&
734 PPC::VSRCRegClass.contains(SrcReg)) {
736 TRI->getMatchingSuperReg(DestReg, PPC::sub_64, &PPC::VSRCRegClass);
742 } else if (PPC::VRRCRegClass.contains(DestReg) &&
743 PPC::VSRCRegClass.contains(SrcReg)) {
745 TRI->getMatchingSuperReg(DestReg, PPC::sub_128, &PPC::VSRCRegClass);
751 } else if (PPC::F8RCRegClass.contains(SrcReg) &&
752 PPC::VSRCRegClass.contains(DestReg)) {
754 TRI->getMatchingSuperReg(SrcReg, PPC::sub_64, &PPC::VSRCRegClass);
760 } else if (PPC::VRRCRegClass.contains(SrcReg) &&
761 PPC::VSRCRegClass.contains(DestReg)) {
763 TRI->getMatchingSuperReg(SrcReg, PPC::sub_128, &PPC::VSRCRegClass);
772 if (PPC::CRBITRCRegClass.contains(SrcReg) &&
773 PPC::GPRCRegClass.contains(DestReg)) {
775 BuildMI(MBB, I, DL, get(PPC::MFOCRF), DestReg)
779 BuildMI(MBB, I, DL, get(PPC::RLWINM), DestReg)
785 } else if (PPC::CRRCRegClass.contains(SrcReg) &&
786 PPC::G8RCRegClass.contains(DestReg)) {
787 BuildMI(MBB, I, DL, get(PPC::MFOCRF8), DestReg)
790 } else if (PPC::CRRCRegClass.contains(SrcReg) &&
791 PPC::GPRCRegClass.contains(DestReg)) {
792 BuildMI(MBB, I, DL, get(PPC::MFOCRF), DestReg)
798 if (PPC::GPRCRegClass.contains(DestReg, SrcReg))
799 Opc = PPC::OR;
800 else if (PPC::G8RCRegClass.contains(DestReg, SrcReg))
801 Opc = PPC::OR8;
802 else if (PPC::F4RCRegClass.contains(DestReg, SrcReg))
803 Opc = PPC::FMR;
804 else if (PPC::CRRCRegClass.contains(DestReg, SrcReg))
805 Opc = PPC::MCRF;
806 else if (PPC::VRRCRegClass.contains(DestReg, SrcReg))
807 Opc = PPC::VOR;
808 else if (PPC::VSRCRegClass.contains(DestReg, SrcReg))
817 Opc = PPC::XXLOR;
818 else if (PPC::VSFRCRegClass.contains(DestReg, SrcReg))
819 Opc = PPC::XXLORf;
820 else if (PPC::QFRCRegClass.contains(DestReg, SrcReg))
821 Opc = PPC::QVFMR;
822 else if (PPC::QSRCRegClass.contains(DestReg, SrcReg))
823 Opc = PPC::QVFMRs;
824 else if (PPC::QBRCRegClass.contains(DestReg, SrcReg))
825 Opc = PPC::QVFMRb;
826 else if (PPC::CRBITRCRegClass.contains(DestReg, SrcReg))
827 Opc = PPC::CROR;
851 if (PPC::GPRCRegClass.hasSubClassEq(RC) ||
852 PPC::GPRC_NOR0RegClass.hasSubClassEq(RC)) {
853 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::STW))
857 } else if (PPC::G8RCRegClass.hasSubClassEq(RC) ||
858 PPC::G8RC_NOX0RegClass.hasSubClassEq(RC)) {
859 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::STD))
863 } else if (PPC::F8RCRegClass.hasSubClassEq(RC)) {
864 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::STFD))
868 } else if (PPC::F4RCRegClass.hasSubClassEq(RC)) {
869 PPC::STFS))
873 } else if (PPC::CRRCRegClass.hasSubClassEq(RC)) {
874 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::SPILL_CR))
879 } else if (PPC::CRBITRCRegClass.hasSubClassEq(RC)) {
880 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::SPILL_CRBIT))
885 } else if (PPC::VRRCRegClass.hasSubClassEq(RC)) {
886 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::STVX))
891 } else if (PPC::VSRCRegClass.hasSubClassEq(RC)) {
892 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::STXVD2X))
897 } else if (PPC::VSFRCRegClass.hasSubClassEq(RC)) {
898 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::STXSDX))
903 } else if (PPC::VRSAVERCRegClass.hasSubClassEq(RC)) {
906 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::SPILL_VRSAVE))
911 } else if (PPC::QFRCRegClass.hasSubClassEq(RC)) {
912 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::QVSTFDX))
917 } else if (PPC::QSRCRegClass.hasSubClassEq(RC)) {
918 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::QVSTFSXs))
923 } else if (PPC::QBRCRegClass.hasSubClassEq(RC)) {
924 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::QVSTFDXb))
980 if (PPC::GPRCRegClass.hasSubClassEq(RC) ||
981 PPC::GPRC_NOR0RegClass.hasSubClassEq(RC)) {
982 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::LWZ),
984 } else if (PPC::G8RCRegClass.hasSubClassEq(RC) ||
985 PPC::G8RC_NOX0RegClass.hasSubClassEq(RC)) {
986 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::LD), DestReg),
988 } else if (PPC::F8RCRegClass.hasSubClassEq(RC)) {
989 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::LFD), DestReg),
991 } else if (PPC::F4RCRegClass.hasSubClassEq(RC)) {
992 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::LFS), DestReg),
994 } else if (PPC::CRRCRegClass.hasSubClassEq(RC)) {
996 get(PPC::RESTORE_CR), DestReg),
999 } else if (PPC::CRBITRCRegClass.hasSubClassEq(RC)) {
1001 get(PPC::RESTORE_CRBIT), DestReg),
1004 } else if (PPC::VRRCRegClass.hasSubClassEq(RC)) {
1005 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::LVX), DestReg),
1008 } else if (PPC::VSRCRegClass.hasSubClassEq(RC)) {
1009 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::LXVD2X), DestReg),
1012 } else if (PPC::VSFRCRegClass.hasSubClassEq(RC)) {
1013 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::LXSDX), DestReg),
1016 } else if (PPC::VRSAVERCRegClass.hasSubClassEq(RC)) {
1020 get(PPC::RESTORE_VRSAVE),
1024 } else if (PPC::QFRCRegClass.hasSubClassEq(RC)) {
1025 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::QVLFDX), DestReg),
1028 } else if (PPC::QSRCRegClass.hasSubClassEq(RC)) {
1029 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::QVLFSXs), DestReg),
1032 } else if (PPC::QBRCRegClass.hasSubClassEq(RC)) {
1033 NewMIs.push_back(addFrameReference(BuildMI(MF, DL, get(PPC::QVLFDXb), DestReg),
1082 assert(Cond.size() == 2 && "Invalid PPC branch opcode!");
1083 if (Cond[1].getReg() == PPC::CTR8 || Cond[1].getReg() == PPC::CTR)
1087 Cond[0].setImm(PPC::InvertPredicate((PPC::Predicate)Cond[0].getImm()));
1096 if (DefOpc != PPC::LI && DefOpc != PPC::LI8)
1130 if (UseInfo->RegClass != PPC::GPRC_NOR0RegClassID &&
1131 UseInfo->RegClass != PPC::G8RC_NOX0RegClassID)
1144 ZeroReg = isPPC64 ? PPC::ZERO8 : PPC::ZERO;
1146 ZeroReg = UseInfo->RegClass == PPC::G8RC_NOX0RegClassID ?
1147 PPC::ZERO8 : PPC::ZERO;
1162 if (I->definesRegister(PPC::CTR) || I->definesRegister(PPC::CTR8))
1208 if (OpC == PPC::BLR || OpC == PPC::BLR8) {
1209 if (Pred[1].getReg() == PPC::CTR8 || Pred[1].getReg() == PPC::CTR) {
1212 (isPPC64 ? PPC::BDNZLR8 : PPC::BDNZLR) :
1213 (isPPC64 ? PPC::BDZLR8 : PPC::BDZLR)));
1214 } else if (Pred[0].getImm() == PPC::PRED_BIT_SET) {
1215 MI->setDesc(get(PPC::BCLR));
1218 } else if (Pred[0].getImm() == PPC::PRED_BIT_UNSET) {
1219 MI->setDesc(get(PPC::BCLRn));
1223 MI->setDesc(get(PPC::BCCLR));
1230 } else if (OpC == PPC::B) {
1231 if (Pred[1].getReg() == PPC::CTR8 || Pred[1].getReg() == PPC::CTR) {
1234 (isPPC64 ? PPC::BDNZ8 : PPC::BDNZ) :
1235 (isPPC64 ? PPC::BDZ8 : PPC::BDZ)));
1236 } else if (Pred[0].getImm() == PPC::PRED_BIT_SET) {
1240 MI->setDesc(get(PPC::BC));
1244 } else if (Pred[0].getImm() == PPC::PRED_BIT_UNSET) {
1248 MI->setDesc(get(PPC::BCn));
1256 MI->setDesc(get(PPC::BCC));
1264 } else if (OpC == PPC::BCTR || OpC == PPC::BCTR8 ||
1265 OpC == PPC::BCTRL || OpC == PPC::BCTRL8) {
1266 PPC::CTR8 || Pred[1].getReg() == PPC::CTR)
1269 bool setLR = OpC == PPC::BCTRL || OpC == PPC::BCTRL8;
1272 if (Pred[0].getImm() == PPC::PRED_BIT_SET) {
1273 MI->setDesc(get(isPPC64 ? (setLR ? PPC::BCCTRL8 : PPC::BCCTR8) :
1274 (setLR ? PPC::BCCTRL : PPC::BCCTR)));
1278 } else if (Pred[0].getImm() == PPC::PRED_BIT_UNSET) {
1279 MI->setDesc(get(isPPC64 ? (setLR ? PPC::BCCTRL8n : PPC::BCCTR8n) :
1280 (setLR ? PPC::BCCTRLn : PPC::BCCTRn)));
1286 MI->setDesc(get(isPPC64 ? (setLR ? PPC::BCCCTRL8 : PPC::BCCCTR8) :
1287 (setLR ? PPC::BCCCTRL : PPC::BCCCTR)));
1300 assert(Pred1.size() == 2 && "Invalid PPC first predicate");
1301 assert(Pred2.size() == 2 && "Invalid PPC second predicate");
1303 if (Pred1[1].getReg() == PPC::CTR8 || Pred1[1].getReg() == PPC::CTR)
1305 if (Pred2[1].getReg() == PPC::CTR8 || Pred2[1].getReg() == PPC::CTR)
1312 PPC::Predicate P1 = (PPC::Predicate) Pred1[0].getImm();
1313 PPC::Predicate P2 = (PPC::Predicate) Pred2[0].getImm();
1319 if (P1 == PPC::PRED_LE &&
1320 (P2 == PPC::PRED_LT || P2 == PPC::PRED_EQ))
1322 if (P1 == PPC::PRED_GE &&
1323 (P2 == PPC::PRED_GT || P2 == PPC::PRED_EQ))
1338 { &PPC::CRRCRegClass, &PPC::CRBITRCRegClass,
1339 &PPC::CTRRCRegClass, &PPC::CTRRC8RegClass };
1370 case PPC::B:
1371 case PPC::BLR:
1372 case PPC::BLR8:
1373 case PPC::BCTR:
1374 case PPC::BCTR8:
1375 case PPC::BCTRL:
1376 case PPC::BCTRL8:
1388 case PPC::CMPWI:
1389 case PPC::CMPLWI:
1390 case PPC::CMPDI:
1391 case PPC::CMPLDI:
1397 case PPC::CMPW:
1398 case PPC::CMPLW:
1399 case PPC::CMPD:
1400 case PPC::CMPLD:
1401 case PPC::FCMPUS:
1402 case PPC::FCMPUD:
1421 if (OpC == PPC::FCMPUS || OpC == PPC::FCMPUD)
1433 bool is32BitSignedCompare = OpC == PPC::CMPWI || OpC == PPC::CMPW;
1434 bool is32BitUnsignedCompare = OpC == PPC::CMPLWI || OpC == PPC::CMPLW;
1435 bool is64BitUnsignedCompare = OpC == PPC::CMPLDI || OpC == PPC::CMPLD;
1447 if (MIOpC == PPC::SRAW || MIOpC == PPC::SRAWo ||
1448 MIOpC == PPC::SRAWI || MIOpC == PPC::SRAWIo ||
1449 MIOpC == PPC::EXTSB || MIOpC == PPC::EXTSBo ||
1450 MIOpC == PPC::EXTSH || MIOpC == PPC::EXTSHo ||
1451 MIOpC == PPC::EXTSW || MIOpC == PPC::EXTSWo) {
1458 if (MIOpC == PPC::CNTLZW || MIOpC == PPC::CNTLZWo ||
1459 MIOpC == PPC::SLW || MIOpC == PPC::SLWo ||
1460 MIOpC == PPC::SRW || MIOpC == PPC::SRWo) {
1476 if (UseMI->getOpcode() == PPC::BCC) {
1478 if (Pred != PPC::PRED_EQ && Pred != PPC::PRED_NE)
1480 } else if (UseMI->getOpcode() == PPC::ISEL ||
1481 UseMI->getOpcode() == PPC::ISEL8) {
1483 if (SubIdx != PPC::sub_eq)
1519 // PPC does not have a record-form SUBri.
1536 Instr.modifiesRegister(PPC::CR0, TRI) ||
1537 Instr.readsRegister(PPC::CR0, TRI)))
1546 if ((OpC == PPC::CMPW || OpC == PPC::CMPLW ||
1547 OpC == PPC::CMPD || OpC == PPC::CMPLD) &&
1548 (IOpC == PPC::SUBF || IOpC == PPC::SUBF8) &&
1571 if (MIOpC == PPC::ANDIo || MIOpC == PPC::ANDIo8)
1574 NewOpC = PPC::getRecordFormOpcode(MIOpC);
1575 if (NewOpC == -1 && PPC::getNonRecordFormOpcode(MIOpC) != -1)
1588 SmallVector<std::pair<MachineOperand*, PPC::Predicate>, 4> PredsToUpdate;
1610 if (UseMI->getOpcode() == PPC::BCC) {
1611 PPC::Predicate Pred = (PPC::Predicate) UseMI->getOperand(0).getImm();
1613 Pred == PPC::PRED_EQ || Pred == PPC::PRED_NE) &&
1616 PPC::getSwappedPredicate(Pred)));
1617 } else if (UseMI->getOpcode() == PPC::ISEL ||
1618 UseMI->getOpcode() == PPC::ISEL8) {
1620 assert((!equalityOnly || NewSubReg == PPC::sub_eq) &&
1623 if (NewSubReg == PPC::sub_lt)
1624 NewSubReg = PPC::sub_gt;
1625 else if (NewSubReg == PPC::sub_gt)
1626 NewSubReg = PPC::sub_lt;
1642 .addReg(PPC::CR0, MIOpC != NewOpC ? RegState::Kill : 0);
1687 if (Opcode == PPC::INLINEASM) {