[llvm] [RISCV] Sources of vmerge shouldn't overlap V0 (PR #170070)
Luke Lau via llvm-commits
llvm-commits at lists.llvm.org
Sun Nov 30 21:47:57 PST 2025
================
@@ -765,8 +765,9 @@ define <vscale x 8 x i64> @vmerge_xv_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vs
; RV32-NEXT: sw a0, 8(sp)
; RV32-NEXT: sw a1, 12(sp)
; RV32-NEXT: addi a0, sp, 8
-; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, mu
-; RV32-NEXT: vlse64.v v8, (a0), zero, v0.t
+; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, ma
+; RV32-NEXT: vlse64.v v16, (a0), zero
+; RV32-NEXT: vmerge.vvm v8, v8, v16, v0
----------------
lukel97 wrote:
I think we need to teach RISCVVectorPeephole::foldVMergeToMask to look through COPYs, since the MIR looks like this now:
```
%5:vrm8 = PseudoVLSE64_V_M8 $noreg(tied-def 0), killed %4:gpr, $x0, -1, 6, 2 :: (load (s64) from %stack.0)
%7:vrm8nov0 = COPY %0:vrm8
%8:vrm8nov0 = COPY %5:vrm8
%9:vmv0 = COPY %3:vr
%6:vrm8nov0 = PseudoVMERGE_VVM_M8 $noreg(tied-def 0), %7:vrm8nov0, killed %8:vrm8nov0, %9:vmv0, -1, 6
```
I can look at this in a separate PR?
https://github.com/llvm/llvm-project/pull/170070
More information about the llvm-commits
mailing list