[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-compress-int.ll
blob3952dc31838a2d718f892dd82f7f3c41f0dba81c
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2 ; RUN: llc -mtriple=riscv32 -mattr=+m,+v -verify-machineinstrs < %s | FileCheck %s
3 ; RUN: llc -mtriple=riscv64 -mattr=+m,+v -verify-machineinstrs < %s | FileCheck %s
5 define <1 x i8> @vector_compress_v1i8(<1 x i8> %v, <1 x i1> %mask) {
6 ; CHECK-LABEL: vector_compress_v1i8:
7 ; CHECK:       # %bb.0:
8 ; CHECK-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma
9 ; CHECK-NEXT:    vcompress.vm v9, v8, v0
10 ; CHECK-NEXT:    vmv1r.v v8, v9
11 ; CHECK-NEXT:    ret
12   %ret = call <1 x i8> @llvm.experimental.vector.compress.v1i8(<1 x i8> %v, <1 x i1> %mask, <1 x i8> undef)
13   ret <1 x i8> %ret
16 define <1 x i8> @vector_compress_v1i8_passthru(<1 x i8> %passthru, <1 x i8> %v, <1 x i1> %mask) {
17 ; CHECK-LABEL: vector_compress_v1i8_passthru:
18 ; CHECK:       # %bb.0:
19 ; CHECK-NEXT:    vsetivli zero, 1, e8, mf8, tu, ma
20 ; CHECK-NEXT:    vcompress.vm v8, v9, v0
21 ; CHECK-NEXT:    ret
22   %ret = call <1 x i8> @llvm.experimental.vector.compress.v1i8(<1 x i8> %v, <1 x i1> %mask, <1 x i8> %passthru)
23   ret <1 x i8> %ret
26 define <2 x i8> @vector_compress_v2i8(<2 x i8> %v, <2 x i1> %mask) {
27 ; CHECK-LABEL: vector_compress_v2i8:
28 ; CHECK:       # %bb.0:
29 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
30 ; CHECK-NEXT:    vcompress.vm v9, v8, v0
31 ; CHECK-NEXT:    vmv1r.v v8, v9
32 ; CHECK-NEXT:    ret
33   %ret = call <2 x i8> @llvm.experimental.vector.compress.v2i8(<2 x i8> %v, <2 x i1> %mask, <2 x i8> undef)
34   ret <2 x i8> %ret
37 define <2 x i8> @vector_compress_v2i8_passthru(<2 x i8> %passthru, <2 x i8> %v, <2 x i1> %mask) {
38 ; CHECK-LABEL: vector_compress_v2i8_passthru:
39 ; CHECK:       # %bb.0:
40 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, tu, ma
41 ; CHECK-NEXT:    vcompress.vm v8, v9, v0
42 ; CHECK-NEXT:    ret
43   %ret = call <2 x i8> @llvm.experimental.vector.compress.v2i8(<2 x i8> %v, <2 x i1> %mask, <2 x i8> %passthru)
44   ret <2 x i8> %ret
47 define <4 x i8> @vector_compress_v4i8(<4 x i8> %v, <4 x i1> %mask) {
48 ; CHECK-LABEL: vector_compress_v4i8:
49 ; CHECK:       # %bb.0:
50 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
51 ; CHECK-NEXT:    vcompress.vm v9, v8, v0
52 ; CHECK-NEXT:    vmv1r.v v8, v9
53 ; CHECK-NEXT:    ret
54   %ret = call <4 x i8> @llvm.experimental.vector.compress.v4i8(<4 x i8> %v, <4 x i1> %mask, <4 x i8> undef)
55   ret <4 x i8> %ret
58 define <4 x i8> @vector_compress_v4i8_passthru(<4 x i8> %passthru, <4 x i8> %v, <4 x i1> %mask) {
59 ; CHECK-LABEL: vector_compress_v4i8_passthru:
60 ; CHECK:       # %bb.0:
61 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, tu, ma
62 ; CHECK-NEXT:    vcompress.vm v8, v9, v0
63 ; CHECK-NEXT:    ret
64   %ret = call <4 x i8> @llvm.experimental.vector.compress.v4i8(<4 x i8> %v, <4 x i1> %mask, <4 x i8> %passthru)
65   ret <4 x i8> %ret
68 define <8 x i8> @vector_compress_v8i8(<8 x i8> %v, <8 x i1> %mask) {
69 ; CHECK-LABEL: vector_compress_v8i8:
70 ; CHECK:       # %bb.0:
71 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
72 ; CHECK-NEXT:    vcompress.vm v9, v8, v0
73 ; CHECK-NEXT:    vmv1r.v v8, v9
74 ; CHECK-NEXT:    ret
75   %ret = call <8 x i8> @llvm.experimental.vector.compress.v8i8(<8 x i8> %v, <8 x i1> %mask, <8 x i8> undef)
76   ret <8 x i8> %ret
79 define <8 x i8> @vector_compress_v8i8_passthru(<8 x i8> %passthru, <8 x i8> %v, <8 x i1> %mask) {
80 ; CHECK-LABEL: vector_compress_v8i8_passthru:
81 ; CHECK:       # %bb.0:
82 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, tu, ma
83 ; CHECK-NEXT:    vcompress.vm v8, v9, v0
84 ; CHECK-NEXT:    ret
85   %ret = call <8 x i8> @llvm.experimental.vector.compress.v8i8(<8 x i8> %v, <8 x i1> %mask, <8 x i8> %passthru)
86   ret <8 x i8> %ret
89 define <1 x i16> @vector_compress_v1i16(<1 x i16> %v, <1 x i1> %mask) {
90 ; CHECK-LABEL: vector_compress_v1i16:
91 ; CHECK:       # %bb.0:
92 ; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
93 ; CHECK-NEXT:    vcompress.vm v9, v8, v0
94 ; CHECK-NEXT:    vmv1r.v v8, v9
95 ; CHECK-NEXT:    ret
96   %ret = call <1 x i16> @llvm.experimental.vector.compress.v1i16(<1 x i16> %v, <1 x i1> %mask, <1 x i16> undef)
97   ret <1 x i16> %ret
100 define <1 x i16> @vector_compress_v1i16_passthru(<1 x i16> %passthru, <1 x i16> %v, <1 x i1> %mask) {
101 ; CHECK-LABEL: vector_compress_v1i16_passthru:
102 ; CHECK:       # %bb.0:
103 ; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, tu, ma
104 ; CHECK-NEXT:    vcompress.vm v8, v9, v0
105 ; CHECK-NEXT:    ret
106   %ret = call <1 x i16> @llvm.experimental.vector.compress.v1i16(<1 x i16> %v, <1 x i1> %mask, <1 x i16> %passthru)
107   ret <1 x i16> %ret
110 define <2 x i16> @vector_compress_v2i16(<2 x i16> %v, <2 x i1> %mask) {
111 ; CHECK-LABEL: vector_compress_v2i16:
112 ; CHECK:       # %bb.0:
113 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
114 ; CHECK-NEXT:    vcompress.vm v9, v8, v0
115 ; CHECK-NEXT:    vmv1r.v v8, v9
116 ; CHECK-NEXT:    ret
117   %ret = call <2 x i16> @llvm.experimental.vector.compress.v2i16(<2 x i16> %v, <2 x i1> %mask, <2 x i16> undef)
118   ret <2 x i16> %ret
121 define <2 x i16> @vector_compress_v2i16_passthru(<2 x i16> %passthru, <2 x i16> %v, <2 x i1> %mask) {
122 ; CHECK-LABEL: vector_compress_v2i16_passthru:
123 ; CHECK:       # %bb.0:
124 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, tu, ma
125 ; CHECK-NEXT:    vcompress.vm v8, v9, v0
126 ; CHECK-NEXT:    ret
127   %ret = call <2 x i16> @llvm.experimental.vector.compress.v2i16(<2 x i16> %v, <2 x i1> %mask, <2 x i16> %passthru)
128   ret <2 x i16> %ret
131 define <4 x i16> @vector_compress_v4i16(<4 x i16> %v, <4 x i1> %mask) {
132 ; CHECK-LABEL: vector_compress_v4i16:
133 ; CHECK:       # %bb.0:
134 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
135 ; CHECK-NEXT:    vcompress.vm v9, v8, v0
136 ; CHECK-NEXT:    vmv1r.v v8, v9
137 ; CHECK-NEXT:    ret
138   %ret = call <4 x i16> @llvm.experimental.vector.compress.v4i16(<4 x i16> %v, <4 x i1> %mask, <4 x i16> undef)
139   ret <4 x i16> %ret
142 define <4 x i16> @vector_compress_v4i16_passthru(<4 x i16> %passthru, <4 x i16> %v, <4 x i1> %mask) {
143 ; CHECK-LABEL: vector_compress_v4i16_passthru:
144 ; CHECK:       # %bb.0:
145 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, tu, ma
146 ; CHECK-NEXT:    vcompress.vm v8, v9, v0
147 ; CHECK-NEXT:    ret
148   %ret = call <4 x i16> @llvm.experimental.vector.compress.v4i16(<4 x i16> %v, <4 x i1> %mask, <4 x i16> %passthru)
149   ret <4 x i16> %ret
152 define <8 x i16> @vector_compress_v8i16(<8 x i16> %v, <8 x i1> %mask) {
153 ; CHECK-LABEL: vector_compress_v8i16:
154 ; CHECK:       # %bb.0:
155 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
156 ; CHECK-NEXT:    vcompress.vm v9, v8, v0
157 ; CHECK-NEXT:    vmv.v.v v8, v9
158 ; CHECK-NEXT:    ret
159   %ret = call <8 x i16> @llvm.experimental.vector.compress.v8i16(<8 x i16> %v, <8 x i1> %mask, <8 x i16> undef)
160   ret <8 x i16> %ret
163 define <8 x i16> @vector_compress_v8i16_passthru(<8 x i16> %passthru, <8 x i16> %v, <8 x i1> %mask) {
164 ; CHECK-LABEL: vector_compress_v8i16_passthru:
165 ; CHECK:       # %bb.0:
166 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, tu, ma
167 ; CHECK-NEXT:    vcompress.vm v8, v9, v0
168 ; CHECK-NEXT:    ret
169   %ret = call <8 x i16> @llvm.experimental.vector.compress.v8i16(<8 x i16> %v, <8 x i1> %mask, <8 x i16> %passthru)
170   ret <8 x i16> %ret
173 define <1 x i32> @vector_compress_v1i32(<1 x i32> %v, <1 x i1> %mask) {
174 ; CHECK-LABEL: vector_compress_v1i32:
175 ; CHECK:       # %bb.0:
176 ; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
177 ; CHECK-NEXT:    vcompress.vm v9, v8, v0
178 ; CHECK-NEXT:    vmv1r.v v8, v9
179 ; CHECK-NEXT:    ret
180   %ret = call <1 x i32> @llvm.experimental.vector.compress.v1i32(<1 x i32> %v, <1 x i1> %mask, <1 x i32> undef)
181   ret <1 x i32> %ret
184 define <1 x i32> @vector_compress_v1i32_passthru(<1 x i32> %passthru, <1 x i32> %v, <1 x i1> %mask) {
185 ; CHECK-LABEL: vector_compress_v1i32_passthru:
186 ; CHECK:       # %bb.0:
187 ; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, tu, ma
188 ; CHECK-NEXT:    vcompress.vm v8, v9, v0
189 ; CHECK-NEXT:    ret
190   %ret = call <1 x i32> @llvm.experimental.vector.compress.v1i32(<1 x i32> %v, <1 x i1> %mask, <1 x i32> %passthru)
191   ret <1 x i32> %ret
194 define <2 x i32> @vector_compress_v2i32(<2 x i32> %v, <2 x i1> %mask) {
195 ; CHECK-LABEL: vector_compress_v2i32:
196 ; CHECK:       # %bb.0:
197 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
198 ; CHECK-NEXT:    vcompress.vm v9, v8, v0
199 ; CHECK-NEXT:    vmv1r.v v8, v9
200 ; CHECK-NEXT:    ret
201   %ret = call <2 x i32> @llvm.experimental.vector.compress.v2i32(<2 x i32> %v, <2 x i1> %mask, <2 x i32> undef)
202   ret <2 x i32> %ret
205 define <2 x i32> @vector_compress_v2i32_passthru(<2 x i32> %passthru, <2 x i32> %v, <2 x i1> %mask) {
206 ; CHECK-LABEL: vector_compress_v2i32_passthru:
207 ; CHECK:       # %bb.0:
208 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, tu, ma
209 ; CHECK-NEXT:    vcompress.vm v8, v9, v0
210 ; CHECK-NEXT:    ret
211   %ret = call <2 x i32> @llvm.experimental.vector.compress.v2i32(<2 x i32> %v, <2 x i1> %mask, <2 x i32> %passthru)
212   ret <2 x i32> %ret
215 define <4 x i32> @vector_compress_v4i32(<4 x i32> %v, <4 x i1> %mask) {
216 ; CHECK-LABEL: vector_compress_v4i32:
217 ; CHECK:       # %bb.0:
218 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
219 ; CHECK-NEXT:    vcompress.vm v9, v8, v0
220 ; CHECK-NEXT:    vmv.v.v v8, v9
221 ; CHECK-NEXT:    ret
222   %ret = call <4 x i32> @llvm.experimental.vector.compress.v4i32(<4 x i32> %v, <4 x i1> %mask, <4 x i32> undef)
223   ret <4 x i32> %ret
226 define <4 x i32> @vector_compress_v4i32_passthru(<4 x i32> %passthru, <4 x i32> %v, <4 x i1> %mask) {
227 ; CHECK-LABEL: vector_compress_v4i32_passthru:
228 ; CHECK:       # %bb.0:
229 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
230 ; CHECK-NEXT:    vcompress.vm v8, v9, v0
231 ; CHECK-NEXT:    ret
232   %ret = call <4 x i32> @llvm.experimental.vector.compress.v4i32(<4 x i32> %v, <4 x i1> %mask, <4 x i32> %passthru)
233   ret <4 x i32> %ret
236 define <8 x i32> @vector_compress_v8i32(<8 x i32> %v, <8 x i1> %mask) {
237 ; CHECK-LABEL: vector_compress_v8i32:
238 ; CHECK:       # %bb.0:
239 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
240 ; CHECK-NEXT:    vcompress.vm v10, v8, v0
241 ; CHECK-NEXT:    vmv.v.v v8, v10
242 ; CHECK-NEXT:    ret
243   %ret = call <8 x i32> @llvm.experimental.vector.compress.v8i32(<8 x i32> %v, <8 x i1> %mask, <8 x i32> undef)
244   ret <8 x i32> %ret
247 define <8 x i32> @vector_compress_v8i32_passthru(<8 x i32> %passthru, <8 x i32> %v, <8 x i1> %mask) {
248 ; CHECK-LABEL: vector_compress_v8i32_passthru:
249 ; CHECK:       # %bb.0:
250 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, tu, ma
251 ; CHECK-NEXT:    vcompress.vm v8, v10, v0
252 ; CHECK-NEXT:    ret
253   %ret = call <8 x i32> @llvm.experimental.vector.compress.v8i32(<8 x i32> %v, <8 x i1> %mask, <8 x i32> %passthru)
254   ret <8 x i32> %ret
257 define <1 x i64> @vector_compress_v1i64(<1 x i64> %v, <1 x i1> %mask) {
258 ; CHECK-LABEL: vector_compress_v1i64:
259 ; CHECK:       # %bb.0:
260 ; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
261 ; CHECK-NEXT:    vcompress.vm v9, v8, v0
262 ; CHECK-NEXT:    vmv.v.v v8, v9
263 ; CHECK-NEXT:    ret
264   %ret = call <1 x i64> @llvm.experimental.vector.compress.v1i64(<1 x i64> %v, <1 x i1> %mask, <1 x i64> undef)
265   ret <1 x i64> %ret
268 define <1 x i64> @vector_compress_v1i64_passthru(<1 x i64> %passthru, <1 x i64> %v, <1 x i1> %mask) {
269 ; CHECK-LABEL: vector_compress_v1i64_passthru:
270 ; CHECK:       # %bb.0:
271 ; CHECK-NEXT:    vsetivli zero, 1, e64, m1, tu, ma
272 ; CHECK-NEXT:    vcompress.vm v8, v9, v0
273 ; CHECK-NEXT:    ret
274   %ret = call <1 x i64> @llvm.experimental.vector.compress.v1i64(<1 x i64> %v, <1 x i1> %mask, <1 x i64> %passthru)
275   ret <1 x i64> %ret
278 define <2 x i64> @vector_compress_v2i64(<2 x i64> %v, <2 x i1> %mask) {
279 ; CHECK-LABEL: vector_compress_v2i64:
280 ; CHECK:       # %bb.0:
281 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
282 ; CHECK-NEXT:    vcompress.vm v9, v8, v0
283 ; CHECK-NEXT:    vmv.v.v v8, v9
284 ; CHECK-NEXT:    ret
285   %ret = call <2 x i64> @llvm.experimental.vector.compress.v2i64(<2 x i64> %v, <2 x i1> %mask, <2 x i64> undef)
286   ret <2 x i64> %ret
289 define <2 x i64> @vector_compress_v2i64_passthru(<2 x i64> %passthru, <2 x i64> %v, <2 x i1> %mask) {
290 ; CHECK-LABEL: vector_compress_v2i64_passthru:
291 ; CHECK:       # %bb.0:
292 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, tu, ma
293 ; CHECK-NEXT:    vcompress.vm v8, v9, v0
294 ; CHECK-NEXT:    ret
295   %ret = call <2 x i64> @llvm.experimental.vector.compress.v2i64(<2 x i64> %v, <2 x i1> %mask, <2 x i64> %passthru)
296   ret <2 x i64> %ret
299 define <4 x i64> @vector_compress_v4i64(<4 x i64> %v, <4 x i1> %mask) {
300 ; CHECK-LABEL: vector_compress_v4i64:
301 ; CHECK:       # %bb.0:
302 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
303 ; CHECK-NEXT:    vcompress.vm v10, v8, v0
304 ; CHECK-NEXT:    vmv.v.v v8, v10
305 ; CHECK-NEXT:    ret
306   %ret = call <4 x i64> @llvm.experimental.vector.compress.v4i64(<4 x i64> %v, <4 x i1> %mask, <4 x i64> undef)
307   ret <4 x i64> %ret
310 define <4 x i64> @vector_compress_v4i64_passthru(<4 x i64> %passthru, <4 x i64> %v, <4 x i1> %mask) {
311 ; CHECK-LABEL: vector_compress_v4i64_passthru:
312 ; CHECK:       # %bb.0:
313 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, tu, ma
314 ; CHECK-NEXT:    vcompress.vm v8, v10, v0
315 ; CHECK-NEXT:    ret
316   %ret = call <4 x i64> @llvm.experimental.vector.compress.v4i64(<4 x i64> %v, <4 x i1> %mask, <4 x i64> %passthru)
317   ret <4 x i64> %ret
320 define <8 x i64> @vector_compress_v8i64(<8 x i64> %v, <8 x i1> %mask) {
321 ; CHECK-LABEL: vector_compress_v8i64:
322 ; CHECK:       # %bb.0:
323 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
324 ; CHECK-NEXT:    vcompress.vm v12, v8, v0
325 ; CHECK-NEXT:    vmv.v.v v8, v12
326 ; CHECK-NEXT:    ret
327   %ret = call <8 x i64> @llvm.experimental.vector.compress.v8i64(<8 x i64> %v, <8 x i1> %mask, <8 x i64> undef)
328   ret <8 x i64> %ret
331 define <8 x i64> @vector_compress_v8i64_passthru(<8 x i64> %passthru, <8 x i64> %v, <8 x i1> %mask) {
332 ; CHECK-LABEL: vector_compress_v8i64_passthru:
333 ; CHECK:       # %bb.0:
334 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, tu, ma
335 ; CHECK-NEXT:    vcompress.vm v8, v12, v0
336 ; CHECK-NEXT:    ret
337   %ret = call <8 x i64> @llvm.experimental.vector.compress.v8i64(<8 x i64> %v, <8 x i1> %mask, <8 x i64> %passthru)
338   ret <8 x i64> %ret