1 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +avx2 -emit-llvm -o - -Werror | FileCheck %s
2 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +avx2 -fno-signed-char -emit-llvm -o - -Werror | FileCheck %s
3
4 // Don't include mm_malloc.h, it's system specific.
5 #define __MM_MALLOC_H
6
7 #include <immintrin.h>
8
test_mm256_mpsadbw_epu8(__m256i x,__m256i y)9 __m256i test_mm256_mpsadbw_epu8(__m256i x, __m256i y) {
10 // CHECK: @llvm.x86.avx2.mpsadbw({{.*}}, {{.*}}, i8 3)
11 return _mm256_mpsadbw_epu8(x, y, 3);
12 }
13
test_mm256_sad_epu8(__m256i x,__m256i y)14 __m256i test_mm256_sad_epu8(__m256i x, __m256i y) {
15 // CHECK: @llvm.x86.avx2.psad.bw
16 return _mm256_sad_epu8(x, y);
17 }
18
test_mm256_abs_epi8(__m256i a)19 __m256i test_mm256_abs_epi8(__m256i a) {
20 // CHECK: @llvm.x86.avx2.pabs.b
21 return _mm256_abs_epi8(a);
22 }
23
test_mm256_abs_epi16(__m256i a)24 __m256i test_mm256_abs_epi16(__m256i a) {
25 // CHECK: @llvm.x86.avx2.pabs.w
26 return _mm256_abs_epi16(a);
27 }
28
test_mm256_abs_epi32(__m256i a)29 __m256i test_mm256_abs_epi32(__m256i a) {
30 // CHECK: @llvm.x86.avx2.pabs.d
31 return _mm256_abs_epi32(a);
32 }
33
test_mm256_packs_epi16(__m256i a,__m256i b)34 __m256i test_mm256_packs_epi16(__m256i a, __m256i b) {
35 // CHECK: @llvm.x86.avx2.packsswb
36 return _mm256_packs_epi16(a, b);
37 }
38
test_mm256_packs_epi32(__m256i a,__m256i b)39 __m256i test_mm256_packs_epi32(__m256i a, __m256i b) {
40 // CHECK: @llvm.x86.avx2.packssdw
41 return _mm256_packs_epi32(a, b);
42 }
43
test_mm256_packs_epu16(__m256i a,__m256i b)44 __m256i test_mm256_packs_epu16(__m256i a, __m256i b) {
45 // CHECK: @llvm.x86.avx2.packuswb
46 return _mm256_packus_epi16(a, b);
47 }
48
test_mm256_packs_epu32(__m256i a,__m256i b)49 __m256i test_mm256_packs_epu32(__m256i a, __m256i b) {
50 // CHECK: @llvm.x86.avx2.packusdw
51 return _mm256_packus_epi32(a, b);
52 }
53
test_mm256_add_epi8(__m256i a,__m256i b)54 __m256i test_mm256_add_epi8(__m256i a, __m256i b) {
55 // CHECK: add <32 x i8>
56 return _mm256_add_epi8(a, b);
57 }
58
test_mm256_add_epi16(__m256i a,__m256i b)59 __m256i test_mm256_add_epi16(__m256i a, __m256i b) {
60 // CHECK: add <16 x i16>
61 return _mm256_add_epi16(a, b);
62 }
63
test_mm256_add_epi32(__m256i a,__m256i b)64 __m256i test_mm256_add_epi32(__m256i a, __m256i b) {
65 // CHECK: add <8 x i32>
66 return _mm256_add_epi32(a, b);
67 }
68
test_mm256_add_epi64(__m256i a,__m256i b)69 __m256i test_mm256_add_epi64(__m256i a, __m256i b) {
70 // CHECK: add <4 x i64>
71 return _mm256_add_epi64(a, b);
72 }
73
test_mm256_adds_epi8(__m256i a,__m256i b)74 __m256i test_mm256_adds_epi8(__m256i a, __m256i b) {
75 // CHECK: @llvm.x86.avx2.padds.b
76 return _mm256_adds_epi8(a, b);
77 }
78
test_mm256_adds_epi16(__m256i a,__m256i b)79 __m256i test_mm256_adds_epi16(__m256i a, __m256i b) {
80 // CHECK: @llvm.x86.avx2.padds.w
81 return _mm256_adds_epi16(a, b);
82 }
83
test_mm256_adds_epu8(__m256i a,__m256i b)84 __m256i test_mm256_adds_epu8(__m256i a, __m256i b) {
85 // CHECK: @llvm.x86.avx2.paddus.b
86 return _mm256_adds_epu8(a, b);
87 }
88
test_mm256_adds_epu16(__m256i a,__m256i b)89 __m256i test_mm256_adds_epu16(__m256i a, __m256i b) {
90 // CHECK: @llvm.x86.avx2.paddus.w
91 return _mm256_adds_epu16(a, b);
92 }
93
test_mm256_alignr_epi8(__m256i a,__m256i b)94 __m256i test_mm256_alignr_epi8(__m256i a, __m256i b) {
95 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 32, i32 33, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 48, i32 49>
96 return _mm256_alignr_epi8(a, b, 2);
97 }
98
test2_mm256_alignr_epi8(__m256i a,__m256i b)99 __m256i test2_mm256_alignr_epi8(__m256i a, __m256i b) {
100 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> zeroinitializer, <32 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 32, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 48>
101 return _mm256_alignr_epi8(a, b, 17);
102 }
103
test_mm256_sub_epi8(__m256i a,__m256i b)104 __m256i test_mm256_sub_epi8(__m256i a, __m256i b) {
105 // CHECK: sub <32 x i8>
106 return _mm256_sub_epi8(a, b);
107 }
108
test_mm256_sub_epi16(__m256i a,__m256i b)109 __m256i test_mm256_sub_epi16(__m256i a, __m256i b) {
110 // CHECK: sub <16 x i16>
111 return _mm256_sub_epi16(a, b);
112 }
113
test_mm256_sub_epi32(__m256i a,__m256i b)114 __m256i test_mm256_sub_epi32(__m256i a, __m256i b) {
115 // CHECK: sub <8 x i32>
116 return _mm256_sub_epi32(a, b);
117 }
118
test_mm256_sub_epi64(__m256i a,__m256i b)119 __m256i test_mm256_sub_epi64(__m256i a, __m256i b) {
120 // CHECK: sub <4 x i64>
121 return _mm256_sub_epi64(a, b);
122 }
123
test_mm256_subs_epi8(__m256i a,__m256i b)124 __m256i test_mm256_subs_epi8(__m256i a, __m256i b) {
125 // CHECK: @llvm.x86.avx2.psubs.b
126 return _mm256_subs_epi8(a, b);
127 }
128
test_mm256_subs_epi16(__m256i a,__m256i b)129 __m256i test_mm256_subs_epi16(__m256i a, __m256i b) {
130 // CHECK: @llvm.x86.avx2.psubs.w
131 return _mm256_subs_epi16(a, b);
132 }
133
test_mm256_subs_epu8(__m256i a,__m256i b)134 __m256i test_mm256_subs_epu8(__m256i a, __m256i b) {
135 // CHECK: @llvm.x86.avx2.psubus.b
136 return _mm256_subs_epu8(a, b);
137 }
138
test_mm256_subs_epu16(__m256i a,__m256i b)139 __m256i test_mm256_subs_epu16(__m256i a, __m256i b) {
140 // CHECK: @llvm.x86.avx2.psubus.w
141 return _mm256_subs_epu16(a, b);
142 }
143
test_mm256_and_si256(__m256i a,__m256i b)144 __m256i test_mm256_and_si256(__m256i a, __m256i b) {
145 // CHECK: and <4 x i64>
146 return _mm256_and_si256(a, b);
147 }
148
test_mm256_andnot_si256(__m256i a,__m256i b)149 __m256i test_mm256_andnot_si256(__m256i a, __m256i b) {
150 // CHECK: xor <4 x i64>
151 // CHECK: and <4 x i64>
152 return _mm256_andnot_si256(a, b);
153 }
154
test_mm256_or_si256(__m256i a,__m256i b)155 __m256i test_mm256_or_si256(__m256i a, __m256i b) {
156 // CHECK: or <4 x i64>
157 return _mm256_or_si256(a, b);
158 }
159
test_mm256_xor_si256(__m256i a,__m256i b)160 __m256i test_mm256_xor_si256(__m256i a, __m256i b) {
161 // CHECK: xor <4 x i64>
162 return _mm256_xor_si256(a, b);
163 }
164
test_mm256_avg_epu8(__m256i a,__m256i b)165 __m256i test_mm256_avg_epu8(__m256i a, __m256i b) {
166 // CHECK: @llvm.x86.avx2.pavg.b
167 return _mm256_avg_epu8(a, b);
168 }
169
test_mm256_avg_epu16(__m256i a,__m256i b)170 __m256i test_mm256_avg_epu16(__m256i a, __m256i b) {
171 // CHECK: @llvm.x86.avx2.pavg.w
172 return _mm256_avg_epu16(a, b);
173 }
174
test_mm256_blendv_epi8(__m256i a,__m256i b,__m256i m)175 __m256i test_mm256_blendv_epi8(__m256i a, __m256i b, __m256i m) {
176 // CHECK: @llvm.x86.avx2.pblendvb
177 return _mm256_blendv_epi8(a, b, m);
178 }
179
180 // FIXME: We should also lower the __builtin_ia32_pblendw128 (and similar)
181 // functions to this IR. In the future we could delete the corresponding
182 // intrinsic in LLVM if it's not being used anymore.
test_mm256_blend_epi16(__m256i a,__m256i b)183 __m256i test_mm256_blend_epi16(__m256i a, __m256i b) {
184 // CHECK-LABEL: test_mm256_blend_epi16
185 // CHECK-NOT: @llvm.x86.avx2.pblendw
186 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 0, i32 17, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 25, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
187 return _mm256_blend_epi16(a, b, 2);
188 }
189
test_mm256_cmpeq_epi8(__m256i a,__m256i b)190 __m256i test_mm256_cmpeq_epi8(__m256i a, __m256i b) {
191 // CHECK: icmp eq <32 x i8>
192 return _mm256_cmpeq_epi8(a, b);
193 }
194
test_mm256_cmpeq_epi16(__m256i a,__m256i b)195 __m256i test_mm256_cmpeq_epi16(__m256i a, __m256i b) {
196 // CHECK: icmp eq <16 x i16>
197 return _mm256_cmpeq_epi16(a, b);
198 }
199
test_mm256_cmpeq_epi32(__m256i a,__m256i b)200 __m256i test_mm256_cmpeq_epi32(__m256i a, __m256i b) {
201 // CHECK: icmp eq <8 x i32>
202 return _mm256_cmpeq_epi32(a, b);
203 }
204
test_mm256_cmpeq_epi64(__m256i a,__m256i b)205 __m256i test_mm256_cmpeq_epi64(__m256i a, __m256i b) {
206 // CHECK: icmp eq <4 x i64>
207 return _mm256_cmpeq_epi64(a, b);
208 }
209
test_mm256_cmpgt_epi8(__m256i a,__m256i b)210 __m256i test_mm256_cmpgt_epi8(__m256i a, __m256i b) {
211 // CHECK: icmp sgt <32 x i8>
212 return _mm256_cmpgt_epi8(a, b);
213 }
214
test_mm256_cmpgt_epi16(__m256i a,__m256i b)215 __m256i test_mm256_cmpgt_epi16(__m256i a, __m256i b) {
216 // CHECK: icmp sgt <16 x i16>
217 return _mm256_cmpgt_epi16(a, b);
218 }
219
test_mm256_cmpgt_epi32(__m256i a,__m256i b)220 __m256i test_mm256_cmpgt_epi32(__m256i a, __m256i b) {
221 // CHECK: icmp sgt <8 x i32>
222 return _mm256_cmpgt_epi32(a, b);
223 }
224
test_mm256_cmpgt_epi64(__m256i a,__m256i b)225 __m256i test_mm256_cmpgt_epi64(__m256i a, __m256i b) {
226 // CHECK: icmp sgt <4 x i64>
227 return _mm256_cmpgt_epi64(a, b);
228 }
229
test_mm256_hadd_epi16(__m256i a,__m256i b)230 __m256i test_mm256_hadd_epi16(__m256i a, __m256i b) {
231 // CHECK: @llvm.x86.avx2.phadd.w
232 return _mm256_hadd_epi16(a, b);
233 }
234
test_mm256_hadd_epi32(__m256i a,__m256i b)235 __m256i test_mm256_hadd_epi32(__m256i a, __m256i b) {
236 // CHECK: @llvm.x86.avx2.phadd.d
237 return _mm256_hadd_epi32(a, b);
238 }
239
test_mm256_hadds_epi16(__m256i a,__m256i b)240 __m256i test_mm256_hadds_epi16(__m256i a, __m256i b) {
241 // CHECK: @llvm.x86.avx2.phadd.sw
242 return _mm256_hadds_epi16(a, b);
243 }
244
test_mm256_hsub_epi16(__m256i a,__m256i b)245 __m256i test_mm256_hsub_epi16(__m256i a, __m256i b) {
246 // CHECK: @llvm.x86.avx2.phsub.w
247 return _mm256_hsub_epi16(a, b);
248 }
249
test_mm256_hsub_epi32(__m256i a,__m256i b)250 __m256i test_mm256_hsub_epi32(__m256i a, __m256i b) {
251 // CHECK: @llvm.x86.avx2.phsub.d
252 return _mm256_hsub_epi32(a, b);
253 }
254
test_mm256_hsubs_epi16(__m256i a,__m256i b)255 __m256i test_mm256_hsubs_epi16(__m256i a, __m256i b) {
256 // CHECK: @llvm.x86.avx2.phsub.sw
257 return _mm256_hsubs_epi16(a, b);
258 }
259
test_mm256_maddubs_epi16(__m256i a,__m256i b)260 __m256i test_mm256_maddubs_epi16(__m256i a, __m256i b) {
261 // CHECK: @llvm.x86.avx2.pmadd.ub.sw
262 return _mm256_maddubs_epi16(a, b);
263 }
264
test_mm256_madd_epi16(__m256i a,__m256i b)265 __m256i test_mm256_madd_epi16(__m256i a, __m256i b) {
266 // CHECK: @llvm.x86.avx2.pmadd.wd
267 return _mm256_madd_epi16(a, b);
268 }
269
test_mm256_max_epi8(__m256i a,__m256i b)270 __m256i test_mm256_max_epi8(__m256i a, __m256i b) {
271 // CHECK: @llvm.x86.avx2.pmaxs.b
272 return _mm256_max_epi8(a, b);
273 }
274
test_mm256_max_epi16(__m256i a,__m256i b)275 __m256i test_mm256_max_epi16(__m256i a, __m256i b) {
276 // CHECK: @llvm.x86.avx2.pmaxs.w
277 return _mm256_max_epi16(a, b);
278 }
279
test_mm256_max_epi32(__m256i a,__m256i b)280 __m256i test_mm256_max_epi32(__m256i a, __m256i b) {
281 // CHECK: @llvm.x86.avx2.pmaxs.d
282 return _mm256_max_epi32(a, b);
283 }
284
test_mm256_max_epu8(__m256i a,__m256i b)285 __m256i test_mm256_max_epu8(__m256i a, __m256i b) {
286 // CHECK: @llvm.x86.avx2.pmaxu.b
287 return _mm256_max_epu8(a, b);
288 }
289
test_mm256_max_epu16(__m256i a,__m256i b)290 __m256i test_mm256_max_epu16(__m256i a, __m256i b) {
291 // CHECK: @llvm.x86.avx2.pmaxu.w
292 return _mm256_max_epu16(a, b);
293 }
294
test_mm256_max_epu32(__m256i a,__m256i b)295 __m256i test_mm256_max_epu32(__m256i a, __m256i b) {
296 // CHECK: @llvm.x86.avx2.pmaxu.d
297 return _mm256_max_epu32(a, b);
298 }
299
test_mm256_min_epi8(__m256i a,__m256i b)300 __m256i test_mm256_min_epi8(__m256i a, __m256i b) {
301 // CHECK: @llvm.x86.avx2.pmins.b
302 return _mm256_min_epi8(a, b);
303 }
304
test_mm256_min_epi16(__m256i a,__m256i b)305 __m256i test_mm256_min_epi16(__m256i a, __m256i b) {
306 // CHECK: @llvm.x86.avx2.pmins.w
307 return _mm256_min_epi16(a, b);
308 }
309
test_mm256_min_epi32(__m256i a,__m256i b)310 __m256i test_mm256_min_epi32(__m256i a, __m256i b) {
311 // CHECK: @llvm.x86.avx2.pmins.d
312 return _mm256_min_epi32(a, b);
313 }
314
test_mm256_min_epu8(__m256i a,__m256i b)315 __m256i test_mm256_min_epu8(__m256i a, __m256i b) {
316 // CHECK: @llvm.x86.avx2.pminu.b
317 return _mm256_min_epu8(a, b);
318 }
319
test_mm256_min_epu16(__m256i a,__m256i b)320 __m256i test_mm256_min_epu16(__m256i a, __m256i b) {
321 // CHECK: @llvm.x86.avx2.pminu.w
322 return _mm256_min_epu16(a, b);
323 }
324
test_mm256_min_epu32(__m256i a,__m256i b)325 __m256i test_mm256_min_epu32(__m256i a, __m256i b) {
326 // CHECK: @llvm.x86.avx2.pminu.d
327 return _mm256_min_epu32(a, b);
328 }
329
test_mm256_movemask_epi8(__m256i a)330 int test_mm256_movemask_epi8(__m256i a) {
331 // CHECK: @llvm.x86.avx2.pmovmskb
332 return _mm256_movemask_epi8(a);
333 }
334
test_mm256_cvtepi8_epi16(__m128i a)335 __m256i test_mm256_cvtepi8_epi16(__m128i a) {
336 // CHECK: @llvm.x86.avx2.pmovsxbw
337 return _mm256_cvtepi8_epi16(a);
338 }
339
test_mm256_cvtepi8_epi32(__m128i a)340 __m256i test_mm256_cvtepi8_epi32(__m128i a) {
341 // CHECK: @llvm.x86.avx2.pmovsxbd
342 return _mm256_cvtepi8_epi32(a);
343 }
344
test_mm256_cvtepi8_epi64(__m128i a)345 __m256i test_mm256_cvtepi8_epi64(__m128i a) {
346 // CHECK: @llvm.x86.avx2.pmovsxbq
347 return _mm256_cvtepi8_epi64(a);
348 }
349
test_mm256_cvtepi16_epi32(__m128i a)350 __m256i test_mm256_cvtepi16_epi32(__m128i a) {
351 // CHECK: @llvm.x86.avx2.pmovsxwd
352 return _mm256_cvtepi16_epi32(a);
353 }
354
test_mm256_cvtepi16_epi64(__m128i a)355 __m256i test_mm256_cvtepi16_epi64(__m128i a) {
356 // CHECK: @llvm.x86.avx2.pmovsxwq
357 return _mm256_cvtepi16_epi64(a);
358 }
359
test_mm256_cvtepi32_epi64(__m128i a)360 __m256i test_mm256_cvtepi32_epi64(__m128i a) {
361 // CHECK: @llvm.x86.avx2.pmovsxdq
362 return _mm256_cvtepi32_epi64(a);
363 }
364
test_mm256_cvtepu8_epi16(__m128i a)365 __m256i test_mm256_cvtepu8_epi16(__m128i a) {
366 // CHECK: @llvm.x86.avx2.pmovzxbw
367 return _mm256_cvtepu8_epi16(a);
368 }
369
test_mm256_cvtepu8_epi32(__m128i a)370 __m256i test_mm256_cvtepu8_epi32(__m128i a) {
371 // CHECK: @llvm.x86.avx2.pmovzxbd
372 return _mm256_cvtepu8_epi32(a);
373 }
374
test_mm256_cvtepu8_epi64(__m128i a)375 __m256i test_mm256_cvtepu8_epi64(__m128i a) {
376 // CHECK: @llvm.x86.avx2.pmovzxbq
377 return _mm256_cvtepu8_epi64(a);
378 }
379
test_mm256_cvtepu16_epi32(__m128i a)380 __m256i test_mm256_cvtepu16_epi32(__m128i a) {
381 // CHECK: @llvm.x86.avx2.pmovzxwd
382 return _mm256_cvtepu16_epi32(a);
383 }
384
test_mm256_cvtepu16_epi64(__m128i a)385 __m256i test_mm256_cvtepu16_epi64(__m128i a) {
386 // CHECK: @llvm.x86.avx2.pmovzxwq
387 return _mm256_cvtepu16_epi64(a);
388 }
389
test_mm256_cvtepu32_epi64(__m128i a)390 __m256i test_mm256_cvtepu32_epi64(__m128i a) {
391 // CHECK: @llvm.x86.avx2.pmovzxdq
392 return _mm256_cvtepu32_epi64(a);
393 }
394
test_mm256_mul_epi32(__m256i a,__m256i b)395 __m256i test_mm256_mul_epi32(__m256i a, __m256i b) {
396 // CHECK: @llvm.x86.avx2.pmul.dq
397 return _mm256_mul_epi32(a, b);
398 }
399
test_mm256_mulhrs_epi16(__m256i a,__m256i b)400 __m256i test_mm256_mulhrs_epi16(__m256i a, __m256i b) {
401 // CHECK: @llvm.x86.avx2.pmul.hr.sw
402 return _mm256_mulhrs_epi16(a, b);
403 }
404
test_mm256_mulhi_epu16(__m256i a,__m256i b)405 __m256i test_mm256_mulhi_epu16(__m256i a, __m256i b) {
406 // CHECK: @llvm.x86.avx2.pmulhu.w
407 return _mm256_mulhi_epu16(a, b);
408 }
409
test_mm256_mulhi_epi16(__m256i a,__m256i b)410 __m256i test_mm256_mulhi_epi16(__m256i a, __m256i b) {
411 // CHECK: @llvm.x86.avx2.pmulh.w
412 return _mm256_mulhi_epi16(a, b);
413 }
414
test_mm256_mullo_epi16(__m256i a,__m256i b)415 __m256i test_mm256_mullo_epi16(__m256i a, __m256i b) {
416 // CHECK: mul <16 x i16>
417 return _mm256_mullo_epi16(a, b);
418 }
419
test_mm256_mullo_epi32(__m256i a,__m256i b)420 __m256i test_mm256_mullo_epi32(__m256i a, __m256i b) {
421 // CHECK: mul <8 x i32>
422 return _mm256_mullo_epi32(a, b);
423 }
424
test_mm256_mul_epu32(__m256i a,__m256i b)425 __m256i test_mm256_mul_epu32(__m256i a, __m256i b) {
426 // CHECK: @llvm.x86.avx2.pmulu.dq
427 return _mm256_mul_epu32(a, b);
428 }
429
test_mm256_shuffle_epi8(__m256i a,__m256i b)430 __m256i test_mm256_shuffle_epi8(__m256i a, __m256i b) {
431 // CHECK: @llvm.x86.avx2.pshuf.b
432 return _mm256_shuffle_epi8(a, b);
433 }
434
test_mm256_shuffle_epi32(__m256i a)435 __m256i test_mm256_shuffle_epi32(__m256i a) {
436 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 3, i32 3, i32 0, i32 0, i32 7, i32 7, i32 4, i32 4>
437 return _mm256_shuffle_epi32(a, 15);
438 }
439
test_mm256_shufflehi_epi16(__m256i a)440 __m256i test_mm256_shufflehi_epi16(__m256i a) {
441 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 6, i32 6, i32 5, i32 8, i32 9, i32 10, i32 11, i32 15, i32 14, i32 14, i32 13>
442 return _mm256_shufflehi_epi16(a, 107);
443 }
444
test_mm256_shufflelo_epi16(__m256i a)445 __m256i test_mm256_shufflelo_epi16(__m256i a) {
446 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 3, i32 0, i32 1, i32 1, i32 4, i32 5, i32 6, i32 7, i32 11, i32 8, i32 9, i32 9, i32 12, i32 13, i32 14, i32 15>
447 return _mm256_shufflelo_epi16(a, 83);
448 }
449
test_mm256_sign_epi8(__m256i a,__m256i b)450 __m256i test_mm256_sign_epi8(__m256i a, __m256i b) {
451 // CHECK: @llvm.x86.avx2.psign.b
452 return _mm256_sign_epi8(a, b);
453 }
454
test_mm256_sign_epi16(__m256i a,__m256i b)455 __m256i test_mm256_sign_epi16(__m256i a, __m256i b) {
456 // CHECK: @llvm.x86.avx2.psign.w
457 return _mm256_sign_epi16(a, b);
458 }
459
test_mm256_sign_epi32(__m256i a,__m256i b)460 __m256i test_mm256_sign_epi32(__m256i a, __m256i b) {
461 // CHECK: @llvm.x86.avx2.psign.d
462 return _mm256_sign_epi32(a, b);
463 }
464
test_mm256_slli_si256(__m256i a)465 __m256i test_mm256_slli_si256(__m256i a) {
466 // CHECK: shufflevector <32 x i8> zeroinitializer, <32 x i8> %{{.*}}, <32 x i32> <i32 13, i32 14, i32 15, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 29, i32 30, i32 31, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60>
467 return _mm256_slli_si256(a, 3);
468 }
469
test_mm256_bslli_epi128(__m256i a)470 __m256i test_mm256_bslli_epi128(__m256i a) {
471 // CHECK: shufflevector <32 x i8> zeroinitializer, <32 x i8> %{{.*}}, <32 x i32> <i32 13, i32 14, i32 15, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 29, i32 30, i32 31, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60>
472 return _mm256_bslli_epi128(a, 3);
473 }
474
test_mm256_slli_epi16(__m256i a)475 __m256i test_mm256_slli_epi16(__m256i a) {
476 // CHECK: @llvm.x86.avx2.pslli.w
477 return _mm256_slli_epi16(a, 3);
478 }
479
test_mm256_sll_epi16(__m256i a,__m128i b)480 __m256i test_mm256_sll_epi16(__m256i a, __m128i b) {
481 // CHECK: @llvm.x86.avx2.psll.w
482 return _mm256_sll_epi16(a, b);
483 }
484
test_mm256_slli_epi32(__m256i a)485 __m256i test_mm256_slli_epi32(__m256i a) {
486 // CHECK: @llvm.x86.avx2.pslli.d
487 return _mm256_slli_epi32(a, 3);
488 }
489
test_mm256_sll_epi32(__m256i a,__m128i b)490 __m256i test_mm256_sll_epi32(__m256i a, __m128i b) {
491 // CHECK: @llvm.x86.avx2.psll.d
492 return _mm256_sll_epi32(a, b);
493 }
494
test_mm256_slli_epi64(__m256i a)495 __m256i test_mm256_slli_epi64(__m256i a) {
496 // CHECK: @llvm.x86.avx2.pslli.q
497 return _mm256_slli_epi64(a, 3);
498 }
499
test_mm256_sll_epi64(__m256i a,__m128i b)500 __m256i test_mm256_sll_epi64(__m256i a, __m128i b) {
501 // CHECK: @llvm.x86.avx2.psll.q
502 return _mm256_sll_epi64(a, b);
503 }
504
test_mm256_srai_epi16(__m256i a)505 __m256i test_mm256_srai_epi16(__m256i a) {
506 // CHECK: @llvm.x86.avx2.psrai.w
507 return _mm256_srai_epi16(a, 3);
508 }
509
test_mm256_sra_epi16(__m256i a,__m128i b)510 __m256i test_mm256_sra_epi16(__m256i a, __m128i b) {
511 // CHECK: @llvm.x86.avx2.psra.w
512 return _mm256_sra_epi16(a, b);
513 }
514
test_mm256_srai_epi32(__m256i a)515 __m256i test_mm256_srai_epi32(__m256i a) {
516 // CHECK: @llvm.x86.avx2.psrai.d
517 return _mm256_srai_epi32(a, 3);
518 }
519
test_mm256_sra_epi32(__m256i a,__m128i b)520 __m256i test_mm256_sra_epi32(__m256i a, __m128i b) {
521 // CHECK: @llvm.x86.avx2.psra.d
522 return _mm256_sra_epi32(a, b);
523 }
524
test_mm256_srli_si256(__m256i a)525 __m256i test_mm256_srli_si256(__m256i a) {
526 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> zeroinitializer, <32 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 32, i32 33, i32 34, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 48, i32 49, i32 50>
527 return _mm256_srli_si256(a, 3);
528 }
529
test_mm256_bsrli_epi128(__m256i a)530 __m256i test_mm256_bsrli_epi128(__m256i a) {
531 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> zeroinitializer, <32 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 32, i32 33, i32 34, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 48, i32 49, i32 50>
532 return _mm256_bsrli_epi128(a, 3);
533 }
534
test_mm256_srli_epi16(__m256i a)535 __m256i test_mm256_srli_epi16(__m256i a) {
536 // CHECK: @llvm.x86.avx2.psrli.w
537 return _mm256_srli_epi16(a, 3);
538 }
539
test_mm256_srl_epi16(__m256i a,__m128i b)540 __m256i test_mm256_srl_epi16(__m256i a, __m128i b) {
541 // CHECK: @llvm.x86.avx2.psrl.w
542 return _mm256_srl_epi16(a, b);
543 }
544
test_mm256_srli_epi32(__m256i a)545 __m256i test_mm256_srli_epi32(__m256i a) {
546 // CHECK: @llvm.x86.avx2.psrli.d
547 return _mm256_srli_epi32(a, 3);
548 }
549
test_mm256_srl_epi32(__m256i a,__m128i b)550 __m256i test_mm256_srl_epi32(__m256i a, __m128i b) {
551 // CHECK: @llvm.x86.avx2.psrl.d
552 return _mm256_srl_epi32(a, b);
553 }
554
test_mm256_srli_epi64(__m256i a)555 __m256i test_mm256_srli_epi64(__m256i a) {
556 // CHECK: @llvm.x86.avx2.psrli.q
557 return _mm256_srli_epi64(a, 3);
558 }
559
test_mm256_srl_epi64(__m256i a,__m128i b)560 __m256i test_mm256_srl_epi64(__m256i a, __m128i b) {
561 // CHECK: @llvm.x86.avx2.psrl.q
562 return _mm256_srl_epi64(a, b);
563 }
564
test_mm256_unpackhi_epi8(__m256i a,__m256i b)565 __m256i test_mm256_unpackhi_epi8(__m256i a, __m256i b) {
566 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63>
567 return _mm256_unpackhi_epi8(a, b);
568 }
569
test_mm256_unpackhi_epi16(__m256i a,__m256i b)570 __m256i test_mm256_unpackhi_epi16(__m256i a, __m256i b) {
571 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
572 return _mm256_unpackhi_epi16(a, b);
573 }
574
test_mm256_unpackhi_epi32(__m256i a,__m256i b)575 __m256i test_mm256_unpackhi_epi32(__m256i a, __m256i b) {
576 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
577 return _mm256_unpackhi_epi32(a, b);
578 }
579
test_mm256_unpackhi_epi64(__m256i a,__m256i b)580 __m256i test_mm256_unpackhi_epi64(__m256i a, __m256i b) {
581 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
582 return _mm256_unpackhi_epi64(a, b);
583 }
584
test_mm256_unpacklo_epi8(__m256i a,__m256i b)585 __m256i test_mm256_unpacklo_epi8(__m256i a, __m256i b) {
586 // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55>
587 return _mm256_unpacklo_epi8(a, b);
588 }
589
test_mm256_unpacklo_epi16(__m256i a,__m256i b)590 __m256i test_mm256_unpacklo_epi16(__m256i a, __m256i b) {
591 // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27>
592 return _mm256_unpacklo_epi16(a, b);
593 }
594
test_mm256_unpacklo_epi32(__m256i a,__m256i b)595 __m256i test_mm256_unpacklo_epi32(__m256i a, __m256i b) {
596 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
597 return _mm256_unpacklo_epi32(a, b);
598 }
599
test_mm256_unpacklo_epi64(__m256i a,__m256i b)600 __m256i test_mm256_unpacklo_epi64(__m256i a, __m256i b) {
601 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
602 return _mm256_unpacklo_epi64(a, b);
603 }
604
test_mm256_stream_load_si256(__m256i const * a)605 __m256i test_mm256_stream_load_si256(__m256i const *a) {
606 // CHECK: @llvm.x86.avx2.movntdqa
607 return _mm256_stream_load_si256(a);
608 }
609
test_mm_broadcastss_ps(__m128 a)610 __m128 test_mm_broadcastss_ps(__m128 a) {
611 // CHECK-LABEL: test_mm_broadcastss_ps
612 // CHECK-NOT: @llvm.x86.avx2.vbroadcast.ss.ps
613 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> zeroinitializer
614 return _mm_broadcastss_ps(a);
615 }
616
test_mm_broadcastsd_pd(__m128d a)617 __m128d test_mm_broadcastsd_pd(__m128d a) {
618 // CHECK-LABEL: test_mm_broadcastsd_pd
619 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> zeroinitializer
620 return _mm_broadcastsd_pd(a);
621 }
622
test_mm256_broadcastss_ps(__m128 a)623 __m256 test_mm256_broadcastss_ps(__m128 a) {
624 // CHECK-LABEL: test_mm256_broadcastss_ps
625 // CHECK-NOT: @llvm.x86.avx2.vbroadcast.ss.ps.256
626 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> zeroinitializer
627 return _mm256_broadcastss_ps(a);
628 }
629
test_mm256_broadcastsd_pd(__m128d a)630 __m256d test_mm256_broadcastsd_pd(__m128d a) {
631 // CHECK-LABEL: test_mm256_broadcastsd_pd
632 // CHECK-NOT: @llvm.x86.avx2.vbroadcast.sd.pd.256
633 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> zeroinitializer
634 return _mm256_broadcastsd_pd(a);
635 }
636
test_mm256_broadcastsi128_si256(__m128i a)637 __m256i test_mm256_broadcastsi128_si256(__m128i a) {
638 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
639 return _mm256_broadcastsi128_si256(a);
640 }
641
test_mm_blend_epi32(__m128i a,__m128i b)642 __m128i test_mm_blend_epi32(__m128i a, __m128i b) {
643 // CHECK-LABEL: test_mm_blend_epi32
644 // CHECK-NOT: @llvm.x86.avx2.pblendd.128
645 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
646 return _mm_blend_epi32(a, b, 0x35);
647 }
648
test_mm256_blend_epi32(__m256i a,__m256i b)649 __m256i test_mm256_blend_epi32(__m256i a, __m256i b) {
650 // CHECK-LABEL: test_mm256_blend_epi32
651 // CHECK-NOT: @llvm.x86.avx2.pblendd.256
652 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 13, i32 6, i32 7>
653 return _mm256_blend_epi32(a, b, 0x35);
654 }
655
test_mm256_broadcastb_epi8(__m128i a)656 __m256i test_mm256_broadcastb_epi8(__m128i a) {
657 // CHECK-LABEL: test_mm256_broadcastb_epi8
658 // CHECK-NOT: @llvm.x86.avx2.pbroadcastb.256
659 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <32 x i32> zeroinitializer
660 return _mm256_broadcastb_epi8(a);
661 }
662
test_mm256_broadcastw_epi16(__m128i a)663 __m256i test_mm256_broadcastw_epi16(__m128i a) {
664 // CHECK-LABEL: test_mm256_broadcastw_epi16
665 // CHECK-NOT: @llvm.x86.avx2.pbroadcastw.256
666 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i32> zeroinitializer
667 return _mm256_broadcastw_epi16(a);
668 }
669
test_mm256_broadcastd_epi32(__m128i a)670 __m256i test_mm256_broadcastd_epi32(__m128i a) {
671 // CHECK-LABEL: test_mm256_broadcastd_epi32
672 // CHECK-NOT: @llvm.x86.avx2.pbroadcastd.256
673 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <8 x i32> zeroinitializer
674 return _mm256_broadcastd_epi32(a);
675 }
676
test_mm256_broadcastq_epi64(__m128i a)677 __m256i test_mm256_broadcastq_epi64(__m128i a) {
678 // CHECK-LABEL: test_mm256_broadcastq_epi64
679 // CHECK-NOT: @llvm.x86.avx2.pbroadcastq.256
680 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> zeroinitializer
681 return _mm256_broadcastq_epi64(a);
682 }
683
test_mm_broadcastb_epi8(__m128i a)684 __m128i test_mm_broadcastb_epi8(__m128i a) {
685 // CHECK-LABEL: test_mm_broadcastb_epi8
686 // CHECK-NOT: @llvm.x86.avx2.pbroadcastb.128
687 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> zeroinitializer
688 return _mm_broadcastb_epi8(a);
689 }
690
test_mm_broadcastw_epi16(__m128i a)691 __m128i test_mm_broadcastw_epi16(__m128i a) {
692 // CHECK-LABEL: test_mm_broadcastw_epi16
693 // CHECK-NOT: @llvm.x86.avx2.pbroadcastw.128
694 // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> zeroinitializer
695 return _mm_broadcastw_epi16(a);
696 }
697
test_mm_broadcastd_epi32(__m128i a)698 __m128i test_mm_broadcastd_epi32(__m128i a) {
699 // CHECK-LABEL: test_mm_broadcastd_epi32
700 // CHECK-NOT: @llvm.x86.avx2.pbroadcastd.128
701 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> zeroinitializer
702 return _mm_broadcastd_epi32(a);
703 }
704
test_mm_broadcastq_epi64(__m128i a)705 __m128i test_mm_broadcastq_epi64(__m128i a) {
706 // CHECK-LABEL: test_mm_broadcastq_epi64
707 // CHECK-NOT: @llvm.x86.avx2.pbroadcastq.128
708 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> zeroinitializer
709 return _mm_broadcastq_epi64(a);
710 }
711
test_mm256_permutevar8x32_epi32(__m256i a,__m256i b)712 __m256i test_mm256_permutevar8x32_epi32(__m256i a, __m256i b) {
713 // CHECK: @llvm.x86.avx2.permd
714 return _mm256_permutevar8x32_epi32(a, b);
715 }
716
test_mm256_permute4x64_pd(__m256d a)717 __m256d test_mm256_permute4x64_pd(__m256d a) {
718 // CHECK: shufflevector{{.*}}<i32 1, i32 2, i32 1, i32 0>
719 return _mm256_permute4x64_pd(a, 25);
720 }
721
test_mm256_permutevar8x32_ps(__m256 a,__m256i b)722 __m256 test_mm256_permutevar8x32_ps(__m256 a, __m256i b) {
723 // CHECK: @llvm.x86.avx2.permps
724 return _mm256_permutevar8x32_ps(a, b);
725 }
726
test_mm256_permute4x64_epi64(__m256i a)727 __m256i test_mm256_permute4x64_epi64(__m256i a) {
728 // CHECK: shufflevector{{.*}}<i32 3, i32 0, i32 2, i32 0>
729 return _mm256_permute4x64_epi64(a, 35);
730 }
731
test_mm256_permute2x128_si256(__m256i a,__m256i b)732 __m256i test_mm256_permute2x128_si256(__m256i a, __m256i b) {
733 // CHECK: @llvm.x86.avx2.vperm2i128
734 return _mm256_permute2x128_si256(a, b, 0x31);
735 }
736
test_mm256_extracti128_si256_0(__m256i a)737 __m128i test_mm256_extracti128_si256_0(__m256i a) {
738 // CHECK-LABEL: @test_mm256_extracti128_si256_0
739 // CHECK: shufflevector{{.*}}<i32 0, i32 1>
740 return _mm256_extracti128_si256(a, 0);
741 }
742
test_mm256_extracti128_si256_1(__m256i a)743 __m128i test_mm256_extracti128_si256_1(__m256i a) {
744 // CHECK-LABEL: @test_mm256_extracti128_si256_1
745 // CHECK: shufflevector{{.*}}<i32 2, i32 3>
746 return _mm256_extracti128_si256(a, 1);
747 }
748
749 // Immediate should be truncated to one bit.
test_mm256_extracti128_si256_2(__m256i a)750 __m128i test_mm256_extracti128_si256_2(__m256i a) {
751 // CHECK-LABEL: @test_mm256_extracti128_si256_2
752 // CHECK: shufflevector{{.*}}<i32 0, i32 1>
753 return _mm256_extracti128_si256(a, 2);
754 }
755
test_mm256_inserti128_si256_0(__m256i a,__m128i b)756 __m256i test_mm256_inserti128_si256_0(__m256i a, __m128i b) {
757 // CHECK-LABEL: @test_mm256_inserti128_si256_0
758 // CHECK: shufflevector{{.*}}<i32 4, i32 5, i32 2, i32 3>
759 return _mm256_inserti128_si256(a, b, 0);
760 }
761
test_mm256_inserti128_si256_1(__m256i a,__m128i b)762 __m256i test_mm256_inserti128_si256_1(__m256i a, __m128i b) {
763 // CHECK-LABEL: @test_mm256_inserti128_si256_1
764 // CHECK: shufflevector{{.*}}<i32 0, i32 1, i32 4, i32 5>
765 return _mm256_inserti128_si256(a, b, 1);
766 }
767
768 // Immediate should be truncated to one bit.
test_mm256_inserti128_si256_2(__m256i a,__m128i b)769 __m256i test_mm256_inserti128_si256_2(__m256i a, __m128i b) {
770 // CHECK-LABEL: @test_mm256_inserti128_si256_2
771 // CHECK: shufflevector{{.*}}<i32 4, i32 5, i32 2, i32 3>
772 return _mm256_inserti128_si256(a, b, 2);
773 }
774
test_mm256_maskload_epi32(int const * a,__m256i m)775 __m256i test_mm256_maskload_epi32(int const *a, __m256i m) {
776 // CHECK: @llvm.x86.avx2.maskload.d.256
777 return _mm256_maskload_epi32(a, m);
778 }
779
test_mm256_maskload_epi64(long long const * a,__m256i m)780 __m256i test_mm256_maskload_epi64(long long const *a, __m256i m) {
781 // CHECK: @llvm.x86.avx2.maskload.q.256
782 return _mm256_maskload_epi64(a, m);
783 }
784
test_mm_maskload_epi32(int const * a,__m128i m)785 __m128i test_mm_maskload_epi32(int const *a, __m128i m) {
786 // CHECK: @llvm.x86.avx2.maskload.d
787 return _mm_maskload_epi32(a, m);
788 }
789
test_mm_maskload_epi64(long long const * a,__m128i m)790 __m128i test_mm_maskload_epi64(long long const *a, __m128i m) {
791 // CHECK: @llvm.x86.avx2.maskload.q
792 return _mm_maskload_epi64(a, m);
793 }
794
test_mm256_maskstore_epi32(int * a,__m256i m,__m256i b)795 void test_mm256_maskstore_epi32(int *a, __m256i m, __m256i b) {
796 // CHECK: @llvm.x86.avx2.maskstore.d.256
797 _mm256_maskstore_epi32(a, m, b);
798 }
799
test_mm256_maskstore_epi64(long long * a,__m256i m,__m256i b)800 void test_mm256_maskstore_epi64(long long *a, __m256i m, __m256i b) {
801 // CHECK: @llvm.x86.avx2.maskstore.q.256
802 _mm256_maskstore_epi64(a, m, b);
803 }
804
test_mm_maskstore_epi32(int * a,__m128i m,__m128i b)805 void test_mm_maskstore_epi32(int *a, __m128i m, __m128i b) {
806 // CHECK: @llvm.x86.avx2.maskstore.d
807 _mm_maskstore_epi32(a, m, b);
808 }
809
test_mm_maskstore_epi64(long long * a,__m128i m,__m128i b)810 void test_mm_maskstore_epi64(long long *a, __m128i m, __m128i b) {
811 // CHECK: @llvm.x86.avx2.maskstore.q
812 _mm_maskstore_epi64(a, m, b);
813 }
814
test_mm256_sllv_epi32(__m256i a,__m256i b)815 __m256i test_mm256_sllv_epi32(__m256i a, __m256i b) {
816 // CHECK: @llvm.x86.avx2.psllv.d.256
817 return _mm256_sllv_epi32(a, b);
818 }
819
test_mm_sllv_epi32(__m128i a,__m128i b)820 __m128i test_mm_sllv_epi32(__m128i a, __m128i b) {
821 // CHECK: @llvm.x86.avx2.psllv.d
822 return _mm_sllv_epi32(a, b);
823 }
824
test_mm256_sllv_epi64(__m256i a,__m256i b)825 __m256i test_mm256_sllv_epi64(__m256i a, __m256i b) {
826 // CHECK: @llvm.x86.avx2.psllv.q.256
827 return _mm256_sllv_epi64(a, b);
828 }
829
test_mm_sllv_epi64(__m128i a,__m128i b)830 __m128i test_mm_sllv_epi64(__m128i a, __m128i b) {
831 // CHECK: @llvm.x86.avx2.psllv.q
832 return _mm_sllv_epi64(a, b);
833 }
834
test_mm256_srav_epi32(__m256i a,__m256i b)835 __m256i test_mm256_srav_epi32(__m256i a, __m256i b) {
836 // CHECK: @llvm.x86.avx2.psrav.d.256
837 return _mm256_srav_epi32(a, b);
838 }
839
test_mm_srav_epi32(__m128i a,__m128i b)840 __m128i test_mm_srav_epi32(__m128i a, __m128i b) {
841 // CHECK: @llvm.x86.avx2.psrav.d
842 return _mm_srav_epi32(a, b);
843 }
844
test_mm256_srlv_epi32(__m256i a,__m256i b)845 __m256i test_mm256_srlv_epi32(__m256i a, __m256i b) {
846 // CHECK: @llvm.x86.avx2.psrlv.d.256
847 return _mm256_srlv_epi32(a, b);
848 }
849
test_mm_srlv_epi32(__m128i a,__m128i b)850 __m128i test_mm_srlv_epi32(__m128i a, __m128i b) {
851 // CHECK: @llvm.x86.avx2.psrlv.d
852 return _mm_srlv_epi32(a, b);
853 }
854
test_mm256_srlv_epi64(__m256i a,__m256i b)855 __m256i test_mm256_srlv_epi64(__m256i a, __m256i b) {
856 // CHECK: @llvm.x86.avx2.psrlv.q.256
857 return _mm256_srlv_epi64(a, b);
858 }
859
test_mm_srlv_epi64(__m128i a,__m128i b)860 __m128i test_mm_srlv_epi64(__m128i a, __m128i b) {
861 // CHECK: @llvm.x86.avx2.psrlv.q
862 return _mm_srlv_epi64(a, b);
863 }
864
test_mm_mask_i32gather_pd(__m128d a,double const * b,__m128i c,__m128d d)865 __m128d test_mm_mask_i32gather_pd(__m128d a, double const *b, __m128i c,
866 __m128d d) {
867 // CHECK: @llvm.x86.avx2.gather.d.pd
868 return _mm_mask_i32gather_pd(a, b, c, d, 2);
869 }
870
test_mm256_mask_i32gather_pd(__m256d a,double const * b,__m128i c,__m256d d)871 __m256d test_mm256_mask_i32gather_pd(__m256d a, double const *b, __m128i c,
872 __m256d d) {
873 // CHECK: @llvm.x86.avx2.gather.d.pd.256
874 return _mm256_mask_i32gather_pd(a, b, c, d, 2);
875 }
876
test_mm_mask_i64gather_pd(__m128d a,double const * b,__m128i c,__m128d d)877 __m128d test_mm_mask_i64gather_pd(__m128d a, double const *b, __m128i c,
878 __m128d d) {
879 // CHECK: @llvm.x86.avx2.gather.q.pd
880 return _mm_mask_i64gather_pd(a, b, c, d, 2);
881 }
882
test_mm256_mask_i64gather_pd(__m256d a,double const * b,__m256i c,__m256d d)883 __m256d test_mm256_mask_i64gather_pd(__m256d a, double const *b, __m256i c,
884 __m256d d) {
885 // CHECK: @llvm.x86.avx2.gather.q.pd.256
886 return _mm256_mask_i64gather_pd(a, b, c, d, 2);
887 }
888
test_mm_mask_i32gather_ps(__m128 a,float const * b,__m128i c,__m128 d)889 __m128 test_mm_mask_i32gather_ps(__m128 a, float const *b, __m128i c,
890 __m128 d) {
891 // CHECK: @llvm.x86.avx2.gather.d.ps
892 return _mm_mask_i32gather_ps(a, b, c, d, 2);
893 }
894
test_mm256_mask_i32gather_ps(__m256 a,float const * b,__m256i c,__m256 d)895 __m256 test_mm256_mask_i32gather_ps(__m256 a, float const *b, __m256i c,
896 __m256 d) {
897 // CHECK: @llvm.x86.avx2.gather.d.ps.256
898 return _mm256_mask_i32gather_ps(a, b, c, d, 2);
899 }
900
test_mm_mask_i64gather_ps(__m128 a,float const * b,__m128i c,__m128 d)901 __m128 test_mm_mask_i64gather_ps(__m128 a, float const *b, __m128i c,
902 __m128 d) {
903 // CHECK: @llvm.x86.avx2.gather.q.ps
904 return _mm_mask_i64gather_ps(a, b, c, d, 2);
905 }
906
test_mm256_mask_i64gather_ps(__m128 a,float const * b,__m256i c,__m128 d)907 __m128 test_mm256_mask_i64gather_ps(__m128 a, float const *b, __m256i c,
908 __m128 d) {
909 // CHECK: @llvm.x86.avx2.gather.q.ps.256
910 return _mm256_mask_i64gather_ps(a, b, c, d, 2);
911 }
912
test_mm_mask_i32gather_epi32(__m128i a,int const * b,__m128i c,__m128i d)913 __m128i test_mm_mask_i32gather_epi32(__m128i a, int const *b, __m128i c,
914 __m128i d) {
915 // CHECK: @llvm.x86.avx2.gather.d.d
916 return _mm_mask_i32gather_epi32(a, b, c, d, 2);
917 }
918
test_mm256_mask_i32gather_epi32(__m256i a,int const * b,__m256i c,__m256i d)919 __m256i test_mm256_mask_i32gather_epi32(__m256i a, int const *b, __m256i c,
920 __m256i d) {
921 // CHECK: @llvm.x86.avx2.gather.d.d.256
922 return _mm256_mask_i32gather_epi32(a, b, c, d, 2);
923 }
924
test_mm_mask_i64gather_epi32(__m128i a,int const * b,__m128i c,__m128i d)925 __m128i test_mm_mask_i64gather_epi32(__m128i a, int const *b, __m128i c,
926 __m128i d) {
927 // CHECK: @llvm.x86.avx2.gather.q.d
928 return _mm_mask_i64gather_epi32(a, b, c, d, 2);
929 }
930
test_mm256_mask_i64gather_epi32(__m128i a,int const * b,__m256i c,__m128i d)931 __m128i test_mm256_mask_i64gather_epi32(__m128i a, int const *b, __m256i c,
932 __m128i d) {
933 // CHECK: @llvm.x86.avx2.gather.q.d.256
934 return _mm256_mask_i64gather_epi32(a, b, c, d, 2);
935 }
936
test_mm_mask_i32gather_epi64(__m128i a,long long const * b,__m128i c,__m128i d)937 __m128i test_mm_mask_i32gather_epi64(__m128i a, long long const *b, __m128i c,
938 __m128i d) {
939 // CHECK: @llvm.x86.avx2.gather.d.q
940 return _mm_mask_i32gather_epi64(a, b, c, d, 2);
941 }
942
test_mm256_mask_i32gather_epi64(__m256i a,long long const * b,__m128i c,__m256i d)943 __m256i test_mm256_mask_i32gather_epi64(__m256i a, long long const *b, __m128i c,
944 __m256i d) {
945 // CHECK: @llvm.x86.avx2.gather.d.q.256
946 return _mm256_mask_i32gather_epi64(a, b, c, d, 2);
947 }
948
test_mm_mask_i64gather_epi64(__m128i a,long long const * b,__m128i c,__m128i d)949 __m128i test_mm_mask_i64gather_epi64(__m128i a, long long const *b, __m128i c,
950 __m128i d) {
951 // CHECK: @llvm.x86.avx2.gather.q.q
952 return _mm_mask_i64gather_epi64(a, b, c, d, 2);
953 }
954
test_mm256_mask_i64gather_epi64(__m256i a,long long const * b,__m256i c,__m256i d)955 __m256i test_mm256_mask_i64gather_epi64(__m256i a, long long const *b, __m256i c,
956 __m256i d) {
957 // CHECK: @llvm.x86.avx2.gather.q.q.256
958 return _mm256_mask_i64gather_epi64(a, b, c, d, 2);
959 }
960
test_mm_i32gather_pd(double const * b,__m128i c)961 __m128d test_mm_i32gather_pd(double const *b, __m128i c) {
962 // CHECK: @llvm.x86.avx2.gather.d.pd
963 return _mm_i32gather_pd(b, c, 2);
964 }
965
test_mm256_i32gather_pd(double const * b,__m128i c)966 __m256d test_mm256_i32gather_pd(double const *b, __m128i c) {
967 // CHECK: @llvm.x86.avx2.gather.d.pd.256
968 return _mm256_i32gather_pd(b, c, 2);
969 }
970
test_mm_i64gather_pd(double const * b,__m128i c)971 __m128d test_mm_i64gather_pd(double const *b, __m128i c) {
972 // CHECK: @llvm.x86.avx2.gather.q.pd
973 return _mm_i64gather_pd(b, c, 2);
974 }
975
test_mm256_i64gather_pd(double const * b,__m256i c)976 __m256d test_mm256_i64gather_pd(double const *b, __m256i c) {
977 // CHECK: @llvm.x86.avx2.gather.q.pd.256
978 return _mm256_i64gather_pd(b, c, 2);
979 }
980
test_mm_i32gather_ps(float const * b,__m128i c)981 __m128 test_mm_i32gather_ps(float const *b, __m128i c) {
982 // CHECK: @llvm.x86.avx2.gather.d.ps
983 return _mm_i32gather_ps(b, c, 2);
984 }
985
test_mm256_i32gather_ps(float const * b,__m256i c)986 __m256 test_mm256_i32gather_ps(float const *b, __m256i c) {
987 // CHECK: @llvm.x86.avx2.gather.d.ps.256
988 return _mm256_i32gather_ps(b, c, 2);
989 }
990
test_mm_i64gather_ps(float const * b,__m128i c)991 __m128 test_mm_i64gather_ps(float const *b, __m128i c) {
992 // CHECK: @llvm.x86.avx2.gather.q.ps
993 return _mm_i64gather_ps(b, c, 2);
994 }
995
test_mm256_i64gather_ps(float const * b,__m256i c)996 __m128 test_mm256_i64gather_ps(float const *b, __m256i c) {
997 // CHECK: @llvm.x86.avx2.gather.q.ps.256
998 return _mm256_i64gather_ps(b, c, 2);
999 }
1000
test_mm_i32gather_epi32(int const * b,__m128i c)1001 __m128i test_mm_i32gather_epi32(int const *b, __m128i c) {
1002 // CHECK: @llvm.x86.avx2.gather.d.d
1003 return _mm_i32gather_epi32(b, c, 2);
1004 }
1005
test_mm256_i32gather_epi32(int const * b,__m256i c)1006 __m256i test_mm256_i32gather_epi32(int const *b, __m256i c) {
1007 // CHECK: @llvm.x86.avx2.gather.d.d.256
1008 return _mm256_i32gather_epi32(b, c, 2);
1009 }
1010
test_mm_i64gather_epi32(int const * b,__m128i c)1011 __m128i test_mm_i64gather_epi32(int const *b, __m128i c) {
1012 // CHECK: @llvm.x86.avx2.gather.q.d
1013 return _mm_i64gather_epi32(b, c, 2);
1014 }
1015
test_mm256_i64gather_epi32(int const * b,__m256i c)1016 __m128i test_mm256_i64gather_epi32(int const *b, __m256i c) {
1017 // CHECK: @llvm.x86.avx2.gather.q.d.256
1018 return _mm256_i64gather_epi32(b, c, 2);
1019 }
1020
test_mm_i32gather_epi64(long long const * b,__m128i c)1021 __m128i test_mm_i32gather_epi64(long long const *b, __m128i c) {
1022 // CHECK: @llvm.x86.avx2.gather.d.q
1023 return _mm_i32gather_epi64(b, c, 2);
1024 }
1025
test_mm256_i32gather_epi64(long long const * b,__m128i c)1026 __m256i test_mm256_i32gather_epi64(long long const *b, __m128i c) {
1027 // CHECK: @llvm.x86.avx2.gather.d.q.256
1028 return _mm256_i32gather_epi64(b, c, 2);
1029 }
1030
test_mm_i64gather_epi64(long long const * b,__m128i c)1031 __m128i test_mm_i64gather_epi64(long long const *b, __m128i c) {
1032 // CHECK: @llvm.x86.avx2.gather.q.q
1033 return _mm_i64gather_epi64(b, c, 2);
1034 }
1035
test_mm256_i64gather_epi64(long long const * b,__m256i c)1036 __m256i test_mm256_i64gather_epi64(long long const *b, __m256i c) {
1037 // CHECK: @llvm.x86.avx2.gather.q.q.256
1038 return _mm256_i64gather_epi64(b, c, 2);
1039 }
1040