Skip to content

Commit 8f8e4ed

Browse files
committed
Add tests where mismatching VL/masks prevents vwadd from being combined
1 parent d8d131d commit 8f8e4ed

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

llvm/test/CodeGen/RISCV/rvv/vwadd-vp.ll

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,69 @@ declare <vscale x 2 x i32> @llvm.vp.sext.nxv2i32.nxv2i8(<vscale x 2 x i8>, <vsca
4141
declare <vscale x 2 x i32> @llvm.vp.zext.nxv2i32.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
4242
declare <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i32)
4343
declare <vscale x 2 x i32> @llvm.vp.merge.nxv2i32(<vscale x 2 x i1>, <vscale x 2 x i32>, <vscale x 2 x i32>, i32)
44+
45+
define <vscale x 2 x i32> @vwadd_vv_vpnxv2i32_vpnxv2i16_vpnxv2i16(<vscale x 2 x i16> %x, <vscale x 2 x i16> %y, <vscale x 2 x i1> %m, i32 signext %evl) {
46+
; CHECK-LABEL: vwadd_vv_vpnxv2i32_vpnxv2i16_vpnxv2i16:
47+
; CHECK: # %bb.0:
48+
; CHECK-NEXT: slli a0, a0, 32
49+
; CHECK-NEXT: srli a0, a0, 32
50+
; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
51+
; CHECK-NEXT: vwadd.vv v10, v8, v9, v0.t
52+
; CHECK-NEXT: vmv1r.v v8, v10
53+
; CHECK-NEXT: ret
54+
%x.sext = call <vscale x 2 x i32> @llvm.vp.sext.nxv2i32.nxv2i16(<vscale x 2 x i16> %x, <vscale x 2 x i1> %m, i32 %evl)
55+
%y.sext = call <vscale x 2 x i32> @llvm.vp.sext.nxv2i32.nxv2i16(<vscale x 2 x i16> %y, <vscale x 2 x i1> %m, i32 %evl)
56+
%add = call <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32> %x.sext, <vscale x 2 x i32> %y.sext, <vscale x 2 x i1> %m, i32 %evl)
57+
ret <vscale x 2 x i32> %add
58+
}
59+
60+
define <vscale x 2 x i32> @vwadd_vv_vpnxv2i32_vpnxv2i16_nxv2i16(<vscale x 2 x i16> %x, <vscale x 2 x i16> %y, <vscale x 2 x i1> %m, i32 signext %evl) {
61+
; CHECK-LABEL: vwadd_vv_vpnxv2i32_vpnxv2i16_nxv2i16:
62+
; CHECK: # %bb.0:
63+
; CHECK-NEXT: slli a0, a0, 32
64+
; CHECK-NEXT: srli a0, a0, 32
65+
; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
66+
; CHECK-NEXT: vsext.vf2 v10, v9
67+
; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
68+
; CHECK-NEXT: vwadd.wv v9, v10, v8, v0.t
69+
; CHECK-NEXT: vmv1r.v v8, v9
70+
; CHECK-NEXT: ret
71+
%x.sext = call <vscale x 2 x i32> @llvm.vp.sext.nxv2i32.nxv2i16(<vscale x 2 x i16> %x, <vscale x 2 x i1> %m, i32 %evl)
72+
%y.sext = sext <vscale x 2 x i16> %y to <vscale x 2 x i32>
73+
%add = call <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32> %x.sext, <vscale x 2 x i32> %y.sext, <vscale x 2 x i1> %m, i32 %evl)
74+
ret <vscale x 2 x i32> %add
75+
}
76+
77+
define <vscale x 2 x i32> @vwadd_vv_vpnxv2i32_nxv2i16_nxv2i16(<vscale x 2 x i16> %x, <vscale x 2 x i16> %y, <vscale x 2 x i1> %m, i32 signext %evl) {
78+
; CHECK-LABEL: vwadd_vv_vpnxv2i32_nxv2i16_nxv2i16:
79+
; CHECK: # %bb.0:
80+
; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
81+
; CHECK-NEXT: vsext.vf2 v10, v8
82+
; CHECK-NEXT: vsext.vf2 v8, v9
83+
; CHECK-NEXT: slli a0, a0, 32
84+
; CHECK-NEXT: srli a0, a0, 32
85+
; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
86+
; CHECK-NEXT: vadd.vv v8, v10, v8, v0.t
87+
; CHECK-NEXT: ret
88+
%x.sext = sext <vscale x 2 x i16> %x to <vscale x 2 x i32>
89+
%y.sext = sext <vscale x 2 x i16> %y to <vscale x 2 x i32>
90+
%add = call <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32> %x.sext, <vscale x 2 x i32> %y.sext, <vscale x 2 x i1> %m, i32 %evl)
91+
ret <vscale x 2 x i32> %add
92+
}
93+
94+
define <vscale x 2 x i32> @vwadd_vv_nxv2i32_vpnxv2i16_vpnxv2i16(<vscale x 2 x i16> %x, <vscale x 2 x i16> %y, <vscale x 2 x i1> %m, i32 signext %evl) {
95+
; CHECK-LABEL: vwadd_vv_nxv2i32_vpnxv2i16_vpnxv2i16:
96+
; CHECK: # %bb.0:
97+
; CHECK-NEXT: slli a0, a0, 32
98+
; CHECK-NEXT: srli a0, a0, 32
99+
; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
100+
; CHECK-NEXT: vsext.vf2 v10, v8, v0.t
101+
; CHECK-NEXT: vsext.vf2 v8, v9, v0.t
102+
; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
103+
; CHECK-NEXT: vadd.vv v8, v10, v8
104+
; CHECK-NEXT: ret
105+
%x.sext = call <vscale x 2 x i32> @llvm.vp.sext.nxv2i32.nxv2i16(<vscale x 2 x i16> %x, <vscale x 2 x i1> %m, i32 %evl)
106+
%y.sext = call <vscale x 2 x i32> @llvm.vp.sext.nxv2i32.nxv2i16(<vscale x 2 x i16> %y, <vscale x 2 x i1> %m, i32 %evl)
107+
%add = add <vscale x 2 x i32> %x.sext, %y.sext
108+
ret <vscale x 2 x i32> %add
109+
}

0 commit comments

Comments
 (0)