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