@@ -923,6 +923,10 @@ static RISCVCC::CondCode getCondFromBranchOpc(unsigned Opc) {
923923 return RISCVCC::COND_EQ;
924924 case RISCV::CV_BNEIMM:
925925 return RISCVCC::COND_NE;
926+ case RISCV::BEQI:
927+ return RISCVCC::COND_EQ;
928+ case RISCV::BNEI:
929+ return RISCVCC::COND_NE;
926930 case RISCV::BEQ:
927931 return RISCVCC::COND_EQ;
928932 case RISCV::BNE:
@@ -953,14 +957,21 @@ static void parseCondBranch(MachineInstr &LastInst, MachineBasicBlock *&Target,
953957 Cond.push_back (LastInst.getOperand (1 ));
954958}
955959
956- unsigned RISCVCC::getBrCond (RISCVCC::CondCode CC, bool Imm) {
960+ unsigned RISCVCC::getBrCond (const RISCVSubtarget &STI, RISCVCC::CondCode CC,
961+ bool Imm) {
957962 switch (CC) {
958963 default :
959964 llvm_unreachable (" Unknown condition code!" );
960965 case RISCVCC::COND_EQ:
961- return Imm ? RISCV::CV_BEQIMM : RISCV::BEQ;
966+ return Imm ? (STI.hasStdExtZibimm ()
967+ ? RISCV::BEQI
968+ : (STI.hasVendorXCVbi () ? RISCV::CV_BEQIMM : RISCV::BEQ))
969+ : RISCV::BEQ;
962970 case RISCVCC::COND_NE:
963- return Imm ? RISCV::CV_BNEIMM : RISCV::BNE;
971+ return Imm ? (STI.hasStdExtZibimm ()
972+ ? RISCV::BNEI
973+ : (STI.hasVendorXCVbi () ? RISCV::CV_BNEIMM : RISCV::BNE))
974+ : RISCV::BNE;
964975 case RISCVCC::COND_LT:
965976 return RISCV::BLT;
966977 case RISCVCC::COND_GE:
@@ -974,7 +985,7 @@ unsigned RISCVCC::getBrCond(RISCVCC::CondCode CC, bool Imm) {
974985
975986const MCInstrDesc &RISCVInstrInfo::getBrCond (RISCVCC::CondCode CC,
976987 bool Imm) const {
977- return get (RISCVCC::getBrCond (CC, Imm));
988+ return get (RISCVCC::getBrCond (STI, CC, Imm));
978989}
979990
980991RISCVCC::CondCode RISCVCC::getOppositeBranchCondition (RISCVCC::CondCode CC) {
@@ -1350,6 +1361,8 @@ bool RISCVInstrInfo::isBranchOffsetInRange(unsigned BranchOp,
13501361 case RISCV::BGE:
13511362 case RISCV::BLTU:
13521363 case RISCV::BGEU:
1364+ case RISCV::BEQI:
1365+ case RISCV::BNEI:
13531366 case RISCV::CV_BEQIMM:
13541367 case RISCV::CV_BNEIMM:
13551368 return isIntN (13 , BrOffset);
@@ -2490,6 +2503,9 @@ bool RISCVInstrInfo::verifyInstruction(const MachineInstr &MI,
24902503 case RISCVOp::OPERAND_UIMM2_LSB0:
24912504 Ok = isShiftedUInt<1 , 1 >(Imm);
24922505 break ;
2506+ case RISCVOp::OPERAND_UIMM5_ZIBIMM:
2507+ Ok = (isUInt<5 >(Imm) && Imm != 0 ) || Imm == -1 ;
2508+ break ;
24932509 case RISCVOp::OPERAND_UIMM5_LSB0:
24942510 Ok = isShiftedUInt<4 , 1 >(Imm);
24952511 break ;
0 commit comments