Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions llvm/lib/Target/RISCV/RISCVISelLowering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22495,6 +22495,7 @@ RISCVTargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
"ReadCounterWide is only to be used on riscv32");
return emitReadCounterWidePseudo(MI, BB);
case RISCV::Select_GPR_Using_CC_GPR:
case RISCV::Select_GPR_Using_CC_Imm5_Zibi:
case RISCV::Select_GPR_Using_CC_SImm5_CV:
case RISCV::Select_GPRNoX0_Using_CC_SImm5NonZero_QC:
case RISCV::Select_GPRNoX0_Using_CC_UImm5NonZero_QC:
Expand Down
23 changes: 23 additions & 0 deletions llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -955,13 +955,15 @@ RISCVCC::CondCode RISCVInstrInfo::getCondFromBranchOpc(unsigned Opc) {
default:
return RISCVCC::COND_INVALID;
case RISCV::BEQ:
case RISCV::BEQI:
case RISCV::CV_BEQIMM:
case RISCV::QC_BEQI:
case RISCV::QC_E_BEQI:
case RISCV::NDS_BBC:
case RISCV::NDS_BEQC:
return RISCVCC::COND_EQ;
case RISCV::BNE:
case RISCV::BNEI:
case RISCV::QC_BNEI:
case RISCV::QC_E_BNEI:
case RISCV::CV_BNEIMM:
Expand Down Expand Up @@ -1041,6 +1043,16 @@ unsigned RISCVCC::getBrCond(RISCVCC::CondCode CC, unsigned SelectOpc) {
return RISCV::BGEU;
}
break;
case RISCV::Select_GPR_Using_CC_Imm5_Zibi:
switch (CC) {
default:
llvm_unreachable("Unexpected condition code!");
case RISCVCC::COND_EQ:
return RISCV::BEQI;
case RISCVCC::COND_NE:
return RISCV::BNEI;
}
break;
case RISCV::Select_GPR_Using_CC_SImm5_CV:
switch (CC) {
default:
Expand Down Expand Up @@ -1359,9 +1371,15 @@ bool RISCVInstrInfo::reverseBranchCondition(
case RISCV::BEQ:
Cond[0].setImm(RISCV::BNE);
break;
case RISCV::BEQI:
Cond[0].setImm(RISCV::BNEI);
break;
case RISCV::BNE:
Cond[0].setImm(RISCV::BEQ);
break;
case RISCV::BNEI:
Cond[0].setImm(RISCV::BEQI);
break;
case RISCV::BLT:
Cond[0].setImm(RISCV::BGE);
break;
Expand Down Expand Up @@ -1611,6 +1629,8 @@ bool RISCVInstrInfo::isBranchOffsetInRange(unsigned BranchOp,
case RISCV::BGE:
case RISCV::BLTU:
case RISCV::BGEU:
case RISCV::BEQI:
case RISCV::BNEI:
case RISCV::CV_BEQIMM:
case RISCV::CV_BNEIMM:
case RISCV::QC_BEQI:
Expand Down Expand Up @@ -2859,6 +2879,9 @@ bool RISCVInstrInfo::verifyInstruction(const MachineInstr &MI,
case RISCVOp::OPERAND_FOUR:
Ok = Imm == 4;
break;
case RISCVOp::OPERAND_IMM5_ZIBI:
Ok = (isUInt<5>(Imm) && Imm != 0) || Imm == -1;
break;
// clang-format off
CASE_OPERAND_SIMM(5)
CASE_OPERAND_SIMM(6)
Expand Down
21 changes: 21 additions & 0 deletions llvm/lib/Target/RISCV/RISCVInstrInfoZibi.td
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,24 @@ let Predicates = [HasStdExtZibi] in {
def BEQI : Branch_imm<0b010, "beqi">;
def BNEI : Branch_imm<0b011, "bnei">;
} // Predicates = [HasStdExtZibi]

multiclass BccImmPat<CondCode Cond, Branch_imm Inst> {
def : Pat<(riscv_brcc (XLenVT GPR:$rs1), imm5_zibi:$cimm, Cond, bb:$imm12),
(Inst GPR:$rs1, imm5_zibi:$cimm, bare_simm13_lsb0_bb:$imm12)>;
}

defm CC_Imm5_Zibi : SelectCC_GPR_riirr<GPR, imm5_zibi>;

class SelectZibi<CondCode Cond>
: Pat<(riscv_selectcc_frag:$cc (XLenVT GPR:$lhs), imm5_zibi:$cimm, Cond,
(XLenVT GPR:$truev), GPR:$falsev),
(Select_GPR_Using_CC_Imm5_Zibi GPR:$lhs, imm5_zibi:$cimm,
(IntCCtoRISCVCC $cc), GPR:$truev, GPR:$falsev)>;

let Predicates = [HasStdExtZibi] in {
def : SelectZibi<SETEQ>;
def : SelectZibi<SETNE>;

defm : BccImmPat<SETEQ, BEQI>;
defm : BccImmPat<SETNE, BNEI>;
} // Predicates = [HasStdExtZibi]
1 change: 1 addition & 0 deletions llvm/lib/Target/RISCV/RISCVInstrPredicates.td
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ def isSelectPseudo
MCReturnStatement<
CheckOpcode<[
Select_GPR_Using_CC_GPR,
Select_GPR_Using_CC_Imm5_Zibi,
Select_GPR_Using_CC_SImm5_CV,
Select_GPRNoX0_Using_CC_SImm5NonZero_QC,
Select_GPRNoX0_Using_CC_UImm5NonZero_QC,
Expand Down
Loading