[llvm] [RISCV] AddEdge between first mask producer and user of V0 (PR #146855)
Liao Chunyu via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 3 19:20:34 PDT 2025
================
@@ -493,33 +487,31 @@ define <vscale x 2 x i8> @vwop_vscale_zext_i1i8_multiple_users(ptr %x, ptr %y, p
; NO_FOLDING-NEXT: vsetvli a3, zero, e8, mf4, ta, mu
; NO_FOLDING-NEXT: vlm.v v0, (a0)
; NO_FOLDING-NEXT: vlm.v v8, (a2)
-; NO_FOLDING-NEXT: vlm.v v9, (a1)
-; NO_FOLDING-NEXT: vmv.v.i v10, 0
-; NO_FOLDING-NEXT: vmerge.vim v11, v10, 1, v0
+; NO_FOLDING-NEXT: vmv.v.i v9, 0
+; NO_FOLDING-NEXT: vmerge.vim v10, v9, 1, v0
; NO_FOLDING-NEXT: vmv1r.v v0, v8
-; NO_FOLDING-NEXT: vmerge.vim v8, v10, 1, v0
-; NO_FOLDING-NEXT: vadd.vv v10, v11, v8
-; NO_FOLDING-NEXT: vsub.vv v8, v11, v8
-; NO_FOLDING-NEXT: vmv1r.v v0, v9
-; NO_FOLDING-NEXT: vor.vv v10, v10, v11, v0.t
-; NO_FOLDING-NEXT: vor.vv v8, v10, v8
+; NO_FOLDING-NEXT: vmerge.vim v8, v9, 1, v0
+; NO_FOLDING-NEXT: vlm.v v0, (a1)
+; NO_FOLDING-NEXT: vadd.vv v9, v10, v8
+; NO_FOLDING-NEXT: vsub.vv v8, v10, v8
+; NO_FOLDING-NEXT: vor.vv v9, v9, v10, v0.t
+; NO_FOLDING-NEXT: vor.vv v8, v9, v8
; NO_FOLDING-NEXT: ret
;
; FOLDING-LABEL: vwop_vscale_zext_i1i8_multiple_users:
; FOLDING: # %bb.0:
; FOLDING-NEXT: vsetvli a3, zero, e8, mf4, ta, mu
; FOLDING-NEXT: vlm.v v0, (a0)
; FOLDING-NEXT: vlm.v v8, (a2)
-; FOLDING-NEXT: vlm.v v9, (a1)
-; FOLDING-NEXT: vmv.v.i v10, 0
-; FOLDING-NEXT: vmerge.vim v11, v10, 1, v0
+; FOLDING-NEXT: vmv.v.i v9, 0
+; FOLDING-NEXT: vmerge.vim v10, v9, 1, v0
; FOLDING-NEXT: vmv1r.v v0, v8
----------------
ChunyuLiao wrote:
```
liveins: $x10, $x11, $x12
16B %2:gpr = COPY $x12
32B %1:gpr = COPY $x11
48B %0:gpr = COPY $x10
64B %3:vr = PseudoVLM_V_B32 undef %3:vr(tied-def 0), %0:gpr, -1, 0, 3 :: (load (<vscale x 1 x s8>) from %ir.x)
80B %5:vr = PseudoVLM_V_B32 undef %5:vr(tied-def 0), %1:gpr, -1, 0, 3 :: (load (<vscale x 1 x s8>) from %ir.y)
96B %6:vr = PseudoVLM_V_B32 undef %6:vr(tied-def 0), %2:gpr, -1, 0, 3 :: (load (<vscale x 1 x s8>) from %ir.z)
112B %8:vr = PseudoVMV_V_I_MF4 undef %8:vr(tied-def 0), 0, -1, 3, 0
128B $v0 = COPY %3:vr
144B %9:vrnov0 = PseudoVMERGE_VIM_MF4 undef %9:vrnov0(tied-def 0), %8:vr, 1, killed $v0, -1, 3
160B $v0 = COPY %6:vr --------- The issue is that this copy wasn't eliminated.
176B %11:vrnov0 = PseudoVMERGE_VIM_MF4 undef %11:vrnov0(tied-def 0), %8:vr, 1, killed $v0, -1, 3
192B %15:vrnov0 = PseudoVADD_VV_MF4 undef %15:vrnov0(tied-def 0), %9:vrnov0, %11:vrnov0, -1, 3, 3
208B %14:vr = PseudoVSUB_VV_MF4 undef %14:vr(tied-def 0), %9:vrnov0, %11:vrnov0, -1, 3, 3
224B $v0 = COPY %5:vr
240B %15:vrnov0 = PseudoVOR_VV_MF4_MASK %15:vrnov0(tied-def 0), %15:vrnov0, %9:vrnov0, killed $v0, -1, 3, 1
```
$v0 = COPY %6:vr --------- The issue is that this copy wasn't eliminated.
To address it, I think we might need to add edges from all existing defs to the use.
https://github.com/llvm/llvm-project/pull/146855
More information about the llvm-commits
mailing list