[llvm] [SDAG] Add basic type legalization for experimental.vector.match (PR #213344)

Benjamin Maxwell via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 4 06:29:53 PDT 2026


================
@@ -1023,16 +1157,47 @@ define <4 x i1> @match_v4xi32_v4i32(<4 x i32> %op1, <4 x i32> %op2, <4 x i1> %ma
 }
 
 define <2 x i1> @match_v2xi64_v2i64(<2 x i64> %op1, <2 x i64> %op2, <2 x i1> %mask) {
-; CHECK-LABEL: match_v2xi64_v2i64:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
-; CHECK-NEXT:    vrgather.vi v10, v9, 1
-; CHECK-NEXT:    vrgather.vi v11, v9, 0
-; CHECK-NEXT:    vmseq.vv v9, v8, v10
-; CHECK-NEXT:    vmseq.vv v8, v8, v11
-; CHECK-NEXT:    vmor.mm v8, v8, v9
-; CHECK-NEXT:    vmand.mm v0, v8, v0
-; CHECK-NEXT:    ret
+; RV32-LABEL: match_v2xi64_v2i64:
+; RV32:       # %bb.0:
+; RV32-NEXT:    addi sp, sp, -16
+; RV32-NEXT:    .cfi_def_cfa_offset 16
+; RV32-NEXT:    li a0, 32
+; RV32-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
+; RV32-NEXT:    vmv.x.s a1, v9
+; RV32-NEXT:    vsrl.vx v10, v9, a0
+; RV32-NEXT:    vmv.x.s a2, v10
+; RV32-NEXT:    vslidedown.vi v9, v9, 1
+; RV32-NEXT:    vmv.x.s a3, v9
+; RV32-NEXT:    vsrl.vx v9, v9, a0
+; RV32-NEXT:    vmv.x.s a0, v9
+; RV32-NEXT:    sw a1, 8(sp)
+; RV32-NEXT:    sw a2, 12(sp)
+; RV32-NEXT:    sw a3, 0(sp)
+; RV32-NEXT:    sw a0, 4(sp)
+; RV32-NEXT:    addi a0, sp, 8
+; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
+; RV32-NEXT:    vlse64.v v9, (a0), zero
+; RV32-NEXT:    mv a0, sp
----------------
MacDue wrote:

I don't know too much about the RISC-V lowering, but it seem like the expansion occurs too late for the splat to be pattern matched into something that avoids the spills. 

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


More information about the llvm-commits mailing list