xref: /aosp_15_r20/external/clang/test/CodeGen/avx-builtins.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +avx -emit-llvm -o - -Werror | FileCheck %s
2*67e74705SXin Li // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +avx -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/sse-intrinsics-fast-isel.ll
10*67e74705SXin Li 
test_mm256_add_pd(__m256d A,__m256d B)11*67e74705SXin Li __m256d test_mm256_add_pd(__m256d A, __m256d B) {
12*67e74705SXin Li   // CHECK-LABEL: test_mm256_add_pd
13*67e74705SXin Li   // CHECK: fadd <4 x double>
14*67e74705SXin Li   return _mm256_add_pd(A, B);
15*67e74705SXin Li }
16*67e74705SXin Li 
test_mm256_add_ps(__m256 A,__m256 B)17*67e74705SXin Li __m256 test_mm256_add_ps(__m256 A, __m256 B) {
18*67e74705SXin Li   // CHECK-LABEL: test_mm256_add_ps
19*67e74705SXin Li   // CHECK: fadd <8 x float>
20*67e74705SXin Li   return _mm256_add_ps(A, B);
21*67e74705SXin Li }
22*67e74705SXin Li 
test_mm256_addsub_pd(__m256d A,__m256d B)23*67e74705SXin Li __m256d test_mm256_addsub_pd(__m256d A, __m256d B) {
24*67e74705SXin Li   // CHECK-LABEL: test_mm256_addsub_pd
25*67e74705SXin Li   // CHECK: call <4 x double> @llvm.x86.avx.addsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
26*67e74705SXin Li   return _mm256_addsub_pd(A, B);
27*67e74705SXin Li }
28*67e74705SXin Li 
test_mm256_addsub_ps(__m256 A,__m256 B)29*67e74705SXin Li __m256 test_mm256_addsub_ps(__m256 A, __m256 B) {
30*67e74705SXin Li   // CHECK-LABEL: test_mm256_addsub_ps
31*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.addsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
32*67e74705SXin Li   return _mm256_addsub_ps(A, B);
33*67e74705SXin Li }
34*67e74705SXin Li 
test_mm256_and_pd(__m256d A,__m256d B)35*67e74705SXin Li __m256d test_mm256_and_pd(__m256d A, __m256d B) {
36*67e74705SXin Li   // CHECK-LABEL: test_mm256_and_pd
37*67e74705SXin Li   // CHECK: and <4 x i64>
38*67e74705SXin Li   return _mm256_and_pd(A, B);
39*67e74705SXin Li }
40*67e74705SXin Li 
test_mm256_and_ps(__m256 A,__m256 B)41*67e74705SXin Li __m256 test_mm256_and_ps(__m256 A, __m256 B) {
42*67e74705SXin Li   // CHECK-LABEL: test_mm256_and_ps
43*67e74705SXin Li   // CHECK: and <8 x i32>
44*67e74705SXin Li   return _mm256_and_ps(A, B);
45*67e74705SXin Li }
46*67e74705SXin Li 
test_mm256_andnot_pd(__m256d A,__m256d B)47*67e74705SXin Li __m256d test_mm256_andnot_pd(__m256d A, __m256d B) {
48*67e74705SXin Li   // CHECK-LABEL: test_mm256_andnot_pd
49*67e74705SXin Li   // CHECK: xor <4 x i64> %{{.*}}, <i64 -1, i64 -1, i64 -1, i64 -1>
50*67e74705SXin Li   // CHECK: and <4 x i64>
51*67e74705SXin Li   return _mm256_andnot_pd(A, B);
52*67e74705SXin Li }
53*67e74705SXin Li 
test_mm256_andnot_ps(__m256 A,__m256 B)54*67e74705SXin Li __m256 test_mm256_andnot_ps(__m256 A, __m256 B) {
55*67e74705SXin Li   // CHECK-LABEL: test_mm256_andnot_ps
56*67e74705SXin Li   // CHECK: xor <8 x i32> %{{.*}}, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
57*67e74705SXin Li   // CHECK: and <8 x i32>
58*67e74705SXin Li   return _mm256_andnot_ps(A, B);
59*67e74705SXin Li }
60*67e74705SXin Li 
test_mm256_blend_pd(__m256d A,__m256d B)61*67e74705SXin Li __m256d test_mm256_blend_pd(__m256d A, __m256d B) {
62*67e74705SXin Li   // CHECK-LABEL: test_mm256_blend_pd
63*67e74705SXin Li   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
64*67e74705SXin Li   return _mm256_blend_pd(A, B, 0x35);
65*67e74705SXin Li }
66*67e74705SXin Li 
test_mm256_blend_ps(__m256 A,__m256 B)67*67e74705SXin Li __m256 test_mm256_blend_ps(__m256 A, __m256 B) {
68*67e74705SXin Li   // CHECK-LABEL: test_mm256_blend_ps
69*67e74705SXin Li   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 13, i32 6, i32 7>
70*67e74705SXin Li   return _mm256_blend_ps(A, B, 0x35);
71*67e74705SXin Li }
72*67e74705SXin Li 
test_mm256_blendv_pd(__m256d V1,__m256d V2,__m256d V3)73*67e74705SXin Li __m256d test_mm256_blendv_pd(__m256d V1, __m256d V2, __m256d V3) {
74*67e74705SXin Li   // CHECK-LABEL: test_mm256_blendv_pd
75*67e74705SXin Li   // CHECK: call <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})
76*67e74705SXin Li   return _mm256_blendv_pd(V1, V2, V3);
77*67e74705SXin Li }
78*67e74705SXin Li 
test_mm256_blendv_ps(__m256 V1,__m256 V2,__m256 V3)79*67e74705SXin Li __m256 test_mm256_blendv_ps(__m256 V1, __m256 V2, __m256 V3) {
80*67e74705SXin Li   // CHECK-LABEL: test_mm256_blendv_ps
81*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})
82*67e74705SXin Li   return _mm256_blendv_ps(V1, V2, V3);
83*67e74705SXin Li }
84*67e74705SXin Li 
test_mm256_broadcast_pd(__m128d * A)85*67e74705SXin Li __m256d test_mm256_broadcast_pd(__m128d* A) {
86*67e74705SXin Li   // CHECK-LABEL: test_mm256_broadcast_pd
87*67e74705SXin Li   // CHECK: call <4 x double> @llvm.x86.avx.vbroadcastf128.pd.256(i8* %{{.*}})
88*67e74705SXin Li   return _mm256_broadcast_pd(A);
89*67e74705SXin Li }
90*67e74705SXin Li 
test_mm256_broadcast_ps(__m128 * A)91*67e74705SXin Li __m256 test_mm256_broadcast_ps(__m128* A) {
92*67e74705SXin Li   // CHECK-LABEL: test_mm256_broadcast_ps
93*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.vbroadcastf128.ps.256(i8* %{{.*}})
94*67e74705SXin Li   return _mm256_broadcast_ps(A);
95*67e74705SXin Li }
96*67e74705SXin Li 
test_mm256_broadcast_sd(double * A)97*67e74705SXin Li __m256d test_mm256_broadcast_sd(double* A) {
98*67e74705SXin Li   // CHECK-LABEL: test_mm256_broadcast_sd
99*67e74705SXin Li   // CHECK: load double, double* %{{.*}}
100*67e74705SXin Li   // CHECK: insertelement <4 x double> undef, double %{{.*}}, i32 0
101*67e74705SXin Li   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
102*67e74705SXin Li   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
103*67e74705SXin Li   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
104*67e74705SXin Li   return _mm256_broadcast_sd(A);
105*67e74705SXin Li }
106*67e74705SXin Li 
test_mm_broadcast_ss(float * A)107*67e74705SXin Li __m128d test_mm_broadcast_ss(float* A) {
108*67e74705SXin Li   // CHECK-LABEL: test_mm_broadcast_ss
109*67e74705SXin Li   // CHECK: load float, float* %{{.*}}
110*67e74705SXin Li   // CHECK: insertelement <4 x float> undef, float %{{.*}}, i32 0
111*67e74705SXin Li   // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 1
112*67e74705SXin Li   // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 2
113*67e74705SXin Li   // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 3
114*67e74705SXin Li   return _mm_broadcast_ss(A);
115*67e74705SXin Li }
116*67e74705SXin Li 
test_mm256_broadcast_ss(float * A)117*67e74705SXin Li __m256d test_mm256_broadcast_ss(float* A) {
118*67e74705SXin Li   // CHECK-LABEL: test_mm256_broadcast_ss
119*67e74705SXin Li   // CHECK: load float, float* %{{.*}}
120*67e74705SXin Li   // CHECK: insertelement <8 x float> undef, float %{{.*}}, i32 0
121*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
122*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
123*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
124*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
125*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
126*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
127*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
128*67e74705SXin Li   return _mm256_broadcast_ss(A);
129*67e74705SXin Li }
130*67e74705SXin Li 
test_mm256_castpd_ps(__m256d A)131*67e74705SXin Li __m256 test_mm256_castpd_ps(__m256d A) {
132*67e74705SXin Li   // CHECK-LABEL: test_mm256_castpd_ps
133*67e74705SXin Li   // CHECK: bitcast <4 x double> %{{.*}} to <8 x float>
134*67e74705SXin Li   return _mm256_castpd_ps(A);
135*67e74705SXin Li }
136*67e74705SXin Li 
test_mm256_castpd_si256(__m256d A)137*67e74705SXin Li __m256i test_mm256_castpd_si256(__m256d A) {
138*67e74705SXin Li   // CHECK-LABEL: test_mm256_castpd_si256
139*67e74705SXin Li   // CHECK: bitcast <4 x double> %{{.*}} to <4 x i64>
140*67e74705SXin Li   return _mm256_castpd_si256(A);
141*67e74705SXin Li }
142*67e74705SXin Li 
test_mm256_castpd128_pd256(__m128d A)143*67e74705SXin Li __m256d test_mm256_castpd128_pd256(__m128d A) {
144*67e74705SXin Li   // CHECK-LABEL: test_mm256_castpd128_pd256
145*67e74705SXin Li   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
146*67e74705SXin Li   return _mm256_castpd128_pd256(A);
147*67e74705SXin Li }
148*67e74705SXin Li 
test_mm256_castpd256_pd128(__m256d A)149*67e74705SXin Li __m128d test_mm256_castpd256_pd128(__m256d A) {
150*67e74705SXin Li   // CHECK-LABEL: test_mm256_castpd256_pd128
151*67e74705SXin Li   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <2 x i32> <i32 0, i32 1>
152*67e74705SXin Li   return _mm256_castpd256_pd128(A);
153*67e74705SXin Li }
154*67e74705SXin Li 
test_mm256_castps_pd(__m256 A)155*67e74705SXin Li __m256d test_mm256_castps_pd(__m256 A) {
156*67e74705SXin Li   // CHECK-LABEL: test_mm256_castps_pd
157*67e74705SXin Li   // CHECK: bitcast <8 x float> %{{.*}} to <4 x double>
158*67e74705SXin Li   return _mm256_castps_pd(A);
159*67e74705SXin Li }
160*67e74705SXin Li 
test_mm256_castps_si256(__m256 A)161*67e74705SXin Li __m256i test_mm256_castps_si256(__m256 A) {
162*67e74705SXin Li   // CHECK-LABEL: test_mm256_castps_si256
163*67e74705SXin Li   // CHECK: bitcast <8 x float> %{{.*}} to <4 x i64>
164*67e74705SXin Li   return _mm256_castps_si256(A);
165*67e74705SXin Li }
166*67e74705SXin Li 
test_mm256_castps128_ps256(__m128 A)167*67e74705SXin Li __m256 test_mm256_castps128_ps256(__m128 A) {
168*67e74705SXin Li   // CHECK-LABEL: test_mm256_castps128_ps256
169*67e74705SXin Li   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
170*67e74705SXin Li   return _mm256_castps128_ps256(A);
171*67e74705SXin Li }
172*67e74705SXin Li 
test_mm256_castps256_ps128(__m256 A)173*67e74705SXin Li __m128 test_mm256_castps256_ps128(__m256 A) {
174*67e74705SXin Li   // CHECK-LABEL: test_mm256_castps256_ps128
175*67e74705SXin Li   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
176*67e74705SXin Li   return _mm256_castps256_ps128(A);
177*67e74705SXin Li }
178*67e74705SXin Li 
test_mm256_castsi128_si256(__m128i A)179*67e74705SXin Li __m256i test_mm256_castsi128_si256(__m128i A) {
180*67e74705SXin Li   // CHECK-LABEL: test_mm256_castsi128_si256
181*67e74705SXin Li   // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
182*67e74705SXin Li   return _mm256_castsi128_si256(A);
183*67e74705SXin Li }
184*67e74705SXin Li 
test_mm256_castsi256_pd(__m256i A)185*67e74705SXin Li __m256d test_mm256_castsi256_pd(__m256i A) {
186*67e74705SXin Li   // CHECK-LABEL: test_mm256_castsi256_pd
187*67e74705SXin Li   // CHECK: bitcast <4 x i64> %{{.*}} to <4 x double>
188*67e74705SXin Li   return _mm256_castsi256_pd(A);
189*67e74705SXin Li }
190*67e74705SXin Li 
test_mm256_castsi256_ps(__m256i A)191*67e74705SXin Li __m256 test_mm256_castsi256_ps(__m256i A) {
192*67e74705SXin Li   // CHECK-LABEL: test_mm256_castsi256_ps
193*67e74705SXin Li   // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
194*67e74705SXin Li   return _mm256_castsi256_ps(A);
195*67e74705SXin Li }
196*67e74705SXin Li 
test_mm256_castsi256_si128(__m256i A)197*67e74705SXin Li __m128i test_mm256_castsi256_si128(__m256i A) {
198*67e74705SXin Li   // CHECK-LABEL: test_mm256_castsi256_si128
199*67e74705SXin Li   // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <2 x i32> <i32 0, i32 1>
200*67e74705SXin Li   return _mm256_castsi256_si128(A);
201*67e74705SXin Li }
202*67e74705SXin Li 
test_mm256_ceil_pd(__m256d x)203*67e74705SXin Li __m256d test_mm256_ceil_pd(__m256d x) {
204*67e74705SXin Li   // CHECK-LABEL: test_mm256_ceil_pd
205*67e74705SXin Li   // CHECK: call <4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %{{.*}}, i32 2)
206*67e74705SXin Li   return _mm256_ceil_pd(x);
207*67e74705SXin Li }
208*67e74705SXin Li 
test_mm_ceil_ps(__m256 x)209*67e74705SXin Li __m256 test_mm_ceil_ps(__m256 x) {
210*67e74705SXin Li   // CHECK-LABEL: test_mm_ceil_ps
211*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %{{.*}}, i32 2)
212*67e74705SXin Li   return _mm256_ceil_ps(x);
213*67e74705SXin Li }
214*67e74705SXin Li 
test_mm_cmp_pd(__m128d A,__m128d B)215*67e74705SXin Li __m128d test_mm_cmp_pd(__m128d A, __m128d B) {
216*67e74705SXin Li   // CHECK-LABEL: test_mm_cmp_pd
217*67e74705SXin Li   // CHECK: call <2 x double> @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 13)
218*67e74705SXin Li   return _mm_cmp_pd(A, B, _CMP_GE_OS);
219*67e74705SXin Li }
220*67e74705SXin Li 
test_mm256_cmp_pd(__m256d A,__m256d B)221*67e74705SXin Li __m256d test_mm256_cmp_pd(__m256d A, __m256d B) {
222*67e74705SXin Li   // CHECK-LABEL: test_mm256_cmp_pd
223*67e74705SXin Li   // CHECK: call <4 x double> @llvm.x86.avx.cmp.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, i8 13)
224*67e74705SXin Li   return _mm256_cmp_pd(A, B, _CMP_GE_OS);
225*67e74705SXin Li }
226*67e74705SXin Li 
test_mm_cmp_ps(__m128 A,__m128 B)227*67e74705SXin Li __m128 test_mm_cmp_ps(__m128 A, __m128 B) {
228*67e74705SXin Li   // CHECK-LABEL: test_mm_cmp_ps
229*67e74705SXin Li   // CHECK: call <4 x float> @llvm.x86.sse.cmp.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 13)
230*67e74705SXin Li   return _mm_cmp_ps(A, B, _CMP_GE_OS);
231*67e74705SXin Li }
232*67e74705SXin Li 
test_mm256_cmp_ps(__m256d A,__m256d B)233*67e74705SXin Li __m256 test_mm256_cmp_ps(__m256d A, __m256d B) {
234*67e74705SXin Li   // CHECK-LABEL: test_mm256_cmp_ps
235*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.cmp.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, i8 13)
236*67e74705SXin Li   return _mm256_cmp_ps(A, B, _CMP_GE_OS);
237*67e74705SXin Li }
238*67e74705SXin Li 
test_mm_cmp_sd(__m128d A,__m128d B)239*67e74705SXin Li __m128d test_mm_cmp_sd(__m128d A, __m128d B) {
240*67e74705SXin Li   // CHECK-LABEL: test_mm_cmp_sd
241*67e74705SXin Li   // CHECK: call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 13)
242*67e74705SXin Li   return _mm_cmp_sd(A, B, _CMP_GE_OS);
243*67e74705SXin Li }
244*67e74705SXin Li 
test_mm_cmp_ss(__m128 A,__m128 B)245*67e74705SXin Li __m128 test_mm_cmp_ss(__m128 A, __m128 B) {
246*67e74705SXin Li   // CHECK-LABEL: test_mm_cmp_ss
247*67e74705SXin Li   // CHECK: call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 13)
248*67e74705SXin Li   return _mm_cmp_ss(A, B, _CMP_GE_OS);
249*67e74705SXin Li }
250*67e74705SXin Li 
test_mm256_cvtepi32_pd(__m128i A)251*67e74705SXin Li __m256d test_mm256_cvtepi32_pd(__m128i A) {
252*67e74705SXin Li   // CHECK-LABEL: test_mm256_cvtepi32_pd
253*67e74705SXin Li   // CHECK: sitofp <4 x i32> %{{.*}} to <4 x double>
254*67e74705SXin Li   return _mm256_cvtepi32_pd(A);
255*67e74705SXin Li }
256*67e74705SXin Li 
test_mm256_cvtepi32_ps(__m256i A)257*67e74705SXin Li __m256 test_mm256_cvtepi32_ps(__m256i A) {
258*67e74705SXin Li   // CHECK-LABEL: test_mm256_cvtepi32_ps
259*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.cvtdq2.ps.256(<8 x i32> %{{.*}})
260*67e74705SXin Li   return _mm256_cvtepi32_ps(A);
261*67e74705SXin Li }
262*67e74705SXin Li 
test_mm256_cvtpd_epi32(__m256d A)263*67e74705SXin Li __m128i test_mm256_cvtpd_epi32(__m256d A) {
264*67e74705SXin Li   // CHECK-LABEL: test_mm256_cvtpd_epi32
265*67e74705SXin Li   // CHECK: call <4 x i32> @llvm.x86.avx.cvt.pd2dq.256(<4 x double> %{{.*}})
266*67e74705SXin Li   return _mm256_cvtpd_epi32(A);
267*67e74705SXin Li }
268*67e74705SXin Li 
test_mm256_cvtpd_ps(__m256d A)269*67e74705SXin Li __m128 test_mm256_cvtpd_ps(__m256d A) {
270*67e74705SXin Li   // CHECK-LABEL: test_mm256_cvtpd_ps
271*67e74705SXin Li   // CHECK: call <4 x float> @llvm.x86.avx.cvt.pd2.ps.256(<4 x double> %{{.*}})
272*67e74705SXin Li   return _mm256_cvtpd_ps(A);
273*67e74705SXin Li }
274*67e74705SXin Li 
test_mm256_cvtps_epi32(__m256 A)275*67e74705SXin Li __m256i test_mm256_cvtps_epi32(__m256 A) {
276*67e74705SXin Li   // CHECK-LABEL: test_mm256_cvtps_epi32
277*67e74705SXin Li   // CHECK: call <8 x i32> @llvm.x86.avx.cvt.ps2dq.256(<8 x float> %{{.*}})
278*67e74705SXin Li   return _mm256_cvtps_epi32(A);
279*67e74705SXin Li }
280*67e74705SXin Li 
test_mm256_cvtps_pd(__m128 A)281*67e74705SXin Li __m256d test_mm256_cvtps_pd(__m128 A) {
282*67e74705SXin Li   // CHECK-LABEL: test_mm256_cvtps_pd
283*67e74705SXin Li   // CHECK: fpext <4 x float> %{{.*}} to <4 x double>
284*67e74705SXin Li   return _mm256_cvtps_pd(A);
285*67e74705SXin Li }
286*67e74705SXin Li 
test_mm256_cvttpd_epi32(__m256d A)287*67e74705SXin Li __m128i test_mm256_cvttpd_epi32(__m256d A) {
288*67e74705SXin Li   // CHECK-LABEL: test_mm256_cvttpd_epi32
289*67e74705SXin Li   // CHECK: fptosi <4 x double> %{{.*}} to <4 x i32>
290*67e74705SXin Li   return _mm256_cvttpd_epi32(A);
291*67e74705SXin Li }
292*67e74705SXin Li 
test_mm256_cvttps_epi32(__m256 A)293*67e74705SXin Li __m256i test_mm256_cvttps_epi32(__m256 A) {
294*67e74705SXin Li   // CHECK-LABEL: test_mm256_cvttps_epi32
295*67e74705SXin Li   // CHECK: fptosi <8 x float> %{{.*}} to <8 x i32>
296*67e74705SXin Li   return _mm256_cvttps_epi32(A);
297*67e74705SXin Li }
298*67e74705SXin Li 
test_mm256_div_pd(__m256d A,__m256d B)299*67e74705SXin Li __m256d test_mm256_div_pd(__m256d A, __m256d B) {
300*67e74705SXin Li   // CHECK-LABEL: test_mm256_div_pd
301*67e74705SXin Li   // CHECK: fdiv <4 x double>
302*67e74705SXin Li   return _mm256_div_pd(A, B);
303*67e74705SXin Li }
304*67e74705SXin Li 
test_mm256_div_ps(__m256 A,__m256 B)305*67e74705SXin Li __m256 test_mm256_div_ps(__m256 A, __m256 B) {
306*67e74705SXin Li   // CHECK-LABEL: test_mm256_div_ps
307*67e74705SXin Li   // CHECK: fdiv <8 x float>
308*67e74705SXin Li   return _mm256_div_ps(A, B);
309*67e74705SXin Li }
310*67e74705SXin Li 
test_mm256_dp_ps(__m256 A,__m256 B)311*67e74705SXin Li __m256 test_mm256_dp_ps(__m256 A, __m256 B) {
312*67e74705SXin Li   // CHECK-LABEL: test_mm256_dp_ps
313*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.dp.ps.256(<8 x float> {{.*}}, <8 x float> {{.*}}, i8 7)
314*67e74705SXin Li   return _mm256_dp_ps(A, B, 7);
315*67e74705SXin Li }
316*67e74705SXin Li 
test_mm256_extract_epi8(__m256i A)317*67e74705SXin Li int test_mm256_extract_epi8(__m256i A) {
318*67e74705SXin Li   // CHECK-LABEL: test_mm256_extract_epi8
319*67e74705SXin Li   // CHECK: and i32 %{{.*}}, 31
320*67e74705SXin Li   // CHECK: extractelement <32 x i8> %{{.*}}, i32 %{{.*}}
321*67e74705SXin Li   // CHECK: zext i8 %{{.*}} to i32
322*67e74705SXin Li   return _mm256_extract_epi8(A, 32);
323*67e74705SXin Li }
324*67e74705SXin Li 
test_mm256_extract_epi16(__m256i A)325*67e74705SXin Li int test_mm256_extract_epi16(__m256i A) {
326*67e74705SXin Li   // CHECK-LABEL: test_mm256_extract_epi16
327*67e74705SXin Li   // CHECK: and i32 %{{.*}}, 15
328*67e74705SXin Li   // CHECK: extractelement <16 x i16> %{{.*}}, i32 %{{.*}}
329*67e74705SXin Li   // CHECK: zext i16 %{{.*}} to i32
330*67e74705SXin Li   return _mm256_extract_epi16(A, 16);
331*67e74705SXin Li }
332*67e74705SXin Li 
test_mm256_extract_epi32(__m256i A)333*67e74705SXin Li int test_mm256_extract_epi32(__m256i A) {
334*67e74705SXin Li   // CHECK-LABEL: test_mm256_extract_epi32
335*67e74705SXin Li   // CHECK: and i32 %{{.*}}, 7
336*67e74705SXin Li   // CHECK: extractelement <8 x i32> %{{.*}}, i32 %{{.*}}
337*67e74705SXin Li   return _mm256_extract_epi32(A, 8);
338*67e74705SXin Li }
339*67e74705SXin Li 
test_mm256_extract_epi64(__m256i A)340*67e74705SXin Li long long test_mm256_extract_epi64(__m256i A) {
341*67e74705SXin Li   // CHECK-LABEL: test_mm256_extract_epi64
342*67e74705SXin Li   // CHECK: and i32 %{{.*}}, 3
343*67e74705SXin Li   // CHECK: extractelement <4 x i64> %{{.*}}, i32 %{{.*}}
344*67e74705SXin Li   return _mm256_extract_epi64(A, 5);
345*67e74705SXin Li }
346*67e74705SXin Li 
test_mm256_extractf128_pd(__m256d A)347*67e74705SXin Li __m128d test_mm256_extractf128_pd(__m256d A) {
348*67e74705SXin Li   // CHECK-LABEL: test_mm256_extractf128_pd
349*67e74705SXin Li   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> undef, <2 x i32> <i32 2, i32 3>
350*67e74705SXin Li   return _mm256_extractf128_pd(A, 1);
351*67e74705SXin Li }
352*67e74705SXin Li 
test_mm256_extractf128_ps(__m256 A)353*67e74705SXin Li __m128 test_mm256_extractf128_ps(__m256 A) {
354*67e74705SXin Li   // CHECK-LABEL: test_mm256_extractf128_ps
355*67e74705SXin Li   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
356*67e74705SXin Li   return _mm256_extractf128_ps(A, 1);
357*67e74705SXin Li }
358*67e74705SXin Li 
test_mm256_extractf128_si256(__m256i A)359*67e74705SXin Li __m128i test_mm256_extractf128_si256(__m256i A) {
360*67e74705SXin Li   // CHECK-LABEL: test_mm256_extractf128_si256
361*67e74705SXin Li   // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> undef, <2 x i32> <i32 2, i32 3>
362*67e74705SXin Li   return _mm256_extractf128_si256(A, 1);
363*67e74705SXin Li }
364*67e74705SXin Li 
test_mm256_floor_pd(__m256d x)365*67e74705SXin Li __m256d test_mm256_floor_pd(__m256d x) {
366*67e74705SXin Li   // CHECK-LABEL: test_mm256_floor_pd
367*67e74705SXin Li   // CHECK: call <4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %{{.*}}, i32 1)
368*67e74705SXin Li   return _mm256_floor_pd(x);
369*67e74705SXin Li }
370*67e74705SXin Li 
test_mm_floor_ps(__m256 x)371*67e74705SXin Li __m256 test_mm_floor_ps(__m256 x) {
372*67e74705SXin Li   // CHECK-LABEL: test_mm_floor_ps
373*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %{{.*}}, i32 1)
374*67e74705SXin Li   return _mm256_floor_ps(x);
375*67e74705SXin Li }
376*67e74705SXin Li 
test_mm256_hadd_pd(__m256d A,__m256d B)377*67e74705SXin Li __m256d test_mm256_hadd_pd(__m256d A, __m256d B) {
378*67e74705SXin Li   // CHECK-LABEL: test_mm256_hadd_pd
379*67e74705SXin Li   // CHECK: call <4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
380*67e74705SXin Li   return _mm256_hadd_pd(A, B);
381*67e74705SXin Li }
382*67e74705SXin Li 
test_mm256_hadd_ps(__m256 A,__m256 B)383*67e74705SXin Li __m256 test_mm256_hadd_ps(__m256 A, __m256 B) {
384*67e74705SXin Li   // CHECK-LABEL: test_mm256_hadd_ps
385*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
386*67e74705SXin Li   return _mm256_hadd_ps(A, B);
387*67e74705SXin Li }
388*67e74705SXin Li 
test_mm256_hsub_pd(__m256d A,__m256d B)389*67e74705SXin Li __m256d test_mm256_hsub_pd(__m256d A, __m256d B) {
390*67e74705SXin Li   // CHECK-LABEL: test_mm256_hsub_pd
391*67e74705SXin Li   // CHECK: call <4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
392*67e74705SXin Li   return _mm256_hsub_pd(A, B);
393*67e74705SXin Li }
394*67e74705SXin Li 
test_mm256_hsub_ps(__m256 A,__m256 B)395*67e74705SXin Li __m256 test_mm256_hsub_ps(__m256 A, __m256 B) {
396*67e74705SXin Li   // CHECK-LABEL: test_mm256_hsub_ps
397*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
398*67e74705SXin Li   return _mm256_hsub_ps(A, B);
399*67e74705SXin Li }
400*67e74705SXin Li 
test_mm256_insert_epi8(__m256i x,char b)401*67e74705SXin Li __m256i test_mm256_insert_epi8(__m256i x, char b) {
402*67e74705SXin Li   // CHECK-LABEL: test_mm256_insert_epi8
403*67e74705SXin Li   // CHECK: and i32 %{{.*}}, 31
404*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 %{{.*}}
405*67e74705SXin Li   return _mm256_insert_epi8(x, b, 17);
406*67e74705SXin Li }
407*67e74705SXin Li 
test_mm256_insert_epi16(__m256i x,int b)408*67e74705SXin Li __m256i test_mm256_insert_epi16(__m256i x, int b) {
409*67e74705SXin Li   // CHECK-LABEL: test_mm256_insert_epi16
410*67e74705SXin Li   // CHECK: and i32 %{{.*}}, 15
411*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 %{{.*}}
412*67e74705SXin Li   return _mm256_insert_epi16(x, b, 4);
413*67e74705SXin Li }
414*67e74705SXin Li 
test_mm256_insert_epi32(__m256i x,int b)415*67e74705SXin Li __m256i test_mm256_insert_epi32(__m256i x, int b) {
416*67e74705SXin Li   // CHECK-LABEL: test_mm256_insert_epi32
417*67e74705SXin Li   // CHECK: and i32 %{{.*}}, 7
418*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 %{{.*}}
419*67e74705SXin Li   return _mm256_insert_epi32(x, b, 5);
420*67e74705SXin Li }
421*67e74705SXin Li 
test_mm256_insert_epi64(__m256i x,long long b)422*67e74705SXin Li __m256i test_mm256_insert_epi64(__m256i x, long long b) {
423*67e74705SXin Li   // CHECK-LABEL: test_mm256_insert_epi64
424*67e74705SXin Li   // CHECK: and i32 %{{.*}}, 3
425*67e74705SXin Li   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 %{{.*}}
426*67e74705SXin Li   return _mm256_insert_epi64(x, b, 2);
427*67e74705SXin Li }
428*67e74705SXin Li 
test_mm256_insertf128_pd(__m256d A,__m128d B)429*67e74705SXin Li __m256d test_mm256_insertf128_pd(__m256d A, __m128d B) {
430*67e74705SXin Li   // CHECK-LABEL: test_mm256_insertf128_pd
431*67e74705SXin Li   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
432*67e74705SXin Li   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 4, i32 5, i32 2, i32 3>
433*67e74705SXin Li   return _mm256_insertf128_pd(A, B, 0);
434*67e74705SXin Li }
435*67e74705SXin Li 
test_mm256_insertf128_ps(__m256 A,__m128 B)436*67e74705SXin Li __m256 test_mm256_insertf128_ps(__m256 A, __m128 B) {
437*67e74705SXin Li   // CHECK-LABEL: test_mm256_insertf128_ps
438*67e74705SXin Li   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
439*67e74705SXin Li   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
440*67e74705SXin Li   return _mm256_insertf128_ps(A, B, 1);
441*67e74705SXin Li }
442*67e74705SXin Li 
test_mm256_insertf128_si256(__m256i A,__m128i B)443*67e74705SXin Li __m256i test_mm256_insertf128_si256(__m256i A, __m128i B) {
444*67e74705SXin Li   // CHECK-LABEL: test_mm256_insertf128_si256
445*67e74705SXin Li   // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
446*67e74705SXin Li   // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 4, i32 5, i32 2, i32 3>
447*67e74705SXin Li   return _mm256_insertf128_si256(A, B, 0);
448*67e74705SXin Li }
449*67e74705SXin Li 
test_mm256_lddqu_si256(__m256i * A)450*67e74705SXin Li __m256i test_mm256_lddqu_si256(__m256i* A) {
451*67e74705SXin Li   // CHECK-LABEL: test_mm256_lddqu_si256
452*67e74705SXin Li   // CHECK: call <32 x i8> @llvm.x86.avx.ldu.dq.256(i8* %{{.*}})
453*67e74705SXin Li   return _mm256_lddqu_si256(A);
454*67e74705SXin Li }
455*67e74705SXin Li 
test_mm256_load_pd(double * A)456*67e74705SXin Li __m256d test_mm256_load_pd(double* A) {
457*67e74705SXin Li   // CHECK-LABEL: test_mm256_load_pd
458*67e74705SXin Li   // CHECK: load <4 x double>, <4 x double>* %{{.*}}, align 32
459*67e74705SXin Li   return _mm256_load_pd(A);
460*67e74705SXin Li }
461*67e74705SXin Li 
test_mm256_load_ps(float * A)462*67e74705SXin Li __m256 test_mm256_load_ps(float* A) {
463*67e74705SXin Li   // CHECK-LABEL: test_mm256_load_ps
464*67e74705SXin Li   // CHECK: load <8 x float>, <8 x float>* %{{.*}}, align 32
465*67e74705SXin Li   return _mm256_load_ps(A);
466*67e74705SXin Li }
467*67e74705SXin Li 
test_mm256_load_si256(__m256i * A)468*67e74705SXin Li __m256i test_mm256_load_si256(__m256i* A) {
469*67e74705SXin Li   // CHECK-LABEL: test_mm256_load_si256
470*67e74705SXin Li   // CHECK: load <4 x i64>, <4 x i64>* %{{.*}}, align 32
471*67e74705SXin Li   return _mm256_load_si256(A);
472*67e74705SXin Li }
473*67e74705SXin Li 
test_mm256_loadu_pd(double * A)474*67e74705SXin Li __m256d test_mm256_loadu_pd(double* A) {
475*67e74705SXin Li   // CHECK-LABEL: test_mm256_loadu_pd
476*67e74705SXin Li   // CHECK: load <4 x double>, <4 x double>* %{{.*}}, align 1{{$}}
477*67e74705SXin Li   return _mm256_loadu_pd(A);
478*67e74705SXin Li }
479*67e74705SXin Li 
test_mm256_loadu_ps(float * A)480*67e74705SXin Li __m256 test_mm256_loadu_ps(float* A) {
481*67e74705SXin Li   // CHECK-LABEL: test_mm256_loadu_ps
482*67e74705SXin Li   // CHECK: load <8 x float>, <8 x float>* %{{.*}}, align 1{{$}}
483*67e74705SXin Li   return _mm256_loadu_ps(A);
484*67e74705SXin Li }
485*67e74705SXin Li 
test_mm256_loadu_si256(__m256i * A)486*67e74705SXin Li __m256i test_mm256_loadu_si256(__m256i* A) {
487*67e74705SXin Li   // CHECK-LABEL: test_mm256_loadu_si256
488*67e74705SXin Li   // CHECK: load <4 x i64>, <4 x i64>* %{{.+}}, align 1{{$}}
489*67e74705SXin Li   return _mm256_loadu_si256(A);
490*67e74705SXin Li }
491*67e74705SXin Li 
test_mm256_loadu2_m128(float * A,float * B)492*67e74705SXin Li __m256 test_mm256_loadu2_m128(float* A, float* B) {
493*67e74705SXin Li   // CHECK-LABEL: test_mm256_loadu2_m128
494*67e74705SXin Li   // CHECK: load <4 x float>, <4 x float>* %{{.*}}, align 1{{$}}
495*67e74705SXin Li   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
496*67e74705SXin Li   // CHECK: load <4 x float>, <4 x float>* %{{.*}}, align 1{{$}}
497*67e74705SXin Li   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
498*67e74705SXin Li   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
499*67e74705SXin Li   return _mm256_loadu2_m128(A, B);
500*67e74705SXin Li }
501*67e74705SXin Li 
test_mm256_loadu2_m128d(double * A,double * B)502*67e74705SXin Li __m256d test_mm256_loadu2_m128d(double* A, double* B) {
503*67e74705SXin Li   // CHECK-LABEL: test_mm256_loadu2_m128d
504*67e74705SXin Li   // CHECK: load <2 x double>, <2 x double>* %{{.*}}, align 1{{$}}
505*67e74705SXin Li   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
506*67e74705SXin Li   // CHECK: load <2 x double>, <2 x double>* %{{.*}}, align 1{{$}}
507*67e74705SXin Li   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
508*67e74705SXin Li   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
509*67e74705SXin Li   return _mm256_loadu2_m128d(A, B);
510*67e74705SXin Li }
511*67e74705SXin Li 
test_mm256_loadu2_m128i(__m128i * A,__m128i * B)512*67e74705SXin Li __m256i test_mm256_loadu2_m128i(__m128i* A, __m128i* B) {
513*67e74705SXin Li   // CHECK-LABEL: test_mm256_loadu2_m128i
514*67e74705SXin Li   // CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 1{{$}}
515*67e74705SXin Li   // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
516*67e74705SXin Li   // CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 1{{$}}
517*67e74705SXin Li   // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
518*67e74705SXin Li   // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
519*67e74705SXin Li   return _mm256_loadu2_m128i(A, B);
520*67e74705SXin Li }
521*67e74705SXin Li 
test_mm_maskload_pd(double * A,__m128i B)522*67e74705SXin Li __m128d test_mm_maskload_pd(double* A, __m128i B) {
523*67e74705SXin Li   // CHECK-LABEL: test_mm_maskload_pd
524*67e74705SXin Li   // CHECK: call <2 x double> @llvm.x86.avx.maskload.pd(i8* %{{.*}}, <2 x i64> %{{.*}})
525*67e74705SXin Li   return _mm_maskload_pd(A, B);
526*67e74705SXin Li }
527*67e74705SXin Li 
test_mm256_maskload_pd(double * A,__m256i B)528*67e74705SXin Li __m256d test_mm256_maskload_pd(double* A, __m256i B) {
529*67e74705SXin Li   // CHECK-LABEL: test_mm256_maskload_pd
530*67e74705SXin Li   // CHECK: call <4 x double> @llvm.x86.avx.maskload.pd.256(i8* %{{.*}}, <4 x i64> %{{.*}})
531*67e74705SXin Li   return _mm256_maskload_pd(A, B);
532*67e74705SXin Li }
533*67e74705SXin Li 
test_mm_maskload_ps(float * A,__m128i B)534*67e74705SXin Li __m128 test_mm_maskload_ps(float* A, __m128i B) {
535*67e74705SXin Li   // CHECK-LABEL: test_mm_maskload_ps
536*67e74705SXin Li   // CHECK: call <4 x float> @llvm.x86.avx.maskload.ps(i8* %{{.*}}, <4 x i32> %{{.*}})
537*67e74705SXin Li   return _mm_maskload_ps(A, B);
538*67e74705SXin Li }
539*67e74705SXin Li 
test_mm256_maskload_ps(float * A,__m256i B)540*67e74705SXin Li __m256d test_mm256_maskload_ps(float* A, __m256i B) {
541*67e74705SXin Li   // CHECK-LABEL: test_mm256_maskload_ps
542*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.maskload.ps.256(i8* %{{.*}}, <8 x i32> %{{.*}})
543*67e74705SXin Li   return _mm256_maskload_ps(A, B);
544*67e74705SXin Li }
545*67e74705SXin Li 
test_mm_maskstore_pd(double * A,__m128i B,__m128d C)546*67e74705SXin Li void test_mm_maskstore_pd(double* A, __m128i B, __m128d C) {
547*67e74705SXin Li   // CHECK-LABEL: test_mm_maskstore_pd
548*67e74705SXin Li   // CHECK: call void @llvm.x86.avx.maskstore.pd(i8* %{{.*}}, <2 x i64> %{{.*}}, <2 x double> %{{.*}})
549*67e74705SXin Li   _mm_maskstore_pd(A, B, C);
550*67e74705SXin Li }
551*67e74705SXin Li 
test_mm256_maskstore_pd(double * A,__m256i B,__m256d C)552*67e74705SXin Li void test_mm256_maskstore_pd(double* A, __m256i B, __m256d C) {
553*67e74705SXin Li   // CHECK-LABEL: test_mm256_maskstore_pd
554*67e74705SXin Li   // CHECK: call void @llvm.x86.avx.maskstore.pd.256(i8* %{{.*}}, <4 x i64> %{{.*}}, <4 x double> %{{.*}})
555*67e74705SXin Li   _mm256_maskstore_pd(A, B, C);
556*67e74705SXin Li }
557*67e74705SXin Li 
test_mm_maskstore_ps(float * A,__m128i B,__m128 C)558*67e74705SXin Li void test_mm_maskstore_ps(float* A, __m128i B, __m128 C) {
559*67e74705SXin Li   // CHECK-LABEL: test_mm_maskstore_ps
560*67e74705SXin Li   // CHECK: call void @llvm.x86.avx.maskstore.ps(i8* %{{.*}}, <4 x i32> %{{.*}}, <4 x float> %{{.*}})
561*67e74705SXin Li   _mm_maskstore_ps(A, B, C);
562*67e74705SXin Li }
563*67e74705SXin Li 
test_mm256_maskstore_ps(float * A,__m256i B,__m256 C)564*67e74705SXin Li void test_mm256_maskstore_ps(float* A, __m256i B, __m256 C) {
565*67e74705SXin Li   // CHECK-LABEL: test_mm256_maskstore_ps
566*67e74705SXin Li   // CHECK: call void @llvm.x86.avx.maskstore.ps.256(i8* %{{.*}}, <8 x i32> %{{.*}}, <8 x float> %{{.*}})
567*67e74705SXin Li   _mm256_maskstore_ps(A, B, C);
568*67e74705SXin Li }
569*67e74705SXin Li 
test_mm256_max_pd(__m256d A,__m256d B)570*67e74705SXin Li __m256d test_mm256_max_pd(__m256d A, __m256d B) {
571*67e74705SXin Li   // CHECK-LABEL: test_mm256_max_pd
572*67e74705SXin Li   // CHECK: call <4 x double> @llvm.x86.avx.max.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
573*67e74705SXin Li   return _mm256_max_pd(A, B);
574*67e74705SXin Li }
575*67e74705SXin Li 
test_mm256_max_ps(__m256 A,__m256 B)576*67e74705SXin Li __m256 test_mm256_max_ps(__m256 A, __m256 B) {
577*67e74705SXin Li   // CHECK-LABEL: test_mm256_max_ps
578*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.max.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
579*67e74705SXin Li   return _mm256_max_ps(A, B);
580*67e74705SXin Li }
581*67e74705SXin Li 
test_mm256_min_pd(__m256d A,__m256d B)582*67e74705SXin Li __m256d test_mm256_min_pd(__m256d A, __m256d B) {
583*67e74705SXin Li   // CHECK-LABEL: test_mm256_min_pd
584*67e74705SXin Li   // CHECK: call <4 x double> @llvm.x86.avx.min.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
585*67e74705SXin Li   return _mm256_min_pd(A, B);
586*67e74705SXin Li }
587*67e74705SXin Li 
test_mm256_min_ps(__m256 A,__m256 B)588*67e74705SXin Li __m256 test_mm256_min_ps(__m256 A, __m256 B) {
589*67e74705SXin Li   // CHECK-LABEL: test_mm256_min_ps
590*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.min.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
591*67e74705SXin Li   return _mm256_min_ps(A, B);
592*67e74705SXin Li }
593*67e74705SXin Li 
test_mm256_movedup_pd(__m256d A)594*67e74705SXin Li __m256d test_mm256_movedup_pd(__m256d A) {
595*67e74705SXin Li   // CHECK-LABEL: test_mm256_movedup_pd
596*67e74705SXin Li   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 0, i32 2, i32 2>
597*67e74705SXin Li   return _mm256_movedup_pd(A);
598*67e74705SXin Li }
599*67e74705SXin Li 
test_mm256_movehdup_ps(__m256 A)600*67e74705SXin Li __m256 test_mm256_movehdup_ps(__m256 A) {
601*67e74705SXin Li   // CHECK-LABEL: test_mm256_movehdup_ps
602*67e74705SXin Li   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>
603*67e74705SXin Li   return _mm256_movehdup_ps(A);
604*67e74705SXin Li }
605*67e74705SXin Li 
test_mm256_moveldup_ps(__m256 A)606*67e74705SXin Li __m256 test_mm256_moveldup_ps(__m256 A) {
607*67e74705SXin Li   // CHECK-LABEL: test_mm256_moveldup_ps
608*67e74705SXin Li   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
609*67e74705SXin Li   return _mm256_moveldup_ps(A);
610*67e74705SXin Li }
611*67e74705SXin Li 
test_mm256_movemask_pd(__m256d A)612*67e74705SXin Li int test_mm256_movemask_pd(__m256d A) {
613*67e74705SXin Li   // CHECK-LABEL: test_mm256_movemask_pd
614*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> %{{.*}})
615*67e74705SXin Li   return _mm256_movemask_pd(A);
616*67e74705SXin Li }
617*67e74705SXin Li 
test_mm256_movemask_ps(__m256 A)618*67e74705SXin Li int test_mm256_movemask_ps(__m256 A) {
619*67e74705SXin Li   // CHECK-LABEL: test_mm256_movemask_ps
620*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> %{{.*}})
621*67e74705SXin Li   return _mm256_movemask_ps(A);
622*67e74705SXin Li }
623*67e74705SXin Li 
test_mm256_mul_pd(__m256d A,__m256d B)624*67e74705SXin Li __m256d test_mm256_mul_pd(__m256d A, __m256d B) {
625*67e74705SXin Li   // CHECK-LABEL: test_mm256_mul_pd
626*67e74705SXin Li   // CHECK: fmul <4 x double>
627*67e74705SXin Li   return _mm256_mul_pd(A, B);
628*67e74705SXin Li }
629*67e74705SXin Li 
test_mm256_mul_ps(__m256 A,__m256 B)630*67e74705SXin Li __m256 test_mm256_mul_ps(__m256 A, __m256 B) {
631*67e74705SXin Li   // CHECK-LABEL: test_mm256_mul_ps
632*67e74705SXin Li   // CHECK: fmul <8 x float>
633*67e74705SXin Li   return _mm256_mul_ps(A, B);
634*67e74705SXin Li }
635*67e74705SXin Li 
test_mm256_or_pd(__m256d A,__m256d B)636*67e74705SXin Li __m256d test_mm256_or_pd(__m256d A, __m256d B) {
637*67e74705SXin Li   // CHECK-LABEL: test_mm256_or_pd
638*67e74705SXin Li   // CHECK: or <4 x i64>
639*67e74705SXin Li   return _mm256_or_pd(A, B);
640*67e74705SXin Li }
641*67e74705SXin Li 
test_mm256_or_ps(__m256 A,__m256 B)642*67e74705SXin Li __m256 test_mm256_or_ps(__m256 A, __m256 B) {
643*67e74705SXin Li   // CHECK-LABEL: test_mm256_or_ps
644*67e74705SXin Li   // CHECK: or <8 x i32>
645*67e74705SXin Li   return _mm256_or_ps(A, B);
646*67e74705SXin Li }
647*67e74705SXin Li 
test_mm_permute_pd(__m128d A)648*67e74705SXin Li __m128d test_mm_permute_pd(__m128d A) {
649*67e74705SXin Li   // CHECK-LABEL: test_mm_permute_pd
650*67e74705SXin Li   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> undef, <2 x i32> <i32 1, i32 0>
651*67e74705SXin Li   return _mm_permute_pd(A, 1);
652*67e74705SXin Li }
653*67e74705SXin Li 
test_mm256_permute_pd(__m256d A)654*67e74705SXin Li __m256d test_mm256_permute_pd(__m256d A) {
655*67e74705SXin Li   // CHECK-LABEL: test_mm256_permute_pd
656*67e74705SXin Li   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> undef, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
657*67e74705SXin Li   return _mm256_permute_pd(A, 5);
658*67e74705SXin Li }
659*67e74705SXin Li 
test_mm_permute_ps(__m128 A)660*67e74705SXin Li __m128 test_mm_permute_ps(__m128 A) {
661*67e74705SXin Li   // CHECK-LABEL: test_mm_permute_ps
662*67e74705SXin Li   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
663*67e74705SXin Li   return _mm_permute_ps(A, 0x1b);
664*67e74705SXin Li }
665*67e74705SXin Li 
666*67e74705SXin Li // Test case for PR12401
test2_mm_permute_ps(__m128 a)667*67e74705SXin Li __m128 test2_mm_permute_ps(__m128 a) {
668*67e74705SXin Li   // CHECK-LABEL: test2_mm_permute_ps
669*67e74705SXin Li   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> undef, <4 x i32> <i32 2, i32 1, i32 2, i32 3>
670*67e74705SXin Li   return _mm_permute_ps(a, 0xe6);
671*67e74705SXin Li }
672*67e74705SXin Li 
test_mm256_permute_ps(__m256 A)673*67e74705SXin Li __m256 test_mm256_permute_ps(__m256 A) {
674*67e74705SXin Li   // CHECK-LABEL: test_mm256_permute_ps
675*67e74705SXin Li   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
676*67e74705SXin Li   return _mm256_permute_ps(A, 0x1b);
677*67e74705SXin Li }
678*67e74705SXin Li 
test_mm256_permute2f128_pd(__m256d A,__m256d B)679*67e74705SXin Li __m256d test_mm256_permute2f128_pd(__m256d A, __m256d B) {
680*67e74705SXin Li   // CHECK-LABEL: test_mm256_permute2f128_pd
681*67e74705SXin Li   // CHECK: call <4 x double> @llvm.x86.avx.vperm2f128.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, i8 49)
682*67e74705SXin Li   return _mm256_permute2f128_pd(A, B, 0x31);
683*67e74705SXin Li }
684*67e74705SXin Li 
test_mm256_permute2f128_ps(__m256 A,__m256 B)685*67e74705SXin Li __m256 test_mm256_permute2f128_ps(__m256 A, __m256 B) {
686*67e74705SXin Li   // CHECK-LABEL: test_mm256_permute2f128_ps
687*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.vperm2f128.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, i8 19)
688*67e74705SXin Li   return _mm256_permute2f128_ps(A, B, 0x13);
689*67e74705SXin Li }
690*67e74705SXin Li 
test_mm256_permute2f128_si256(__m256i A,__m256i B)691*67e74705SXin Li __m256i test_mm256_permute2f128_si256(__m256i A, __m256i B) {
692*67e74705SXin Li   // CHECK-LABEL: test_mm256_permute2f128_si256
693*67e74705SXin Li   // CHECK: call <8 x i32> @llvm.x86.avx.vperm2f128.si.256(<8 x i32> %{{.*}}, <8 x i32> %{{.*}}, i8 32)
694*67e74705SXin Li   return _mm256_permute2f128_si256(A, B, 0x20);
695*67e74705SXin Li }
696*67e74705SXin Li 
test_mm_permutevar_pd(__m128d A,__m128i B)697*67e74705SXin Li __m128d test_mm_permutevar_pd(__m128d A, __m128i B) {
698*67e74705SXin Li   // CHECK-LABEL: test_mm_permutevar_pd
699*67e74705SXin Li   // CHECK: call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %{{.*}}, <2 x i64> %{{.*}})
700*67e74705SXin Li   return _mm_permutevar_pd(A, B);
701*67e74705SXin Li }
702*67e74705SXin Li 
test_mm256_permutevar_pd(__m256d A,__m256i B)703*67e74705SXin Li __m256d test_mm256_permutevar_pd(__m256d A, __m256i B) {
704*67e74705SXin Li   // CHECK-LABEL: test_mm256_permutevar_pd
705*67e74705SXin Li   // CHECK: call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %{{.*}}, <4 x i64> %{{.*}})
706*67e74705SXin Li   return _mm256_permutevar_pd(A, B);
707*67e74705SXin Li }
708*67e74705SXin Li 
test_mm_permutevar_ps(__m128 A,__m128i B)709*67e74705SXin Li __m128 test_mm_permutevar_ps(__m128 A, __m128i B) {
710*67e74705SXin Li   // CHECK-LABEL: test_mm_permutevar_ps
711*67e74705SXin Li   // CHECK: call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %{{.*}}, <4 x i32> %{{.*}})
712*67e74705SXin Li   return _mm_permutevar_ps(A, B);
713*67e74705SXin Li }
714*67e74705SXin Li 
test_mm256_permutevar_ps(__m256 A,__m256i B)715*67e74705SXin Li __m256 test_mm256_permutevar_ps(__m256 A, __m256i B) {
716*67e74705SXin Li   // CHECK-LABEL: test_mm256_permutevar_ps
717*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %{{.*}}, <8 x i32> %{{.*}})
718*67e74705SXin Li   return _mm256_permutevar_ps(A, B);
719*67e74705SXin Li }
720*67e74705SXin Li 
test_mm256_rcp_ps(__m256 A)721*67e74705SXin Li __m256 test_mm256_rcp_ps(__m256 A) {
722*67e74705SXin Li   // CHECK-LABEL: test_mm256_rcp_ps
723*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.rcp.ps.256(<8 x float> %{{.*}})
724*67e74705SXin Li   return _mm256_rcp_ps(A);
725*67e74705SXin Li }
726*67e74705SXin Li 
test_mm256_round_pd(__m256d x)727*67e74705SXin Li __m256d test_mm256_round_pd(__m256d x) {
728*67e74705SXin Li   // CHECK-LABEL: test_mm256_round_pd
729*67e74705SXin Li   // CHECK: call <4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %{{.*}}, i32 4)
730*67e74705SXin Li   return _mm256_round_pd(x, 4);
731*67e74705SXin Li }
732*67e74705SXin Li 
test_mm256_round_ps(__m256 x)733*67e74705SXin Li __m256 test_mm256_round_ps(__m256 x) {
734*67e74705SXin Li   // CHECK-LABEL: test_mm256_round_ps
735*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %{{.*}}, i32 4)
736*67e74705SXin Li   return _mm256_round_ps(x, 4);
737*67e74705SXin Li }
738*67e74705SXin Li 
test_mm256_rsqrt_ps(__m256 A)739*67e74705SXin Li __m256 test_mm256_rsqrt_ps(__m256 A) {
740*67e74705SXin Li   // CHECK-LABEL: test_mm256_rsqrt_ps
741*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.rsqrt.ps.256(<8 x float> %{{.*}})
742*67e74705SXin Li   return _mm256_rsqrt_ps(A);
743*67e74705SXin Li }
744*67e74705SXin Li 
test_mm256_set_epi8(char A0,char A1,char A2,char A3,char A4,char A5,char A6,char A7,char A8,char A9,char A10,char A11,char A12,char A13,char A14,char A15,char A16,char A17,char A18,char A19,char A20,char A21,char A22,char A23,char A24,char A25,char A26,char A27,char A28,char A29,char A30,char A31)745*67e74705SXin Li __m256i test_mm256_set_epi8(char A0, char A1, char A2, char A3, char A4, char A5, char A6, char A7,
746*67e74705SXin Li                             char A8, char A9, char A10, char A11, char A12, char A13, char A14, char A15,
747*67e74705SXin Li                             char A16, char A17, char A18, char A19, char A20, char A21, char A22, char A23,
748*67e74705SXin Li                             char A24, char A25, char A26, char A27, char A28, char A29, char A30, char A31) {
749*67e74705SXin Li   // CHECK-LABEL: test_mm256_set_epi8
750*67e74705SXin Li   // CHECK: insertelement <32 x i8> undef, i8 %{{.*}}, i32 0
751*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 1
752*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 2
753*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 3
754*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 4
755*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 5
756*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 6
757*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 7
758*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 8
759*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 9
760*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 10
761*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 11
762*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 12
763*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 13
764*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 14
765*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 15
766*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 16
767*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 17
768*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 18
769*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 19
770*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 20
771*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 21
772*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 22
773*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 23
774*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 24
775*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 25
776*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 26
777*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 27
778*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 28
779*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 29
780*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 30
781*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31
782*67e74705SXin Li   return _mm256_set_epi8(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31);
783*67e74705SXin Li }
784*67e74705SXin Li 
test_mm256_set_epi16(short A0,short A1,short A2,short A3,short A4,short A5,short A6,short A7,short A8,short A9,short A10,short A11,short A12,short A13,short A14,short A15)785*67e74705SXin Li __m256i test_mm256_set_epi16(short A0, short A1, short A2, short A3, short A4, short A5, short A6, short A7,
786*67e74705SXin Li                              short A8, short A9, short A10, short A11, short A12, short A13, short A14, short A15) {
787*67e74705SXin Li   // CHECK-LABEL: test_mm256_set_epi16
788*67e74705SXin Li   // CHECK: insertelement <16 x i16> undef, i16 %{{.*}}, i32 0
789*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 1
790*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 2
791*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 3
792*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 4
793*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 5
794*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 6
795*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 7
796*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 8
797*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 9
798*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 10
799*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 11
800*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 12
801*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 13
802*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 14
803*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 15
804*67e74705SXin Li   return _mm256_set_epi16(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15);
805*67e74705SXin Li }
806*67e74705SXin Li 
test_mm256_set_epi32(int A0,int A1,int A2,int A3,int A4,int A5,int A6,int A7)807*67e74705SXin Li __m256i test_mm256_set_epi32(int A0, int A1, int A2, int A3, int A4, int A5, int A6, int A7) {
808*67e74705SXin Li   // CHECK-LABEL: test_mm256_set_epi32
809*67e74705SXin Li   // CHECK: insertelement <8 x i32> undef, i32 %{{.*}}, i32 0
810*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 1
811*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 2
812*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 3
813*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 4
814*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 5
815*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 6
816*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7
817*67e74705SXin Li   return _mm256_set_epi32(A0, A1, A2, A3, A4, A5, A6, A7);
818*67e74705SXin Li }
819*67e74705SXin Li 
test_mm256_set_epi64x(long long A0,long long A1,long long A2,long long A3)820*67e74705SXin Li __m256i test_mm256_set_epi64x(long long A0, long long A1, long long A2, long long A3) {
821*67e74705SXin Li   // CHECK-LABEL: test_mm256_set_epi64x
822*67e74705SXin Li   // CHECK: insertelement <4 x i64> undef, i64 %{{.*}}, i32 0
823*67e74705SXin Li   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 1
824*67e74705SXin Li   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 2
825*67e74705SXin Li   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3
826*67e74705SXin Li   return _mm256_set_epi64x(A0, A1, A2, A3);
827*67e74705SXin Li }
828*67e74705SXin Li 
test_mm256_set_m128(__m128 A,__m128 B)829*67e74705SXin Li __m256 test_mm256_set_m128(__m128 A, __m128 B) {
830*67e74705SXin Li   // CHECK-LABEL: test_mm256_set_m128
831*67e74705SXin Li   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
832*67e74705SXin Li   return _mm256_set_m128(A, B);
833*67e74705SXin Li }
834*67e74705SXin Li 
test_mm256_set_m128d(__m128d A,__m128d B)835*67e74705SXin Li __m256d test_mm256_set_m128d(__m128d A, __m128d B) {
836*67e74705SXin Li   // CHECK-LABEL: test_mm256_set_m128d
837*67e74705SXin Li   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
838*67e74705SXin Li   return _mm256_set_m128d(A, B);
839*67e74705SXin Li }
840*67e74705SXin Li 
test_mm256_set_m128i(__m128i A,__m128i B)841*67e74705SXin Li __m256i test_mm256_set_m128i(__m128i A, __m128i B) {
842*67e74705SXin Li   // CHECK-LABEL: test_mm256_set_m128i
843*67e74705SXin Li   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
844*67e74705SXin Li   return _mm256_set_m128i(A, B);
845*67e74705SXin Li }
846*67e74705SXin Li 
test_mm256_set_pd(double A0,double A1,double A2,double A3)847*67e74705SXin Li __m256d test_mm256_set_pd(double A0, double A1, double A2, double A3) {
848*67e74705SXin Li   // CHECK-LABEL: test_mm256_set_pd
849*67e74705SXin Li   // CHECK: insertelement <4 x double> undef, double %{{.*}}, i32 0
850*67e74705SXin Li   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
851*67e74705SXin Li   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
852*67e74705SXin Li   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
853*67e74705SXin Li   return _mm256_set_pd(A0, A1, A2, A3);
854*67e74705SXin Li }
855*67e74705SXin Li 
test_mm256_set_ps(float A0,float A1,float A2,float A3,float A4,float A5,float A6,float A7)856*67e74705SXin Li __m256 test_mm256_set_ps(float A0, float A1, float A2, float A3, float A4, float A5, float A6, float A7) {
857*67e74705SXin Li   // CHECK-LABEL: test_mm256_set_ps
858*67e74705SXin Li   // CHECK: insertelement <8 x float> undef, float %{{.*}}, i32 0
859*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
860*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
861*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
862*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
863*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
864*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
865*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
866*67e74705SXin Li   return _mm256_set_ps(A0, A1, A2, A3, A4, A5, A6, A7);
867*67e74705SXin Li }
868*67e74705SXin Li 
test_mm256_set1_epi8(char A)869*67e74705SXin Li __m256i test_mm256_set1_epi8(char A) {
870*67e74705SXin Li   // CHECK-LABEL: test_mm256_set1_epi8
871*67e74705SXin Li   // CHECK: insertelement <32 x i8> undef, i8 %{{.*}}, i32 0
872*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 1
873*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 2
874*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 3
875*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 4
876*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 5
877*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 6
878*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 7
879*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 8
880*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 9
881*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 10
882*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 11
883*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 12
884*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 13
885*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 14
886*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 15
887*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 16
888*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 17
889*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 18
890*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 19
891*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 20
892*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 21
893*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 22
894*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 23
895*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 24
896*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 25
897*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 26
898*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 27
899*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 28
900*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 29
901*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 30
902*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31
903*67e74705SXin Li   return _mm256_set1_epi8(A);
904*67e74705SXin Li }
905*67e74705SXin Li 
test_mm256_set1_epi16(short A)906*67e74705SXin Li __m256i test_mm256_set1_epi16(short A) {
907*67e74705SXin Li   // CHECK-LABEL: test_mm256_set1_epi16
908*67e74705SXin Li   // CHECK: insertelement <16 x i16> undef, i16 %{{.*}}, i32 0
909*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 1
910*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 2
911*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 3
912*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 4
913*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 5
914*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 6
915*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 7
916*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 8
917*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 9
918*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 10
919*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 11
920*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 12
921*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 13
922*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 14
923*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 15
924*67e74705SXin Li   return _mm256_set1_epi16(A);
925*67e74705SXin Li }
926*67e74705SXin Li 
test_mm256_set1_epi32(int A)927*67e74705SXin Li __m256i test_mm256_set1_epi32(int A) {
928*67e74705SXin Li   // CHECK-LABEL: test_mm256_set1_epi32
929*67e74705SXin Li   // CHECK: insertelement <8 x i32> undef, i32 %{{.*}}, i32 0
930*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 1
931*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 2
932*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 3
933*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 4
934*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 5
935*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 6
936*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7
937*67e74705SXin Li   return _mm256_set1_epi32(A);
938*67e74705SXin Li }
939*67e74705SXin Li 
test_mm256_set1_epi64x(long long A)940*67e74705SXin Li __m256i test_mm256_set1_epi64x(long long A) {
941*67e74705SXin Li   // CHECK-LABEL: test_mm256_set1_epi64x
942*67e74705SXin Li   // CHECK: insertelement <4 x i64> undef, i64 %{{.*}}, i32 0
943*67e74705SXin Li   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 1
944*67e74705SXin Li   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 2
945*67e74705SXin Li   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3
946*67e74705SXin Li   return _mm256_set1_epi64x(A);
947*67e74705SXin Li }
948*67e74705SXin Li 
test_mm256_set1_pd(double A)949*67e74705SXin Li __m256d test_mm256_set1_pd(double A) {
950*67e74705SXin Li   // CHECK-LABEL: test_mm256_set1_pd
951*67e74705SXin Li   // CHECK: insertelement <4 x double> undef, double %{{.*}}, i32 0
952*67e74705SXin Li   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
953*67e74705SXin Li   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
954*67e74705SXin Li   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
955*67e74705SXin Li   return _mm256_set1_pd(A);
956*67e74705SXin Li }
957*67e74705SXin Li 
test_mm256_set1_ps(float A)958*67e74705SXin Li __m256 test_mm256_set1_ps(float A) {
959*67e74705SXin Li   // CHECK-LABEL: test_mm256_set1_ps
960*67e74705SXin Li   // CHECK: insertelement <8 x float> undef, float %{{.*}}, i32 0
961*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
962*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
963*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
964*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
965*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
966*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
967*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
968*67e74705SXin Li   return _mm256_set1_ps(A);
969*67e74705SXin Li }
970*67e74705SXin Li 
test_mm256_setr_epi8(char A0,char A1,char A2,char A3,char A4,char A5,char A6,char A7,char A8,char A9,char A10,char A11,char A12,char A13,char A14,char A15,char A16,char A17,char A18,char A19,char A20,char A21,char A22,char A23,char A24,char A25,char A26,char A27,char A28,char A29,char A30,char A31)971*67e74705SXin Li __m256i test_mm256_setr_epi8(char A0, char A1, char A2, char A3, char A4, char A5, char A6, char A7,
972*67e74705SXin Li                              char A8, char A9, char A10, char A11, char A12, char A13, char A14, char A15,
973*67e74705SXin Li                              char A16, char A17, char A18, char A19, char A20, char A21, char A22, char A23,
974*67e74705SXin Li                              char A24, char A25, char A26, char A27, char A28, char A29, char A30, char A31) {
975*67e74705SXin Li   // CHECK-LABEL: test_mm256_setr_epi8
976*67e74705SXin Li   // CHECK: insertelement <32 x i8> undef, i8 %{{.*}}, i32 0
977*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 1
978*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 2
979*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 3
980*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 4
981*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 5
982*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 6
983*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 7
984*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 8
985*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 9
986*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 10
987*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 11
988*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 12
989*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 13
990*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 14
991*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 15
992*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 16
993*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 17
994*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 18
995*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 19
996*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 20
997*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 21
998*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 22
999*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 23
1000*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 24
1001*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 25
1002*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 26
1003*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 27
1004*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 28
1005*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 29
1006*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 30
1007*67e74705SXin Li   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31
1008*67e74705SXin Li   return _mm256_setr_epi8(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31);
1009*67e74705SXin Li }
1010*67e74705SXin Li 
test_mm256_setr_epi16(short A0,short A1,short A2,short A3,short A4,short A5,short A6,short A7,short A8,short A9,short A10,short A11,short A12,short A13,short A14,short A15)1011*67e74705SXin Li __m256i test_mm256_setr_epi16(short A0, short A1, short A2, short A3, short A4, short A5, short A6, short A7,
1012*67e74705SXin Li                               short A8, short A9, short A10, short A11, short A12, short A13, short A14, short A15) {
1013*67e74705SXin Li   // CHECK-LABEL: test_mm256_setr_epi16
1014*67e74705SXin Li   // CHECK: insertelement <16 x i16> undef, i16 %{{.*}}, i32 0
1015*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 1
1016*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 2
1017*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 3
1018*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 4
1019*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 5
1020*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 6
1021*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 7
1022*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 8
1023*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 9
1024*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 10
1025*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 11
1026*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 12
1027*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 13
1028*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 14
1029*67e74705SXin Li   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 15
1030*67e74705SXin Li   return _mm256_setr_epi16(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15);
1031*67e74705SXin Li }
1032*67e74705SXin Li 
test_mm256_setr_epi32(int A0,int A1,int A2,int A3,int A4,int A5,int A6,int A7)1033*67e74705SXin Li __m256i test_mm256_setr_epi32(int A0, int A1, int A2, int A3, int A4, int A5, int A6, int A7) {
1034*67e74705SXin Li   // CHECK-LABEL: test_mm256_setr_epi32
1035*67e74705SXin Li   // CHECK: insertelement <8 x i32> undef, i32 %{{.*}}, i32 0
1036*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 1
1037*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 2
1038*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 3
1039*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 4
1040*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 5
1041*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 6
1042*67e74705SXin Li   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7
1043*67e74705SXin Li   return _mm256_setr_epi32(A0, A1, A2, A3, A4, A5, A6, A7);
1044*67e74705SXin Li }
1045*67e74705SXin Li 
test_mm256_setr_epi64x(long long A0,long long A1,long long A2,long long A3)1046*67e74705SXin Li __m256i test_mm256_setr_epi64x(long long A0, long long A1, long long A2, long long A3) {
1047*67e74705SXin Li   // CHECK-LABEL: test_mm256_setr_epi64x
1048*67e74705SXin Li   // CHECK: insertelement <4 x i64> undef, i64 %{{.*}}, i32 0
1049*67e74705SXin Li   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 1
1050*67e74705SXin Li   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 2
1051*67e74705SXin Li   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3
1052*67e74705SXin Li   return _mm256_setr_epi64x(A0, A1, A2, A3);
1053*67e74705SXin Li }
1054*67e74705SXin Li 
test_mm256_setr_m128(__m128 A,__m128 B)1055*67e74705SXin Li __m256 test_mm256_setr_m128(__m128 A, __m128 B) {
1056*67e74705SXin Li   // CHECK-LABEL: test_mm256_setr_m128
1057*67e74705SXin Li   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1058*67e74705SXin Li   return _mm256_setr_m128(A, B);
1059*67e74705SXin Li }
1060*67e74705SXin Li 
test_mm256_setr_m128d(__m128d A,__m128d B)1061*67e74705SXin Li __m256d test_mm256_setr_m128d(__m128d A, __m128d B) {
1062*67e74705SXin Li   // CHECK-LABEL: test_mm256_setr_m128d
1063*67e74705SXin Li   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1064*67e74705SXin Li   return _mm256_setr_m128d(A, B);
1065*67e74705SXin Li }
1066*67e74705SXin Li 
test_mm256_setr_m128i(__m128i A,__m128i B)1067*67e74705SXin Li __m256i test_mm256_setr_m128i(__m128i A, __m128i B) {
1068*67e74705SXin Li   // CHECK-LABEL: test_mm256_setr_m128i
1069*67e74705SXin Li   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1070*67e74705SXin Li   return _mm256_setr_m128i(A, B);
1071*67e74705SXin Li }
1072*67e74705SXin Li 
test_mm256_setr_pd(double A0,double A1,double A2,double A3)1073*67e74705SXin Li __m256d test_mm256_setr_pd(double A0, double A1, double A2, double A3) {
1074*67e74705SXin Li   // CHECK-LABEL: test_mm256_setr_pd
1075*67e74705SXin Li   // CHECK: insertelement <4 x double> undef, double %{{.*}}, i32 0
1076*67e74705SXin Li   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
1077*67e74705SXin Li   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
1078*67e74705SXin Li   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
1079*67e74705SXin Li   return _mm256_setr_pd(A0, A1, A2, A3);
1080*67e74705SXin Li }
1081*67e74705SXin Li 
test_mm256_setr_ps(float A0,float A1,float A2,float A3,float A4,float A5,float A6,float A7)1082*67e74705SXin Li __m256 test_mm256_setr_ps(float A0, float A1, float A2, float A3, float A4, float A5, float A6, float A7) {
1083*67e74705SXin Li   // CHECK-LABEL: test_mm256_setr_ps
1084*67e74705SXin Li   // CHECK: insertelement <8 x float> undef, float %{{.*}}, i32 0
1085*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
1086*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
1087*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
1088*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
1089*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
1090*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
1091*67e74705SXin Li   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
1092*67e74705SXin Li   return _mm256_setr_ps(A0, A1, A2, A3, A4, A5, A6, A7);
1093*67e74705SXin Li }
1094*67e74705SXin Li 
test_mm256_setzero_pd()1095*67e74705SXin Li __m256d test_mm256_setzero_pd() {
1096*67e74705SXin Li   // CHECK-LABEL: test_mm256_setzero_pd
1097*67e74705SXin Li   // CHECK: store <4 x double> zeroinitializer
1098*67e74705SXin Li   return _mm256_setzero_pd();
1099*67e74705SXin Li }
1100*67e74705SXin Li 
test_mm256_setzero_ps()1101*67e74705SXin Li __m256 test_mm256_setzero_ps() {
1102*67e74705SXin Li   // CHECK-LABEL: test_mm256_setzero_ps
1103*67e74705SXin Li   // CHECK: store <8 x float> zeroinitializer
1104*67e74705SXin Li   return _mm256_setzero_ps();
1105*67e74705SXin Li }
1106*67e74705SXin Li 
test_mm256_setzero_si256()1107*67e74705SXin Li __m256i test_mm256_setzero_si256() {
1108*67e74705SXin Li   // CHECK-LABEL: test_mm256_setzero_si256
1109*67e74705SXin Li   // CHECK: store <4 x i64> zeroinitializer
1110*67e74705SXin Li   return _mm256_setzero_si256();
1111*67e74705SXin Li }
1112*67e74705SXin Li 
test_mm256_shuffle_pd(__m256d A,__m256d B)1113*67e74705SXin Li __m256d test_mm256_shuffle_pd(__m256d A, __m256d B) {
1114*67e74705SXin Li   // CHECK-LABEL: test_mm256_shuffle_pd
1115*67e74705SXin Li   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1116*67e74705SXin Li   return _mm256_shuffle_pd(A, B, 0);
1117*67e74705SXin Li }
1118*67e74705SXin Li 
test_mm256_shuffle_ps(__m256 A,__m256 B)1119*67e74705SXin Li __m256 test_mm256_shuffle_ps(__m256 A, __m256 B) {
1120*67e74705SXin Li   // CHECK-LABEL: test_mm256_shuffle_ps
1121*67e74705SXin Li   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 0, i32 8, i32 8, i32 4, i32 4, i32 12, i32 12>
1122*67e74705SXin Li   return _mm256_shuffle_ps(A, B, 0);
1123*67e74705SXin Li }
1124*67e74705SXin Li 
test_mm256_sqrt_pd(__m256d A)1125*67e74705SXin Li __m256d test_mm256_sqrt_pd(__m256d A) {
1126*67e74705SXin Li   // CHECK-LABEL: test_mm256_sqrt_pd
1127*67e74705SXin Li   // CHECK: call <4 x double> @llvm.x86.avx.sqrt.pd.256(<4 x double> %{{.*}})
1128*67e74705SXin Li   return _mm256_sqrt_pd(A);
1129*67e74705SXin Li }
1130*67e74705SXin Li 
test_mm256_sqrt_ps(__m256 A)1131*67e74705SXin Li __m256 test_mm256_sqrt_ps(__m256 A) {
1132*67e74705SXin Li   // CHECK-LABEL: test_mm256_sqrt_ps
1133*67e74705SXin Li   // CHECK: call <8 x float> @llvm.x86.avx.sqrt.ps.256(<8 x float> %{{.*}})
1134*67e74705SXin Li   return _mm256_sqrt_ps(A);
1135*67e74705SXin Li }
1136*67e74705SXin Li 
test_mm256_store_pd(double * A,__m256d B)1137*67e74705SXin Li void test_mm256_store_pd(double* A, __m256d B) {
1138*67e74705SXin Li   // CHECK-LABEL: test_mm256_store_pd
1139*67e74705SXin Li   // CHECK: store <4 x double> %{{.*}}, <4 x double>* %{{.*}}, align 32
1140*67e74705SXin Li   _mm256_store_pd(A, B);
1141*67e74705SXin Li }
1142*67e74705SXin Li 
test_mm256_store_ps(float * A,__m256 B)1143*67e74705SXin Li void test_mm256_store_ps(float* A, __m256 B) {
1144*67e74705SXin Li   // CHECK-LABEL: test_mm256_store_ps
1145*67e74705SXin Li   // CHECK: store <8 x float> %{{.*}}, <8 x float>* %{{.*}}, align 32
1146*67e74705SXin Li   _mm256_store_ps(A, B);
1147*67e74705SXin Li }
1148*67e74705SXin Li 
test_mm256_store_si256(__m256i * A,__m256i B)1149*67e74705SXin Li void test_mm256_store_si256(__m256i* A, __m256i B) {
1150*67e74705SXin Li   // CHECK-LABEL: test_mm256_store_si256
1151*67e74705SXin Li   // CHECK: store <4 x i64> %{{.*}}, <4 x i64>* %{{.*}}, align 32
1152*67e74705SXin Li   _mm256_store_si256(A, B);
1153*67e74705SXin Li }
1154*67e74705SXin Li 
test_mm256_storeu_pd(double * A,__m256d B)1155*67e74705SXin Li void test_mm256_storeu_pd(double* A, __m256d B) {
1156*67e74705SXin Li   // CHECK-LABEL: test_mm256_storeu_pd
1157*67e74705SXin Li   // CHECK:   store <4 x double> %{{.*}}, <4 x double>* %{{.*}}, align 1{{$}}
1158*67e74705SXin Li   // CHECK-NEXT: ret void
1159*67e74705SXin Li   _mm256_storeu_pd(A, B);
1160*67e74705SXin Li }
1161*67e74705SXin Li 
test_mm256_storeu_ps(float * A,__m256 B)1162*67e74705SXin Li void test_mm256_storeu_ps(float* A, __m256 B) {
1163*67e74705SXin Li   // CHECK-LABEL: test_mm256_storeu_ps
1164*67e74705SXin Li   // CHECK: store <8 x float> %{{.*}}, <8 x float>* %{{.*}}, align 1{{$}}
1165*67e74705SXin Li   // CHECk-NEXT: ret void
1166*67e74705SXin Li   _mm256_storeu_ps(A, B);
1167*67e74705SXin Li }
1168*67e74705SXin Li 
test_mm256_storeu_si256(__m256i * A,__m256i B)1169*67e74705SXin Li void test_mm256_storeu_si256(__m256i* A, __m256i B) {
1170*67e74705SXin Li   // CHECK-LABEL: test_mm256_storeu_si256
1171*67e74705SXin Li   // CHECK: store <4 x i64> %{{.*}}, <4 x i64>* %{{.*}}, align 1{{$}}
1172*67e74705SXin Li   // CHECk-NEXT: ret void
1173*67e74705SXin Li   _mm256_storeu_si256(A, B);
1174*67e74705SXin Li }
1175*67e74705SXin Li 
test_mm256_storeu2_m128(float * A,float * B,__m256 C)1176*67e74705SXin Li void test_mm256_storeu2_m128(float* A, float* B, __m256 C) {
1177*67e74705SXin Li   // CHECK-LABEL: test_mm256_storeu2_m128
1178*67e74705SXin Li   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1179*67e74705SXin Li   // CHECK: store <4 x float> %{{.*}}, <4 x float>* %{{.*}}, align 1{{$}}
1180*67e74705SXin Li   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
1181*67e74705SXin Li   // CHECK: store <4 x float> %{{.*}}, <4 x float>* %{{.*}}, align 1{{$}}
1182*67e74705SXin Li   _mm256_storeu2_m128(A, B, C);
1183*67e74705SXin Li }
1184*67e74705SXin Li 
test_mm256_storeu2_m128d(double * A,double * B,__m256d C)1185*67e74705SXin Li void test_mm256_storeu2_m128d(double* A, double* B, __m256d C) {
1186*67e74705SXin Li   // CHECK-LABEL: test_mm256_storeu2_m128d
1187*67e74705SXin Li   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <2 x i32> <i32 0, i32 1>
1188*67e74705SXin Li   // CHECK: store <2 x double> %{{.*}}, <2 x double>* %{{.*}}, align 1{{$}}
1189*67e74705SXin Li   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> undef, <2 x i32> <i32 2, i32 3>
1190*67e74705SXin Li   // CHECK: store <2 x double> %{{.*}}, <2 x double>* %{{.*}}, align 1{{$}}
1191*67e74705SXin Li   _mm256_storeu2_m128d(A, B, C);
1192*67e74705SXin Li }
1193*67e74705SXin Li 
test_mm256_storeu2_m128i(__m128i * A,__m128i * B,__m256i C)1194*67e74705SXin Li void test_mm256_storeu2_m128i(__m128i* A, __m128i* B, __m256i C) {
1195*67e74705SXin Li   // CHECK-LABEL: test_mm256_storeu2_m128i
1196*67e74705SXin Li   // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <2 x i32> <i32 0, i32 1>
1197*67e74705SXin Li   // CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
1198*67e74705SXin Li   // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> undef, <2 x i32> <i32 2, i32 3>
1199*67e74705SXin Li   // CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
1200*67e74705SXin Li   _mm256_storeu2_m128i(A, B, C);
1201*67e74705SXin Li }
1202*67e74705SXin Li 
test_mm256_stream_pd(double * A,__m256d B)1203*67e74705SXin Li void test_mm256_stream_pd(double* A, __m256d B) {
1204*67e74705SXin Li   // CHECK-LABEL: test_mm256_stream_pd
1205*67e74705SXin Li   // CHECK: store <4 x double> %{{.*}}, <4 x double>* %{{.*}}, align 32, !nontemporal
1206*67e74705SXin Li   _mm256_stream_pd(A, B);
1207*67e74705SXin Li }
1208*67e74705SXin Li 
test_mm256_stream_ps(float * A,__m256 B)1209*67e74705SXin Li void test_mm256_stream_ps(float* A, __m256 B) {
1210*67e74705SXin Li   // CHECK-LABEL: test_mm256_stream_ps
1211*67e74705SXin Li   // CHECK: store <8 x float> %{{.*}}, <8 x float>* %{{.*}}, align 32, !nontemporal
1212*67e74705SXin Li   _mm256_stream_ps(A, B);
1213*67e74705SXin Li }
1214*67e74705SXin Li 
test_mm256_stream_si256(__m256i * A,__m256i B)1215*67e74705SXin Li void test_mm256_stream_si256(__m256i* A, __m256i B) {
1216*67e74705SXin Li   // CHECK-LABEL: test_mm256_stream_si256
1217*67e74705SXin Li   // CHECK: store <4 x i64> %{{.*}}, <4 x i64>* %{{.*}}, align 32, !nontemporal
1218*67e74705SXin Li   _mm256_stream_si256(A, B);
1219*67e74705SXin Li }
1220*67e74705SXin Li 
test_mm256_sub_pd(__m256d A,__m256d B)1221*67e74705SXin Li __m256d test_mm256_sub_pd(__m256d A, __m256d B) {
1222*67e74705SXin Li   // CHECK-LABEL: test_mm256_sub_pd
1223*67e74705SXin Li   // CHECK: fsub <4 x double>
1224*67e74705SXin Li   return _mm256_sub_pd(A, B);
1225*67e74705SXin Li }
1226*67e74705SXin Li 
test_mm256_sub_ps(__m256 A,__m256 B)1227*67e74705SXin Li __m256 test_mm256_sub_ps(__m256 A, __m256 B) {
1228*67e74705SXin Li   // CHECK-LABEL: test_mm256_sub_ps
1229*67e74705SXin Li   // CHECK: fsub <8 x float>
1230*67e74705SXin Li   return _mm256_sub_ps(A, B);
1231*67e74705SXin Li }
1232*67e74705SXin Li 
test_mm_testc_pd(__m128d A,__m128d B)1233*67e74705SXin Li int test_mm_testc_pd(__m128d A, __m128d B) {
1234*67e74705SXin Li   // CHECK-LABEL: test_mm_testc_pd
1235*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.vtestc.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
1236*67e74705SXin Li   return _mm_testc_pd(A, B);
1237*67e74705SXin Li }
1238*67e74705SXin Li 
test_mm256_testc_pd(__m256d A,__m256d B)1239*67e74705SXin Li int test_mm256_testc_pd(__m256d A, __m256d B) {
1240*67e74705SXin Li   // CHECK-LABEL: test_mm256_testc_pd
1241*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.vtestc.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1242*67e74705SXin Li   return _mm256_testc_pd(A, B);
1243*67e74705SXin Li }
1244*67e74705SXin Li 
test_mm_testc_ps(__m128 A,__m128 B)1245*67e74705SXin Li int test_mm_testc_ps(__m128 A, __m128 B) {
1246*67e74705SXin Li   // CHECK-LABEL: test_mm_testc_ps
1247*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.vtestc.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}})
1248*67e74705SXin Li   return _mm_testc_ps(A, B);
1249*67e74705SXin Li }
1250*67e74705SXin Li 
test_mm256_testc_ps(__m256 A,__m256 B)1251*67e74705SXin Li int test_mm256_testc_ps(__m256 A, __m256 B) {
1252*67e74705SXin Li   // CHECK-LABEL: test_mm256_testc_ps
1253*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.vtestc.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1254*67e74705SXin Li   return _mm256_testc_ps(A, B);
1255*67e74705SXin Li }
1256*67e74705SXin Li 
test_mm256_testc_si256(__m256 A,__m256 B)1257*67e74705SXin Li int test_mm256_testc_si256(__m256 A, __m256 B) {
1258*67e74705SXin Li   // CHECK-LABEL: test_mm256_testc_si256
1259*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}})
1260*67e74705SXin Li   return _mm256_testc_si256(A, B);
1261*67e74705SXin Li }
1262*67e74705SXin Li 
test_mm_testnzc_pd(__m128d A,__m128d B)1263*67e74705SXin Li int test_mm_testnzc_pd(__m128d A, __m128d B) {
1264*67e74705SXin Li   // CHECK-LABEL: test_mm_testnzc_pd
1265*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.vtestnzc.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
1266*67e74705SXin Li   return _mm_testnzc_pd(A, B);
1267*67e74705SXin Li }
1268*67e74705SXin Li 
test_mm256_testnzc_pd(__m256d A,__m256d B)1269*67e74705SXin Li int test_mm256_testnzc_pd(__m256d A, __m256d B) {
1270*67e74705SXin Li   // CHECK-LABEL: test_mm256_testnzc_pd
1271*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.vtestnzc.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1272*67e74705SXin Li   return _mm256_testnzc_pd(A, B);
1273*67e74705SXin Li }
1274*67e74705SXin Li 
test_mm_testnzc_ps(__m128 A,__m128 B)1275*67e74705SXin Li int test_mm_testnzc_ps(__m128 A, __m128 B) {
1276*67e74705SXin Li   // CHECK-LABEL: test_mm_testnzc_ps
1277*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.vtestnzc.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}})
1278*67e74705SXin Li   return _mm_testnzc_ps(A, B);
1279*67e74705SXin Li }
1280*67e74705SXin Li 
test_mm256_testnzc_ps(__m256 A,__m256 B)1281*67e74705SXin Li int test_mm256_testnzc_ps(__m256 A, __m256 B) {
1282*67e74705SXin Li   // CHECK-LABEL: test_mm256_testnzc_ps
1283*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.vtestnzc.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1284*67e74705SXin Li   return _mm256_testnzc_ps(A, B);
1285*67e74705SXin Li }
1286*67e74705SXin Li 
test_mm256_testnzc_si256(__m256 A,__m256 B)1287*67e74705SXin Li int test_mm256_testnzc_si256(__m256 A, __m256 B) {
1288*67e74705SXin Li   // CHECK-LABEL: test_mm256_testnzc_si256
1289*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.ptestnzc.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}})
1290*67e74705SXin Li   return _mm256_testnzc_si256(A, B);
1291*67e74705SXin Li }
1292*67e74705SXin Li 
test_mm_testz_pd(__m128d A,__m128d B)1293*67e74705SXin Li int test_mm_testz_pd(__m128d A, __m128d B) {
1294*67e74705SXin Li   // CHECK-LABEL: test_mm_testz_pd
1295*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.vtestz.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
1296*67e74705SXin Li   return _mm_testz_pd(A, B);
1297*67e74705SXin Li }
1298*67e74705SXin Li 
test_mm256_testz_pd(__m256d A,__m256d B)1299*67e74705SXin Li int test_mm256_testz_pd(__m256d A, __m256d B) {
1300*67e74705SXin Li   // CHECK-LABEL: test_mm256_testz_pd
1301*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.vtestz.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1302*67e74705SXin Li   return _mm256_testz_pd(A, B);
1303*67e74705SXin Li }
1304*67e74705SXin Li 
test_mm_testz_ps(__m128 A,__m128 B)1305*67e74705SXin Li int test_mm_testz_ps(__m128 A, __m128 B) {
1306*67e74705SXin Li   // CHECK-LABEL: test_mm_testz_ps
1307*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.vtestz.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}})
1308*67e74705SXin Li   return _mm_testz_ps(A, B);
1309*67e74705SXin Li }
1310*67e74705SXin Li 
test_mm256_testz_ps(__m256 A,__m256 B)1311*67e74705SXin Li int test_mm256_testz_ps(__m256 A, __m256 B) {
1312*67e74705SXin Li   // CHECK-LABEL: test_mm256_testz_ps
1313*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.vtestz.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1314*67e74705SXin Li   return _mm256_testz_ps(A, B);
1315*67e74705SXin Li }
1316*67e74705SXin Li 
test_mm256_testz_si256(__m256 A,__m256 B)1317*67e74705SXin Li int test_mm256_testz_si256(__m256 A, __m256 B) {
1318*67e74705SXin Li   // CHECK-LABEL: test_mm256_testz_si256
1319*67e74705SXin Li   // CHECK: call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}})
1320*67e74705SXin Li   return _mm256_testz_si256(A, B);
1321*67e74705SXin Li }
1322*67e74705SXin Li 
test_mm256_undefined_ps()1323*67e74705SXin Li __m256 test_mm256_undefined_ps() {
1324*67e74705SXin Li   // CHECK-LABEL: @test_mm256_undefined_ps
1325*67e74705SXin Li   // CHECK: ret <8 x float> undef
1326*67e74705SXin Li   return _mm256_undefined_ps();
1327*67e74705SXin Li }
1328*67e74705SXin Li 
test_mm256_undefined_pd()1329*67e74705SXin Li __m256d test_mm256_undefined_pd() {
1330*67e74705SXin Li   // CHECK-LABEL: @test_mm256_undefined_pd
1331*67e74705SXin Li   // CHECK: ret <4 x double> undef
1332*67e74705SXin Li   return _mm256_undefined_pd();
1333*67e74705SXin Li }
1334*67e74705SXin Li 
test_mm256_undefined_si256()1335*67e74705SXin Li __m256i test_mm256_undefined_si256() {
1336*67e74705SXin Li   // CHECK-LABEL: @test_mm256_undefined_si256
1337*67e74705SXin Li   // CHECK: ret <4 x i64> undef
1338*67e74705SXin Li   return _mm256_undefined_si256();
1339*67e74705SXin Li }
1340*67e74705SXin Li 
test_mm256_unpackhi_pd(__m256d A,__m256d B)1341*67e74705SXin Li __m256d test_mm256_unpackhi_pd(__m256d A, __m256d B) {
1342*67e74705SXin Li   // CHECK-LABEL: test_mm256_unpackhi_pd
1343*67e74705SXin Li   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
1344*67e74705SXin Li   return _mm256_unpackhi_pd(A, B);
1345*67e74705SXin Li }
1346*67e74705SXin Li 
test_mm256_unpackhi_ps(__m256 A,__m256 B)1347*67e74705SXin Li __m256 test_mm256_unpackhi_ps(__m256 A, __m256 B) {
1348*67e74705SXin Li   // CHECK-LABEL: test_mm256_unpackhi_ps
1349*67e74705SXin Li   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
1350*67e74705SXin Li   return _mm256_unpackhi_ps(A, B);
1351*67e74705SXin Li }
1352*67e74705SXin Li 
test_mm256_unpacklo_pd(__m256d A,__m256d B)1353*67e74705SXin Li __m256d test_mm256_unpacklo_pd(__m256d A, __m256d B) {
1354*67e74705SXin Li   // CHECK-LABEL: test_mm256_unpacklo_pd
1355*67e74705SXin Li   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1356*67e74705SXin Li   return _mm256_unpacklo_pd(A, B);
1357*67e74705SXin Li }
1358*67e74705SXin Li 
test_mm256_unpacklo_ps(__m256 A,__m256 B)1359*67e74705SXin Li __m256 test_mm256_unpacklo_ps(__m256 A, __m256 B) {
1360*67e74705SXin Li   // CHECK-LABEL: test_mm256_unpacklo_ps
1361*67e74705SXin Li   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
1362*67e74705SXin Li   return _mm256_unpacklo_ps(A, B);
1363*67e74705SXin Li }
1364*67e74705SXin Li 
test_mm256_xor_pd(__m256d A,__m256d B)1365*67e74705SXin Li __m256d test_mm256_xor_pd(__m256d A, __m256d B) {
1366*67e74705SXin Li   // CHECK-LABEL: test_mm256_xor_pd
1367*67e74705SXin Li   // CHECK: xor <4 x i64>
1368*67e74705SXin Li   return _mm256_xor_pd(A, B);
1369*67e74705SXin Li }
1370*67e74705SXin Li 
test_mm256_xor_ps(__m256 A,__m256 B)1371*67e74705SXin Li __m256 test_mm256_xor_ps(__m256 A, __m256 B) {
1372*67e74705SXin Li   // CHECK-LABEL: test_mm256_xor_ps
1373*67e74705SXin Li   // CHECK: xor <8 x i32>
1374*67e74705SXin Li   return _mm256_xor_ps(A, B);
1375*67e74705SXin Li }
1376*67e74705SXin Li 
test_mm256_zeroall()1377*67e74705SXin Li void test_mm256_zeroall() {
1378*67e74705SXin Li   // CHECK-LABEL: test_mm256_zeroall
1379*67e74705SXin Li   // CHECK: call void @llvm.x86.avx.vzeroall()
1380*67e74705SXin Li   return _mm256_zeroall();
1381*67e74705SXin Li }
1382*67e74705SXin Li 
test_mm256_zeroupper()1383*67e74705SXin Li void test_mm256_zeroupper() {
1384*67e74705SXin Li   // CHECK-LABEL: test_mm256_zeroupper
1385*67e74705SXin Li   // CHECK: call void @llvm.x86.avx.vzeroupper()
1386*67e74705SXin Li   return _mm256_zeroupper();
1387*67e74705SXin Li }
1388*67e74705SXin Li 
test_mm256_cvtsd_f64(__m256d __a)1389*67e74705SXin Li double test_mm256_cvtsd_f64(__m256d __a)
1390*67e74705SXin Li {
1391*67e74705SXin Li  // CHECK-LABEL: @test_mm256_cvtsd_f64
1392*67e74705SXin Li  // CHECK: extractelement <4 x double> %{{.*}}, i32 0
1393*67e74705SXin Li  return _mm256_cvtsd_f64(__a);
1394*67e74705SXin Li }
1395*67e74705SXin Li 
test_mm256_cvtsi256_si32(__m256i __a)1396*67e74705SXin Li int test_mm256_cvtsi256_si32(__m256i __a)
1397*67e74705SXin Li {
1398*67e74705SXin Li  // CHECK-LABEL: @test_mm256_cvtsi256_si32
1399*67e74705SXin Li  // CHECK: extractelement <8 x i32> %{{.*}}, i32 0
1400*67e74705SXin Li  return _mm256_cvtsi256_si32(__a);
1401*67e74705SXin Li }
1402*67e74705SXin Li 
test_mm256_cvtss_f32(__m256 __a)1403*67e74705SXin Li float test_mm256_cvtss_f32(__m256 __a)
1404*67e74705SXin Li {
1405*67e74705SXin Li  // CHECK-LABEL: @test_mm256_cvtss_f32
1406*67e74705SXin Li  // CHECK: extractelement <8 x float> %{{.*}}, i32 0
1407*67e74705SXin Li  return _mm256_cvtss_f32(__a);
1408*67e74705SXin Li }
1409