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