Skip to content

Commit fd59319

Browse files
committed
[RISCV][MachineCombiner] Pre-commit test for RVV reassociations
This is the pre-commit test for PR #88307.
1 parent 354a04c commit fd59319

File tree

1 file changed

+254
-0
lines changed

1 file changed

+254
-0
lines changed
Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2+
; RUN: llc -mtriple=riscv32 -mattr='+v' -O3 %s -o - | FileCheck %s
3+
4+
declare <vscale x 1 x i8> @llvm.riscv.vadd.nxv1i8.nxv1i8(
5+
<vscale x 1 x i8>,
6+
<vscale x 1 x i8>,
7+
<vscale x 1 x i8>,
8+
i32)
9+
10+
declare <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
11+
<vscale x 1 x i8>,
12+
<vscale x 1 x i8>,
13+
<vscale x 1 x i8>,
14+
<vscale x 1 x i1>,
15+
i32, i32)
16+
17+
declare <vscale x 1 x i8> @llvm.riscv.vsub.nxv1i8.nxv1i8(
18+
<vscale x 1 x i8>,
19+
<vscale x 1 x i8>,
20+
<vscale x 1 x i8>,
21+
i32)
22+
23+
declare <vscale x 1 x i8> @llvm.riscv.vmul.nxv1i8.nxv1i8(
24+
<vscale x 1 x i8>,
25+
<vscale x 1 x i8>,
26+
<vscale x 1 x i8>,
27+
i32)
28+
29+
define <vscale x 1 x i8> @simple_vadd_vv(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, i32 %2) nounwind {
30+
; CHECK-LABEL: simple_vadd_vv:
31+
; CHECK: # %bb.0: # %entry
32+
; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
33+
; CHECK-NEXT: vadd.vv v9, v8, v9
34+
; CHECK-NEXT: vadd.vv v9, v8, v9
35+
; CHECK-NEXT: vadd.vv v8, v8, v9
36+
; CHECK-NEXT: ret
37+
entry:
38+
%a = call <vscale x 1 x i8> @llvm.riscv.vadd.nxv1i8.nxv1i8(
39+
<vscale x 1 x i8> undef,
40+
<vscale x 1 x i8> %0,
41+
<vscale x 1 x i8> %1,
42+
i32 %2)
43+
44+
%b = call <vscale x 1 x i8> @llvm.riscv.vadd.nxv1i8.nxv1i8(
45+
<vscale x 1 x i8> undef,
46+
<vscale x 1 x i8> %0,
47+
<vscale x 1 x i8> %a,
48+
i32 %2)
49+
50+
%c = call <vscale x 1 x i8> @llvm.riscv.vadd.nxv1i8.nxv1i8(
51+
<vscale x 1 x i8> undef,
52+
<vscale x 1 x i8> %0,
53+
<vscale x 1 x i8> %b,
54+
i32 %2)
55+
56+
ret <vscale x 1 x i8> %c
57+
}
58+
59+
define <vscale x 1 x i8> @simple_vadd_vsub_vv(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, i32 %2) nounwind {
60+
; CHECK-LABEL: simple_vadd_vsub_vv:
61+
; CHECK: # %bb.0: # %entry
62+
; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
63+
; CHECK-NEXT: vsub.vv v9, v8, v9
64+
; CHECK-NEXT: vadd.vv v9, v8, v9
65+
; CHECK-NEXT: vadd.vv v8, v8, v9
66+
; CHECK-NEXT: ret
67+
entry:
68+
%a = call <vscale x 1 x i8> @llvm.riscv.vsub.nxv1i8.nxv1i8(
69+
<vscale x 1 x i8> undef,
70+
<vscale x 1 x i8> %0,
71+
<vscale x 1 x i8> %1,
72+
i32 %2)
73+
74+
%b = call <vscale x 1 x i8> @llvm.riscv.vadd.nxv1i8.nxv1i8(
75+
<vscale x 1 x i8> undef,
76+
<vscale x 1 x i8> %0,
77+
<vscale x 1 x i8> %a,
78+
i32 %2)
79+
80+
%c = call <vscale x 1 x i8> @llvm.riscv.vadd.nxv1i8.nxv1i8(
81+
<vscale x 1 x i8> undef,
82+
<vscale x 1 x i8> %0,
83+
<vscale x 1 x i8> %b,
84+
i32 %2)
85+
86+
ret <vscale x 1 x i8> %c
87+
}
88+
89+
define <vscale x 1 x i8> @simple_vmul_vv(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, i32 %2) nounwind {
90+
; CHECK-LABEL: simple_vmul_vv:
91+
; CHECK: # %bb.0: # %entry
92+
; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
93+
; CHECK-NEXT: vmul.vv v9, v8, v9
94+
; CHECK-NEXT: vmul.vv v9, v8, v9
95+
; CHECK-NEXT: vmul.vv v8, v8, v9
96+
; CHECK-NEXT: ret
97+
entry:
98+
%a = call <vscale x 1 x i8> @llvm.riscv.vmul.nxv1i8.nxv1i8(
99+
<vscale x 1 x i8> undef,
100+
<vscale x 1 x i8> %0,
101+
<vscale x 1 x i8> %1,
102+
i32 %2)
103+
104+
%b = call <vscale x 1 x i8> @llvm.riscv.vmul.nxv1i8.nxv1i8(
105+
<vscale x 1 x i8> undef,
106+
<vscale x 1 x i8> %0,
107+
<vscale x 1 x i8> %a,
108+
i32 %2)
109+
110+
%c = call <vscale x 1 x i8> @llvm.riscv.vmul.nxv1i8.nxv1i8(
111+
<vscale x 1 x i8> undef,
112+
<vscale x 1 x i8> %0,
113+
<vscale x 1 x i8> %b,
114+
i32 %2)
115+
116+
ret <vscale x 1 x i8> %c
117+
}
118+
119+
; With passthru and masks.
120+
define <vscale x 1 x i8> @vadd_vv_passthru(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, i32 %2) nounwind {
121+
; CHECK-LABEL: vadd_vv_passthru:
122+
; CHECK: # %bb.0: # %entry
123+
; CHECK-NEXT: vsetvli zero, a0, e8, mf8, tu, ma
124+
; CHECK-NEXT: vmv1r.v v10, v8
125+
; CHECK-NEXT: vadd.vv v10, v8, v9
126+
; CHECK-NEXT: vmv1r.v v9, v8
127+
; CHECK-NEXT: vadd.vv v9, v8, v10
128+
; CHECK-NEXT: vadd.vv v8, v8, v9
129+
; CHECK-NEXT: ret
130+
entry:
131+
%a = call <vscale x 1 x i8> @llvm.riscv.vadd.nxv1i8.nxv1i8(
132+
<vscale x 1 x i8> %0,
133+
<vscale x 1 x i8> %0,
134+
<vscale x 1 x i8> %1,
135+
i32 %2)
136+
137+
%b = call <vscale x 1 x i8> @llvm.riscv.vadd.nxv1i8.nxv1i8(
138+
<vscale x 1 x i8> %0,
139+
<vscale x 1 x i8> %0,
140+
<vscale x 1 x i8> %a,
141+
i32 %2)
142+
143+
%c = call <vscale x 1 x i8> @llvm.riscv.vadd.nxv1i8.nxv1i8(
144+
<vscale x 1 x i8> %0,
145+
<vscale x 1 x i8> %0,
146+
<vscale x 1 x i8> %b,
147+
i32 %2)
148+
149+
ret <vscale x 1 x i8> %c
150+
}
151+
152+
define <vscale x 1 x i8> @vadd_vv_passthru_negative(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, i32 %2) nounwind {
153+
; CHECK-LABEL: vadd_vv_passthru_negative:
154+
; CHECK: # %bb.0: # %entry
155+
; CHECK-NEXT: vsetvli zero, a0, e8, mf8, tu, ma
156+
; CHECK-NEXT: vmv1r.v v10, v8
157+
; CHECK-NEXT: vadd.vv v10, v8, v9
158+
; CHECK-NEXT: vadd.vv v9, v8, v10
159+
; CHECK-NEXT: vadd.vv v8, v8, v9
160+
; CHECK-NEXT: ret
161+
entry:
162+
%a = call <vscale x 1 x i8> @llvm.riscv.vadd.nxv1i8.nxv1i8(
163+
<vscale x 1 x i8> %0,
164+
<vscale x 1 x i8> %0,
165+
<vscale x 1 x i8> %1,
166+
i32 %2)
167+
168+
%b = call <vscale x 1 x i8> @llvm.riscv.vadd.nxv1i8.nxv1i8(
169+
<vscale x 1 x i8> %1,
170+
<vscale x 1 x i8> %0,
171+
<vscale x 1 x i8> %a,
172+
i32 %2)
173+
174+
%c = call <vscale x 1 x i8> @llvm.riscv.vadd.nxv1i8.nxv1i8(
175+
<vscale x 1 x i8> %0,
176+
<vscale x 1 x i8> %0,
177+
<vscale x 1 x i8> %b,
178+
i32 %2)
179+
180+
ret <vscale x 1 x i8> %c
181+
}
182+
183+
define <vscale x 1 x i8> @vadd_vv_mask(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, i32 %2, <vscale x 1 x i1> %m) nounwind {
184+
; CHECK-LABEL: vadd_vv_mask:
185+
; CHECK: # %bb.0: # %entry
186+
; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, mu
187+
; CHECK-NEXT: vmv1r.v v10, v8
188+
; CHECK-NEXT: vadd.vv v10, v8, v9, v0.t
189+
; CHECK-NEXT: vmv1r.v v9, v8
190+
; CHECK-NEXT: vadd.vv v9, v8, v10, v0.t
191+
; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
192+
; CHECK-NEXT: ret
193+
entry:
194+
%a = call <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
195+
<vscale x 1 x i8> %0,
196+
<vscale x 1 x i8> %0,
197+
<vscale x 1 x i8> %1,
198+
<vscale x 1 x i1> %m,
199+
i32 %2, i32 1)
200+
201+
%b = call <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
202+
<vscale x 1 x i8> %0,
203+
<vscale x 1 x i8> %0,
204+
<vscale x 1 x i8> %a,
205+
<vscale x 1 x i1> %m,
206+
i32 %2, i32 1)
207+
208+
%c = call <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
209+
<vscale x 1 x i8> %0,
210+
<vscale x 1 x i8> %0,
211+
<vscale x 1 x i8> %b,
212+
<vscale x 1 x i1> %m,
213+
i32 %2, i32 1)
214+
215+
ret <vscale x 1 x i8> %c
216+
}
217+
218+
define <vscale x 1 x i8> @vadd_vv_mask_negative(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, i32 %2, <vscale x 1 x i1> %m) nounwind {
219+
; CHECK-LABEL: vadd_vv_mask_negative:
220+
; CHECK: # %bb.0: # %entry
221+
; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, mu
222+
; CHECK-NEXT: vmv1r.v v10, v8
223+
; CHECK-NEXT: vadd.vv v10, v8, v9, v0.t
224+
; CHECK-NEXT: vmv1r.v v9, v8
225+
; CHECK-NEXT: vadd.vv v9, v8, v10, v0.t
226+
; CHECK-NEXT: vadd.vv v8, v8, v9
227+
; CHECK-NEXT: ret
228+
entry:
229+
%a = call <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
230+
<vscale x 1 x i8> %0,
231+
<vscale x 1 x i8> %0,
232+
<vscale x 1 x i8> %1,
233+
<vscale x 1 x i1> %m,
234+
i32 %2, i32 1)
235+
236+
%b = call <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
237+
<vscale x 1 x i8> %0,
238+
<vscale x 1 x i8> %0,
239+
<vscale x 1 x i8> %a,
240+
<vscale x 1 x i1> %m,
241+
i32 %2, i32 1)
242+
243+
%splat = insertelement <vscale x 1 x i1> poison, i1 1, i32 0
244+
%m2 = shufflevector <vscale x 1 x i1> %splat, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
245+
%c = call <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
246+
<vscale x 1 x i8> %0,
247+
<vscale x 1 x i8> %0,
248+
<vscale x 1 x i8> %b,
249+
<vscale x 1 x i1> %m2,
250+
i32 %2, i32 1)
251+
252+
ret <vscale x 1 x i8> %c
253+
}
254+

0 commit comments

Comments
 (0)