1// RUN: %clang_cc1 %s -O3 -triple=x86_64-apple-darwin -target-feature +avx2 -emit-llvm -o - | 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({{.*}}, {{.*}}, i32 3)
10  return _mm256_mpsadbw_epu8(x, y, 3);
11}
12
13__m256i test_mm256_abs_epi8(__m256i a) {
14  // CHECK: @llvm.x86.avx2.pabs.b
15  return _mm256_abs_epi8(a);
16}
17
18__m256i test_mm256_abs_epi16(__m256i a) {
19  // CHECK: @llvm.x86.avx2.pabs.w
20  return _mm256_abs_epi16(a);
21}
22
23__m256i test_mm256_abs_epi32(__m256i a) {
24  // CHECK: @llvm.x86.avx2.pabs.d
25  return _mm256_abs_epi32(a);
26}
27
28__m256i test_mm256_packs_epi16(__m256i a, __m256i b) {
29  // CHECK: @llvm.x86.avx2.packsswb
30  return _mm256_packs_epi16(a, b);
31}
32
33__m256i test_mm256_packs_epi32(__m256i a, __m256i b) {
34  // CHECK: @llvm.x86.avx2.packssdw
35  return _mm256_packs_epi32(a, b);
36}
37
38__m256i test_mm256_packs_epu16(__m256i a, __m256i b) {
39  // CHECK: @llvm.x86.avx2.packuswb
40  return _mm256_packus_epi16(a, b);
41}
42
43__m256i test_mm256_packs_epu32(__m256i a, __m256i b) {
44  // CHECK: @llvm.x86.avx2.packusdw
45  return _mm256_packus_epi32(a, b);
46}
47
48__m256i test_mm256_add_epi8(__m256i a, __m256i b) {
49  // CHECK: add <32 x i8>
50  return _mm256_add_epi8(a, b);
51}
52
53__m256i test_mm256_add_epi16(__m256i a, __m256i b) {
54  // CHECK: add <16 x i16>
55  return _mm256_add_epi16(a, b);
56}
57
58__m256i test_mm256_add_epi32(__m256i a, __m256i b) {
59  // CHECK: add <8 x i32>
60  return _mm256_add_epi32(a, b);
61}
62
63__m256i test_mm256_add_epi64(__m256i a, __m256i b) {
64  // CHECK: add <4 x i64>
65  return _mm256_add_epi64(a, b);
66}
67
68__m256i test_mm256_adds_epi8(__m256i a, __m256i b) {
69  // CHECK: @llvm.x86.avx2.padds.b
70  return _mm256_adds_epi8(a, b);
71}
72
73__m256i test_mm256_adds_epi16(__m256i a, __m256i b) {
74  // CHECK: @llvm.x86.avx2.padds.w
75  return _mm256_adds_epi16(a, b);
76}
77
78__m256i test_mm256_adds_epu8(__m256i a, __m256i b) {
79  // CHECK: @llvm.x86.avx2.paddus.b
80  return _mm256_adds_epu8(a, b);
81}
82
83__m256i test_mm256_adds_epu16(__m256i a, __m256i b) {
84  // CHECK: @llvm.x86.avx2.paddus.w
85  return _mm256_adds_epu16(a, b);
86}
87
88__m256i test_mm256_alignr_epi8(__m256i a, __m256i b) {
89  // 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>
90  return _mm256_alignr_epi8(a, b, 2);
91}
92
93__m256i test2_mm256_alignr_epi8(__m256i a, __m256i b) {
94  // CHECK: @llvm.x86.avx2.psrl.dq({{.*}}, i32 8)
95  return _mm256_alignr_epi8(a, b, 17);
96}
97
98__m256i test_mm256_sub_epi8(__m256i a, __m256i b) {
99  // CHECK: sub <32 x i8>
100  return _mm256_sub_epi8(a, b);
101}
102
103__m256i test_mm256_sub_epi16(__m256i a, __m256i b) {
104  // CHECK: sub <16 x i16>
105  return _mm256_sub_epi16(a, b);
106}
107
108__m256i test_mm256_sub_epi32(__m256i a, __m256i b) {
109  // CHECK: sub <8 x i32>
110  return _mm256_sub_epi32(a, b);
111}
112
113__m256i test_mm256_sub_epi64(__m256i a, __m256i b) {
114  // CHECK: sub <4 x i64>
115  return _mm256_sub_epi64(a, b);
116}
117
118__m256i test_mm256_subs_epi8(__m256i a, __m256i b) {
119  // CHECK: @llvm.x86.avx2.psubs.b
120  return _mm256_subs_epi8(a, b);
121}
122
123__m256i test_mm256_subs_epi16(__m256i a, __m256i b) {
124  // CHECK: @llvm.x86.avx2.psubs.w
125  return _mm256_subs_epi16(a, b);
126}
127
128__m256i test_mm256_subs_epu8(__m256i a, __m256i b) {
129  // CHECK: @llvm.x86.avx2.psubus.b
130  return _mm256_subs_epu8(a, b);
131}
132
133__m256i test_mm256_subs_epu16(__m256i a, __m256i b) {
134  // CHECK: @llvm.x86.avx2.psubus.w
135  return _mm256_subs_epu16(a, b);
136}
137
138__m256i test_mm256_and_si256(__m256i a, __m256i b) {
139  // CHECK: and <4 x i64>
140  return _mm256_and_si256(a, b);
141}
142
143__m256i test_mm256_andnot_si256(__m256i a, __m256i b) {
144  // CHECK: xor <4 x i64>
145  // CHECK: and <4 x i64>
146  return _mm256_andnot_si256(a, b);
147}
148
149__m256i test_mm256_or_si256(__m256i a, __m256i b) {
150  // CHECK: or <4 x i64>
151  return _mm256_or_si256(a, b);
152}
153
154__m256i test_mm256_xor_si256(__m256i a, __m256i b) {
155  // CHECK: xor <4 x i64>
156  return _mm256_xor_si256(a, b);
157}
158
159__m256i test_mm256_avg_epu8(__m256i a, __m256i b) {
160  // CHECK: @llvm.x86.avx2.pavg.b
161  return _mm256_avg_epu8(a, b);
162}
163
164__m256i test_mm256_avg_epu16(__m256i a, __m256i b) {
165  // CHECK: @llvm.x86.avx2.pavg.w
166  return _mm256_avg_epu16(a, b);
167}
168
169__m256i test_mm256_blendv_epi8(__m256i a, __m256i b, __m256i m) {
170  // CHECK: @llvm.x86.avx2.pblendvb
171  return _mm256_blendv_epi8(a, b, m);
172}
173
174__m256i test_mm256_blend_epi16(__m256i a, __m256i b) {
175  // CHECK: @llvm.x86.avx2.pblendw(<16 x i16> %{{.*}}, <16 x i16> %{{.*}}, i32 2)
176  return _mm256_blend_epi16(a, b, 2);
177}
178
179__m256i test_mm256_cmpeq_epi8(__m256i a, __m256i b) {
180  // CHECK: icmp eq <32 x i8>
181  return _mm256_cmpeq_epi8(a, b);
182}
183
184__m256i test_mm256_cmpeq_epi16(__m256i a, __m256i b) {
185  // CHECK: icmp eq <16 x i16>
186  return _mm256_cmpeq_epi16(a, b);
187}
188
189__m256i test_mm256_cmpeq_epi32(__m256i a, __m256i b) {
190  // CHECK: icmp eq <8 x i32>
191  return _mm256_cmpeq_epi32(a, b);
192}
193
194__m256i test_mm256_cmpeq_epi64(__m256i a, __m256i b) {
195  // CHECK: icmp eq <4 x i64>
196  return _mm256_cmpeq_epi64(a, b);
197}
198
199__m256i test_mm256_cmpgt_epi8(__m256i a, __m256i b) {
200  // CHECK: icmp sgt <32 x i8>
201  return _mm256_cmpgt_epi8(a, b);
202}
203
204__m256i test_mm256_cmpgt_epi16(__m256i a, __m256i b) {
205  // CHECK: icmp sgt <16 x i16>
206  return _mm256_cmpgt_epi16(a, b);
207}
208
209__m256i test_mm256_cmpgt_epi32(__m256i a, __m256i b) {
210  // CHECK: icmp sgt <8 x i32>
211  return _mm256_cmpgt_epi32(a, b);
212}
213
214__m256i test_mm256_cmpgt_epi64(__m256i a, __m256i b) {
215  // CHECK: icmp sgt <4 x i64>
216  return _mm256_cmpgt_epi64(a, b);
217}
218
219__m256i test_mm256_hadd_epi16(__m256i a, __m256i b) {
220  // CHECK: @llvm.x86.avx2.phadd.w
221  return _mm256_hadd_epi16(a, b);
222}
223
224__m256i test_mm256_hadd_epi32(__m256i a, __m256i b) {
225  // CHECK: @llvm.x86.avx2.phadd.d
226  return _mm256_hadd_epi32(a, b);
227}
228
229__m256i test_mm256_hadds_epi16(__m256i a, __m256i b) {
230  // CHECK: @llvm.x86.avx2.phadd.sw
231  return _mm256_hadds_epi16(a, b);
232}
233
234__m256i test_mm256_hsub_epi16(__m256i a, __m256i b) {
235  // CHECK: @llvm.x86.avx2.phsub.w
236  return _mm256_hsub_epi16(a, b);
237}
238
239__m256i test_mm256_hsub_epi32(__m256i a, __m256i b) {
240  // CHECK: @llvm.x86.avx2.phsub.d
241  return _mm256_hsub_epi32(a, b);
242}
243
244__m256i test_mm256_hsubs_epi16(__m256i a, __m256i b) {
245  // CHECK: @llvm.x86.avx2.phsub.sw
246  return _mm256_hsubs_epi16(a, b);
247}
248
249__m256i test_mm256_maddubs_epi16(__m256i a, __m256i b) {
250  // CHECK: @llvm.x86.avx2.pmadd.ub.sw
251  return _mm256_maddubs_epi16(a, b);
252}
253
254__m256i test_mm256_madd_epi16(__m256i a, __m256i b) {
255  // CHECK: @llvm.x86.avx2.pmadd.wd
256  return _mm256_madd_epi16(a, b);
257}
258
259__m256i test_mm256_max_epi8(__m256i a, __m256i b) {
260  // CHECK: @llvm.x86.avx2.pmaxs.b
261  return _mm256_max_epi8(a, b);
262}
263
264__m256i test_mm256_max_epi16(__m256i a, __m256i b) {
265  // CHECK: @llvm.x86.avx2.pmaxs.w
266  return _mm256_max_epi16(a, b);
267}
268
269__m256i test_mm256_max_epi32(__m256i a, __m256i b) {
270  // CHECK: @llvm.x86.avx2.pmaxs.d
271  return _mm256_max_epi32(a, b);
272}
273
274__m256i test_mm256_max_epu8(__m256i a, __m256i b) {
275  // CHECK: @llvm.x86.avx2.pmaxu.b
276  return _mm256_max_epu8(a, b);
277}
278
279__m256i test_mm256_max_epu16(__m256i a, __m256i b) {
280  // CHECK: @llvm.x86.avx2.pmaxu.w
281  return _mm256_max_epu16(a, b);
282}
283
284__m256i test_mm256_max_epu32(__m256i a, __m256i b) {
285  // CHECK: @llvm.x86.avx2.pmaxu.d
286  return _mm256_max_epu32(a, b);
287}
288
289__m256i test_mm256_min_epi8(__m256i a, __m256i b) {
290  // CHECK: @llvm.x86.avx2.pmins.b
291  return _mm256_min_epi8(a, b);
292}
293
294__m256i test_mm256_min_epi16(__m256i a, __m256i b) {
295  // CHECK: @llvm.x86.avx2.pmins.w
296  return _mm256_min_epi16(a, b);
297}
298
299__m256i test_mm256_min_epi32(__m256i a, __m256i b) {
300  // CHECK: @llvm.x86.avx2.pmins.d
301  return _mm256_min_epi32(a, b);
302}
303
304__m256i test_mm256_min_epu8(__m256i a, __m256i b) {
305  // CHECK: @llvm.x86.avx2.pminu.b
306  return _mm256_min_epu8(a, b);
307}
308
309__m256i test_mm256_min_epu16(__m256i a, __m256i b) {
310  // CHECK: @llvm.x86.avx2.pminu.w
311  return _mm256_min_epu16(a, b);
312}
313
314__m256i test_mm256_min_epu32(__m256i a, __m256i b) {
315  // CHECK: @llvm.x86.avx2.pminu.d
316  return _mm256_min_epu32(a, b);
317}
318
319int test_mm256_movemask_epi8(__m256i a) {
320  // CHECK: @llvm.x86.avx2.pmovmskb
321  return _mm256_movemask_epi8(a);
322}
323
324__m256i test_mm256_cvtepi8_epi16(__m128i a) {
325  // CHECK: @llvm.x86.avx2.pmovsxbw
326  return _mm256_cvtepi8_epi16(a);
327}
328
329__m256i test_mm256_cvtepi8_epi32(__m128i a) {
330  // CHECK: @llvm.x86.avx2.pmovsxbd
331  return _mm256_cvtepi8_epi32(a);
332}
333
334__m256i test_mm256_cvtepi8_epi64(__m128i a) {
335  // CHECK: @llvm.x86.avx2.pmovsxbq
336  return _mm256_cvtepi8_epi64(a);
337}
338
339__m256i test_mm256_cvtepi16_epi32(__m128i a) {
340  // CHECK: @llvm.x86.avx2.pmovsxwd
341  return _mm256_cvtepi16_epi32(a);
342}
343
344__m256i test_mm256_cvtepi16_epi64(__m128i a) {
345  // CHECK: @llvm.x86.avx2.pmovsxwq
346  return _mm256_cvtepi16_epi64(a);
347}
348
349__m256i test_mm256_cvtepi32_epi64(__m128i a) {
350  // CHECK: @llvm.x86.avx2.pmovsxdq
351  return _mm256_cvtepi32_epi64(a);
352}
353
354__m256i test_mm256_cvtepu8_epi16(__m128i a) {
355  // CHECK: @llvm.x86.avx2.pmovzxbw
356  return _mm256_cvtepu8_epi16(a);
357}
358
359__m256i test_mm256_cvtepu8_epi32(__m128i a) {
360  // CHECK: @llvm.x86.avx2.pmovzxbd
361  return _mm256_cvtepu8_epi32(a);
362}
363
364__m256i test_mm256_cvtepu8_epi64(__m128i a) {
365  // CHECK: @llvm.x86.avx2.pmovzxbq
366  return _mm256_cvtepu8_epi64(a);
367}
368
369__m256i test_mm256_cvtepu16_epi32(__m128i a) {
370  // CHECK: @llvm.x86.avx2.pmovzxwd
371  return _mm256_cvtepu16_epi32(a);
372}
373
374__m256i test_mm256_cvtepu16_epi64(__m128i a) {
375  // CHECK: @llvm.x86.avx2.pmovzxwq
376  return _mm256_cvtepu16_epi64(a);
377}
378
379__m256i test_mm256_cvtepu32_epi64(__m128i a) {
380  // CHECK: @llvm.x86.avx2.pmovzxdq
381  return _mm256_cvtepu32_epi64(a);
382}
383
384__m256i test_mm256_mul_epi32(__m256i a, __m256i b) {
385  // CHECK: @llvm.x86.avx2.pmul.dq
386  return _mm256_mul_epi32(a, b);
387}
388
389__m256i test_mm256_mulhrs_epi16(__m256i a, __m256i b) {
390  // CHECK: @llvm.x86.avx2.pmul.hr.sw
391  return _mm256_mulhrs_epi16(a, b);
392}
393
394__m256i test_mm256_mulhi_epu16(__m256i a, __m256i b) {
395  // CHECK: @llvm.x86.avx2.pmulhu.w
396  return _mm256_mulhi_epu16(a, b);
397}
398
399__m256i test_mm256_mulhi_epi16(__m256i a, __m256i b) {
400  // CHECK: @llvm.x86.avx2.pmulh.w
401  return _mm256_mulhi_epi16(a, b);
402}
403
404__m256i test_mm256_mullo_epi16(__m256i a, __m256i b) {
405  // CHECK: mul <16 x i16>
406  return _mm256_mullo_epi16(a, b);
407}
408
409__m256i test_mm256_mullo_epi32(__m256i a, __m256i b) {
410  // CHECK: mul <8 x i32>
411  return _mm256_mullo_epi32(a, b);
412}
413
414__m256i test_mm256_mul_epu32(__m256i a, __m256i b) {
415  // CHECK: @llvm.x86.avx2.pmulu.dq
416  return _mm256_mul_epu32(a, b);
417}
418
419__m256i test_mm256_shuffle_epi8(__m256i a, __m256i b) {
420  // CHECK: @llvm.x86.avx2.pshuf.b
421  return _mm256_shuffle_epi8(a, b);
422}
423
424__m256i test_mm256_shuffle_epi32(__m256i a) {
425  // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> undef, <8 x i32> <i32 3, i32 3, i32 0, i32 0, i32 7, i32 7, i32 4, i32 4>
426  return _mm256_shuffle_epi32(a, 15);
427}
428
429__m256i test_mm256_shufflehi_epi16(__m256i a) {
430  // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> undef, <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>
431  return _mm256_shufflehi_epi16(a, 107);
432}
433
434__m256i test_mm256_shufflelo_epi16(__m256i a) {
435  // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> undef, <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>
436  return _mm256_shufflelo_epi16(a, 83);
437}
438
439__m256i test_mm256_sign_epi8(__m256i a, __m256i b) {
440  // CHECK: @llvm.x86.avx2.psign.b
441  return _mm256_sign_epi8(a, b);
442}
443
444__m256i test_mm256_sign_epi16(__m256i a, __m256i b) {
445  // CHECK: @llvm.x86.avx2.psign.w
446  return _mm256_sign_epi16(a, b);
447}
448
449__m256i test_mm256_sign_epi32(__m256i a, __m256i b) {
450  // CHECK: @llvm.x86.avx2.psign.d
451  return _mm256_sign_epi32(a, b);
452}
453
454__m256i test_mm256_slli_si256(__m256i a) {
455  // CHECK: @llvm.x86.avx2.psll.dq
456  return _mm256_slli_si256(a, 3);
457}
458
459__m256i test_mm256_slli_epi16(__m256i a) {
460  // CHECK: @llvm.x86.avx2.pslli.w
461  return _mm256_slli_epi16(a, 3);
462}
463
464__m256i test_mm256_sll_epi16(__m256i a, __m128i b) {
465  // CHECK: @llvm.x86.avx2.psll.w
466  return _mm256_sll_epi16(a, b);
467}
468
469__m256i test_mm256_slli_epi32(__m256i a) {
470  // CHECK: @llvm.x86.avx2.pslli.d
471  return _mm256_slli_epi32(a, 3);
472}
473
474__m256i test_mm256_sll_epi32(__m256i a, __m128i b) {
475  // CHECK: @llvm.x86.avx2.psll.d
476  return _mm256_sll_epi32(a, b);
477}
478
479__m256i test_mm256_slli_epi64(__m256i a) {
480  // CHECK: @llvm.x86.avx2.pslli.q
481  return _mm256_slli_epi64(a, 3);
482}
483
484__m256i test_mm256_sll_epi64(__m256i a, __m128i b) {
485  // CHECK: @llvm.x86.avx2.psll.q
486  return _mm256_sll_epi64(a, b);
487}
488
489__m256i test_mm256_srai_epi16(__m256i a) {
490  // CHECK: @llvm.x86.avx2.psrai.w
491  return _mm256_srai_epi16(a, 3);
492}
493
494__m256i test_mm256_sra_epi16(__m256i a, __m128i b) {
495  // CHECK: @llvm.x86.avx2.psra.w
496  return _mm256_sra_epi16(a, b);
497}
498
499__m256i test_mm256_srai_epi32(__m256i a) {
500  // CHECK: @llvm.x86.avx2.psrai.d
501  return _mm256_srai_epi32(a, 3);
502}
503
504__m256i test_mm256_sra_epi32(__m256i a, __m128i b) {
505  // CHECK: @llvm.x86.avx2.psra.d
506  return _mm256_sra_epi32(a, b);
507}
508
509__m256i test_mm256_srli_si256(__m256i a) {
510  // CHECK: @llvm.x86.avx2.psrl.dq
511  return _mm256_srli_si256(a, 3);
512}
513
514__m256i test_mm256_srli_epi16(__m256i a) {
515  // CHECK: @llvm.x86.avx2.psrli.w
516  return _mm256_srli_epi16(a, 3);
517}
518
519__m256i test_mm256_srl_epi16(__m256i a, __m128i b) {
520  // CHECK: @llvm.x86.avx2.psrl.w
521  return _mm256_srl_epi16(a, b);
522}
523
524__m256i test_mm256_srli_epi32(__m256i a) {
525  // CHECK: @llvm.x86.avx2.psrli.d
526  return _mm256_srli_epi32(a, 3);
527}
528
529__m256i test_mm256_srl_epi32(__m256i a, __m128i b) {
530  // CHECK: @llvm.x86.avx2.psrl.d
531  return _mm256_srl_epi32(a, b);
532}
533
534__m256i test_mm256_srli_epi64(__m256i a) {
535  // CHECK: @llvm.x86.avx2.psrli.q
536  return _mm256_srli_epi64(a, 3);
537}
538
539__m256i test_mm256_srl_epi64(__m256i a, __m128i b) {
540  // CHECK: @llvm.x86.avx2.psrl.q
541  return _mm256_srl_epi64(a, b);
542}
543
544__m256i test_mm256_unpackhi_epi8(__m256i a, __m256i b) {
545  // 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>
546  return _mm256_unpackhi_epi8(a, b);
547}
548
549__m256i test_mm256_unpackhi_epi16(__m256i a, __m256i b) {
550  // 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>
551  return _mm256_unpackhi_epi16(a, b);
552}
553
554__m256i test_mm256_unpackhi_epi32(__m256i a, __m256i b) {
555  // 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>
556  return _mm256_unpackhi_epi32(a, b);
557}
558
559__m256i test_mm256_unpackhi_epi64(__m256i a, __m256i b) {
560  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
561  return _mm256_unpackhi_epi64(a, b);
562}
563
564__m256i test_mm256_unpacklo_epi8(__m256i a, __m256i b) {
565  // 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>
566  return _mm256_unpacklo_epi8(a, b);
567}
568
569__m256i test_mm256_unpacklo_epi16(__m256i a, __m256i b) {
570  // 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>
571  return _mm256_unpacklo_epi16(a, b);
572}
573
574__m256i test_mm256_unpacklo_epi32(__m256i a, __m256i b) {
575  // 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>
576  return _mm256_unpacklo_epi32(a, b);
577}
578
579__m256i test_mm256_unpacklo_epi64(__m256i a, __m256i b) {
580  // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
581  return _mm256_unpacklo_epi64(a, b);
582}
583
584__m256i test_mm256_stream_load_si256(__m256i *a) {
585  // CHECK: @llvm.x86.avx2.movntdqa
586  return _mm256_stream_load_si256(a);
587}
588
589__m128 test_mm_broadcastss_ps(__m128 a) {
590  // CHECK: @llvm.x86.avx2.vbroadcast.ss.ps
591  return _mm_broadcastss_ps(a);
592}
593
594__m256 test_mm256_broadcastss_ps(__m128 a) {
595  // CHECK: @llvm.x86.avx2.vbroadcast.ss.ps.256
596  return _mm256_broadcastss_ps(a);
597}
598
599__m256d test_mm256_broadcastsd_pd(__m128d a) {
600  // check: @llvm.x86.avx2.vbroadcast.sd.pd.256
601  return _mm256_broadcastsd_pd(a);
602}
603
604__m256i test_mm_broadcastsi128_si256(__m128i *a) {
605  // CHECK: @llvm.x86.avx2.vbroadcasti128
606  return _mm_broadcastsi128_si256(a);
607}
608
609__m128i test_mm_blend_epi32(__m128i a, __m128i b) {
610  // CHECK: @llvm.x86.avx2.pblendd.128
611  return _mm_blend_epi32(a, b, 57);
612}
613
614__m256i test_mm256_blend_epi32(__m256i a, __m256i b) {
615  // CHECK: @llvm.x86.avx2.pblendd.256
616  return _mm256_blend_epi32(a, b, 57);
617}
618
619__m256i test_mm256_broadcastb_epi8(__m128i a) {
620  // CHECK: @llvm.x86.avx2.pbroadcastb.256
621  return _mm256_broadcastb_epi8(a);
622}
623
624__m256i test_mm256_broadcastw_epi16(__m128i a) {
625  // CHECK: @llvm.x86.avx2.pbroadcastw.256
626  return _mm256_broadcastw_epi16(a);
627}
628
629__m256i test_mm256_broadcastd_epi32(__m128i a) {
630  // CHECK: @llvm.x86.avx2.pbroadcastd.256
631  return _mm256_broadcastd_epi32(a);
632}
633
634__m256i test_mm256_broadcastq_epi64(__m128i a) {
635  // CHECK: @llvm.x86.avx2.pbroadcastq.256
636  return _mm256_broadcastq_epi64(a);
637}
638
639__m128i test_mm_broadcastb_epi8(__m128i a) {
640  // CHECK: @llvm.x86.avx2.pbroadcastb.128
641  return _mm_broadcastb_epi8(a);
642}
643
644__m128i test_mm_broadcastw_epi16(__m128i a) {
645  // CHECK: @llvm.x86.avx2.pbroadcastw.128
646  return _mm_broadcastw_epi16(a);
647}
648
649__m128i test_mm_broadcastd_epi32(__m128i a) {
650  // CHECK: @llvm.x86.avx2.pbroadcastd.128
651  return _mm_broadcastd_epi32(a);
652}
653
654__m128i test_mm_broadcastq_epi64(__m128i a) {
655  // CHECK: @llvm.x86.avx2.pbroadcastq.128
656  return _mm_broadcastq_epi64(a);
657}
658
659__m256i test_mm256_permutevar8x32_epi32(__m256i a, __m256i b) {
660  // CHECK: @llvm.x86.avx2.permd
661  return _mm256_permutevar8x32_epi32(a, b);
662}
663
664__m256d test_mm256_permute4x64_pd(__m256d a) {
665  // CHECK: shufflevector{{.*}}<i32 1, i32 2, i32 1, i32 0>
666  return _mm256_permute4x64_pd(a, 25);
667}
668
669__m256 test_mm256_permutevar8x32_ps(__m256 a, __m256 b) {
670  // CHECK: @llvm.x86.avx2.permps
671  return _mm256_permutevar8x32_ps(a, b);
672}
673
674__m256i test_mm256_permute4x64_epi64(__m256i a) {
675  // CHECK: shufflevector{{.*}}<i32 3, i32 0, i32 2, i32 0>
676  return _mm256_permute4x64_epi64(a, 35);
677}
678
679__m256i test_mm256_permute2x128_si256(__m256i a, __m256i b) {
680  // CHECK: @llvm.x86.avx2.vperm2i128
681  return _mm256_permute2x128_si256(a, b, 0x31);
682}
683
684__m128i test_mm256_extracti128_si256(__m256i a) {
685  // CHECK: @llvm.x86.avx2.vextracti128
686  return _mm256_extracti128_si256(a, 1);
687}
688
689__m256i test_mm256_inserti128_si256(__m256i a, __m128i b) {
690  // CHECK: @llvm.x86.avx2.vinserti128
691  return _mm256_inserti128_si256(a, b, 1);
692}
693
694__m256i test_mm256_maskload_epi32(int const *a, __m256i m) {
695  // CHECK: @llvm.x86.avx2.maskload.d.256
696  return _mm256_maskload_epi32(a, m);
697}
698
699__m256i test_mm256_maskload_epi64(long long const *a, __m256i m) {
700  // CHECK: @llvm.x86.avx2.maskload.q.256
701  return _mm256_maskload_epi64(a, m);
702}
703
704__m128i test_mm_maskload_epi32(int const *a, __m128i m) {
705  // CHECK: @llvm.x86.avx2.maskload.d
706  return _mm_maskload_epi32(a, m);
707}
708
709__m128i test_mm_maskload_epi64(long long const *a, __m128i m) {
710  // CHECK: @llvm.x86.avx2.maskload.q
711  return _mm_maskload_epi64(a, m);
712}
713
714void test_mm256_maskstore_epi32(int *a, __m256i m, __m256i b) {
715  // CHECK: @llvm.x86.avx2.maskstore.d.256
716  _mm256_maskstore_epi32(a, m, b);
717}
718
719void test_mm256_maskstore_epi64(long long *a, __m256i m, __m256i b) {
720  // CHECK: @llvm.x86.avx2.maskstore.q.256
721  _mm256_maskstore_epi64(a, m, b);
722}
723
724void test_mm_maskstore_epi32(int *a, __m128i m, __m128i b) {
725  // CHECK: @llvm.x86.avx2.maskstore.d
726  _mm_maskstore_epi32(a, m, b);
727}
728
729void test_mm_maskstore_epi64(long long *a, __m128i m, __m128i b) {
730  // CHECK: @llvm.x86.avx2.maskstore.q
731  _mm_maskstore_epi64(a, m, b);
732}
733
734__m256i test_mm256_sllv_epi32(__m256i a, __m256i b) {
735  // CHECK: @llvm.x86.avx2.psllv.d.256
736  return _mm256_sllv_epi32(a, b);
737}
738
739__m128i test_mm_sllv_epi32(__m128i a, __m128i b) {
740  // CHECK: @llvm.x86.avx2.psllv.d
741  return _mm_sllv_epi32(a, b);
742}
743
744__m256i test_mm256_sllv_epi64(__m256i a, __m256i b) {
745  // CHECK: @llvm.x86.avx2.psllv.q.256
746  return _mm256_sllv_epi64(a, b);
747}
748
749__m128i test_mm_sllv_epi64(__m128i a, __m128i b) {
750  // CHECK: @llvm.x86.avx2.psllv.q
751  return _mm_sllv_epi64(a, b);
752}
753
754__m256i test_mm256_srav_epi32(__m256i a, __m256i b) {
755  // CHECK: @llvm.x86.avx2.psrav.d.256
756  return _mm256_srav_epi32(a, b);
757}
758
759__m128i test_mm_srav_epi32(__m128i a, __m128i b) {
760  // CHECK: @llvm.x86.avx2.psrav.d
761  return _mm_srav_epi32(a, b);
762}
763
764__m256i test_mm256_srlv_epi32(__m256i a, __m256i b) {
765  // CHECK: @llvm.x86.avx2.psrlv.d.256
766  return _mm256_srlv_epi32(a, b);
767}
768
769__m128i test_mm_srlv_epi32(__m128i a, __m128i b) {
770  // CHECK: @llvm.x86.avx2.psrlv.d
771  return _mm_srlv_epi32(a, b);
772}
773
774__m256i test_mm256_srlv_epi64(__m256i a, __m256i b) {
775  // CHECK: @llvm.x86.avx2.psrlv.q.256
776  return _mm256_srlv_epi64(a, b);
777}
778
779__m128i test_mm_srlv_epi64(__m128i a, __m128i b) {
780  // CHECK: @llvm.x86.avx2.psrlv.q
781  return _mm_srlv_epi64(a, b);
782}
783