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:
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
12 %ret = call <1 x i8> @llvm.experimental.vector.compress.v1i8(<1 x i8> %v, <1 x i1> %mask, <1 x i8> undef)
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:
19 ; CHECK-NEXT: vsetivli zero, 1, e8, mf8, tu, ma
20 ; CHECK-NEXT: vcompress.vm v8, v9, v0
22 %ret = call <1 x i8> @llvm.experimental.vector.compress.v1i8(<1 x i8> %v, <1 x i1> %mask, <1 x i8> %passthru)
26 define <2 x i8> @vector_compress_v2i8(<2 x i8> %v, <2 x i1> %mask) {
27 ; CHECK-LABEL: vector_compress_v2i8:
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
33 %ret = call <2 x i8> @llvm.experimental.vector.compress.v2i8(<2 x i8> %v, <2 x i1> %mask, <2 x i8> undef)
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:
40 ; CHECK-NEXT: vsetivli zero, 2, e8, mf8, tu, ma
41 ; CHECK-NEXT: vcompress.vm v8, v9, v0
43 %ret = call <2 x i8> @llvm.experimental.vector.compress.v2i8(<2 x i8> %v, <2 x i1> %mask, <2 x i8> %passthru)
47 define <4 x i8> @vector_compress_v4i8(<4 x i8> %v, <4 x i1> %mask) {
48 ; CHECK-LABEL: vector_compress_v4i8:
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
54 %ret = call <4 x i8> @llvm.experimental.vector.compress.v4i8(<4 x i8> %v, <4 x i1> %mask, <4 x i8> undef)
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:
61 ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, tu, ma
62 ; CHECK-NEXT: vcompress.vm v8, v9, v0
64 %ret = call <4 x i8> @llvm.experimental.vector.compress.v4i8(<4 x i8> %v, <4 x i1> %mask, <4 x i8> %passthru)
68 define <8 x i8> @vector_compress_v8i8(<8 x i8> %v, <8 x i1> %mask) {
69 ; CHECK-LABEL: vector_compress_v8i8:
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
75 %ret = call <8 x i8> @llvm.experimental.vector.compress.v8i8(<8 x i8> %v, <8 x i1> %mask, <8 x i8> undef)
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:
82 ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, tu, ma
83 ; CHECK-NEXT: vcompress.vm v8, v9, v0
85 %ret = call <8 x i8> @llvm.experimental.vector.compress.v8i8(<8 x i8> %v, <8 x i1> %mask, <8 x i8> %passthru)
89 define <1 x i16> @vector_compress_v1i16(<1 x i16> %v, <1 x i1> %mask) {
90 ; CHECK-LABEL: vector_compress_v1i16:
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
96 %ret = call <1 x i16> @llvm.experimental.vector.compress.v1i16(<1 x i16> %v, <1 x i1> %mask, <1 x i16> undef)
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:
103 ; CHECK-NEXT: vsetivli zero, 1, e16, mf4, tu, ma
104 ; CHECK-NEXT: vcompress.vm v8, v9, v0
106 %ret = call <1 x i16> @llvm.experimental.vector.compress.v1i16(<1 x i16> %v, <1 x i1> %mask, <1 x i16> %passthru)
110 define <2 x i16> @vector_compress_v2i16(<2 x i16> %v, <2 x i1> %mask) {
111 ; CHECK-LABEL: vector_compress_v2i16:
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
117 %ret = call <2 x i16> @llvm.experimental.vector.compress.v2i16(<2 x i16> %v, <2 x i1> %mask, <2 x i16> undef)
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:
124 ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, tu, ma
125 ; CHECK-NEXT: vcompress.vm v8, v9, v0
127 %ret = call <2 x i16> @llvm.experimental.vector.compress.v2i16(<2 x i16> %v, <2 x i1> %mask, <2 x i16> %passthru)
131 define <4 x i16> @vector_compress_v4i16(<4 x i16> %v, <4 x i1> %mask) {
132 ; CHECK-LABEL: vector_compress_v4i16:
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
138 %ret = call <4 x i16> @llvm.experimental.vector.compress.v4i16(<4 x i16> %v, <4 x i1> %mask, <4 x i16> undef)
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:
145 ; CHECK-NEXT: vsetivli zero, 4, e16, mf2, tu, ma
146 ; CHECK-NEXT: vcompress.vm v8, v9, v0
148 %ret = call <4 x i16> @llvm.experimental.vector.compress.v4i16(<4 x i16> %v, <4 x i1> %mask, <4 x i16> %passthru)
152 define <8 x i16> @vector_compress_v8i16(<8 x i16> %v, <8 x i1> %mask) {
153 ; CHECK-LABEL: vector_compress_v8i16:
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
159 %ret = call <8 x i16> @llvm.experimental.vector.compress.v8i16(<8 x i16> %v, <8 x i1> %mask, <8 x i16> undef)
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:
166 ; CHECK-NEXT: vsetivli zero, 8, e16, m1, tu, ma
167 ; CHECK-NEXT: vcompress.vm v8, v9, v0
169 %ret = call <8 x i16> @llvm.experimental.vector.compress.v8i16(<8 x i16> %v, <8 x i1> %mask, <8 x i16> %passthru)
173 define <1 x i32> @vector_compress_v1i32(<1 x i32> %v, <1 x i1> %mask) {
174 ; CHECK-LABEL: vector_compress_v1i32:
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
180 %ret = call <1 x i32> @llvm.experimental.vector.compress.v1i32(<1 x i32> %v, <1 x i1> %mask, <1 x i32> undef)
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:
187 ; CHECK-NEXT: vsetivli zero, 1, e32, mf2, tu, ma
188 ; CHECK-NEXT: vcompress.vm v8, v9, v0
190 %ret = call <1 x i32> @llvm.experimental.vector.compress.v1i32(<1 x i32> %v, <1 x i1> %mask, <1 x i32> %passthru)
194 define <2 x i32> @vector_compress_v2i32(<2 x i32> %v, <2 x i1> %mask) {
195 ; CHECK-LABEL: vector_compress_v2i32:
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
201 %ret = call <2 x i32> @llvm.experimental.vector.compress.v2i32(<2 x i32> %v, <2 x i1> %mask, <2 x i32> undef)
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:
208 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, tu, ma
209 ; CHECK-NEXT: vcompress.vm v8, v9, v0
211 %ret = call <2 x i32> @llvm.experimental.vector.compress.v2i32(<2 x i32> %v, <2 x i1> %mask, <2 x i32> %passthru)
215 define <4 x i32> @vector_compress_v4i32(<4 x i32> %v, <4 x i1> %mask) {
216 ; CHECK-LABEL: vector_compress_v4i32:
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
222 %ret = call <4 x i32> @llvm.experimental.vector.compress.v4i32(<4 x i32> %v, <4 x i1> %mask, <4 x i32> undef)
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:
229 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, tu, ma
230 ; CHECK-NEXT: vcompress.vm v8, v9, v0
232 %ret = call <4 x i32> @llvm.experimental.vector.compress.v4i32(<4 x i32> %v, <4 x i1> %mask, <4 x i32> %passthru)
236 define <8 x i32> @vector_compress_v8i32(<8 x i32> %v, <8 x i1> %mask) {
237 ; CHECK-LABEL: vector_compress_v8i32:
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
243 %ret = call <8 x i32> @llvm.experimental.vector.compress.v8i32(<8 x i32> %v, <8 x i1> %mask, <8 x i32> undef)
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:
250 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, tu, ma
251 ; CHECK-NEXT: vcompress.vm v8, v10, v0
253 %ret = call <8 x i32> @llvm.experimental.vector.compress.v8i32(<8 x i32> %v, <8 x i1> %mask, <8 x i32> %passthru)
257 define <1 x i64> @vector_compress_v1i64(<1 x i64> %v, <1 x i1> %mask) {
258 ; CHECK-LABEL: vector_compress_v1i64:
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
264 %ret = call <1 x i64> @llvm.experimental.vector.compress.v1i64(<1 x i64> %v, <1 x i1> %mask, <1 x i64> undef)
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:
271 ; CHECK-NEXT: vsetivli zero, 1, e64, m1, tu, ma
272 ; CHECK-NEXT: vcompress.vm v8, v9, v0
274 %ret = call <1 x i64> @llvm.experimental.vector.compress.v1i64(<1 x i64> %v, <1 x i1> %mask, <1 x i64> %passthru)
278 define <2 x i64> @vector_compress_v2i64(<2 x i64> %v, <2 x i1> %mask) {
279 ; CHECK-LABEL: vector_compress_v2i64:
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
285 %ret = call <2 x i64> @llvm.experimental.vector.compress.v2i64(<2 x i64> %v, <2 x i1> %mask, <2 x i64> undef)
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:
292 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, tu, ma
293 ; CHECK-NEXT: vcompress.vm v8, v9, v0
295 %ret = call <2 x i64> @llvm.experimental.vector.compress.v2i64(<2 x i64> %v, <2 x i1> %mask, <2 x i64> %passthru)
299 define <4 x i64> @vector_compress_v4i64(<4 x i64> %v, <4 x i1> %mask) {
300 ; CHECK-LABEL: vector_compress_v4i64:
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
306 %ret = call <4 x i64> @llvm.experimental.vector.compress.v4i64(<4 x i64> %v, <4 x i1> %mask, <4 x i64> undef)
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:
313 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, tu, ma
314 ; CHECK-NEXT: vcompress.vm v8, v10, v0
316 %ret = call <4 x i64> @llvm.experimental.vector.compress.v4i64(<4 x i64> %v, <4 x i1> %mask, <4 x i64> %passthru)
320 define <8 x i64> @vector_compress_v8i64(<8 x i64> %v, <8 x i1> %mask) {
321 ; CHECK-LABEL: vector_compress_v8i64:
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
327 %ret = call <8 x i64> @llvm.experimental.vector.compress.v8i64(<8 x i64> %v, <8 x i1> %mask, <8 x i64> undef)
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:
334 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, tu, ma
335 ; CHECK-NEXT: vcompress.vm v8, v12, v0
337 %ret = call <8 x i64> @llvm.experimental.vector.compress.v8i64(<8 x i64> %v, <8 x i1> %mask, <8 x i64> %passthru)