[llvm] [RISCV] Lower flag check pattern to use a bitmask-shift (PR #169557)

Ryan Buchner via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 25 11:47:02 PST 2025


================
@@ -16736,6 +16736,52 @@ static SDValue combineOrAndToBitfieldInsert(SDNode *N, SelectionDAG &DAG,
   return DAG.getNode(RISCVISD::QC_INSB, DL, MVT::i32, Ops);
 }
 
+// or (icmp eq x, imm0), (icmp eq x, imm1) -> czero.eqz (sltui x, 64), (bext x,
+// 1 << imm0 | 1 << imm1) If [imm0, imm1] < 64
+static SDValue combineOrOfImmCmpToBitExtract(SDNode *N, SelectionDAG &DAG,
+                                             const RISCVSubtarget &Subtarget) {
+  using namespace SDPatternMatch;
+
+  auto CollectSetEqImmTree = [](auto &&Self, SmallVector<APInt, 4> &FlagVals,
+                                SDNode *N, SDValue &X) -> bool {
----------------
bababuck wrote:

I know references to SDValue's are generally non-optimal, but is this acceptable here since I need to modify the value?

https://github.com/llvm/llvm-project/pull/169557


More information about the llvm-commits mailing list