1 // RUN: %clang_cc1 %s -O0 -triple=x86_64-apple-darwin -target-feature +avx2 -emit-llvm -o - -Werror | FileCheck %s
3 // Don't include mm_malloc.h, it's system specific.
8 __m256i test_mm256_mpsadbw_epu8(__m256i x, __m256i y) {
9 // CHECK: @llvm.x86.avx2.mpsadbw({{.*}}, {{.*}}, i8 3)
10 return _mm256_mpsadbw_epu8(x, y, 3);
13 __m256i test_mm256_sad_epu8(__m256i x, __m256i y) {
14 // CHECK: @llvm.x86.avx2.psad.bw
15 return _mm256_sad_epu8(x, y);
18 __m256i test_mm256_abs_epi8(__m256i a) {
19 // CHECK: @llvm.x86.avx2.pabs.b
20 return _mm256_abs_epi8(a);
23 __m256i test_mm256_abs_epi16(__m256i a) {
24 // CHECK: @llvm.x86.avx2.pabs.w
25 return _mm256_abs_epi16(a);
28 __m256i test_mm256_abs_epi32(__m256i a) {
29 // CHECK: @llvm.x86.avx2.pabs.d
30 return _mm256_abs_epi32(a);
33 __m256i test_mm256_packs_epi16(__m256i a, __m256i b) {
34 // CHECK: @llvm.x86.avx2.packsswb
35 return _mm256_packs_epi16(a, b);
38 __m256i test_mm256_packs_epi32(__m256i a, __m256i b) {
39 // CHECK: @llvm.x86.avx2.packssdw
40 return _mm256_packs_epi32(a, b);
43 __m256i test_mm256_packs_epu16(__m256i a, __m256i b) {
44 // CHECK: @llvm.x86.avx2.packuswb
45 return _mm256_packus_epi16(a, b);
48 __m256i test_mm256_packs_epu32(__m256i a, __m256i b) {
49 // CHECK: @llvm.x86.avx2.packusdw
50 return _mm256_packus_epi32(a, b);
53 __m256i test_mm256_add_epi8(__m256i a, __m256i b) {
54 // CHECK: add <32 x i8>
55 return _mm256_add_epi8(a, b);
58 __m256i test_mm256_add_epi16(__m256i a, __m256i b) {
59 // CHECK: add <16 x i16>
60 return _mm256_add_epi16(a, b);
63 __m256i test_mm256_add_epi32(__m256i a, __m256i b) {
64 // CHECK: add <8 x i32>
65 return _mm256_add_epi32(a, b);
68 __m256i test_mm256_add_epi64(__m256i a, __m256i b) {
69 // CHECK: add <4 x i64>
70 return _mm256_add_epi64(a, b);
73 __m256i test_mm256_adds_epi8(__m256i a, __m256i b) {
74 // CHECK: @llvm.x86.avx2.padds.b
75 return _mm256_adds_epi8(a, b);
78 __m256i test_mm256_adds_epi16(__m256i a, __m256i b) {
79 // CHECK: @llvm.x86.avx2.padds.w
80 return _mm256_adds_epi16(a, b);
83 __m256i test_mm256_adds_epu8(__m256i a, __m256i b) {
84 // CHECK: @llvm.x86.avx2.paddus.b
85 return _mm256_adds_epu8(a, b);
88 __m256i test_mm256_adds_epu16(__m256i a, __m256i b) {
89 // CHECK: @llvm.x86.avx2.paddus.w
90 return _mm256_adds_epu16(a, b);
93 __m256i test_mm256_alignr_epi8(__m256i a, __m256i b) {
94 // 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>
95 return _mm256_alignr_epi8(a, b, 2);
98 __m256i test2_mm256_alignr_epi8(__m256i a, __m256i b) {
99 // 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>
100 return _mm256_alignr_epi8(a, b, 17);
103 __m256i test_mm256_sub_epi8(__m256i a, __m256i b) {
104 // CHECK: sub <32 x i8>
105 return _mm256_sub_epi8(a, b);
108 __m256i test_mm256_sub_epi16(__m256i a, __m256i b) {
109 // CHECK: sub <16 x i16>
110 return _mm256_sub_epi16(a, b);
113 __m256i test_mm256_sub_epi32(__m256i a, __m256i b) {
114 // CHECK: sub <8 x i32>
115 return _mm256_sub_epi32(a, b);
118 __m256i test_mm256_sub_epi64(__m256i a, __m256i b) {
119 // CHECK: sub <4 x i64>
120 return _mm256_sub_epi64(a, b);
123 __m256i test_mm256_subs_epi8(__m256i a, __m256i b) {
124 // CHECK: @llvm.x86.avx2.psubs.b
125 return _mm256_subs_epi8(a, b);
128 __m256i test_mm256_subs_epi16(__m256i a, __m256i b) {
129 // CHECK: @llvm.x86.avx2.psubs.w
130 return _mm256_subs_epi16(a, b);
133 __m256i test_mm256_subs_epu8(__m256i a, __m256i b) {
134 // CHECK: @llvm.x86.avx2.psubus.b
135 return _mm256_subs_epu8(a, b);
138 __m256i test_mm256_subs_epu16(__m256i a, __m256i b) {
139 // CHECK: @llvm.x86.avx2.psubus.w
140 return _mm256_subs_epu16(a, b);
143 __m256i test_mm256_and_si256(__m256i a, __m256i b) {
144 // CHECK: and <4 x i64>
145 return _mm256_and_si256(a, b);
148 __m256i test_mm256_andnot_si256(__m256i a, __m256i b) {
149 // CHECK: xor <4 x i64>
150 // CHECK: and <4 x i64>
151 return _mm256_andnot_si256(a, b);
154 __m256i test_mm256_or_si256(__m256i a, __m256i b) {
155 // CHECK: or <4 x i64>
156 return _mm256_or_si256(a, b);
159 __m256i test_mm256_xor_si256(__m256i a, __m256i b) {
160 // CHECK: xor <4 x i64>
161 return _mm256_xor_si256(a, b);
164 __m256i test_mm256_avg_epu8(__m256i a, __m256i b) {
165 // CHECK: @llvm.x86.avx2.pavg.b
166 return _mm256_avg_epu8(a, b);
169 __m256i test_mm256_avg_epu16(__m256i a, __m256i b) {
170 // CHECK: @llvm.x86.avx2.pavg.w
171 return _mm256_avg_epu16(a, b);
174 __m256i test_mm256_blendv_epi8(__m256i a, __m256i b, __m256i m) {
175 // CHECK: @llvm.x86.avx2.pblendvb
176 return _mm256_blendv_epi8(a, b, m);
179 // FIXME: We should also lower the __builtin_ia32_pblendw128 (and similar)
180 // functions to this IR. In the future we could delete the corresponding
181 // intrinsic in LLVM if it's not being used anymore.
182 __m256i test_mm256_blend_epi16(__m256i a, __m256i b) {
183 // CHECK-LABEL: test_mm256_blend_epi16
184 // CHECK-NOT: @llvm.x86.avx2.pblendw
185 // 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>
186 return _mm256_blend_epi16(a, b, 2);
189 __m256i test_mm256_cmpeq_epi8(__m256i a, __m256i b) {
190 // CHECK: icmp eq <32 x i8>
191 return _mm256_cmpeq_epi8(a, b);
194 __m256i test_mm256_cmpeq_epi16(__m256i a, __m256i b) {
195 // CHECK: icmp eq <16 x i16>
196 return _mm256_cmpeq_epi16(a, b);
199 __m256i test_mm256_cmpeq_epi32(__m256i a, __m256i b) {
200 // CHECK: icmp eq <8 x i32>
201 return _mm256_cmpeq_epi32(a, b);
204 __m256i test_mm256_cmpeq_epi64(__m256i a, __m256i b) {
205 // CHECK: icmp eq <4 x i64>
206 return _mm256_cmpeq_epi64(a, b);
209 __m256i test_mm256_cmpgt_epi8(__m256i a, __m256i b) {
210 // CHECK: icmp sgt <32 x i8>
211 return _mm256_cmpgt_epi8(a, b);
214 __m256i test_mm256_cmpgt_epi16(__m256i a, __m256i b) {
215 // CHECK: icmp sgt <16 x i16>
216 return _mm256_cmpgt_epi16(a, b);
219 __m256i test_mm256_cmpgt_epi32(__m256i a, __m256i b) {
220 // CHECK: icmp sgt <8 x i32>
221 return _mm256_cmpgt_epi32(a, b);
224 __m256i test_mm256_cmpgt_epi64(__m256i a, __m256i b) {
225 // CHECK: icmp sgt <4 x i64>
226 return _mm256_cmpgt_epi64(a, b);
229 __m256i test_mm256_hadd_epi16(__m256i a, __m256i b) {
230 // CHECK: @llvm.x86.avx2.phadd.w
231 return _mm256_hadd_epi16(a, b);
234 __m256i test_mm256_hadd_epi32(__m256i a, __m256i b) {
235 // CHECK: @llvm.x86.avx2.phadd.d
236 return _mm256_hadd_epi32(a, b);
239 __m256i test_mm256_hadds_epi16(__m256i a, __m256i b) {
240 // CHECK: @llvm.x86.avx2.phadd.sw
241 return _mm256_hadds_epi16(a, b);
244 __m256i test_mm256_hsub_epi16(__m256i a, __m256i b) {
245 // CHECK: @llvm.x86.avx2.phsub.w
246 return _mm256_hsub_epi16(a, b);
249 __m256i test_mm256_hsub_epi32(__m256i a, __m256i b) {
250 // CHECK: @llvm.x86.avx2.phsub.d
251 return _mm256_hsub_epi32(a, b);
254 __m256i test_mm256_hsubs_epi16(__m256i a, __m256i b) {
255 // CHECK: @llvm.x86.avx2.phsub.sw
256 return _mm256_hsubs_epi16(a, b);
259 __m256i test_mm256_maddubs_epi16(__m256i a, __m256i b) {
260 // CHECK: @llvm.x86.avx2.pmadd.ub.sw
261 return _mm256_maddubs_epi16(a, b);
264 __m256i test_mm256_madd_epi16(__m256i a, __m256i b) {
265 // CHECK: @llvm.x86.avx2.pmadd.wd
266 return _mm256_madd_epi16(a, b);
269 __m256i test_mm256_max_epi8(__m256i a, __m256i b) {
270 // CHECK: @llvm.x86.avx2.pmaxs.b
271 return _mm256_max_epi8(a, b);
274 __m256i test_mm256_max_epi16(__m256i a, __m256i b) {
275 // CHECK: @llvm.x86.avx2.pmaxs.w
276 return _mm256_max_epi16(a, b);
279 __m256i test_mm256_max_epi32(__m256i a, __m256i b) {
280 // CHECK: @llvm.x86.avx2.pmaxs.d
281 return _mm256_max_epi32(a, b);
284 __m256i test_mm256_max_epu8(__m256i a, __m256i b) {
285 // CHECK: @llvm.x86.avx2.pmaxu.b
286 return _mm256_max_epu8(a, b);
289 __m256i test_mm256_max_epu16(__m256i a, __m256i b) {
290 // CHECK: @llvm.x86.avx2.pmaxu.w
291 return _mm256_max_epu16(a, b);
294 __m256i test_mm256_max_epu32(__m256i a, __m256i b) {
295 // CHECK: @llvm.x86.avx2.pmaxu.d
296 return _mm256_max_epu32(a, b);
299 __m256i test_mm256_min_epi8(__m256i a, __m256i b) {
300 // CHECK: @llvm.x86.avx2.pmins.b
301 return _mm256_min_epi8(a, b);
304 __m256i test_mm256_min_epi16(__m256i a, __m256i b) {
305 // CHECK: @llvm.x86.avx2.pmins.w
306 return _mm256_min_epi16(a, b);
309 __m256i test_mm256_min_epi32(__m256i a, __m256i b) {
310 // CHECK: @llvm.x86.avx2.pmins.d
311 return _mm256_min_epi32(a, b);
314 __m256i test_mm256_min_epu8(__m256i a, __m256i b) {
315 // CHECK: @llvm.x86.avx2.pminu.b
316 return _mm256_min_epu8(a, b);
319 __m256i test_mm256_min_epu16(__m256i a, __m256i b) {
320 // CHECK: @llvm.x86.avx2.pminu.w
321 return _mm256_min_epu16(a, b);
324 __m256i test_mm256_min_epu32(__m256i a, __m256i b) {
325 // CHECK: @llvm.x86.avx2.pminu.d
326 return _mm256_min_epu32(a, b);
329 int test_mm256_movemask_epi8(__m256i a) {
330 // CHECK: @llvm.x86.avx2.pmovmskb
331 return _mm256_movemask_epi8(a);
334 __m256i test_mm256_cvtepi8_epi16(__m128i a) {
335 // CHECK: @llvm.x86.avx2.pmovsxbw
336 return _mm256_cvtepi8_epi16(a);
339 __m256i test_mm256_cvtepi8_epi32(__m128i a) {
340 // CHECK: @llvm.x86.avx2.pmovsxbd
341 return _mm256_cvtepi8_epi32(a);
344 __m256i test_mm256_cvtepi8_epi64(__m128i a) {
345 // CHECK: @llvm.x86.avx2.pmovsxbq
346 return _mm256_cvtepi8_epi64(a);
349 __m256i test_mm256_cvtepi16_epi32(__m128i a) {
350 // CHECK: @llvm.x86.avx2.pmovsxwd
351 return _mm256_cvtepi16_epi32(a);
354 __m256i test_mm256_cvtepi16_epi64(__m128i a) {
355 // CHECK: @llvm.x86.avx2.pmovsxwq
356 return _mm256_cvtepi16_epi64(a);
359 __m256i test_mm256_cvtepi32_epi64(__m128i a) {
360 // CHECK: @llvm.x86.avx2.pmovsxdq
361 return _mm256_cvtepi32_epi64(a);
364 __m256i test_mm256_cvtepu8_epi16(__m128i a) {
365 // CHECK: @llvm.x86.avx2.pmovzxbw
366 return _mm256_cvtepu8_epi16(a);
369 __m256i test_mm256_cvtepu8_epi32(__m128i a) {
370 // CHECK: @llvm.x86.avx2.pmovzxbd
371 return _mm256_cvtepu8_epi32(a);
374 __m256i test_mm256_cvtepu8_epi64(__m128i a) {
375 // CHECK: @llvm.x86.avx2.pmovzxbq
376 return _mm256_cvtepu8_epi64(a);
379 __m256i test_mm256_cvtepu16_epi32(__m128i a) {
380 // CHECK: @llvm.x86.avx2.pmovzxwd
381 return _mm256_cvtepu16_epi32(a);
384 __m256i test_mm256_cvtepu16_epi64(__m128i a) {
385 // CHECK: @llvm.x86.avx2.pmovzxwq
386 return _mm256_cvtepu16_epi64(a);
389 __m256i test_mm256_cvtepu32_epi64(__m128i a) {
390 // CHECK: @llvm.x86.avx2.pmovzxdq
391 return _mm256_cvtepu32_epi64(a);
394 __m256i test_mm256_mul_epi32(__m256i a, __m256i b) {
395 // CHECK: @llvm.x86.avx2.pmul.dq
396 return _mm256_mul_epi32(a, b);
399 __m256i test_mm256_mulhrs_epi16(__m256i a, __m256i b) {
400 // CHECK: @llvm.x86.avx2.pmul.hr.sw
401 return _mm256_mulhrs_epi16(a, b);
404 __m256i test_mm256_mulhi_epu16(__m256i a, __m256i b) {
405 // CHECK: @llvm.x86.avx2.pmulhu.w
406 return _mm256_mulhi_epu16(a, b);
409 __m256i test_mm256_mulhi_epi16(__m256i a, __m256i b) {
410 // CHECK: @llvm.x86.avx2.pmulh.w
411 return _mm256_mulhi_epi16(a, b);
414 __m256i test_mm256_mullo_epi16(__m256i a, __m256i b) {
415 // CHECK: mul <16 x i16>
416 return _mm256_mullo_epi16(a, b);
419 __m256i test_mm256_mullo_epi32(__m256i a, __m256i b) {
420 // CHECK: mul <8 x i32>
421 return _mm256_mullo_epi32(a, b);
424 __m256i test_mm256_mul_epu32(__m256i a, __m256i b) {
425 // CHECK: @llvm.x86.avx2.pmulu.dq
426 return _mm256_mul_epu32(a, b);
429 __m256i test_mm256_shuffle_epi8(__m256i a, __m256i b) {
430 // CHECK: @llvm.x86.avx2.pshuf.b
431 return _mm256_shuffle_epi8(a, b);
434 __m256i test_mm256_shuffle_epi32(__m256i a) {
435 // 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>
436 return _mm256_shuffle_epi32(a, 15);
439 __m256i test_mm256_shufflehi_epi16(__m256i a) {
440 // 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>
441 return _mm256_shufflehi_epi16(a, 107);
444 __m256i test_mm256_shufflelo_epi16(__m256i a) {
445 // 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>
446 return _mm256_shufflelo_epi16(a, 83);
449 __m256i test_mm256_sign_epi8(__m256i a, __m256i b) {
450 // CHECK: @llvm.x86.avx2.psign.b
451 return _mm256_sign_epi8(a, b);
454 __m256i test_mm256_sign_epi16(__m256i a, __m256i b) {
455 // CHECK: @llvm.x86.avx2.psign.w
456 return _mm256_sign_epi16(a, b);
459 __m256i test_mm256_sign_epi32(__m256i a, __m256i b) {
460 // CHECK: @llvm.x86.avx2.psign.d
461 return _mm256_sign_epi32(a, b);
464 __m256i test_mm256_slli_si256(__m256i a) {
465 // 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>
466 return _mm256_slli_si256(a, 3);
469 __m256i test_mm256_bslli_epi128(__m256i a) {
470 // 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>
471 return _mm256_bslli_epi128(a, 3);
474 __m256i test_mm256_slli_epi16(__m256i a) {
475 // CHECK: @llvm.x86.avx2.pslli.w
476 return _mm256_slli_epi16(a, 3);
479 __m256i test_mm256_sll_epi16(__m256i a, __m128i b) {
480 // CHECK: @llvm.x86.avx2.psll.w
481 return _mm256_sll_epi16(a, b);
484 __m256i test_mm256_slli_epi32(__m256i a) {
485 // CHECK: @llvm.x86.avx2.pslli.d
486 return _mm256_slli_epi32(a, 3);
489 __m256i test_mm256_sll_epi32(__m256i a, __m128i b) {
490 // CHECK: @llvm.x86.avx2.psll.d
491 return _mm256_sll_epi32(a, b);
494 __m256i test_mm256_slli_epi64(__m256i a) {
495 // CHECK: @llvm.x86.avx2.pslli.q
496 return _mm256_slli_epi64(a, 3);
499 __m256i test_mm256_sll_epi64(__m256i a, __m128i b) {
500 // CHECK: @llvm.x86.avx2.psll.q
501 return _mm256_sll_epi64(a, b);
504 __m256i test_mm256_srai_epi16(__m256i a) {
505 // CHECK: @llvm.x86.avx2.psrai.w
506 return _mm256_srai_epi16(a, 3);
509 __m256i test_mm256_sra_epi16(__m256i a, __m128i b) {
510 // CHECK: @llvm.x86.avx2.psra.w
511 return _mm256_sra_epi16(a, b);
514 __m256i test_mm256_srai_epi32(__m256i a) {
515 // CHECK: @llvm.x86.avx2.psrai.d
516 return _mm256_srai_epi32(a, 3);
519 __m256i test_mm256_sra_epi32(__m256i a, __m128i b) {
520 // CHECK: @llvm.x86.avx2.psra.d
521 return _mm256_sra_epi32(a, b);
524 __m256i test_mm256_srli_si256(__m256i a) {
525 // 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>
526 return _mm256_srli_si256(a, 3);
529 __m256i test_mm256_bsrli_epi128(__m256i a) {
530 // 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>
531 return _mm256_bsrli_epi128(a, 3);
534 __m256i test_mm256_srli_epi16(__m256i a) {
535 // CHECK: @llvm.x86.avx2.psrli.w
536 return _mm256_srli_epi16(a, 3);
539 __m256i test_mm256_srl_epi16(__m256i a, __m128i b) {
540 // CHECK: @llvm.x86.avx2.psrl.w
541 return _mm256_srl_epi16(a, b);
544 __m256i test_mm256_srli_epi32(__m256i a) {
545 // CHECK: @llvm.x86.avx2.psrli.d
546 return _mm256_srli_epi32(a, 3);
549 __m256i test_mm256_srl_epi32(__m256i a, __m128i b) {
550 // CHECK: @llvm.x86.avx2.psrl.d
551 return _mm256_srl_epi32(a, b);
554 __m256i test_mm256_srli_epi64(__m256i a) {
555 // CHECK: @llvm.x86.avx2.psrli.q
556 return _mm256_srli_epi64(a, 3);
559 __m256i test_mm256_srl_epi64(__m256i a, __m128i b) {
560 // CHECK: @llvm.x86.avx2.psrl.q
561 return _mm256_srl_epi64(a, b);
564 __m256i test_mm256_unpackhi_epi8(__m256i a, __m256i b) {
565 // 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>
566 return _mm256_unpackhi_epi8(a, b);
569 __m256i test_mm256_unpackhi_epi16(__m256i a, __m256i b) {
570 // 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>
571 return _mm256_unpackhi_epi16(a, b);
574 __m256i test_mm256_unpackhi_epi32(__m256i a, __m256i b) {
575 // 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>
576 return _mm256_unpackhi_epi32(a, b);
579 __m256i test_mm256_unpackhi_epi64(__m256i a, __m256i b) {
580 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
581 return _mm256_unpackhi_epi64(a, b);
584 __m256i test_mm256_unpacklo_epi8(__m256i a, __m256i b) {
585 // 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>
586 return _mm256_unpacklo_epi8(a, b);
589 __m256i test_mm256_unpacklo_epi16(__m256i a, __m256i b) {
590 // 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>
591 return _mm256_unpacklo_epi16(a, b);
594 __m256i test_mm256_unpacklo_epi32(__m256i a, __m256i b) {
595 // 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>
596 return _mm256_unpacklo_epi32(a, b);
599 __m256i test_mm256_unpacklo_epi64(__m256i a, __m256i b) {
600 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
601 return _mm256_unpacklo_epi64(a, b);
604 __m256i test_mm256_stream_load_si256(__m256i *a) {
605 // CHECK: @llvm.x86.avx2.movntdqa
606 return _mm256_stream_load_si256(a);
609 __m128 test_mm_broadcastss_ps(__m128 a) {
610 // CHECK: @llvm.x86.avx2.vbroadcast.ss.ps
611 return _mm_broadcastss_ps(a);
614 __m128d test_mm_broadcastsd_pd(__m128d a) {
615 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> zeroinitializer
616 return _mm_broadcastsd_pd(a);
619 __m256 test_mm256_broadcastss_ps(__m128 a) {
620 // CHECK: @llvm.x86.avx2.vbroadcast.ss.ps.256
621 return _mm256_broadcastss_ps(a);
624 __m256d test_mm256_broadcastsd_pd(__m128d a) {
625 // check: @llvm.x86.avx2.vbroadcast.sd.pd.256
626 return _mm256_broadcastsd_pd(a);
629 __m256i test_mm256_broadcastsi128_si256(__m128i a) {
630 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
631 return _mm256_broadcastsi128_si256(a);
634 __m128i test_mm_blend_epi32(__m128i a, __m128i b) {
635 // CHECK-LABEL: test_mm_blend_epi32
636 // CHECK-NOT: @llvm.x86.avx2.pblendd.128
637 // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
638 return _mm_blend_epi32(a, b, 0x35);
641 __m256i test_mm256_blend_epi32(__m256i a, __m256i b) {
642 // CHECK-LABEL: test_mm256_blend_epi32
643 // CHECK-NOT: @llvm.x86.avx2.pblendd.256
644 // 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>
645 return _mm256_blend_epi32(a, b, 0x35);
648 __m256i test_mm256_broadcastb_epi8(__m128i a) {
649 // CHECK: @llvm.x86.avx2.pbroadcastb.256
650 return _mm256_broadcastb_epi8(a);
653 __m256i test_mm256_broadcastw_epi16(__m128i a) {
654 // CHECK: @llvm.x86.avx2.pbroadcastw.256
655 return _mm256_broadcastw_epi16(a);
658 __m256i test_mm256_broadcastd_epi32(__m128i a) {
659 // CHECK: @llvm.x86.avx2.pbroadcastd.256
660 return _mm256_broadcastd_epi32(a);
663 __m256i test_mm256_broadcastq_epi64(__m128i a) {
664 // CHECK: @llvm.x86.avx2.pbroadcastq.256
665 return _mm256_broadcastq_epi64(a);
668 __m128i test_mm_broadcastb_epi8(__m128i a) {
669 // CHECK: @llvm.x86.avx2.pbroadcastb.128
670 return _mm_broadcastb_epi8(a);
673 __m128i test_mm_broadcastw_epi16(__m128i a) {
674 // CHECK: @llvm.x86.avx2.pbroadcastw.128
675 return _mm_broadcastw_epi16(a);
678 __m128i test_mm_broadcastd_epi32(__m128i a) {
679 // CHECK: @llvm.x86.avx2.pbroadcastd.128
680 return _mm_broadcastd_epi32(a);
683 __m128i test_mm_broadcastq_epi64(__m128i a) {
684 // CHECK: @llvm.x86.avx2.pbroadcastq.128
685 return _mm_broadcastq_epi64(a);
688 __m256i test_mm256_permutevar8x32_epi32(__m256i a, __m256i b) {
689 // CHECK: @llvm.x86.avx2.permd
690 return _mm256_permutevar8x32_epi32(a, b);
693 __m256d test_mm256_permute4x64_pd(__m256d a) {
694 // CHECK: shufflevector{{.*}}<i32 1, i32 2, i32 1, i32 0>
695 return _mm256_permute4x64_pd(a, 25);
698 __m256 test_mm256_permutevar8x32_ps(__m256 a, __m256 b) {
699 // CHECK: @llvm.x86.avx2.permps
700 return _mm256_permutevar8x32_ps(a, b);
703 __m256i test_mm256_permute4x64_epi64(__m256i a) {
704 // CHECK: shufflevector{{.*}}<i32 3, i32 0, i32 2, i32 0>
705 return _mm256_permute4x64_epi64(a, 35);
708 __m256i test_mm256_permute2x128_si256(__m256i a, __m256i b) {
709 // CHECK: @llvm.x86.avx2.vperm2i128
710 return _mm256_permute2x128_si256(a, b, 0x31);
713 __m128i test_mm256_extracti128_si256_0(__m256i a) {
714 // CHECK-LABEL: @test_mm256_extracti128_si256_0
715 // CHECK: shufflevector{{.*}}<i32 0, i32 1>
716 return _mm256_extracti128_si256(a, 0);
719 __m128i test_mm256_extracti128_si256_1(__m256i a) {
720 // CHECK-LABEL: @test_mm256_extracti128_si256_1
721 // CHECK: shufflevector{{.*}}<i32 2, i32 3>
722 return _mm256_extracti128_si256(a, 1);
725 // Immediate should be truncated to one bit.
726 __m128i test_mm256_extracti128_si256_2(__m256i a) {
727 // CHECK-LABEL: @test_mm256_extracti128_si256_2
728 // CHECK: shufflevector{{.*}}<i32 0, i32 1>
729 return _mm256_extracti128_si256(a, 2);
732 __m256i test_mm256_inserti128_si256_0(__m256i a, __m128i b) {
733 // CHECK-LABEL: @test_mm256_inserti128_si256_0
734 // CHECK: shufflevector{{.*}}<i32 4, i32 5, i32 2, i32 3>
735 return _mm256_inserti128_si256(a, b, 0);
738 __m256i test_mm256_inserti128_si256_1(__m256i a, __m128i b) {
739 // CHECK-LABEL: @test_mm256_inserti128_si256_1
740 // CHECK: shufflevector{{.*}}<i32 0, i32 1, i32 4, i32 5>
741 return _mm256_inserti128_si256(a, b, 1);
744 // Immediate should be truncated to one bit.
745 __m256i test_mm256_inserti128_si256_2(__m256i a, __m128i b) {
746 // CHECK-LABEL: @test_mm256_inserti128_si256_2
747 // CHECK: shufflevector{{.*}}<i32 4, i32 5, i32 2, i32 3>
748 return _mm256_inserti128_si256(a, b, 2);
751 __m256i test_mm256_maskload_epi32(int const *a, __m256i m) {
752 // CHECK: @llvm.x86.avx2.maskload.d.256
753 return _mm256_maskload_epi32(a, m);
756 __m256i test_mm256_maskload_epi64(long long const *a, __m256i m) {
757 // CHECK: @llvm.x86.avx2.maskload.q.256
758 return _mm256_maskload_epi64(a, m);
761 __m128i test_mm_maskload_epi32(int const *a, __m128i m) {
762 // CHECK: @llvm.x86.avx2.maskload.d
763 return _mm_maskload_epi32(a, m);
766 __m128i test_mm_maskload_epi64(long long const *a, __m128i m) {
767 // CHECK: @llvm.x86.avx2.maskload.q
768 return _mm_maskload_epi64(a, m);
771 void test_mm256_maskstore_epi32(int *a, __m256i m, __m256i b) {
772 // CHECK: @llvm.x86.avx2.maskstore.d.256
773 _mm256_maskstore_epi32(a, m, b);
776 void test_mm256_maskstore_epi64(long long *a, __m256i m, __m256i b) {
777 // CHECK: @llvm.x86.avx2.maskstore.q.256
778 _mm256_maskstore_epi64(a, m, b);
781 void test_mm_maskstore_epi32(int *a, __m128i m, __m128i b) {
782 // CHECK: @llvm.x86.avx2.maskstore.d
783 _mm_maskstore_epi32(a, m, b);
786 void test_mm_maskstore_epi64(long long *a, __m128i m, __m128i b) {
787 // CHECK: @llvm.x86.avx2.maskstore.q
788 _mm_maskstore_epi64(a, m, b);
791 __m256i test_mm256_sllv_epi32(__m256i a, __m256i b) {
792 // CHECK: @llvm.x86.avx2.psllv.d.256
793 return _mm256_sllv_epi32(a, b);
796 __m128i test_mm_sllv_epi32(__m128i a, __m128i b) {
797 // CHECK: @llvm.x86.avx2.psllv.d
798 return _mm_sllv_epi32(a, b);
801 __m256i test_mm256_sllv_epi64(__m256i a, __m256i b) {
802 // CHECK: @llvm.x86.avx2.psllv.q.256
803 return _mm256_sllv_epi64(a, b);
806 __m128i test_mm_sllv_epi64(__m128i a, __m128i b) {
807 // CHECK: @llvm.x86.avx2.psllv.q
808 return _mm_sllv_epi64(a, b);
811 __m256i test_mm256_srav_epi32(__m256i a, __m256i b) {
812 // CHECK: @llvm.x86.avx2.psrav.d.256
813 return _mm256_srav_epi32(a, b);
816 __m128i test_mm_srav_epi32(__m128i a, __m128i b) {
817 // CHECK: @llvm.x86.avx2.psrav.d
818 return _mm_srav_epi32(a, b);
821 __m256i test_mm256_srlv_epi32(__m256i a, __m256i b) {
822 // CHECK: @llvm.x86.avx2.psrlv.d.256
823 return _mm256_srlv_epi32(a, b);
826 __m128i test_mm_srlv_epi32(__m128i a, __m128i b) {
827 // CHECK: @llvm.x86.avx2.psrlv.d
828 return _mm_srlv_epi32(a, b);
831 __m256i test_mm256_srlv_epi64(__m256i a, __m256i b) {
832 // CHECK: @llvm.x86.avx2.psrlv.q.256
833 return _mm256_srlv_epi64(a, b);
836 __m128i test_mm_srlv_epi64(__m128i a, __m128i b) {
837 // CHECK: @llvm.x86.avx2.psrlv.q
838 return _mm_srlv_epi64(a, b);
841 __m128d test_mm_mask_i32gather_pd(__m128d a, double const *b, __m128i c,
843 // CHECK: @llvm.x86.avx2.gather.d.pd
844 return _mm_mask_i32gather_pd(a, b, c, d, 2);
847 __m256d test_mm256_mask_i32gather_pd(__m256d a, double const *b, __m128i c,
849 // CHECK: @llvm.x86.avx2.gather.d.pd.256
850 return _mm256_mask_i32gather_pd(a, b, c, d, 2);
852 __m128d test_mm_mask_i64gather_pd(__m128d a, double const *b, __m128i c,
854 // CHECK: @llvm.x86.avx2.gather.q.pd
855 return _mm_mask_i64gather_pd(a, b, c, d, 2);
857 __m256d test_mm256_mask_i64gather_pd(__m256d a, double const *b, __m256i c,
859 // CHECK: @llvm.x86.avx2.gather.q.pd.256
860 return _mm256_mask_i64gather_pd(a, b, c, d, 2);
863 __m128 test_mm_mask_i32gather_ps(__m128 a, float const *b, __m128i c,
865 // CHECK: @llvm.x86.avx2.gather.d.ps
866 return _mm_mask_i32gather_ps(a, b, c, d, 2);
868 __m256 test_mm256_mask_i32gather_ps(__m256 a, float const *b, __m256i c,
870 // CHECK: @llvm.x86.avx2.gather.d.ps.256
871 return _mm256_mask_i32gather_ps(a, b, c, d, 2);
873 __m128 test_mm_mask_i64gather_ps(__m128 a, float const *b, __m128i c,
875 // CHECK: @llvm.x86.avx2.gather.q.ps
876 return _mm_mask_i64gather_ps(a, b, c, d, 2);
878 __m128 test_mm256_mask_i64gather_ps(__m128 a, float const *b, __m256i c,
880 // CHECK: @llvm.x86.avx2.gather.q.ps.256
881 return _mm256_mask_i64gather_ps(a, b, c, d, 2);
884 __m128i test_mm_mask_i32gather_epi32(__m128i a, int const *b, __m128i c,
886 // CHECK: @llvm.x86.avx2.gather.d.d
887 return _mm_mask_i32gather_epi32(a, b, c, d, 2);
889 __m256i test_mm256_mask_i32gather_epi32(__m256i a, int const *b, __m256i c,
891 // CHECK: @llvm.x86.avx2.gather.d.d.256
892 return _mm256_mask_i32gather_epi32(a, b, c, d, 2);
894 __m128i test_mm_mask_i64gather_epi32(__m128i a, int const *b, __m128i c,
896 // CHECK: @llvm.x86.avx2.gather.q.d
897 return _mm_mask_i64gather_epi32(a, b, c, d, 2);
899 __m128i test_mm256_mask_i64gather_epi32(__m128i a, int const *b, __m256i c,
901 // CHECK: @llvm.x86.avx2.gather.q.d.256
902 return _mm256_mask_i64gather_epi32(a, b, c, d, 2);
905 __m128i test_mm_mask_i32gather_epi64(__m128i a, long long const *b, __m128i c,
907 // CHECK: @llvm.x86.avx2.gather.d.q
908 return _mm_mask_i32gather_epi64(a, b, c, d, 2);
910 __m256i test_mm256_mask_i32gather_epi64(__m256i a, long long const *b, __m128i c,
912 // CHECK: @llvm.x86.avx2.gather.d.q.256
913 return _mm256_mask_i32gather_epi64(a, b, c, d, 2);
915 __m128i test_mm_mask_i64gather_epi64(__m128i a, long long const *b, __m128i c,
917 // CHECK: @llvm.x86.avx2.gather.q.q
918 return _mm_mask_i64gather_epi64(a, b, c, d, 2);
920 __m256i test_mm256_mask_i64gather_epi64(__m256i a, long long const *b, __m256i c,
922 // CHECK: @llvm.x86.avx2.gather.q.q.256
923 return _mm256_mask_i64gather_epi64(a, b, c, d, 2);
926 __m128d test_mm_i32gather_pd(double const *b, __m128i c) {
927 // CHECK: @llvm.x86.avx2.gather.d.pd
928 return _mm_i32gather_pd(b, c, 2);
930 __m256d test_mm256_i32gather_pd(double const *b, __m128i c) {
931 // CHECK: @llvm.x86.avx2.gather.d.pd.256
932 return _mm256_i32gather_pd(b, c, 2);
934 __m128d test_mm_i64gather_pd(double const *b, __m128i c) {
935 // CHECK: @llvm.x86.avx2.gather.q.pd
936 return _mm_i64gather_pd(b, c, 2);
938 __m256d test_mm256_i64gather_pd(double const *b, __m256i c) {
939 // CHECK: @llvm.x86.avx2.gather.q.pd.256
940 return _mm256_i64gather_pd(b, c, 2);
942 __m128 test_mm_i32gather_ps(float const *b, __m128i c) {
943 // CHECK: @llvm.x86.avx2.gather.d.ps
944 return _mm_i32gather_ps(b, c, 2);
946 __m256 test_mm256_i32gather_ps(float const *b, __m256i c) {
947 // CHECK: @llvm.x86.avx2.gather.d.ps.256
948 return _mm256_i32gather_ps(b, c, 2);
950 __m128 test_mm_i64gather_ps(float const *b, __m128i c) {
951 // CHECK: @llvm.x86.avx2.gather.q.ps
952 return _mm_i64gather_ps(b, c, 2);
954 __m128 test_mm256_i64gather_ps(float const *b, __m256i c) {
955 // CHECK: @llvm.x86.avx2.gather.q.ps.256
956 return _mm256_i64gather_ps(b, c, 2);
959 __m128i test_mm_i32gather_epi32(int const *b, __m128i c) {
960 // CHECK: @llvm.x86.avx2.gather.d.d
961 return _mm_i32gather_epi32(b, c, 2);
963 __m256i test_mm256_i32gather_epi32(int const *b, __m256i c) {
964 // CHECK: @llvm.x86.avx2.gather.d.d.256
965 return _mm256_i32gather_epi32(b, c, 2);
967 __m128i test_mm_i64gather_epi32(int const *b, __m128i c) {
968 // CHECK: @llvm.x86.avx2.gather.q.d
969 return _mm_i64gather_epi32(b, c, 2);
971 __m128i test_mm256_i64gather_epi32(int const *b, __m256i c) {
972 // CHECK: @llvm.x86.avx2.gather.q.d.256
973 return _mm256_i64gather_epi32(b, c, 2);
975 __m128i test_mm_i32gather_epi64(long long const *b, __m128i c) {
976 // CHECK: @llvm.x86.avx2.gather.d.q
977 return _mm_i32gather_epi64(b, c, 2);
979 __m256i test_mm256_i32gather_epi64(long long const *b, __m128i c) {
980 // CHECK: @llvm.x86.avx2.gather.d.q.256
981 return _mm256_i32gather_epi64(b, c, 2);
983 __m128i test_mm_i64gather_epi64(long long const *b, __m128i c) {
984 // CHECK: @llvm.x86.avx2.gather.q.q
985 return _mm_i64gather_epi64(b, c, 2);
987 __m256i test_mm256_i64gather_epi64(long long const *b, __m256i c) {
988 // CHECK: @llvm.x86.avx2.gather.q.q.256
989 return _mm256_i64gather_epi64(b, c, 2);