[llvm] [RISCV] Simplify the Zibi SFB patterns. NFC (PR #216449)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 14 21:21:42 PDT 2026
https://github.com/topperc updated https://github.com/llvm/llvm-project/pull/216449
>From b38950e687e60e28d8bd6f8d0443e834bb69c118 Mon Sep 17 00:00:00 2001
From: Craig Topper <craig.topper at sifive.com>
Date: Fri, 14 Aug 2026 19:57:58 -0700
Subject: [PATCH 1/3] [RISCV] Simplify the Zibi SFB patterns. NFC
Use a PatLeaf to match the valid condition codes instead of using
separate patterns for each.
---
llvm/lib/Target/RISCV/RISCVInstrInfoSFB.td | 23 ++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoSFB.td b/llvm/lib/Target/RISCV/RISCVInstrInfoSFB.td
index 409aeb4c86546..419256876f136 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoSFB.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoSFB.td
@@ -261,15 +261,18 @@ def PseudoCCLWU : SFBLoad;
def PseudoCCLD : SFBLoad;
}
+def ZibiCond : PatLeaf<(cond), [{
+ switch (N->get()) {
+ default:
+ return false;
+ case ISD::SETEQ:
+ case ISD::SETNE:
+ return true;
+ }
+}]>;
+
// Zibi: select with immediate comparison folded into SFB.
// imm5_zibi is defined in RISCVInstrInfoZibi.td (included before this file).
-class SelectZibiSFB<CondCode Cond>
- : Pat<(riscv_selectcc (XLenVT GPR:$lhs), imm5_zibi:$cimm, Cond:$cc,
- (XLenVT GPR:$truev), GPR:$falsev),
- (PseudoCCMOVGPR GPR:$falsev, GPR:$truev, (CCtoZibiBCC $cc), GPR:$lhs,
- imm5_zibi:$cimm)>;
-
-let Predicates = [HasStdExtZibi, HasShortForwardBranchImm] in {
- def : SelectZibiSFB<SETEQ>;
- def : SelectZibiSFB<SETNE>;
-} // Predicates = [HasStdExtZibi, HasShortForwardBranchImm]
+let Predicates = [HasStdExtZibi, HasShortForwardBranchImm] in
+def : Pat<(riscv_selectcc (XLenVT GPR:$lhs), imm5_zibi:$cimm, ZibiCond:$cc, (XLenVT GPR:$truev), GPR:$falsev),
+ (PseudoCCMOVGPR GPR:$falsev, GPR:$truev, (CCtoZibiBCC $cc), GPR:$lhs, imm5_zibi:$cimm)>;
>From a7eabe54d5b09263bc84c23e9609d5fa35a6f60a Mon Sep 17 00:00:00 2001
From: Craig Topper <craig.topper at sifive.com>
Date: Fri, 14 Aug 2026 20:04:40 -0700
Subject: [PATCH 2/3] Apply suggestion from @topperc
---
llvm/lib/Target/RISCV/RISCVInstrInfoSFB.td | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoSFB.td b/llvm/lib/Target/RISCV/RISCVInstrInfoSFB.td
index 419256876f136..79d17ace73b75 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoSFB.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoSFB.td
@@ -275,4 +275,4 @@ def ZibiCond : PatLeaf<(cond), [{
// imm5_zibi is defined in RISCVInstrInfoZibi.td (included before this file).
let Predicates = [HasStdExtZibi, HasShortForwardBranchImm] in
def : Pat<(riscv_selectcc (XLenVT GPR:$lhs), imm5_zibi:$cimm, ZibiCond:$cc, (XLenVT GPR:$truev), GPR:$falsev),
- (PseudoCCMOVGPR GPR:$falsev, GPR:$truev, (CCtoZibiBCC $cc), GPR:$lhs, imm5_zibi:$cimm)>;
+ (PseudoCCMOVGPR GPR:$falsev, GPR:$truev, (CCtoZibiBCC $cc), GPR:$lhs, imm5_zibi:$cimm)>;
>From 4275ab8acd75ab730b942b0dfaa214472ae1dfaf Mon Sep 17 00:00:00 2001
From: Craig Topper <craig.topper at sifive.com>
Date: Fri, 14 Aug 2026 21:21:22 -0700
Subject: [PATCH 3/3] fixup! Update select patterns too
---
llvm/lib/Target/RISCV/RISCVInstrInfoSFB.td | 15 +++-----------
llvm/lib/Target/RISCV/RISCVInstrInfoZibi.td | 23 ++++++++++++++-------
2 files changed, 18 insertions(+), 20 deletions(-)
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoSFB.td b/llvm/lib/Target/RISCV/RISCVInstrInfoSFB.td
index 324cbbd67d110..c82e357bdc565 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoSFB.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoSFB.td
@@ -261,18 +261,9 @@ def PseudoCCLWU : SFBLoad;
def PseudoCCLD : SFBLoad;
}
-def ZibiCond : PatLeaf<(cond), [{
- switch (N->get()) {
- default:
- return false;
- case ISD::SETEQ:
- case ISD::SETNE:
- return true;
- }
-}]>;
-
// Zibi: select with immediate comparison folded into SFB.
-// imm5_zibi is defined in RISCVInstrInfoZibi.td (included before this file).
-let Predicates = [HasStdExtZibi, HasShortForwardBranchIALU] in {
+// imm5_zibi and ZibiCond are defined in RISCVInstrInfoZibi.td (included before
+// this file).
+let Predicates = [HasStdExtZibi, HasShortForwardBranchIALU] in
def : Pat<(riscv_selectcc (XLenVT GPR:$lhs), imm5_zibi:$cimm, ZibiCond:$cc, (XLenVT GPR:$truev), GPR:$falsev),
(PseudoCCMOVGPR GPR:$falsev, GPR:$truev, (CCtoZibiBCC $cc), GPR:$lhs, imm5_zibi:$cimm)>;
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoZibi.td b/llvm/lib/Target/RISCV/RISCVInstrInfoZibi.td
index e7605f5385e40..b51eb51979420 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoZibi.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoZibi.td
@@ -26,6 +26,17 @@ def imm5_zibi : RISCVOp<XLenVT>, ImmLeaf<XLenVT, [{
let OperandType = "OPERAND_IMM5_ZIBI";
}
+// The condition codes supported by BEQI/BNEI.
+def ZibiCond : PatLeaf<(cond), [{
+ switch (N->get()) {
+ default:
+ return false;
+ case ISD::SETEQ:
+ case ISD::SETNE:
+ return true;
+ }
+}]>;
+
class Branch_imm<bits<3> funct3, string opcodestr>
: RVInstBIMM<funct3, OPC_BRANCH, (outs),
(ins GPR:$rs1, imm5_zibi:$cimm, bare_simm13_lsb0:$imm12),
@@ -55,15 +66,11 @@ multiclass BccImmPat<CondCode Cond, Branch_imm Inst> {
defm CC_Imm5_Zibi : SelectCC_GPR_riirr<GPR, imm5_zibi>;
-class SelectZibi<CondCode Cond>
- : Pat<(riscv_selectcc (XLenVT GPR:$lhs), imm5_zibi:$cimm, Cond:$cc,
- (XLenVT GPR:$truev), GPR:$falsev),
- (Select_GPR_Using_CC_Imm5_Zibi GPR:$lhs, imm5_zibi:$cimm,
- (CCtoRISCVCC $cc), GPR:$truev, GPR:$falsev)>;
-
let Predicates = [HasStdExtZibi] in {
- def : SelectZibi<SETEQ>;
- def : SelectZibi<SETNE>;
+ def : Pat<(riscv_selectcc (XLenVT GPR:$lhs), imm5_zibi:$cimm, ZibiCond:$cc,
+ (XLenVT GPR:$truev), GPR:$falsev),
+ (Select_GPR_Using_CC_Imm5_Zibi GPR:$lhs, imm5_zibi:$cimm,
+ (CCtoRISCVCC $cc), GPR:$truev, GPR:$falsev)>;
defm : BccImmPat<SETEQ, BEQI>;
defm : BccImmPat<SETNE, BNEI>;
More information about the llvm-commits
mailing list