[llvm-branch-commits] [llvm] [RISCV] Support non-power-of-2 types when expanding memcmp (PR #114971)
Pengcheng Wang via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Nov 6 04:01:43 PST 2024
================
@@ -1069,21 +1069,14 @@ define i32 @bcmp_size_15(ptr %s1, ptr %s2) nounwind optsize {
;
; CHECK-UNALIGNED-RV32-V-LABEL: bcmp_size_15:
; CHECK-UNALIGNED-RV32-V: # %bb.0: # %entry
-; CHECK-UNALIGNED-RV32-V-NEXT: lw a2, 0(a0)
-; CHECK-UNALIGNED-RV32-V-NEXT: lw a3, 4(a0)
-; CHECK-UNALIGNED-RV32-V-NEXT: lw a4, 7(a0)
-; CHECK-UNALIGNED-RV32-V-NEXT: lw a0, 11(a0)
-; CHECK-UNALIGNED-RV32-V-NEXT: lw a5, 0(a1)
-; CHECK-UNALIGNED-RV32-V-NEXT: lw a6, 4(a1)
-; CHECK-UNALIGNED-RV32-V-NEXT: lw a7, 7(a1)
-; CHECK-UNALIGNED-RV32-V-NEXT: lw a1, 11(a1)
-; CHECK-UNALIGNED-RV32-V-NEXT: xor a2, a2, a5
-; CHECK-UNALIGNED-RV32-V-NEXT: xor a3, a3, a6
-; CHECK-UNALIGNED-RV32-V-NEXT: xor a4, a4, a7
-; CHECK-UNALIGNED-RV32-V-NEXT: xor a0, a0, a1
-; CHECK-UNALIGNED-RV32-V-NEXT: or a0, a3, a0
-; CHECK-UNALIGNED-RV32-V-NEXT: or a2, a2, a4
-; CHECK-UNALIGNED-RV32-V-NEXT: or a0, a2, a0
+; CHECK-UNALIGNED-RV32-V-NEXT: vsetivli zero, 15, e8, m1, ta, ma
+; CHECK-UNALIGNED-RV32-V-NEXT: vle8.v v8, (a0)
+; CHECK-UNALIGNED-RV32-V-NEXT: vle8.v v9, (a1)
+; CHECK-UNALIGNED-RV32-V-NEXT: vsetivli zero, 16, e8, m1, ta, ma
+; CHECK-UNALIGNED-RV32-V-NEXT: vmset.m v0
+; CHECK-UNALIGNED-RV32-V-NEXT: vmsne.vv v8, v8, v9
+; CHECK-UNALIGNED-RV32-V-NEXT: vsetivli zero, 15, e8, m1, ta, ma
+; CHECK-UNALIGNED-RV32-V-NEXT: vcpop.m a0, v8, v0.t
----------------
wangpc-pp wrote:
I think this is the lowering of `ISD::VECREDUCE_OR` nodes.
The `VL` parameter comes from `getDefaultVLOps` and its value is 16 because the vector type `v15i8` has been widened to `v16i8`.
We may use `VP_REDUCE_OR` here.
https://github.com/llvm/llvm-project/pull/114971
More information about the llvm-branch-commits
mailing list