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