1 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx -emit-llvm -o - -Wall -Werror | FileCheck %s
2 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s
3 // RUN: %clang_cc1 -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +avx -emit-llvm -o - -Wall -Werror | FileCheck %s
4 
5 
6 #include <immintrin.h>
7 
8 // NOTE: This should match the tests in llvm/test/CodeGen/X86/sse-intrinsics-fast-isel.ll
9 
test_mm256_add_pd(__m256d A,__m256d B)10 __m256d test_mm256_add_pd(__m256d A, __m256d B) {
11   // CHECK-LABEL: test_mm256_add_pd
12   // CHECK: fadd <4 x double>
13   return _mm256_add_pd(A, B);
14 }
15 
test_mm256_add_ps(__m256 A,__m256 B)16 __m256 test_mm256_add_ps(__m256 A, __m256 B) {
17   // CHECK-LABEL: test_mm256_add_ps
18   // CHECK: fadd <8 x float>
19   return _mm256_add_ps(A, B);
20 }
21 
test_mm256_addsub_pd(__m256d A,__m256d B)22 __m256d test_mm256_addsub_pd(__m256d A, __m256d B) {
23   // CHECK-LABEL: test_mm256_addsub_pd
24   // CHECK: call <4 x double> @llvm.x86.avx.addsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
25   return _mm256_addsub_pd(A, B);
26 }
27 
test_mm256_addsub_ps(__m256 A,__m256 B)28 __m256 test_mm256_addsub_ps(__m256 A, __m256 B) {
29   // CHECK-LABEL: test_mm256_addsub_ps
30   // CHECK: call <8 x float> @llvm.x86.avx.addsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
31   return _mm256_addsub_ps(A, B);
32 }
33 
test_mm256_and_pd(__m256d A,__m256d B)34 __m256d test_mm256_and_pd(__m256d A, __m256d B) {
35   // CHECK-LABEL: test_mm256_and_pd
36   // CHECK: and <4 x i64>
37   return _mm256_and_pd(A, B);
38 }
39 
test_mm256_and_ps(__m256 A,__m256 B)40 __m256 test_mm256_and_ps(__m256 A, __m256 B) {
41   // CHECK-LABEL: test_mm256_and_ps
42   // CHECK: and <8 x i32>
43   return _mm256_and_ps(A, B);
44 }
45 
test_mm256_andnot_pd(__m256d A,__m256d B)46 __m256d test_mm256_andnot_pd(__m256d A, __m256d B) {
47   // CHECK-LABEL: test_mm256_andnot_pd
48   // CHECK: xor <4 x i64> %{{.*}}, <i64 -1, i64 -1, i64 -1, i64 -1>
49   // CHECK: and <4 x i64>
50   return _mm256_andnot_pd(A, B);
51 }
52 
test_mm256_andnot_ps(__m256 A,__m256 B)53 __m256 test_mm256_andnot_ps(__m256 A, __m256 B) {
54   // CHECK-LABEL: test_mm256_andnot_ps
55   // CHECK: xor <8 x i32> %{{.*}}, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
56   // CHECK: and <8 x i32>
57   return _mm256_andnot_ps(A, B);
58 }
59 
test_mm256_blend_pd(__m256d A,__m256d B)60 __m256d test_mm256_blend_pd(__m256d A, __m256d B) {
61   // CHECK-LABEL: test_mm256_blend_pd
62   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
63   return _mm256_blend_pd(A, B, 0x05);
64 }
65 
test_mm256_blend_ps(__m256 A,__m256 B)66 __m256 test_mm256_blend_ps(__m256 A, __m256 B) {
67   // CHECK-LABEL: test_mm256_blend_ps
68   // 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>
69   return _mm256_blend_ps(A, B, 0x35);
70 }
71 
test_mm256_blendv_pd(__m256d V1,__m256d V2,__m256d V3)72 __m256d test_mm256_blendv_pd(__m256d V1, __m256d V2, __m256d V3) {
73   // CHECK-LABEL: test_mm256_blendv_pd
74   // CHECK: call <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})
75   return _mm256_blendv_pd(V1, V2, V3);
76 }
77 
test_mm256_blendv_ps(__m256 V1,__m256 V2,__m256 V3)78 __m256 test_mm256_blendv_ps(__m256 V1, __m256 V2, __m256 V3) {
79   // CHECK-LABEL: test_mm256_blendv_ps
80   // CHECK: call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})
81   return _mm256_blendv_ps(V1, V2, V3);
82 }
83 
test_mm256_broadcast_pd(__m128d * A)84 __m256d test_mm256_broadcast_pd(__m128d* A) {
85   // CHECK-LABEL: test_mm256_broadcast_pd
86   // CHECK: load <2 x double>, <2 x double>* %{{.*}}, align 1{{$}}
87   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
88   return _mm256_broadcast_pd(A);
89 }
90 
test_mm256_broadcast_ps(__m128 * A)91 __m256 test_mm256_broadcast_ps(__m128* A) {
92   // CHECK-LABEL: test_mm256_broadcast_ps
93   // CHECK: load <4 x float>, <4 x float>* %{{.*}}, align 1{{$}}
94   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
95   return _mm256_broadcast_ps(A);
96 }
97 
test_mm256_broadcast_sd(double * A)98 __m256d test_mm256_broadcast_sd(double* A) {
99   // CHECK-LABEL: test_mm256_broadcast_sd
100   // CHECK: load double, double* %{{.*}}
101   // CHECK: insertelement <4 x double> undef, double %{{.*}}, i32 0
102   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
103   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
104   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
105   return _mm256_broadcast_sd(A);
106 }
107 
test_mm_broadcast_ss(float * A)108 __m128 test_mm_broadcast_ss(float* A) {
109   // CHECK-LABEL: test_mm_broadcast_ss
110   // CHECK: load float, float* %{{.*}}
111   // CHECK: insertelement <4 x float> undef, float %{{.*}}, i32 0
112   // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 1
113   // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 2
114   // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 3
115   return _mm_broadcast_ss(A);
116 }
117 
test_mm256_broadcast_ss(float * A)118 __m256 test_mm256_broadcast_ss(float* A) {
119   // CHECK-LABEL: test_mm256_broadcast_ss
120   // CHECK: load float, float* %{{.*}}
121   // CHECK: insertelement <8 x float> undef, float %{{.*}}, i32 0
122   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
123   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
124   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
125   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
126   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
127   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
128   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
129   return _mm256_broadcast_ss(A);
130 }
131 
test_mm256_castpd_ps(__m256d A)132 __m256 test_mm256_castpd_ps(__m256d A) {
133   // CHECK-LABEL: test_mm256_castpd_ps
134   // CHECK: bitcast <4 x double> %{{.*}} to <8 x float>
135   return _mm256_castpd_ps(A);
136 }
137 
test_mm256_castpd_si256(__m256d A)138 __m256i test_mm256_castpd_si256(__m256d A) {
139   // CHECK-LABEL: test_mm256_castpd_si256
140   // CHECK: bitcast <4 x double> %{{.*}} to <4 x i64>
141   return _mm256_castpd_si256(A);
142 }
143 
test_mm256_castpd128_pd256(__m128d A)144 __m256d test_mm256_castpd128_pd256(__m128d A) {
145   // CHECK-LABEL: test_mm256_castpd128_pd256
146   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
147   return _mm256_castpd128_pd256(A);
148 }
149 
test_mm256_castpd256_pd128(__m256d A)150 __m128d test_mm256_castpd256_pd128(__m256d A) {
151   // CHECK-LABEL: test_mm256_castpd256_pd128
152   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <2 x i32> <i32 0, i32 1>
153   return _mm256_castpd256_pd128(A);
154 }
155 
test_mm256_castps_pd(__m256 A)156 __m256d test_mm256_castps_pd(__m256 A) {
157   // CHECK-LABEL: test_mm256_castps_pd
158   // CHECK: bitcast <8 x float> %{{.*}} to <4 x double>
159   return _mm256_castps_pd(A);
160 }
161 
test_mm256_castps_si256(__m256 A)162 __m256i test_mm256_castps_si256(__m256 A) {
163   // CHECK-LABEL: test_mm256_castps_si256
164   // CHECK: bitcast <8 x float> %{{.*}} to <4 x i64>
165   return _mm256_castps_si256(A);
166 }
167 
test_mm256_castps128_ps256(__m128 A)168 __m256 test_mm256_castps128_ps256(__m128 A) {
169   // CHECK-LABEL: test_mm256_castps128_ps256
170   // 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>
171   return _mm256_castps128_ps256(A);
172 }
173 
test_mm256_castps256_ps128(__m256 A)174 __m128 test_mm256_castps256_ps128(__m256 A) {
175   // CHECK-LABEL: test_mm256_castps256_ps128
176   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
177   return _mm256_castps256_ps128(A);
178 }
179 
test_mm256_castsi128_si256(__m128i A)180 __m256i test_mm256_castsi128_si256(__m128i A) {
181   // CHECK-LABEL: test_mm256_castsi128_si256
182   // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
183   return _mm256_castsi128_si256(A);
184 }
185 
test_mm256_castsi256_pd(__m256i A)186 __m256d test_mm256_castsi256_pd(__m256i A) {
187   // CHECK-LABEL: test_mm256_castsi256_pd
188   // CHECK: bitcast <4 x i64> %{{.*}} to <4 x double>
189   return _mm256_castsi256_pd(A);
190 }
191 
test_mm256_castsi256_ps(__m256i A)192 __m256 test_mm256_castsi256_ps(__m256i A) {
193   // CHECK-LABEL: test_mm256_castsi256_ps
194   // CHECK: bitcast <4 x i64> %{{.*}} to <8 x float>
195   return _mm256_castsi256_ps(A);
196 }
197 
test_mm256_castsi256_si128(__m256i A)198 __m128i test_mm256_castsi256_si128(__m256i A) {
199   // CHECK-LABEL: test_mm256_castsi256_si128
200   // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <2 x i32> <i32 0, i32 1>
201   return _mm256_castsi256_si128(A);
202 }
203 
test_mm256_ceil_pd(__m256d x)204 __m256d test_mm256_ceil_pd(__m256d x) {
205   // CHECK-LABEL: test_mm256_ceil_pd
206   // CHECK: call <4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %{{.*}}, i32 2)
207   return _mm256_ceil_pd(x);
208 }
209 
test_mm_ceil_ps(__m256 x)210 __m256 test_mm_ceil_ps(__m256 x) {
211   // CHECK-LABEL: test_mm_ceil_ps
212   // CHECK: call <8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %{{.*}}, i32 2)
213   return _mm256_ceil_ps(x);
214 }
215 
test_mm256_cmp_pd_eq_oq(__m256d a,__m256d b)216 __m256d test_mm256_cmp_pd_eq_oq(__m256d a, __m256d b) {
217   // CHECK-LABEL: test_mm256_cmp_pd_eq_oq
218   // CHECK: fcmp oeq <4 x double> %{{.*}}, %{{.*}}
219   return _mm256_cmp_pd(a, b, _CMP_EQ_OQ);
220 }
221 
test_mm256_cmp_pd_lt_os(__m256d a,__m256d b)222 __m256d test_mm256_cmp_pd_lt_os(__m256d a, __m256d b) {
223   // CHECK-LABEL: test_mm256_cmp_pd_lt_os
224   // CHECK: fcmp olt <4 x double> %{{.*}}, %{{.*}}
225   return _mm256_cmp_pd(a, b, _CMP_LT_OS);
226 }
227 
test_mm256_cmp_pd_le_os(__m256d a,__m256d b)228 __m256d test_mm256_cmp_pd_le_os(__m256d a, __m256d b) {
229   // CHECK-LABEL: test_mm256_cmp_pd_le_os
230   // CHECK: fcmp ole <4 x double> %{{.*}}, %{{.*}}
231   return _mm256_cmp_pd(a, b, _CMP_LE_OS);
232 }
233 
test_mm256_cmp_pd_unord_q(__m256d a,__m256d b)234 __m256d test_mm256_cmp_pd_unord_q(__m256d a, __m256d b) {
235   // CHECK-LABEL: test_mm256_cmp_pd_unord_q
236   // CHECK: fcmp uno <4 x double> %{{.*}}, %{{.*}}
237   return _mm256_cmp_pd(a, b, _CMP_UNORD_Q);
238 }
239 
test_mm256_cmp_pd_neq_uq(__m256d a,__m256d b)240 __m256d test_mm256_cmp_pd_neq_uq(__m256d a, __m256d b) {
241   // CHECK-LABEL: test_mm256_cmp_pd_neq_uq
242   // CHECK: fcmp une <4 x double> %{{.*}}, %{{.*}}
243   return _mm256_cmp_pd(a, b, _CMP_NEQ_UQ);
244 }
245 
test_mm256_cmp_pd_nlt_us(__m256d a,__m256d b)246 __m256d test_mm256_cmp_pd_nlt_us(__m256d a, __m256d b) {
247   // CHECK-LABEL: test_mm256_cmp_pd_nlt_us
248   // CHECK: fcmp uge <4 x double> %{{.*}}, %{{.*}}
249   return _mm256_cmp_pd(a, b, _CMP_NLT_US);
250 }
251 
test_mm256_cmp_pd_nle_us(__m256d a,__m256d b)252 __m256d test_mm256_cmp_pd_nle_us(__m256d a, __m256d b) {
253   // CHECK-LABEL: test_mm256_cmp_pd_nle_us
254   // CHECK: fcmp ugt <4 x double> %{{.*}}, %{{.*}}
255   return _mm256_cmp_pd(a, b, _CMP_NLE_US);
256 }
257 
test_mm256_cmp_pd_ord_q(__m256d a,__m256d b)258 __m256d test_mm256_cmp_pd_ord_q(__m256d a, __m256d b) {
259   // CHECK-LABEL: test_mm256_cmp_pd_ord_q
260   // CHECK: fcmp ord <4 x double> %{{.*}}, %{{.*}}
261   return _mm256_cmp_pd(a, b, _CMP_ORD_Q);
262 }
263 
test_mm256_cmp_pd_eq_uq(__m256d a,__m256d b)264 __m256d test_mm256_cmp_pd_eq_uq(__m256d a, __m256d b) {
265   // CHECK-LABEL: test_mm256_cmp_pd_eq_uq
266   // CHECK: fcmp ueq <4 x double> %{{.*}}, %{{.*}}
267   return _mm256_cmp_pd(a, b, _CMP_EQ_UQ);
268 }
269 
test_mm256_cmp_pd_nge_us(__m256d a,__m256d b)270 __m256d test_mm256_cmp_pd_nge_us(__m256d a, __m256d b) {
271   // CHECK-LABEL: test_mm256_cmp_pd_nge_us
272   // CHECK: fcmp ult <4 x double> %{{.*}}, %{{.*}}
273   return _mm256_cmp_pd(a, b, _CMP_NGE_US);
274 }
275 
test_mm256_cmp_pd_ngt_us(__m256d a,__m256d b)276 __m256d test_mm256_cmp_pd_ngt_us(__m256d a, __m256d b) {
277   // CHECK-LABEL: test_mm256_cmp_pd_ngt_us
278   // CHECK: fcmp ule <4 x double> %{{.*}}, %{{.*}}
279   return _mm256_cmp_pd(a, b, _CMP_NGT_US);
280 }
281 
test_mm256_cmp_pd_false_oq(__m256d a,__m256d b)282 __m256d test_mm256_cmp_pd_false_oq(__m256d a, __m256d b) {
283   // CHECK-LABEL: test_mm256_cmp_pd_false_oq
284   // CHECK: fcmp false <4 x double> %{{.*}}, %{{.*}}
285   return _mm256_cmp_pd(a, b, _CMP_FALSE_OQ);
286 }
287 
test_mm256_cmp_pd_neq_oq(__m256d a,__m256d b)288 __m256d test_mm256_cmp_pd_neq_oq(__m256d a, __m256d b) {
289   // CHECK-LABEL: test_mm256_cmp_pd_neq_oq
290   // CHECK: fcmp one <4 x double> %{{.*}}, %{{.*}}
291   return _mm256_cmp_pd(a, b, _CMP_NEQ_OQ);
292 }
293 
test_mm256_cmp_pd_ge_os(__m256d a,__m256d b)294 __m256d test_mm256_cmp_pd_ge_os(__m256d a, __m256d b) {
295   // CHECK-LABEL: test_mm256_cmp_pd_ge_os
296   // CHECK: fcmp oge <4 x double> %{{.*}}, %{{.*}}
297   return _mm256_cmp_pd(a, b, _CMP_GE_OS);
298 }
299 
test_mm256_cmp_pd_gt_os(__m256d a,__m256d b)300 __m256d test_mm256_cmp_pd_gt_os(__m256d a, __m256d b) {
301   // CHECK-LABEL: test_mm256_cmp_pd_gt_os
302   // CHECK: fcmp ogt <4 x double> %{{.*}}, %{{.*}}
303   return _mm256_cmp_pd(a, b, _CMP_GT_OS);
304 }
305 
test_mm256_cmp_pd_true_uq(__m256d a,__m256d b)306 __m256d test_mm256_cmp_pd_true_uq(__m256d a, __m256d b) {
307   // CHECK-LABEL: test_mm256_cmp_pd_true_uq
308   // CHECK: fcmp true <4 x double> %{{.*}}, %{{.*}}
309   return _mm256_cmp_pd(a, b, _CMP_TRUE_UQ);
310 }
311 
test_mm256_cmp_pd_eq_os(__m256d a,__m256d b)312 __m256d test_mm256_cmp_pd_eq_os(__m256d a, __m256d b) {
313   // CHECK-LABEL: test_mm256_cmp_pd_eq_os
314   // CHECK: fcmp oeq <4 x double> %{{.*}}, %{{.*}}
315   return _mm256_cmp_pd(a, b, _CMP_EQ_OS);
316 }
317 
test_mm256_cmp_pd_lt_oq(__m256d a,__m256d b)318 __m256d test_mm256_cmp_pd_lt_oq(__m256d a, __m256d b) {
319   // CHECK-LABEL: test_mm256_cmp_pd_lt_oq
320   // CHECK: fcmp olt <4 x double> %{{.*}}, %{{.*}}
321   return _mm256_cmp_pd(a, b, _CMP_LT_OQ);
322 }
323 
test_mm256_cmp_pd_le_oq(__m256d a,__m256d b)324 __m256d test_mm256_cmp_pd_le_oq(__m256d a, __m256d b) {
325   // CHECK-LABEL: test_mm256_cmp_pd_le_oq
326   // CHECK: fcmp ole <4 x double> %{{.*}}, %{{.*}}
327   return _mm256_cmp_pd(a, b, _CMP_LE_OQ);
328 }
329 
test_mm256_cmp_pd_unord_s(__m256d a,__m256d b)330 __m256d test_mm256_cmp_pd_unord_s(__m256d a, __m256d b) {
331   // CHECK-LABEL: test_mm256_cmp_pd_unord_s
332   // CHECK: fcmp uno <4 x double> %{{.*}}, %{{.*}}
333   return _mm256_cmp_pd(a, b, _CMP_UNORD_S);
334 }
335 
test_mm256_cmp_pd_neq_us(__m256d a,__m256d b)336 __m256d test_mm256_cmp_pd_neq_us(__m256d a, __m256d b) {
337   // CHECK-LABEL: test_mm256_cmp_pd_neq_us
338   // CHECK: fcmp une <4 x double> %{{.*}}, %{{.*}}
339   return _mm256_cmp_pd(a, b, _CMP_NEQ_US);
340 }
341 
test_mm256_cmp_pd_nlt_uq(__m256d a,__m256d b)342 __m256d test_mm256_cmp_pd_nlt_uq(__m256d a, __m256d b) {
343   // CHECK-LABEL: test_mm256_cmp_pd_nlt_uq
344   // CHECK: fcmp uge <4 x double> %{{.*}}, %{{.*}}
345   return _mm256_cmp_pd(a, b, _CMP_NLT_UQ);
346 }
347 
test_mm256_cmp_pd_nle_uq(__m256d a,__m256d b)348 __m256d test_mm256_cmp_pd_nle_uq(__m256d a, __m256d b) {
349   // CHECK-LABEL: test_mm256_cmp_pd_nle_uq
350   // CHECK: fcmp ugt <4 x double> %{{.*}}, %{{.*}}
351   return _mm256_cmp_pd(a, b, _CMP_NLE_UQ);
352 }
353 
test_mm256_cmp_pd_ord_s(__m256d a,__m256d b)354 __m256d test_mm256_cmp_pd_ord_s(__m256d a, __m256d b) {
355   // CHECK-LABEL: test_mm256_cmp_pd_ord_s
356   // CHECK: fcmp ord <4 x double> %{{.*}}, %{{.*}}
357   return _mm256_cmp_pd(a, b, _CMP_ORD_S);
358 }
359 
test_mm256_cmp_pd_eq_us(__m256d a,__m256d b)360 __m256d test_mm256_cmp_pd_eq_us(__m256d a, __m256d b) {
361   // CHECK-LABEL: test_mm256_cmp_pd_eq_us
362   // CHECK: fcmp ueq <4 x double> %{{.*}}, %{{.*}}
363   return _mm256_cmp_pd(a, b, _CMP_EQ_US);
364 }
365 
test_mm256_cmp_pd_nge_uq(__m256d a,__m256d b)366 __m256d test_mm256_cmp_pd_nge_uq(__m256d a, __m256d b) {
367   // CHECK-LABEL: test_mm256_cmp_pd_nge_uq
368   // CHECK: fcmp ult <4 x double> %{{.*}}, %{{.*}}
369   return _mm256_cmp_pd(a, b, _CMP_NGE_UQ);
370 }
371 
test_mm256_cmp_pd_ngt_uq(__m256d a,__m256d b)372 __m256d test_mm256_cmp_pd_ngt_uq(__m256d a, __m256d b) {
373   // CHECK-LABEL: test_mm256_cmp_pd_ngt_uq
374   // CHECK: fcmp ule <4 x double> %{{.*}}, %{{.*}}
375   return _mm256_cmp_pd(a, b, _CMP_NGT_UQ);
376 }
377 
test_mm256_cmp_pd_false_os(__m256d a,__m256d b)378 __m256d test_mm256_cmp_pd_false_os(__m256d a, __m256d b) {
379   // CHECK-LABEL: test_mm256_cmp_pd_false_os
380   // CHECK: fcmp false <4 x double> %{{.*}}, %{{.*}}
381   return _mm256_cmp_pd(a, b, _CMP_FALSE_OS);
382 }
383 
test_mm256_cmp_pd_neq_os(__m256d a,__m256d b)384 __m256d test_mm256_cmp_pd_neq_os(__m256d a, __m256d b) {
385   // CHECK-LABEL: test_mm256_cmp_pd_neq_os
386   // CHECK: fcmp one <4 x double> %{{.*}}, %{{.*}}
387   return _mm256_cmp_pd(a, b, _CMP_NEQ_OS);
388 }
389 
test_mm256_cmp_pd_ge_oq(__m256d a,__m256d b)390 __m256d test_mm256_cmp_pd_ge_oq(__m256d a, __m256d b) {
391   // CHECK-LABEL: test_mm256_cmp_pd_ge_oq
392   // CHECK: fcmp oge <4 x double> %{{.*}}, %{{.*}}
393   return _mm256_cmp_pd(a, b, _CMP_GE_OQ);
394 }
395 
test_mm256_cmp_pd_gt_oq(__m256d a,__m256d b)396 __m256d test_mm256_cmp_pd_gt_oq(__m256d a, __m256d b) {
397   // CHECK-LABEL: test_mm256_cmp_pd_gt_oq
398   // CHECK: fcmp ogt <4 x double> %{{.*}}, %{{.*}}
399   return _mm256_cmp_pd(a, b, _CMP_GT_OQ);
400 }
401 
test_mm256_cmp_pd_true_us(__m256d a,__m256d b)402 __m256d test_mm256_cmp_pd_true_us(__m256d a, __m256d b) {
403   // CHECK-LABEL: test_mm256_cmp_pd_true_us
404   // CHECK: fcmp true <4 x double> %{{.*}}, %{{.*}}
405   return _mm256_cmp_pd(a, b, _CMP_TRUE_US);
406 }
407 
test_mm256_cmp_ps_eq_oq(__m256 a,__m256 b)408 __m256 test_mm256_cmp_ps_eq_oq(__m256 a, __m256 b) {
409   // CHECK-LABEL: test_mm256_cmp_ps_eq_oq
410   // CHECK: fcmp oeq <8 x float> %{{.*}}, %{{.*}}
411   return _mm256_cmp_ps(a, b, _CMP_EQ_OQ);
412 }
413 
test_mm256_cmp_ps_lt_os(__m256 a,__m256 b)414 __m256 test_mm256_cmp_ps_lt_os(__m256 a, __m256 b) {
415   // CHECK-LABEL: test_mm256_cmp_ps_lt_os
416   // CHECK: fcmp olt <8 x float> %{{.*}}, %{{.*}}
417   return _mm256_cmp_ps(a, b, _CMP_LT_OS);
418 }
419 
test_mm256_cmp_ps_le_os(__m256 a,__m256 b)420 __m256 test_mm256_cmp_ps_le_os(__m256 a, __m256 b) {
421   // CHECK-LABEL: test_mm256_cmp_ps_le_os
422   // CHECK: fcmp ole <8 x float> %{{.*}}, %{{.*}}
423   return _mm256_cmp_ps(a, b, _CMP_LE_OS);
424 }
425 
test_mm256_cmp_ps_unord_q(__m256 a,__m256 b)426 __m256 test_mm256_cmp_ps_unord_q(__m256 a, __m256 b) {
427   // CHECK-LABEL: test_mm256_cmp_ps_unord_q
428   // CHECK: fcmp uno <8 x float> %{{.*}}, %{{.*}}
429   return _mm256_cmp_ps(a, b, _CMP_UNORD_Q);
430 }
431 
test_mm256_cmp_ps_neq_uq(__m256 a,__m256 b)432 __m256 test_mm256_cmp_ps_neq_uq(__m256 a, __m256 b) {
433   // CHECK-LABEL: test_mm256_cmp_ps_neq_uq
434   // CHECK: fcmp une <8 x float> %{{.*}}, %{{.*}}
435   return _mm256_cmp_ps(a, b, _CMP_NEQ_UQ);
436 }
437 
test_mm256_cmp_ps_nlt_us(__m256 a,__m256 b)438 __m256 test_mm256_cmp_ps_nlt_us(__m256 a, __m256 b) {
439   // CHECK-LABEL: test_mm256_cmp_ps_nlt_us
440   // CHECK: fcmp uge <8 x float> %{{.*}}, %{{.*}}
441   return _mm256_cmp_ps(a, b, _CMP_NLT_US);
442 }
443 
test_mm256_cmp_ps_nle_us(__m256 a,__m256 b)444 __m256 test_mm256_cmp_ps_nle_us(__m256 a, __m256 b) {
445   // CHECK-LABEL: test_mm256_cmp_ps_nle_us
446   // CHECK: fcmp ugt <8 x float> %{{.*}}, %{{.*}}
447   return _mm256_cmp_ps(a, b, _CMP_NLE_US);
448 }
449 
test_mm256_cmp_ps_ord_q(__m256 a,__m256 b)450 __m256 test_mm256_cmp_ps_ord_q(__m256 a, __m256 b) {
451   // CHECK-LABEL: test_mm256_cmp_ps_ord_q
452   // CHECK: fcmp ord <8 x float> %{{.*}}, %{{.*}}
453   return _mm256_cmp_ps(a, b, _CMP_ORD_Q);
454 }
455 
test_mm256_cmp_ps_eq_uq(__m256 a,__m256 b)456 __m256 test_mm256_cmp_ps_eq_uq(__m256 a, __m256 b) {
457   // CHECK-LABEL: test_mm256_cmp_ps_eq_uq
458   // CHECK: fcmp ueq <8 x float> %{{.*}}, %{{.*}}
459   return _mm256_cmp_ps(a, b, _CMP_EQ_UQ);
460 }
461 
test_mm256_cmp_ps_nge_us(__m256 a,__m256 b)462 __m256 test_mm256_cmp_ps_nge_us(__m256 a, __m256 b) {
463   // CHECK-LABEL: test_mm256_cmp_ps_nge_us
464   // CHECK: fcmp ult <8 x float> %{{.*}}, %{{.*}}
465   return _mm256_cmp_ps(a, b, _CMP_NGE_US);
466 }
467 
test_mm256_cmp_ps_ngt_us(__m256 a,__m256 b)468 __m256 test_mm256_cmp_ps_ngt_us(__m256 a, __m256 b) {
469   // CHECK-LABEL: test_mm256_cmp_ps_ngt_us
470   // CHECK: fcmp ule <8 x float> %{{.*}}, %{{.*}}
471   return _mm256_cmp_ps(a, b, _CMP_NGT_US);
472 }
473 
test_mm256_cmp_ps_false_oq(__m256 a,__m256 b)474 __m256 test_mm256_cmp_ps_false_oq(__m256 a, __m256 b) {
475   // CHECK-LABEL: test_mm256_cmp_ps_false_oq
476   // CHECK: fcmp false <8 x float> %{{.*}}, %{{.*}}
477   return _mm256_cmp_ps(a, b, _CMP_FALSE_OQ);
478 }
479 
test_mm256_cmp_ps_neq_oq(__m256 a,__m256 b)480 __m256 test_mm256_cmp_ps_neq_oq(__m256 a, __m256 b) {
481   // CHECK-LABEL: test_mm256_cmp_ps_neq_oq
482   // CHECK: fcmp one <8 x float> %{{.*}}, %{{.*}}
483   return _mm256_cmp_ps(a, b, _CMP_NEQ_OQ);
484 }
485 
test_mm256_cmp_ps_ge_os(__m256 a,__m256 b)486 __m256 test_mm256_cmp_ps_ge_os(__m256 a, __m256 b) {
487   // CHECK-LABEL: test_mm256_cmp_ps_ge_os
488   // CHECK: fcmp oge <8 x float> %{{.*}}, %{{.*}}
489   return _mm256_cmp_ps(a, b, _CMP_GE_OS);
490 }
491 
test_mm256_cmp_ps_gt_os(__m256 a,__m256 b)492 __m256 test_mm256_cmp_ps_gt_os(__m256 a, __m256 b) {
493   // CHECK-LABEL: test_mm256_cmp_ps_gt_os
494   // CHECK: fcmp ogt <8 x float> %{{.*}}, %{{.*}}
495   return _mm256_cmp_ps(a, b, _CMP_GT_OS);
496 }
497 
test_mm256_cmp_ps_true_uq(__m256 a,__m256 b)498 __m256 test_mm256_cmp_ps_true_uq(__m256 a, __m256 b) {
499   // CHECK-LABEL: test_mm256_cmp_ps_true_uq
500   // CHECK: fcmp true <8 x float> %{{.*}}, %{{.*}}
501   return _mm256_cmp_ps(a, b, _CMP_TRUE_UQ);
502 }
503 
test_mm256_cmp_ps_eq_os(__m256 a,__m256 b)504 __m256 test_mm256_cmp_ps_eq_os(__m256 a, __m256 b) {
505   // CHECK-LABEL: test_mm256_cmp_ps_eq_os
506   // CHECK: fcmp oeq <8 x float> %{{.*}}, %{{.*}}
507   return _mm256_cmp_ps(a, b, _CMP_EQ_OS);
508 }
509 
test_mm256_cmp_ps_lt_oq(__m256 a,__m256 b)510 __m256 test_mm256_cmp_ps_lt_oq(__m256 a, __m256 b) {
511   // CHECK-LABEL: test_mm256_cmp_ps_lt_oq
512   // CHECK: fcmp olt <8 x float> %{{.*}}, %{{.*}}
513   return _mm256_cmp_ps(a, b, _CMP_LT_OQ);
514 }
515 
test_mm256_cmp_ps_le_oq(__m256 a,__m256 b)516 __m256 test_mm256_cmp_ps_le_oq(__m256 a, __m256 b) {
517   // CHECK-LABEL: test_mm256_cmp_ps_le_oq
518   // CHECK: fcmp ole <8 x float> %{{.*}}, %{{.*}}
519   return _mm256_cmp_ps(a, b, _CMP_LE_OQ);
520 }
521 
test_mm256_cmp_ps_unord_s(__m256 a,__m256 b)522 __m256 test_mm256_cmp_ps_unord_s(__m256 a, __m256 b) {
523   // CHECK-LABEL: test_mm256_cmp_ps_unord_s
524   // CHECK: fcmp uno <8 x float> %{{.*}}, %{{.*}}
525   return _mm256_cmp_ps(a, b, _CMP_UNORD_S);
526 }
527 
test_mm256_cmp_ps_neq_us(__m256 a,__m256 b)528 __m256 test_mm256_cmp_ps_neq_us(__m256 a, __m256 b) {
529   // CHECK-LABEL: test_mm256_cmp_ps_neq_us
530   // CHECK: fcmp une <8 x float> %{{.*}}, %{{.*}}
531   return _mm256_cmp_ps(a, b, _CMP_NEQ_US);
532 }
533 
test_mm256_cmp_ps_nlt_uq(__m256 a,__m256 b)534 __m256 test_mm256_cmp_ps_nlt_uq(__m256 a, __m256 b) {
535   // CHECK-LABEL: test_mm256_cmp_ps_nlt_uq
536   // CHECK: fcmp uge <8 x float> %{{.*}}, %{{.*}}
537   return _mm256_cmp_ps(a, b, _CMP_NLT_UQ);
538 }
539 
test_mm256_cmp_ps_nle_uq(__m256 a,__m256 b)540 __m256 test_mm256_cmp_ps_nle_uq(__m256 a, __m256 b) {
541   // CHECK-LABEL: test_mm256_cmp_ps_nle_uq
542   // CHECK: fcmp ugt <8 x float> %{{.*}}, %{{.*}}
543   return _mm256_cmp_ps(a, b, _CMP_NLE_UQ);
544 }
545 
test_mm256_cmp_ps_ord_s(__m256 a,__m256 b)546 __m256 test_mm256_cmp_ps_ord_s(__m256 a, __m256 b) {
547   // CHECK-LABEL: test_mm256_cmp_ps_ord_s
548   // CHECK: fcmp ord <8 x float> %{{.*}}, %{{.*}}
549   return _mm256_cmp_ps(a, b, _CMP_ORD_S);
550 }
551 
test_mm256_cmp_ps_eq_us(__m256 a,__m256 b)552 __m256 test_mm256_cmp_ps_eq_us(__m256 a, __m256 b) {
553   // CHECK-LABEL: test_mm256_cmp_ps_eq_us
554   // CHECK: fcmp ueq <8 x float> %{{.*}}, %{{.*}}
555   return _mm256_cmp_ps(a, b, _CMP_EQ_US);
556 }
557 
test_mm256_cmp_ps_nge_uq(__m256 a,__m256 b)558 __m256 test_mm256_cmp_ps_nge_uq(__m256 a, __m256 b) {
559   // CHECK-LABEL: test_mm256_cmp_ps_nge_uq
560   // CHECK: fcmp ult <8 x float> %{{.*}}, %{{.*}}
561   return _mm256_cmp_ps(a, b, _CMP_NGE_UQ);
562 }
563 
test_mm256_cmp_ps_ngt_uq(__m256 a,__m256 b)564 __m256 test_mm256_cmp_ps_ngt_uq(__m256 a, __m256 b) {
565   // CHECK-LABEL: test_mm256_cmp_ps_ngt_uq
566   // CHECK: fcmp ule <8 x float> %{{.*}}, %{{.*}}
567   return _mm256_cmp_ps(a, b, _CMP_NGT_UQ);
568 }
569 
test_mm256_cmp_ps_false_os(__m256 a,__m256 b)570 __m256 test_mm256_cmp_ps_false_os(__m256 a, __m256 b) {
571   // CHECK-LABEL: test_mm256_cmp_ps_false_os
572   // CHECK: fcmp false <8 x float> %{{.*}}, %{{.*}}
573   return _mm256_cmp_ps(a, b, _CMP_FALSE_OS);
574 }
575 
test_mm256_cmp_ps_neq_os(__m256 a,__m256 b)576 __m256 test_mm256_cmp_ps_neq_os(__m256 a, __m256 b) {
577   // CHECK-LABEL: test_mm256_cmp_ps_neq_os
578   // CHECK: fcmp one <8 x float> %{{.*}}, %{{.*}}
579   return _mm256_cmp_ps(a, b, _CMP_NEQ_OS);
580 }
581 
test_mm256_cmp_ps_ge_oq(__m256 a,__m256 b)582 __m256 test_mm256_cmp_ps_ge_oq(__m256 a, __m256 b) {
583   // CHECK-LABEL: test_mm256_cmp_ps_ge_oq
584   // CHECK: fcmp oge <8 x float> %{{.*}}, %{{.*}}
585   return _mm256_cmp_ps(a, b, _CMP_GE_OQ);
586 }
587 
test_mm256_cmp_ps_gt_oq(__m256 a,__m256 b)588 __m256 test_mm256_cmp_ps_gt_oq(__m256 a, __m256 b) {
589   // CHECK-LABEL: test_mm256_cmp_ps_gt_oq
590   // CHECK: fcmp ogt <8 x float> %{{.*}}, %{{.*}}
591   return _mm256_cmp_ps(a, b, _CMP_GT_OQ);
592 }
593 
test_mm256_cmp_ps_true_us(__m256 a,__m256 b)594 __m256 test_mm256_cmp_ps_true_us(__m256 a, __m256 b) {
595   // CHECK-LABEL: test_mm256_cmp_ps_true_us
596   // CHECK: fcmp true <8 x float> %{{.*}}, %{{.*}}
597   return _mm256_cmp_ps(a, b, _CMP_TRUE_US);
598 }
599 
test_mm_cmp_pd_eq_oq(__m128d a,__m128d b)600 __m128d test_mm_cmp_pd_eq_oq(__m128d a, __m128d b) {
601   // CHECK-LABEL: test_mm_cmp_pd_eq_oq
602   // CHECK: fcmp oeq <2 x double> %{{.*}}, %{{.*}}
603   return _mm_cmp_pd(a, b, _CMP_EQ_OQ);
604 }
605 
test_mm_cmp_pd_lt_os(__m128d a,__m128d b)606 __m128d test_mm_cmp_pd_lt_os(__m128d a, __m128d b) {
607   // CHECK-LABEL: test_mm_cmp_pd_lt_os
608   // CHECK: fcmp olt <2 x double> %{{.*}}, %{{.*}}
609   return _mm_cmp_pd(a, b, _CMP_LT_OS);
610 }
611 
test_mm_cmp_pd_le_os(__m128d a,__m128d b)612 __m128d test_mm_cmp_pd_le_os(__m128d a, __m128d b) {
613   // CHECK-LABEL: test_mm_cmp_pd_le_os
614   // CHECK: fcmp ole <2 x double> %{{.*}}, %{{.*}}
615   return _mm_cmp_pd(a, b, _CMP_LE_OS);
616 }
617 
test_mm_cmp_pd_unord_q(__m128d a,__m128d b)618 __m128d test_mm_cmp_pd_unord_q(__m128d a, __m128d b) {
619   // CHECK-LABEL: test_mm_cmp_pd_unord_q
620   // CHECK: fcmp uno <2 x double> %{{.*}}, %{{.*}}
621   return _mm_cmp_pd(a, b, _CMP_UNORD_Q);
622 }
623 
test_mm_cmp_pd_neq_uq(__m128d a,__m128d b)624 __m128d test_mm_cmp_pd_neq_uq(__m128d a, __m128d b) {
625   // CHECK-LABEL: test_mm_cmp_pd_neq_uq
626   // CHECK: fcmp une <2 x double> %{{.*}}, %{{.*}}
627   return _mm_cmp_pd(a, b, _CMP_NEQ_UQ);
628 }
629 
test_mm_cmp_pd_nlt_us(__m128d a,__m128d b)630 __m128d test_mm_cmp_pd_nlt_us(__m128d a, __m128d b) {
631   // CHECK-LABEL: test_mm_cmp_pd_nlt_us
632   // CHECK: fcmp uge <2 x double> %{{.*}}, %{{.*}}
633   return _mm_cmp_pd(a, b, _CMP_NLT_US);
634 }
635 
test_mm_cmp_pd_nle_us(__m128d a,__m128d b)636 __m128d test_mm_cmp_pd_nle_us(__m128d a, __m128d b) {
637   // CHECK-LABEL: test_mm_cmp_pd_nle_us
638   // CHECK: fcmp ugt <2 x double> %{{.*}}, %{{.*}}
639   return _mm_cmp_pd(a, b, _CMP_NLE_US);
640 }
641 
test_mm_cmp_pd_ord_q(__m128d a,__m128d b)642 __m128d test_mm_cmp_pd_ord_q(__m128d a, __m128d b) {
643   // CHECK-LABEL: test_mm_cmp_pd_ord_q
644   // CHECK: fcmp ord <2 x double> %{{.*}}, %{{.*}}
645   return _mm_cmp_pd(a, b, _CMP_ORD_Q);
646 }
647 
test_mm_cmp_pd_eq_uq(__m128d a,__m128d b)648 __m128d test_mm_cmp_pd_eq_uq(__m128d a, __m128d b) {
649   // CHECK-LABEL: test_mm_cmp_pd_eq_uq
650   // CHECK: fcmp ueq <2 x double> %{{.*}}, %{{.*}}
651   return _mm_cmp_pd(a, b, _CMP_EQ_UQ);
652 }
653 
test_mm_cmp_pd_nge_us(__m128d a,__m128d b)654 __m128d test_mm_cmp_pd_nge_us(__m128d a, __m128d b) {
655   // CHECK-LABEL: test_mm_cmp_pd_nge_us
656   // CHECK: fcmp ult <2 x double> %{{.*}}, %{{.*}}
657   return _mm_cmp_pd(a, b, _CMP_NGE_US);
658 }
659 
test_mm_cmp_pd_ngt_us(__m128d a,__m128d b)660 __m128d test_mm_cmp_pd_ngt_us(__m128d a, __m128d b) {
661   // CHECK-LABEL: test_mm_cmp_pd_ngt_us
662   // CHECK: fcmp ule <2 x double> %{{.*}}, %{{.*}}
663   return _mm_cmp_pd(a, b, _CMP_NGT_US);
664 }
665 
test_mm_cmp_pd_false_oq(__m128d a,__m128d b)666 __m128d test_mm_cmp_pd_false_oq(__m128d a, __m128d b) {
667   // CHECK-LABEL: test_mm_cmp_pd_false_oq
668   // CHECK: fcmp false <2 x double> %{{.*}}, %{{.*}}
669   return _mm_cmp_pd(a, b, _CMP_FALSE_OQ);
670 }
671 
test_mm_cmp_pd_neq_oq(__m128d a,__m128d b)672 __m128d test_mm_cmp_pd_neq_oq(__m128d a, __m128d b) {
673   // CHECK-LABEL: test_mm_cmp_pd_neq_oq
674   // CHECK: fcmp one <2 x double> %{{.*}}, %{{.*}}
675   return _mm_cmp_pd(a, b, _CMP_NEQ_OQ);
676 }
677 
test_mm_cmp_pd_ge_os(__m128d a,__m128d b)678 __m128d test_mm_cmp_pd_ge_os(__m128d a, __m128d b) {
679   // CHECK-LABEL: test_mm_cmp_pd_ge_os
680   // CHECK: fcmp oge <2 x double> %{{.*}}, %{{.*}}
681   return _mm_cmp_pd(a, b, _CMP_GE_OS);
682 }
683 
test_mm_cmp_pd_gt_os(__m128d a,__m128d b)684 __m128d test_mm_cmp_pd_gt_os(__m128d a, __m128d b) {
685   // CHECK-LABEL: test_mm_cmp_pd_gt_os
686   // CHECK: fcmp ogt <2 x double> %{{.*}}, %{{.*}}
687   return _mm_cmp_pd(a, b, _CMP_GT_OS);
688 }
689 
test_mm_cmp_pd_true_uq(__m128d a,__m128d b)690 __m128d test_mm_cmp_pd_true_uq(__m128d a, __m128d b) {
691   // CHECK-LABEL: test_mm_cmp_pd_true_uq
692   // CHECK: fcmp true <2 x double> %{{.*}}, %{{.*}}
693   return _mm_cmp_pd(a, b, _CMP_TRUE_UQ);
694 }
695 
test_mm_cmp_pd_eq_os(__m128d a,__m128d b)696 __m128d test_mm_cmp_pd_eq_os(__m128d a, __m128d b) {
697   // CHECK-LABEL: test_mm_cmp_pd_eq_os
698   // CHECK: fcmp oeq <2 x double> %{{.*}}, %{{.*}}
699   return _mm_cmp_pd(a, b, _CMP_EQ_OS);
700 }
701 
test_mm_cmp_pd_lt_oq(__m128d a,__m128d b)702 __m128d test_mm_cmp_pd_lt_oq(__m128d a, __m128d b) {
703   // CHECK-LABEL: test_mm_cmp_pd_lt_oq
704   // CHECK: fcmp olt <2 x double> %{{.*}}, %{{.*}}
705   return _mm_cmp_pd(a, b, _CMP_LT_OQ);
706 }
707 
test_mm_cmp_pd_le_oq(__m128d a,__m128d b)708 __m128d test_mm_cmp_pd_le_oq(__m128d a, __m128d b) {
709   // CHECK-LABEL: test_mm_cmp_pd_le_oq
710   // CHECK: fcmp ole <2 x double> %{{.*}}, %{{.*}}
711   return _mm_cmp_pd(a, b, _CMP_LE_OQ);
712 }
713 
test_mm_cmp_pd_unord_s(__m128d a,__m128d b)714 __m128d test_mm_cmp_pd_unord_s(__m128d a, __m128d b) {
715   // CHECK-LABEL: test_mm_cmp_pd_unord_s
716   // CHECK: fcmp uno <2 x double> %{{.*}}, %{{.*}}
717   return _mm_cmp_pd(a, b, _CMP_UNORD_S);
718 }
719 
test_mm_cmp_pd_neq_us(__m128d a,__m128d b)720 __m128d test_mm_cmp_pd_neq_us(__m128d a, __m128d b) {
721   // CHECK-LABEL: test_mm_cmp_pd_neq_us
722   // CHECK: fcmp une <2 x double> %{{.*}}, %{{.*}}
723   return _mm_cmp_pd(a, b, _CMP_NEQ_US);
724 }
725 
test_mm_cmp_pd_nlt_uq(__m128d a,__m128d b)726 __m128d test_mm_cmp_pd_nlt_uq(__m128d a, __m128d b) {
727   // CHECK-LABEL: test_mm_cmp_pd_nlt_uq
728   // CHECK: fcmp uge <2 x double> %{{.*}}, %{{.*}}
729   return _mm_cmp_pd(a, b, _CMP_NLT_UQ);
730 }
731 
test_mm_cmp_pd_nle_uq(__m128d a,__m128d b)732 __m128d test_mm_cmp_pd_nle_uq(__m128d a, __m128d b) {
733   // CHECK-LABEL: test_mm_cmp_pd_nle_uq
734   // CHECK: fcmp ugt <2 x double> %{{.*}}, %{{.*}}
735   return _mm_cmp_pd(a, b, _CMP_NLE_UQ);
736 }
737 
test_mm_cmp_pd_ord_s(__m128d a,__m128d b)738 __m128d test_mm_cmp_pd_ord_s(__m128d a, __m128d b) {
739   // CHECK-LABEL: test_mm_cmp_pd_ord_s
740   // CHECK: fcmp ord <2 x double> %{{.*}}, %{{.*}}
741   return _mm_cmp_pd(a, b, _CMP_ORD_S);
742 }
743 
test_mm_cmp_pd_eq_us(__m128d a,__m128d b)744 __m128d test_mm_cmp_pd_eq_us(__m128d a, __m128d b) {
745   // CHECK-LABEL: test_mm_cmp_pd_eq_us
746   // CHECK: fcmp ueq <2 x double> %{{.*}}, %{{.*}}
747   return _mm_cmp_pd(a, b, _CMP_EQ_US);
748 }
749 
test_mm_cmp_pd_nge_uq(__m128d a,__m128d b)750 __m128d test_mm_cmp_pd_nge_uq(__m128d a, __m128d b) {
751   // CHECK-LABEL: test_mm_cmp_pd_nge_uq
752   // CHECK: fcmp ult <2 x double> %{{.*}}, %{{.*}}
753   return _mm_cmp_pd(a, b, _CMP_NGE_UQ);
754 }
755 
test_mm_cmp_pd_ngt_uq(__m128d a,__m128d b)756 __m128d test_mm_cmp_pd_ngt_uq(__m128d a, __m128d b) {
757   // CHECK-LABEL: test_mm_cmp_pd_ngt_uq
758   // CHECK: fcmp ule <2 x double> %{{.*}}, %{{.*}}
759   return _mm_cmp_pd(a, b, _CMP_NGT_UQ);
760 }
761 
test_mm_cmp_pd_false_os(__m128d a,__m128d b)762 __m128d test_mm_cmp_pd_false_os(__m128d a, __m128d b) {
763   // CHECK-LABEL: test_mm_cmp_pd_false_os
764   // CHECK: fcmp false <2 x double> %{{.*}}, %{{.*}}
765   return _mm_cmp_pd(a, b, _CMP_FALSE_OS);
766 }
767 
test_mm_cmp_pd_neq_os(__m128d a,__m128d b)768 __m128d test_mm_cmp_pd_neq_os(__m128d a, __m128d b) {
769   // CHECK-LABEL: test_mm_cmp_pd_neq_os
770   // CHECK: fcmp one <2 x double> %{{.*}}, %{{.*}}
771   return _mm_cmp_pd(a, b, _CMP_NEQ_OS);
772 }
773 
test_mm_cmp_pd_ge_oq(__m128d a,__m128d b)774 __m128d test_mm_cmp_pd_ge_oq(__m128d a, __m128d b) {
775   // CHECK-LABEL: test_mm_cmp_pd_ge_oq
776   // CHECK: fcmp oge <2 x double> %{{.*}}, %{{.*}}
777   return _mm_cmp_pd(a, b, _CMP_GE_OQ);
778 }
779 
test_mm_cmp_pd_gt_oq(__m128d a,__m128d b)780 __m128d test_mm_cmp_pd_gt_oq(__m128d a, __m128d b) {
781   // CHECK-LABEL: test_mm_cmp_pd_gt_oq
782   // CHECK: fcmp ogt <2 x double> %{{.*}}, %{{.*}}
783   return _mm_cmp_pd(a, b, _CMP_GT_OQ);
784 }
785 
test_mm_cmp_pd_true_us(__m128d a,__m128d b)786 __m128d test_mm_cmp_pd_true_us(__m128d a, __m128d b) {
787   // CHECK-LABEL: test_mm_cmp_pd_true_us
788   // CHECK: fcmp true <2 x double> %{{.*}}, %{{.*}}
789   return _mm_cmp_pd(a, b, _CMP_TRUE_US);
790 }
791 
test_mm_cmp_ps_eq_oq(__m128 a,__m128 b)792 __m128 test_mm_cmp_ps_eq_oq(__m128 a, __m128 b) {
793   // CHECK-LABEL: test_mm_cmp_ps_eq_oq
794   // CHECK: fcmp oeq <4 x float> %{{.*}}, %{{.*}}
795   return _mm_cmp_ps(a, b, _CMP_EQ_OQ);
796 }
797 
test_mm_cmp_ps_lt_os(__m128 a,__m128 b)798 __m128 test_mm_cmp_ps_lt_os(__m128 a, __m128 b) {
799   // CHECK-LABEL: test_mm_cmp_ps_lt_os
800   // CHECK: fcmp olt <4 x float> %{{.*}}, %{{.*}}
801   return _mm_cmp_ps(a, b, _CMP_LT_OS);
802 }
803 
test_mm_cmp_ps_le_os(__m128 a,__m128 b)804 __m128 test_mm_cmp_ps_le_os(__m128 a, __m128 b) {
805   // CHECK-LABEL: test_mm_cmp_ps_le_os
806   // CHECK: fcmp ole <4 x float> %{{.*}}, %{{.*}}
807   return _mm_cmp_ps(a, b, _CMP_LE_OS);
808 }
809 
test_mm_cmp_ps_unord_q(__m128 a,__m128 b)810 __m128 test_mm_cmp_ps_unord_q(__m128 a, __m128 b) {
811   // CHECK-LABEL: test_mm_cmp_ps_unord_q
812   // CHECK: fcmp uno <4 x float> %{{.*}}, %{{.*}}
813   return _mm_cmp_ps(a, b, _CMP_UNORD_Q);
814 }
815 
test_mm_cmp_ps_neq_uq(__m128 a,__m128 b)816 __m128 test_mm_cmp_ps_neq_uq(__m128 a, __m128 b) {
817   // CHECK-LABEL: test_mm_cmp_ps_neq_uq
818   // CHECK: fcmp une <4 x float> %{{.*}}, %{{.*}}
819   return _mm_cmp_ps(a, b, _CMP_NEQ_UQ);
820 }
821 
test_mm_cmp_ps_nlt_us(__m128 a,__m128 b)822 __m128 test_mm_cmp_ps_nlt_us(__m128 a, __m128 b) {
823   // CHECK-LABEL: test_mm_cmp_ps_nlt_us
824   // CHECK: fcmp uge <4 x float> %{{.*}}, %{{.*}}
825   return _mm_cmp_ps(a, b, _CMP_NLT_US);
826 }
827 
test_mm_cmp_ps_nle_us(__m128 a,__m128 b)828 __m128 test_mm_cmp_ps_nle_us(__m128 a, __m128 b) {
829   // CHECK-LABEL: test_mm_cmp_ps_nle_us
830   // CHECK: fcmp ugt <4 x float> %{{.*}}, %{{.*}}
831   return _mm_cmp_ps(a, b, _CMP_NLE_US);
832 }
833 
test_mm_cmp_ps_ord_q(__m128 a,__m128 b)834 __m128 test_mm_cmp_ps_ord_q(__m128 a, __m128 b) {
835   // CHECK-LABEL: test_mm_cmp_ps_ord_q
836   // CHECK: fcmp ord <4 x float> %{{.*}}, %{{.*}}
837   return _mm_cmp_ps(a, b, _CMP_ORD_Q);
838 }
839 
test_mm_cmp_ps_eq_uq(__m128 a,__m128 b)840 __m128 test_mm_cmp_ps_eq_uq(__m128 a, __m128 b) {
841   // CHECK-LABEL: test_mm_cmp_ps_eq_uq
842   // CHECK: fcmp ueq <4 x float> %{{.*}}, %{{.*}}
843   return _mm_cmp_ps(a, b, _CMP_EQ_UQ);
844 }
845 
test_mm_cmp_ps_nge_us(__m128 a,__m128 b)846 __m128 test_mm_cmp_ps_nge_us(__m128 a, __m128 b) {
847   // CHECK-LABEL: test_mm_cmp_ps_nge_us
848   // CHECK: fcmp ult <4 x float> %{{.*}}, %{{.*}}
849   return _mm_cmp_ps(a, b, _CMP_NGE_US);
850 }
851 
test_mm_cmp_ps_ngt_us(__m128 a,__m128 b)852 __m128 test_mm_cmp_ps_ngt_us(__m128 a, __m128 b) {
853   // CHECK-LABEL: test_mm_cmp_ps_ngt_us
854   // CHECK: fcmp ule <4 x float> %{{.*}}, %{{.*}}
855   return _mm_cmp_ps(a, b, _CMP_NGT_US);
856 }
857 
test_mm_cmp_ps_false_oq(__m128 a,__m128 b)858 __m128 test_mm_cmp_ps_false_oq(__m128 a, __m128 b) {
859   // CHECK-LABEL: test_mm_cmp_ps_false_oq
860   // CHECK: fcmp false <4 x float> %{{.*}}, %{{.*}}
861   return _mm_cmp_ps(a, b, _CMP_FALSE_OQ);
862 }
863 
test_mm_cmp_ps_neq_oq(__m128 a,__m128 b)864 __m128 test_mm_cmp_ps_neq_oq(__m128 a, __m128 b) {
865   // CHECK-LABEL: test_mm_cmp_ps_neq_oq
866   // CHECK: fcmp one <4 x float> %{{.*}}, %{{.*}}
867   return _mm_cmp_ps(a, b, _CMP_NEQ_OQ);
868 }
869 
test_mm_cmp_ps_ge_os(__m128 a,__m128 b)870 __m128 test_mm_cmp_ps_ge_os(__m128 a, __m128 b) {
871   // CHECK-LABEL: test_mm_cmp_ps_ge_os
872   // CHECK: fcmp oge <4 x float> %{{.*}}, %{{.*}}
873   return _mm_cmp_ps(a, b, _CMP_GE_OS);
874 }
875 
test_mm_cmp_ps_gt_os(__m128 a,__m128 b)876 __m128 test_mm_cmp_ps_gt_os(__m128 a, __m128 b) {
877   // CHECK-LABEL: test_mm_cmp_ps_gt_os
878   // CHECK: fcmp ogt <4 x float> %{{.*}}, %{{.*}}
879   return _mm_cmp_ps(a, b, _CMP_GT_OS);
880 }
881 
test_mm_cmp_ps_true_uq(__m128 a,__m128 b)882 __m128 test_mm_cmp_ps_true_uq(__m128 a, __m128 b) {
883   // CHECK-LABEL: test_mm_cmp_ps_true_uq
884   // CHECK: fcmp true <4 x float> %{{.*}}, %{{.*}}
885   return _mm_cmp_ps(a, b, _CMP_TRUE_UQ);
886 }
887 
test_mm_cmp_ps_eq_os(__m128 a,__m128 b)888 __m128 test_mm_cmp_ps_eq_os(__m128 a, __m128 b) {
889   // CHECK-LABEL: test_mm_cmp_ps_eq_os
890   // CHECK: fcmp oeq <4 x float> %{{.*}}, %{{.*}}
891   return _mm_cmp_ps(a, b, _CMP_EQ_OS);
892 }
893 
test_mm_cmp_ps_lt_oq(__m128 a,__m128 b)894 __m128 test_mm_cmp_ps_lt_oq(__m128 a, __m128 b) {
895   // CHECK-LABEL: test_mm_cmp_ps_lt_oq
896   // CHECK: fcmp olt <4 x float> %{{.*}}, %{{.*}}
897   return _mm_cmp_ps(a, b, _CMP_LT_OQ);
898 }
899 
test_mm_cmp_ps_le_oq(__m128 a,__m128 b)900 __m128 test_mm_cmp_ps_le_oq(__m128 a, __m128 b) {
901   // CHECK-LABEL: test_mm_cmp_ps_le_oq
902   // CHECK: fcmp ole <4 x float> %{{.*}}, %{{.*}}
903   return _mm_cmp_ps(a, b, _CMP_LE_OQ);
904 }
905 
test_mm_cmp_ps_unord_s(__m128 a,__m128 b)906 __m128 test_mm_cmp_ps_unord_s(__m128 a, __m128 b) {
907   // CHECK-LABEL: test_mm_cmp_ps_unord_s
908   // CHECK: fcmp uno <4 x float> %{{.*}}, %{{.*}}
909   return _mm_cmp_ps(a, b, _CMP_UNORD_S);
910 }
911 
test_mm_cmp_ps_neq_us(__m128 a,__m128 b)912 __m128 test_mm_cmp_ps_neq_us(__m128 a, __m128 b) {
913   // CHECK-LABEL: test_mm_cmp_ps_neq_us
914   // CHECK: fcmp une <4 x float> %{{.*}}, %{{.*}}
915   return _mm_cmp_ps(a, b, _CMP_NEQ_US);
916 }
917 
test_mm_cmp_ps_nlt_uq(__m128 a,__m128 b)918 __m128 test_mm_cmp_ps_nlt_uq(__m128 a, __m128 b) {
919   // CHECK-LABEL: test_mm_cmp_ps_nlt_uq
920   // CHECK: fcmp uge <4 x float> %{{.*}}, %{{.*}}
921   return _mm_cmp_ps(a, b, _CMP_NLT_UQ);
922 }
923 
test_mm_cmp_ps_nle_uq(__m128 a,__m128 b)924 __m128 test_mm_cmp_ps_nle_uq(__m128 a, __m128 b) {
925   // CHECK-LABEL: test_mm_cmp_ps_nle_uq
926   // CHECK: fcmp ugt <4 x float> %{{.*}}, %{{.*}}
927   return _mm_cmp_ps(a, b, _CMP_NLE_UQ);
928 }
929 
test_mm_cmp_ps_ord_s(__m128 a,__m128 b)930 __m128 test_mm_cmp_ps_ord_s(__m128 a, __m128 b) {
931   // CHECK-LABEL: test_mm_cmp_ps_ord_s
932   // CHECK: fcmp ord <4 x float> %{{.*}}, %{{.*}}
933   return _mm_cmp_ps(a, b, _CMP_ORD_S);
934 }
935 
test_mm_cmp_ps_eq_us(__m128 a,__m128 b)936 __m128 test_mm_cmp_ps_eq_us(__m128 a, __m128 b) {
937   // CHECK-LABEL: test_mm_cmp_ps_eq_us
938   // CHECK: fcmp ueq <4 x float> %{{.*}}, %{{.*}}
939   return _mm_cmp_ps(a, b, _CMP_EQ_US);
940 }
941 
test_mm_cmp_ps_nge_uq(__m128 a,__m128 b)942 __m128 test_mm_cmp_ps_nge_uq(__m128 a, __m128 b) {
943   // CHECK-LABEL: test_mm_cmp_ps_nge_uq
944   // CHECK: fcmp ult <4 x float> %{{.*}}, %{{.*}}
945   return _mm_cmp_ps(a, b, _CMP_NGE_UQ);
946 }
947 
test_mm_cmp_ps_ngt_uq(__m128 a,__m128 b)948 __m128 test_mm_cmp_ps_ngt_uq(__m128 a, __m128 b) {
949   // CHECK-LABEL: test_mm_cmp_ps_ngt_uq
950   // CHECK: fcmp ule <4 x float> %{{.*}}, %{{.*}}
951   return _mm_cmp_ps(a, b, _CMP_NGT_UQ);
952 }
953 
test_mm_cmp_ps_false_os(__m128 a,__m128 b)954 __m128 test_mm_cmp_ps_false_os(__m128 a, __m128 b) {
955   // CHECK-LABEL: test_mm_cmp_ps_false_os
956   // CHECK: fcmp false <4 x float> %{{.*}}, %{{.*}}
957   return _mm_cmp_ps(a, b, _CMP_FALSE_OS);
958 }
959 
test_mm_cmp_ps_neq_os(__m128 a,__m128 b)960 __m128 test_mm_cmp_ps_neq_os(__m128 a, __m128 b) {
961   // CHECK-LABEL: test_mm_cmp_ps_neq_os
962   // CHECK: fcmp one <4 x float> %{{.*}}, %{{.*}}
963   return _mm_cmp_ps(a, b, _CMP_NEQ_OS);
964 }
965 
test_mm_cmp_ps_ge_oq(__m128 a,__m128 b)966 __m128 test_mm_cmp_ps_ge_oq(__m128 a, __m128 b) {
967   // CHECK-LABEL: test_mm_cmp_ps_ge_oq
968   // CHECK: fcmp oge <4 x float> %{{.*}}, %{{.*}}
969   return _mm_cmp_ps(a, b, _CMP_GE_OQ);
970 }
971 
test_mm_cmp_ps_gt_oq(__m128 a,__m128 b)972 __m128 test_mm_cmp_ps_gt_oq(__m128 a, __m128 b) {
973   // CHECK-LABEL: test_mm_cmp_ps_gt_oq
974   // CHECK: fcmp ogt <4 x float> %{{.*}}, %{{.*}}
975   return _mm_cmp_ps(a, b, _CMP_GT_OQ);
976 }
977 
test_mm_cmp_ps_true_us(__m128 a,__m128 b)978 __m128 test_mm_cmp_ps_true_us(__m128 a, __m128 b) {
979   // CHECK-LABEL: test_mm_cmp_ps_true_us
980   // CHECK: fcmp true <4 x float> %{{.*}}, %{{.*}}
981   return _mm_cmp_ps(a, b, _CMP_TRUE_US);
982 }
983 
test_mm_cmp_sd(__m128d A,__m128d B)984 __m128d test_mm_cmp_sd(__m128d A, __m128d B) {
985   // CHECK-LABEL: test_mm_cmp_sd
986   // CHECK: call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 13)
987   return _mm_cmp_sd(A, B, _CMP_GE_OS);
988 }
989 
test_mm_cmp_ss(__m128 A,__m128 B)990 __m128 test_mm_cmp_ss(__m128 A, __m128 B) {
991   // CHECK-LABEL: test_mm_cmp_ss
992   // CHECK: call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 13)
993   return _mm_cmp_ss(A, B, _CMP_GE_OS);
994 }
995 
test_mm256_cvtepi32_pd(__m128i A)996 __m256d test_mm256_cvtepi32_pd(__m128i A) {
997   // CHECK-LABEL: test_mm256_cvtepi32_pd
998   // CHECK: sitofp <4 x i32> %{{.*}} to <4 x double>
999   return _mm256_cvtepi32_pd(A);
1000 }
1001 
test_mm256_cvtepi32_ps(__m256i A)1002 __m256 test_mm256_cvtepi32_ps(__m256i A) {
1003   // CHECK-LABEL: test_mm256_cvtepi32_ps
1004   // CHECK: sitofp <8 x i32> %{{.*}} to <8 x float>
1005   return _mm256_cvtepi32_ps(A);
1006 }
1007 
test_mm256_cvtpd_epi32(__m256d A)1008 __m128i test_mm256_cvtpd_epi32(__m256d A) {
1009   // CHECK-LABEL: test_mm256_cvtpd_epi32
1010   // CHECK: call <4 x i32> @llvm.x86.avx.cvt.pd2dq.256(<4 x double> %{{.*}})
1011   return _mm256_cvtpd_epi32(A);
1012 }
1013 
test_mm256_cvtpd_ps(__m256d A)1014 __m128 test_mm256_cvtpd_ps(__m256d A) {
1015   // CHECK-LABEL: test_mm256_cvtpd_ps
1016   // CHECK: call <4 x float> @llvm.x86.avx.cvt.pd2.ps.256(<4 x double> %{{.*}})
1017   return _mm256_cvtpd_ps(A);
1018 }
1019 
test_mm256_cvtps_epi32(__m256 A)1020 __m256i test_mm256_cvtps_epi32(__m256 A) {
1021   // CHECK-LABEL: test_mm256_cvtps_epi32
1022   // CHECK: call <8 x i32> @llvm.x86.avx.cvt.ps2dq.256(<8 x float> %{{.*}})
1023   return _mm256_cvtps_epi32(A);
1024 }
1025 
test_mm256_cvtps_pd(__m128 A)1026 __m256d test_mm256_cvtps_pd(__m128 A) {
1027   // CHECK-LABEL: test_mm256_cvtps_pd
1028   // CHECK: fpext <4 x float> %{{.*}} to <4 x double>
1029   return _mm256_cvtps_pd(A);
1030 }
1031 
test_mm256_cvttpd_epi32(__m256d A)1032 __m128i test_mm256_cvttpd_epi32(__m256d A) {
1033   // CHECK-LABEL: test_mm256_cvttpd_epi32
1034   // CHECK: call <4 x i32> @llvm.x86.avx.cvtt.pd2dq.256(<4 x double> %{{.*}})
1035   return _mm256_cvttpd_epi32(A);
1036 }
1037 
test_mm256_cvttps_epi32(__m256 A)1038 __m256i test_mm256_cvttps_epi32(__m256 A) {
1039   // CHECK-LABEL: test_mm256_cvttps_epi32
1040   // CHECK: call <8 x i32> @llvm.x86.avx.cvtt.ps2dq.256(<8 x float> %{{.*}})
1041   return _mm256_cvttps_epi32(A);
1042 }
1043 
test_mm256_div_pd(__m256d A,__m256d B)1044 __m256d test_mm256_div_pd(__m256d A, __m256d B) {
1045   // CHECK-LABEL: test_mm256_div_pd
1046   // CHECK: fdiv <4 x double>
1047   return _mm256_div_pd(A, B);
1048 }
1049 
test_mm256_div_ps(__m256 A,__m256 B)1050 __m256 test_mm256_div_ps(__m256 A, __m256 B) {
1051   // CHECK-LABEL: test_mm256_div_ps
1052   // CHECK: fdiv <8 x float>
1053   return _mm256_div_ps(A, B);
1054 }
1055 
test_mm256_dp_ps(__m256 A,__m256 B)1056 __m256 test_mm256_dp_ps(__m256 A, __m256 B) {
1057   // CHECK-LABEL: test_mm256_dp_ps
1058   // CHECK: call <8 x float> @llvm.x86.avx.dp.ps.256(<8 x float> {{.*}}, <8 x float> {{.*}}, i8 7)
1059   return _mm256_dp_ps(A, B, 7);
1060 }
1061 
test_mm256_extract_epi8(__m256i A)1062 int test_mm256_extract_epi8(__m256i A) {
1063   // CHECK-LABEL: test_mm256_extract_epi8
1064   // CHECK: extractelement <32 x i8> %{{.*}}, {{i32|i64}} 31
1065   // CHECK: zext i8 %{{.*}} to i32
1066   return _mm256_extract_epi8(A, 31);
1067 }
1068 
test_mm256_extract_epi16(__m256i A)1069 int test_mm256_extract_epi16(__m256i A) {
1070   // CHECK-LABEL: test_mm256_extract_epi16
1071   // CHECK: extractelement <16 x i16> %{{.*}}, {{i32|i64}} 15
1072   // CHECK: zext i16 %{{.*}} to i32
1073   return _mm256_extract_epi16(A, 15);
1074 }
1075 
test_mm256_extract_epi32(__m256i A)1076 int test_mm256_extract_epi32(__m256i A) {
1077   // CHECK-LABEL: test_mm256_extract_epi32
1078   // CHECK: extractelement <8 x i32> %{{.*}}, {{i32|i64}} 7
1079   return _mm256_extract_epi32(A, 7);
1080 }
1081 
1082 #if __x86_64__
test_mm256_extract_epi64(__m256i A)1083 long long test_mm256_extract_epi64(__m256i A) {
1084   // CHECK-LABEL: test_mm256_extract_epi64
1085   // CHECK: extractelement <4 x i64> %{{.*}}, {{i32|i64}} 3
1086   return _mm256_extract_epi64(A, 3);
1087 }
1088 #endif
1089 
test_mm256_extractf128_pd(__m256d A)1090 __m128d test_mm256_extractf128_pd(__m256d A) {
1091   // CHECK-LABEL: test_mm256_extractf128_pd
1092   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <2 x i32> <i32 2, i32 3>
1093   return _mm256_extractf128_pd(A, 1);
1094 }
1095 
test_mm256_extractf128_ps(__m256 A)1096 __m128 test_mm256_extractf128_ps(__m256 A) {
1097   // CHECK-LABEL: test_mm256_extractf128_ps
1098   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
1099   return _mm256_extractf128_ps(A, 1);
1100 }
1101 
test_mm256_extractf128_si256(__m256i A)1102 __m128i test_mm256_extractf128_si256(__m256i A) {
1103   // CHECK-LABEL: test_mm256_extractf128_si256
1104   // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
1105   return _mm256_extractf128_si256(A, 1);
1106 }
1107 
test_mm256_floor_pd(__m256d x)1108 __m256d test_mm256_floor_pd(__m256d x) {
1109   // CHECK-LABEL: test_mm256_floor_pd
1110   // CHECK: call <4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %{{.*}}, i32 1)
1111   return _mm256_floor_pd(x);
1112 }
1113 
test_mm_floor_ps(__m256 x)1114 __m256 test_mm_floor_ps(__m256 x) {
1115   // CHECK-LABEL: test_mm_floor_ps
1116   // CHECK: call <8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %{{.*}}, i32 1)
1117   return _mm256_floor_ps(x);
1118 }
1119 
test_mm256_hadd_pd(__m256d A,__m256d B)1120 __m256d test_mm256_hadd_pd(__m256d A, __m256d B) {
1121   // CHECK-LABEL: test_mm256_hadd_pd
1122   // CHECK: call <4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1123   return _mm256_hadd_pd(A, B);
1124 }
1125 
test_mm256_hadd_ps(__m256 A,__m256 B)1126 __m256 test_mm256_hadd_ps(__m256 A, __m256 B) {
1127   // CHECK-LABEL: test_mm256_hadd_ps
1128   // CHECK: call <8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1129   return _mm256_hadd_ps(A, B);
1130 }
1131 
test_mm256_hsub_pd(__m256d A,__m256d B)1132 __m256d test_mm256_hsub_pd(__m256d A, __m256d B) {
1133   // CHECK-LABEL: test_mm256_hsub_pd
1134   // CHECK: call <4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1135   return _mm256_hsub_pd(A, B);
1136 }
1137 
test_mm256_hsub_ps(__m256 A,__m256 B)1138 __m256 test_mm256_hsub_ps(__m256 A, __m256 B) {
1139   // CHECK-LABEL: test_mm256_hsub_ps
1140   // CHECK: call <8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1141   return _mm256_hsub_ps(A, B);
1142 }
1143 
test_mm256_insert_epi8(__m256i x,char b)1144 __m256i test_mm256_insert_epi8(__m256i x, char b) {
1145   // CHECK-LABEL: test_mm256_insert_epi8
1146   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, {{i32|i64}} 14
1147   return _mm256_insert_epi8(x, b, 14);
1148 }
1149 
test_mm256_insert_epi16(__m256i x,int b)1150 __m256i test_mm256_insert_epi16(__m256i x, int b) {
1151   // CHECK-LABEL: test_mm256_insert_epi16
1152   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, {{i32|i64}} 4
1153   return _mm256_insert_epi16(x, b, 4);
1154 }
1155 
test_mm256_insert_epi32(__m256i x,int b)1156 __m256i test_mm256_insert_epi32(__m256i x, int b) {
1157   // CHECK-LABEL: test_mm256_insert_epi32
1158   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, {{i32|i64}} 5
1159   return _mm256_insert_epi32(x, b, 5);
1160 }
1161 
1162 #if __x86_64__
test_mm256_insert_epi64(__m256i x,long long b)1163 __m256i test_mm256_insert_epi64(__m256i x, long long b) {
1164   // CHECK-LABEL: test_mm256_insert_epi64
1165   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, {{i32|i64}} 2
1166   return _mm256_insert_epi64(x, b, 2);
1167 }
1168 #endif
1169 
test_mm256_insertf128_pd(__m256d A,__m128d B)1170 __m256d test_mm256_insertf128_pd(__m256d A, __m128d B) {
1171   // CHECK-LABEL: test_mm256_insertf128_pd
1172   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1173   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 4, i32 5, i32 2, i32 3>
1174   return _mm256_insertf128_pd(A, B, 0);
1175 }
1176 
test_mm256_insertf128_ps(__m256 A,__m128 B)1177 __m256 test_mm256_insertf128_ps(__m256 A, __m128 B) {
1178   // CHECK-LABEL: test_mm256_insertf128_ps
1179   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1180   // 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>
1181   return _mm256_insertf128_ps(A, B, 1);
1182 }
1183 
test_mm256_insertf128_si256(__m256i A,__m128i B)1184 __m256i test_mm256_insertf128_si256(__m256i A, __m128i B) {
1185   // CHECK-LABEL: test_mm256_insertf128_si256
1186   // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1187   // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 4, i32 5, i32 6, i32 7>
1188   return _mm256_insertf128_si256(A, B, 0);
1189 }
1190 
test_mm256_lddqu_si256(__m256i * A)1191 __m256i test_mm256_lddqu_si256(__m256i* A) {
1192   // CHECK-LABEL: test_mm256_lddqu_si256
1193   // CHECK: call <32 x i8> @llvm.x86.avx.ldu.dq.256(i8* %{{.*}})
1194   return _mm256_lddqu_si256(A);
1195 }
1196 
test_mm256_load_pd(double * A)1197 __m256d test_mm256_load_pd(double* A) {
1198   // CHECK-LABEL: test_mm256_load_pd
1199   // CHECK: load <4 x double>, <4 x double>* %{{.*}}, align 32
1200   return _mm256_load_pd(A);
1201 }
1202 
test_mm256_load_ps(float * A)1203 __m256 test_mm256_load_ps(float* A) {
1204   // CHECK-LABEL: test_mm256_load_ps
1205   // CHECK: load <8 x float>, <8 x float>* %{{.*}}, align 32
1206   return _mm256_load_ps(A);
1207 }
1208 
test_mm256_load_si256(__m256i * A)1209 __m256i test_mm256_load_si256(__m256i* A) {
1210   // CHECK-LABEL: test_mm256_load_si256
1211   // CHECK: load <4 x i64>, <4 x i64>* %{{.*}}, align 32
1212   return _mm256_load_si256(A);
1213 }
1214 
test_mm256_loadu_pd(double * A)1215 __m256d test_mm256_loadu_pd(double* A) {
1216   // CHECK-LABEL: test_mm256_loadu_pd
1217   // CHECK: load <4 x double>, <4 x double>* %{{.*}}, align 1{{$}}
1218   return _mm256_loadu_pd(A);
1219 }
1220 
test_mm256_loadu_ps(float * A)1221 __m256 test_mm256_loadu_ps(float* A) {
1222   // CHECK-LABEL: test_mm256_loadu_ps
1223   // CHECK: load <8 x float>, <8 x float>* %{{.*}}, align 1{{$}}
1224   return _mm256_loadu_ps(A);
1225 }
1226 
test_mm256_loadu_si256(__m256i * A)1227 __m256i test_mm256_loadu_si256(__m256i* A) {
1228   // CHECK-LABEL: test_mm256_loadu_si256
1229   // CHECK: load <4 x i64>, <4 x i64>* %{{.+}}, align 1{{$}}
1230   return _mm256_loadu_si256(A);
1231 }
1232 
test_mm256_loadu2_m128(float * A,float * B)1233 __m256 test_mm256_loadu2_m128(float* A, float* B) {
1234   // CHECK-LABEL: test_mm256_loadu2_m128
1235   // CHECK: load <4 x float>, <4 x float>* %{{.*}}, align 1{{$}}
1236   // CHECK: load <4 x float>, <4 x float>* %{{.*}}, align 1{{$}}
1237   // 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>
1238   return _mm256_loadu2_m128(A, B);
1239 }
1240 
test_mm256_loadu2_m128d(double * A,double * B)1241 __m256d test_mm256_loadu2_m128d(double* A, double* B) {
1242   // CHECK-LABEL: test_mm256_loadu2_m128d
1243   // CHECK: load <2 x double>, <2 x double>* %{{.*}}, align 1{{$}}
1244   // CHECK: load <2 x double>, <2 x double>* %{{.*}}, align 1{{$}}
1245   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1246   return _mm256_loadu2_m128d(A, B);
1247 }
1248 
test_mm256_loadu2_m128i(__m128i * A,__m128i * B)1249 __m256i test_mm256_loadu2_m128i(__m128i* A, __m128i* B) {
1250   // CHECK-LABEL: test_mm256_loadu2_m128i
1251   // CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 1{{$}}
1252   // CHECK: load <2 x i64>, <2 x i64>* %{{.*}}, align 1{{$}}
1253   // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1254   return _mm256_loadu2_m128i(A, B);
1255 }
1256 
test_mm_maskload_pd(double * A,__m128i B)1257 __m128d test_mm_maskload_pd(double* A, __m128i B) {
1258   // CHECK-LABEL: test_mm_maskload_pd
1259   // CHECK: call <2 x double> @llvm.x86.avx.maskload.pd(i8* %{{.*}}, <2 x i64> %{{.*}})
1260   return _mm_maskload_pd(A, B);
1261 }
1262 
test_mm256_maskload_pd(double * A,__m256i B)1263 __m256d test_mm256_maskload_pd(double* A, __m256i B) {
1264   // CHECK-LABEL: test_mm256_maskload_pd
1265   // CHECK: call <4 x double> @llvm.x86.avx.maskload.pd.256(i8* %{{.*}}, <4 x i64> %{{.*}})
1266   return _mm256_maskload_pd(A, B);
1267 }
1268 
test_mm_maskload_ps(float * A,__m128i B)1269 __m128 test_mm_maskload_ps(float* A, __m128i B) {
1270   // CHECK-LABEL: test_mm_maskload_ps
1271   // CHECK: call <4 x float> @llvm.x86.avx.maskload.ps(i8* %{{.*}}, <4 x i32> %{{.*}})
1272   return _mm_maskload_ps(A, B);
1273 }
1274 
test_mm256_maskload_ps(float * A,__m256i B)1275 __m256 test_mm256_maskload_ps(float* A, __m256i B) {
1276   // CHECK-LABEL: test_mm256_maskload_ps
1277   // CHECK: call <8 x float> @llvm.x86.avx.maskload.ps.256(i8* %{{.*}}, <8 x i32> %{{.*}})
1278   return _mm256_maskload_ps(A, B);
1279 }
1280 
test_mm_maskstore_pd(double * A,__m128i B,__m128d C)1281 void test_mm_maskstore_pd(double* A, __m128i B, __m128d C) {
1282   // CHECK-LABEL: test_mm_maskstore_pd
1283   // CHECK: call void @llvm.x86.avx.maskstore.pd(i8* %{{.*}}, <2 x i64> %{{.*}}, <2 x double> %{{.*}})
1284   _mm_maskstore_pd(A, B, C);
1285 }
1286 
test_mm256_maskstore_pd(double * A,__m256i B,__m256d C)1287 void test_mm256_maskstore_pd(double* A, __m256i B, __m256d C) {
1288   // CHECK-LABEL: test_mm256_maskstore_pd
1289   // CHECK: call void @llvm.x86.avx.maskstore.pd.256(i8* %{{.*}}, <4 x i64> %{{.*}}, <4 x double> %{{.*}})
1290   _mm256_maskstore_pd(A, B, C);
1291 }
1292 
test_mm_maskstore_ps(float * A,__m128i B,__m128 C)1293 void test_mm_maskstore_ps(float* A, __m128i B, __m128 C) {
1294   // CHECK-LABEL: test_mm_maskstore_ps
1295   // CHECK: call void @llvm.x86.avx.maskstore.ps(i8* %{{.*}}, <4 x i32> %{{.*}}, <4 x float> %{{.*}})
1296   _mm_maskstore_ps(A, B, C);
1297 }
1298 
test_mm256_maskstore_ps(float * A,__m256i B,__m256 C)1299 void test_mm256_maskstore_ps(float* A, __m256i B, __m256 C) {
1300   // CHECK-LABEL: test_mm256_maskstore_ps
1301   // CHECK: call void @llvm.x86.avx.maskstore.ps.256(i8* %{{.*}}, <8 x i32> %{{.*}}, <8 x float> %{{.*}})
1302   _mm256_maskstore_ps(A, B, C);
1303 }
1304 
test_mm256_max_pd(__m256d A,__m256d B)1305 __m256d test_mm256_max_pd(__m256d A, __m256d B) {
1306   // CHECK-LABEL: test_mm256_max_pd
1307   // CHECK: call <4 x double> @llvm.x86.avx.max.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1308   return _mm256_max_pd(A, B);
1309 }
1310 
test_mm256_max_ps(__m256 A,__m256 B)1311 __m256 test_mm256_max_ps(__m256 A, __m256 B) {
1312   // CHECK-LABEL: test_mm256_max_ps
1313   // CHECK: call <8 x float> @llvm.x86.avx.max.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1314   return _mm256_max_ps(A, B);
1315 }
1316 
test_mm256_min_pd(__m256d A,__m256d B)1317 __m256d test_mm256_min_pd(__m256d A, __m256d B) {
1318   // CHECK-LABEL: test_mm256_min_pd
1319   // CHECK: call <4 x double> @llvm.x86.avx.min.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1320   return _mm256_min_pd(A, B);
1321 }
1322 
test_mm256_min_ps(__m256 A,__m256 B)1323 __m256 test_mm256_min_ps(__m256 A, __m256 B) {
1324   // CHECK-LABEL: test_mm256_min_ps
1325   // CHECK: call <8 x float> @llvm.x86.avx.min.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1326   return _mm256_min_ps(A, B);
1327 }
1328 
test_mm256_movedup_pd(__m256d A)1329 __m256d test_mm256_movedup_pd(__m256d A) {
1330   // CHECK-LABEL: test_mm256_movedup_pd
1331   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 0, i32 2, i32 2>
1332   return _mm256_movedup_pd(A);
1333 }
1334 
test_mm256_movehdup_ps(__m256 A)1335 __m256 test_mm256_movehdup_ps(__m256 A) {
1336   // CHECK-LABEL: test_mm256_movehdup_ps
1337   // 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>
1338   return _mm256_movehdup_ps(A);
1339 }
1340 
test_mm256_moveldup_ps(__m256 A)1341 __m256 test_mm256_moveldup_ps(__m256 A) {
1342   // CHECK-LABEL: test_mm256_moveldup_ps
1343   // 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>
1344   return _mm256_moveldup_ps(A);
1345 }
1346 
test_mm256_movemask_pd(__m256d A)1347 int test_mm256_movemask_pd(__m256d A) {
1348   // CHECK-LABEL: test_mm256_movemask_pd
1349   // CHECK: call i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> %{{.*}})
1350   return _mm256_movemask_pd(A);
1351 }
1352 
test_mm256_movemask_ps(__m256 A)1353 int test_mm256_movemask_ps(__m256 A) {
1354   // CHECK-LABEL: test_mm256_movemask_ps
1355   // CHECK: call i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> %{{.*}})
1356   return _mm256_movemask_ps(A);
1357 }
1358 
test_mm256_mul_pd(__m256d A,__m256d B)1359 __m256d test_mm256_mul_pd(__m256d A, __m256d B) {
1360   // CHECK-LABEL: test_mm256_mul_pd
1361   // CHECK: fmul <4 x double>
1362   return _mm256_mul_pd(A, B);
1363 }
1364 
test_mm256_mul_ps(__m256 A,__m256 B)1365 __m256 test_mm256_mul_ps(__m256 A, __m256 B) {
1366   // CHECK-LABEL: test_mm256_mul_ps
1367   // CHECK: fmul <8 x float>
1368   return _mm256_mul_ps(A, B);
1369 }
1370 
test_mm256_or_pd(__m256d A,__m256d B)1371 __m256d test_mm256_or_pd(__m256d A, __m256d B) {
1372   // CHECK-LABEL: test_mm256_or_pd
1373   // CHECK: or <4 x i64>
1374   return _mm256_or_pd(A, B);
1375 }
1376 
test_mm256_or_ps(__m256 A,__m256 B)1377 __m256 test_mm256_or_ps(__m256 A, __m256 B) {
1378   // CHECK-LABEL: test_mm256_or_ps
1379   // CHECK: or <8 x i32>
1380   return _mm256_or_ps(A, B);
1381 }
1382 
test_mm_permute_pd(__m128d A)1383 __m128d test_mm_permute_pd(__m128d A) {
1384   // CHECK-LABEL: test_mm_permute_pd
1385   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> <i32 1, i32 0>
1386   return _mm_permute_pd(A, 1);
1387 }
1388 
test_mm256_permute_pd(__m256d A)1389 __m256d test_mm256_permute_pd(__m256d A) {
1390   // CHECK-LABEL: test_mm256_permute_pd
1391   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
1392   return _mm256_permute_pd(A, 5);
1393 }
1394 
test_mm_permute_ps(__m128 A)1395 __m128 test_mm_permute_ps(__m128 A) {
1396   // CHECK-LABEL: test_mm_permute_ps
1397   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
1398   return _mm_permute_ps(A, 0x1b);
1399 }
1400 
1401 // Test case for PR12401
test2_mm_permute_ps(__m128 a)1402 __m128 test2_mm_permute_ps(__m128 a) {
1403   // CHECK-LABEL: test2_mm_permute_ps
1404   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> <i32 2, i32 1, i32 2, i32 3>
1405   return _mm_permute_ps(a, 0xe6);
1406 }
1407 
test_mm256_permute_ps(__m256 A)1408 __m256 test_mm256_permute_ps(__m256 A) {
1409   // CHECK-LABEL: test_mm256_permute_ps
1410   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
1411   return _mm256_permute_ps(A, 0x1b);
1412 }
1413 
test_mm256_permute2f128_pd(__m256d A,__m256d B)1414 __m256d test_mm256_permute2f128_pd(__m256d A, __m256d B) {
1415   // CHECK-LABEL: test_mm256_permute2f128_pd
1416   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 2, i32 3, i32 6, i32 7>
1417   return _mm256_permute2f128_pd(A, B, 0x31);
1418 }
1419 
test_mm256_permute2f128_ps(__m256 A,__m256 B)1420 __m256 test_mm256_permute2f128_ps(__m256 A, __m256 B) {
1421   // CHECK-LABEL: test_mm256_permute2f128_ps
1422   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 12, i32 13, i32 14, i32 15>
1423   return _mm256_permute2f128_ps(A, B, 0x13);
1424 }
1425 
test_mm256_permute2f128_si256(__m256i A,__m256i B)1426 __m256i test_mm256_permute2f128_si256(__m256i A, __m256i B) {
1427   // CHECK-LABEL: test_mm256_permute2f128_si256
1428   // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
1429   return _mm256_permute2f128_si256(A, B, 0x20);
1430 }
1431 
test_mm_permutevar_pd(__m128d A,__m128i B)1432 __m128d test_mm_permutevar_pd(__m128d A, __m128i B) {
1433   // CHECK-LABEL: test_mm_permutevar_pd
1434   // CHECK: call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %{{.*}}, <2 x i64> %{{.*}})
1435   return _mm_permutevar_pd(A, B);
1436 }
1437 
test_mm256_permutevar_pd(__m256d A,__m256i B)1438 __m256d test_mm256_permutevar_pd(__m256d A, __m256i B) {
1439   // CHECK-LABEL: test_mm256_permutevar_pd
1440   // CHECK: call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %{{.*}}, <4 x i64> %{{.*}})
1441   return _mm256_permutevar_pd(A, B);
1442 }
1443 
test_mm_permutevar_ps(__m128 A,__m128i B)1444 __m128 test_mm_permutevar_ps(__m128 A, __m128i B) {
1445   // CHECK-LABEL: test_mm_permutevar_ps
1446   // CHECK: call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %{{.*}}, <4 x i32> %{{.*}})
1447   return _mm_permutevar_ps(A, B);
1448 }
1449 
test_mm256_permutevar_ps(__m256 A,__m256i B)1450 __m256 test_mm256_permutevar_ps(__m256 A, __m256i B) {
1451   // CHECK-LABEL: test_mm256_permutevar_ps
1452   // CHECK: call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %{{.*}}, <8 x i32> %{{.*}})
1453   return _mm256_permutevar_ps(A, B);
1454 }
1455 
test_mm256_rcp_ps(__m256 A)1456 __m256 test_mm256_rcp_ps(__m256 A) {
1457   // CHECK-LABEL: test_mm256_rcp_ps
1458   // CHECK: call <8 x float> @llvm.x86.avx.rcp.ps.256(<8 x float> %{{.*}})
1459   return _mm256_rcp_ps(A);
1460 }
1461 
test_mm256_round_pd(__m256d x)1462 __m256d test_mm256_round_pd(__m256d x) {
1463   // CHECK-LABEL: test_mm256_round_pd
1464   // CHECK: call <4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %{{.*}}, i32 4)
1465   return _mm256_round_pd(x, 4);
1466 }
1467 
test_mm256_round_ps(__m256 x)1468 __m256 test_mm256_round_ps(__m256 x) {
1469   // CHECK-LABEL: test_mm256_round_ps
1470   // CHECK: call <8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %{{.*}}, i32 4)
1471   return _mm256_round_ps(x, 4);
1472 }
1473 
test_mm256_rsqrt_ps(__m256 A)1474 __m256 test_mm256_rsqrt_ps(__m256 A) {
1475   // CHECK-LABEL: test_mm256_rsqrt_ps
1476   // CHECK: call <8 x float> @llvm.x86.avx.rsqrt.ps.256(<8 x float> %{{.*}})
1477   return _mm256_rsqrt_ps(A);
1478 }
1479 
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)1480 __m256i test_mm256_set_epi8(char A0, char A1, char A2, char A3, char A4, char A5, char A6, char A7,
1481                             char A8, char A9, char A10, char A11, char A12, char A13, char A14, char A15,
1482                             char A16, char A17, char A18, char A19, char A20, char A21, char A22, char A23,
1483                             char A24, char A25, char A26, char A27, char A28, char A29, char A30, char A31) {
1484   // CHECK-LABEL: test_mm256_set_epi8
1485   // CHECK: insertelement <32 x i8> undef, i8 %{{.*}}, i32 0
1486   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 1
1487   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 2
1488   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 3
1489   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 4
1490   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 5
1491   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 6
1492   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 7
1493   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 8
1494   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 9
1495   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 10
1496   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 11
1497   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 12
1498   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 13
1499   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 14
1500   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 15
1501   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 16
1502   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 17
1503   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 18
1504   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 19
1505   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 20
1506   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 21
1507   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 22
1508   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 23
1509   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 24
1510   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 25
1511   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 26
1512   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 27
1513   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 28
1514   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 29
1515   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 30
1516   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31
1517   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);
1518 }
1519 
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)1520 __m256i test_mm256_set_epi16(short A0, short A1, short A2, short A3, short A4, short A5, short A6, short A7,
1521                              short A8, short A9, short A10, short A11, short A12, short A13, short A14, short A15) {
1522   // CHECK-LABEL: test_mm256_set_epi16
1523   // CHECK: insertelement <16 x i16> undef, i16 %{{.*}}, i32 0
1524   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 1
1525   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 2
1526   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 3
1527   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 4
1528   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 5
1529   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 6
1530   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 7
1531   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 8
1532   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 9
1533   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 10
1534   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 11
1535   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 12
1536   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 13
1537   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 14
1538   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 15
1539   return _mm256_set_epi16(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15);
1540 }
1541 
test_mm256_set_epi32(int A0,int A1,int A2,int A3,int A4,int A5,int A6,int A7)1542 __m256i test_mm256_set_epi32(int A0, int A1, int A2, int A3, int A4, int A5, int A6, int A7) {
1543   // CHECK-LABEL: test_mm256_set_epi32
1544   // CHECK: insertelement <8 x i32> undef, i32 %{{.*}}, i32 0
1545   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 1
1546   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 2
1547   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 3
1548   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 4
1549   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 5
1550   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 6
1551   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7
1552   return _mm256_set_epi32(A0, A1, A2, A3, A4, A5, A6, A7);
1553 }
1554 
test_mm256_set_epi64x(long long A0,long long A1,long long A2,long long A3)1555 __m256i test_mm256_set_epi64x(long long A0, long long A1, long long A2, long long A3) {
1556   // CHECK-LABEL: test_mm256_set_epi64x
1557   // CHECK: insertelement <4 x i64> undef, i64 %{{.*}}, i32 0
1558   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 1
1559   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 2
1560   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3
1561   return _mm256_set_epi64x(A0, A1, A2, A3);
1562 }
1563 
test_mm256_set_m128(__m128 A,__m128 B)1564 __m256 test_mm256_set_m128(__m128 A, __m128 B) {
1565   // CHECK-LABEL: test_mm256_set_m128
1566   // 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>
1567   return _mm256_set_m128(A, B);
1568 }
1569 
test_mm256_set_m128d(__m128d A,__m128d B)1570 __m256d test_mm256_set_m128d(__m128d A, __m128d B) {
1571   // CHECK-LABEL: test_mm256_set_m128d
1572   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1573   return _mm256_set_m128d(A, B);
1574 }
1575 
test_mm256_set_m128i(__m128i A,__m128i B)1576 __m256i test_mm256_set_m128i(__m128i A, __m128i B) {
1577   // CHECK-LABEL: test_mm256_set_m128i
1578   // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1579   return _mm256_set_m128i(A, B);
1580 }
1581 
test_mm256_set_pd(double A0,double A1,double A2,double A3)1582 __m256d test_mm256_set_pd(double A0, double A1, double A2, double A3) {
1583   // CHECK-LABEL: test_mm256_set_pd
1584   // CHECK: insertelement <4 x double> undef, double %{{.*}}, i32 0
1585   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
1586   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
1587   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
1588   return _mm256_set_pd(A0, A1, A2, A3);
1589 }
1590 
test_mm256_set_ps(float A0,float A1,float A2,float A3,float A4,float A5,float A6,float A7)1591 __m256 test_mm256_set_ps(float A0, float A1, float A2, float A3, float A4, float A5, float A6, float A7) {
1592   // CHECK-LABEL: test_mm256_set_ps
1593   // CHECK: insertelement <8 x float> undef, float %{{.*}}, i32 0
1594   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
1595   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
1596   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
1597   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
1598   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
1599   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
1600   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
1601   return _mm256_set_ps(A0, A1, A2, A3, A4, A5, A6, A7);
1602 }
1603 
test_mm256_set1_epi8(char A)1604 __m256i test_mm256_set1_epi8(char A) {
1605   // CHECK-LABEL: test_mm256_set1_epi8
1606   // CHECK: insertelement <32 x i8> undef, i8 %{{.*}}, i32 0
1607   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 1
1608   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 2
1609   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 3
1610   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 4
1611   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 5
1612   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 6
1613   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 7
1614   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 8
1615   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 9
1616   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 10
1617   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 11
1618   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 12
1619   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 13
1620   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 14
1621   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 15
1622   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 16
1623   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 17
1624   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 18
1625   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 19
1626   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 20
1627   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 21
1628   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 22
1629   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 23
1630   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 24
1631   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 25
1632   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 26
1633   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 27
1634   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 28
1635   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 29
1636   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 30
1637   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31
1638   return _mm256_set1_epi8(A);
1639 }
1640 
test_mm256_set1_epi16(short A)1641 __m256i test_mm256_set1_epi16(short A) {
1642   // CHECK-LABEL: test_mm256_set1_epi16
1643   // CHECK: insertelement <16 x i16> undef, i16 %{{.*}}, i32 0
1644   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 1
1645   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 2
1646   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 3
1647   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 4
1648   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 5
1649   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 6
1650   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 7
1651   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 8
1652   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 9
1653   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 10
1654   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 11
1655   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 12
1656   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 13
1657   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 14
1658   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 15
1659   return _mm256_set1_epi16(A);
1660 }
1661 
test_mm256_set1_epi32(int A)1662 __m256i test_mm256_set1_epi32(int A) {
1663   // CHECK-LABEL: test_mm256_set1_epi32
1664   // CHECK: insertelement <8 x i32> undef, i32 %{{.*}}, i32 0
1665   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 1
1666   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 2
1667   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 3
1668   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 4
1669   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 5
1670   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 6
1671   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7
1672   return _mm256_set1_epi32(A);
1673 }
1674 
test_mm256_set1_epi64x(long long A)1675 __m256i test_mm256_set1_epi64x(long long A) {
1676   // CHECK-LABEL: test_mm256_set1_epi64x
1677   // CHECK: insertelement <4 x i64> undef, i64 %{{.*}}, i32 0
1678   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 1
1679   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 2
1680   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3
1681   return _mm256_set1_epi64x(A);
1682 }
1683 
test_mm256_set1_pd(double A)1684 __m256d test_mm256_set1_pd(double A) {
1685   // CHECK-LABEL: test_mm256_set1_pd
1686   // CHECK: insertelement <4 x double> undef, double %{{.*}}, i32 0
1687   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
1688   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
1689   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
1690   return _mm256_set1_pd(A);
1691 }
1692 
test_mm256_set1_ps(float A)1693 __m256 test_mm256_set1_ps(float A) {
1694   // CHECK-LABEL: test_mm256_set1_ps
1695   // CHECK: insertelement <8 x float> undef, float %{{.*}}, i32 0
1696   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
1697   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
1698   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
1699   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
1700   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
1701   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
1702   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
1703   return _mm256_set1_ps(A);
1704 }
1705 
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)1706 __m256i test_mm256_setr_epi8(char A0, char A1, char A2, char A3, char A4, char A5, char A6, char A7,
1707                              char A8, char A9, char A10, char A11, char A12, char A13, char A14, char A15,
1708                              char A16, char A17, char A18, char A19, char A20, char A21, char A22, char A23,
1709                              char A24, char A25, char A26, char A27, char A28, char A29, char A30, char A31) {
1710   // CHECK-LABEL: test_mm256_setr_epi8
1711   // CHECK: insertelement <32 x i8> undef, i8 %{{.*}}, i32 0
1712   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 1
1713   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 2
1714   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 3
1715   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 4
1716   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 5
1717   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 6
1718   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 7
1719   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 8
1720   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 9
1721   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 10
1722   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 11
1723   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 12
1724   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 13
1725   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 14
1726   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 15
1727   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 16
1728   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 17
1729   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 18
1730   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 19
1731   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 20
1732   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 21
1733   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 22
1734   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 23
1735   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 24
1736   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 25
1737   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 26
1738   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 27
1739   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 28
1740   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 29
1741   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 30
1742   // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31
1743   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);
1744 }
1745 
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)1746 __m256i test_mm256_setr_epi16(short A0, short A1, short A2, short A3, short A4, short A5, short A6, short A7,
1747                               short A8, short A9, short A10, short A11, short A12, short A13, short A14, short A15) {
1748   // CHECK-LABEL: test_mm256_setr_epi16
1749   // CHECK: insertelement <16 x i16> undef, i16 %{{.*}}, i32 0
1750   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 1
1751   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 2
1752   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 3
1753   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 4
1754   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 5
1755   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 6
1756   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 7
1757   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 8
1758   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 9
1759   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 10
1760   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 11
1761   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 12
1762   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 13
1763   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 14
1764   // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 15
1765   return _mm256_setr_epi16(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15);
1766 }
1767 
test_mm256_setr_epi32(int A0,int A1,int A2,int A3,int A4,int A5,int A6,int A7)1768 __m256i test_mm256_setr_epi32(int A0, int A1, int A2, int A3, int A4, int A5, int A6, int A7) {
1769   // CHECK-LABEL: test_mm256_setr_epi32
1770   // CHECK: insertelement <8 x i32> undef, i32 %{{.*}}, i32 0
1771   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 1
1772   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 2
1773   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 3
1774   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 4
1775   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 5
1776   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 6
1777   // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7
1778   return _mm256_setr_epi32(A0, A1, A2, A3, A4, A5, A6, A7);
1779 }
1780 
test_mm256_setr_epi64x(long long A0,long long A1,long long A2,long long A3)1781 __m256i test_mm256_setr_epi64x(long long A0, long long A1, long long A2, long long A3) {
1782   // CHECK-LABEL: test_mm256_setr_epi64x
1783   // CHECK: insertelement <4 x i64> undef, i64 %{{.*}}, i32 0
1784   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 1
1785   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 2
1786   // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3
1787   return _mm256_setr_epi64x(A0, A1, A2, A3);
1788 }
1789 
test_mm256_setr_m128(__m128 A,__m128 B)1790 __m256 test_mm256_setr_m128(__m128 A, __m128 B) {
1791   // CHECK-LABEL: test_mm256_setr_m128
1792   // 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>
1793   return _mm256_setr_m128(A, B);
1794 }
1795 
test_mm256_setr_m128d(__m128d A,__m128d B)1796 __m256d test_mm256_setr_m128d(__m128d A, __m128d B) {
1797   // CHECK-LABEL: test_mm256_setr_m128d
1798   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1799   return _mm256_setr_m128d(A, B);
1800 }
1801 
test_mm256_setr_m128i(__m128i A,__m128i B)1802 __m256i test_mm256_setr_m128i(__m128i A, __m128i B) {
1803   // CHECK-LABEL: test_mm256_setr_m128i
1804   // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1805   return _mm256_setr_m128i(A, B);
1806 }
1807 
test_mm256_setr_pd(double A0,double A1,double A2,double A3)1808 __m256d test_mm256_setr_pd(double A0, double A1, double A2, double A3) {
1809   // CHECK-LABEL: test_mm256_setr_pd
1810   // CHECK: insertelement <4 x double> undef, double %{{.*}}, i32 0
1811   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
1812   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
1813   // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
1814   return _mm256_setr_pd(A0, A1, A2, A3);
1815 }
1816 
test_mm256_setr_ps(float A0,float A1,float A2,float A3,float A4,float A5,float A6,float A7)1817 __m256 test_mm256_setr_ps(float A0, float A1, float A2, float A3, float A4, float A5, float A6, float A7) {
1818   // CHECK-LABEL: test_mm256_setr_ps
1819   // CHECK: insertelement <8 x float> undef, float %{{.*}}, i32 0
1820   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
1821   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
1822   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
1823   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
1824   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
1825   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
1826   // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
1827   return _mm256_setr_ps(A0, A1, A2, A3, A4, A5, A6, A7);
1828 }
1829 
test_mm256_setzero_pd()1830 __m256d test_mm256_setzero_pd() {
1831   // CHECK-LABEL: test_mm256_setzero_pd
1832   // CHECK: store <4 x double> zeroinitializer
1833   return _mm256_setzero_pd();
1834 }
1835 
test_mm256_setzero_ps()1836 __m256 test_mm256_setzero_ps() {
1837   // CHECK-LABEL: test_mm256_setzero_ps
1838   // CHECK: store <8 x float> zeroinitializer
1839   return _mm256_setzero_ps();
1840 }
1841 
test_mm256_setzero_si256()1842 __m256i test_mm256_setzero_si256() {
1843   // CHECK-LABEL: test_mm256_setzero_si256
1844   // CHECK: store <4 x i64> zeroinitializer
1845   return _mm256_setzero_si256();
1846 }
1847 
test_mm256_shuffle_pd(__m256d A,__m256d B)1848 __m256d test_mm256_shuffle_pd(__m256d A, __m256d B) {
1849   // CHECK-LABEL: test_mm256_shuffle_pd
1850   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1851   return _mm256_shuffle_pd(A, B, 0);
1852 }
1853 
test_mm256_shuffle_ps(__m256 A,__m256 B)1854 __m256 test_mm256_shuffle_ps(__m256 A, __m256 B) {
1855   // CHECK-LABEL: test_mm256_shuffle_ps
1856   // 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>
1857   return _mm256_shuffle_ps(A, B, 0);
1858 }
1859 
test_mm256_sqrt_pd(__m256d A)1860 __m256d test_mm256_sqrt_pd(__m256d A) {
1861   // CHECK-LABEL: test_mm256_sqrt_pd
1862   // CHECK: call <4 x double> @llvm.sqrt.v4f64(<4 x double> %{{.*}})
1863   return _mm256_sqrt_pd(A);
1864 }
1865 
test_mm256_sqrt_ps(__m256 A)1866 __m256 test_mm256_sqrt_ps(__m256 A) {
1867   // CHECK-LABEL: test_mm256_sqrt_ps
1868   // CHECK: call <8 x float> @llvm.sqrt.v8f32(<8 x float> %{{.*}})
1869   return _mm256_sqrt_ps(A);
1870 }
1871 
test_mm256_store_pd(double * A,__m256d B)1872 void test_mm256_store_pd(double* A, __m256d B) {
1873   // CHECK-LABEL: test_mm256_store_pd
1874   // CHECK: store <4 x double> %{{.*}}, <4 x double>* %{{.*}}, align 32
1875   _mm256_store_pd(A, B);
1876 }
1877 
test_mm256_store_ps(float * A,__m256 B)1878 void test_mm256_store_ps(float* A, __m256 B) {
1879   // CHECK-LABEL: test_mm256_store_ps
1880   // CHECK: store <8 x float> %{{.*}}, <8 x float>* %{{.*}}, align 32
1881   _mm256_store_ps(A, B);
1882 }
1883 
test_mm256_store_si256(__m256i * A,__m256i B)1884 void test_mm256_store_si256(__m256i* A, __m256i B) {
1885   // CHECK-LABEL: test_mm256_store_si256
1886   // CHECK: store <4 x i64> %{{.*}}, <4 x i64>* %{{.*}}, align 32
1887   _mm256_store_si256(A, B);
1888 }
1889 
test_mm256_storeu_pd(double * A,__m256d B)1890 void test_mm256_storeu_pd(double* A, __m256d B) {
1891   // CHECK-LABEL: test_mm256_storeu_pd
1892   // CHECK:   store <4 x double> %{{.*}}, <4 x double>* %{{.*}}, align 1{{$}}
1893   // CHECK-NEXT: ret void
1894   _mm256_storeu_pd(A, B);
1895 }
1896 
test_mm256_storeu_ps(float * A,__m256 B)1897 void test_mm256_storeu_ps(float* A, __m256 B) {
1898   // CHECK-LABEL: test_mm256_storeu_ps
1899   // CHECK: store <8 x float> %{{.*}}, <8 x float>* %{{.*}}, align 1{{$}}
1900   // CHECk-NEXT: ret void
1901   _mm256_storeu_ps(A, B);
1902 }
1903 
test_mm256_storeu_si256(__m256i * A,__m256i B)1904 void test_mm256_storeu_si256(__m256i* A, __m256i B) {
1905   // CHECK-LABEL: test_mm256_storeu_si256
1906   // CHECK: store <4 x i64> %{{.*}}, <4 x i64>* %{{.*}}, align 1{{$}}
1907   // CHECk-NEXT: ret void
1908   _mm256_storeu_si256(A, B);
1909 }
1910 
test_mm256_storeu2_m128(float * A,float * B,__m256 C)1911 void test_mm256_storeu2_m128(float* A, float* B, __m256 C) {
1912   // CHECK-LABEL: test_mm256_storeu2_m128
1913   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1914   // CHECK: store <4 x float> %{{.*}}, <4 x float>* %{{.*}}, align 1{{$}}
1915   // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
1916   // CHECK: store <4 x float> %{{.*}}, <4 x float>* %{{.*}}, align 1{{$}}
1917   _mm256_storeu2_m128(A, B, C);
1918 }
1919 
test_mm256_storeu2_m128d(double * A,double * B,__m256d C)1920 void test_mm256_storeu2_m128d(double* A, double* B, __m256d C) {
1921   // CHECK-LABEL: test_mm256_storeu2_m128d
1922   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <2 x i32> <i32 0, i32 1>
1923   // CHECK: store <2 x double> %{{.*}}, <2 x double>* %{{.*}}, align 1{{$}}
1924   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <2 x i32> <i32 2, i32 3>
1925   // CHECK: store <2 x double> %{{.*}}, <2 x double>* %{{.*}}, align 1{{$}}
1926   _mm256_storeu2_m128d(A, B, C);
1927 }
1928 
test_mm256_storeu2_m128i(__m128i * A,__m128i * B,__m256i C)1929 void test_mm256_storeu2_m128i(__m128i* A, __m128i* B, __m256i C) {
1930   // CHECK-LABEL: test_mm256_storeu2_m128i
1931   // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <2 x i32> <i32 0, i32 1>
1932   // CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
1933   // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
1934   // CHECK: store <2 x i64> %{{.*}}, <2 x i64>* %{{.*}}, align 1{{$}}
1935   _mm256_storeu2_m128i(A, B, C);
1936 }
1937 
test_mm256_stream_pd(double * A,__m256d B)1938 void test_mm256_stream_pd(double* A, __m256d B) {
1939   // CHECK-LABEL: test_mm256_stream_pd
1940   // CHECK: store <4 x double> %{{.*}}, <4 x double>* %{{.*}}, align 32, !nontemporal
1941   _mm256_stream_pd(A, B);
1942 }
1943 
test_mm256_stream_ps(float * A,__m256 B)1944 void test_mm256_stream_ps(float* A, __m256 B) {
1945   // CHECK-LABEL: test_mm256_stream_ps
1946   // CHECK: store <8 x float> %{{.*}}, <8 x float>* %{{.*}}, align 32, !nontemporal
1947   _mm256_stream_ps(A, B);
1948 }
1949 
test_mm256_stream_si256(__m256i * A,__m256i B)1950 void test_mm256_stream_si256(__m256i* A, __m256i B) {
1951   // CHECK-LABEL: test_mm256_stream_si256
1952   // CHECK: store <4 x i64> %{{.*}}, <4 x i64>* %{{.*}}, align 32, !nontemporal
1953   _mm256_stream_si256(A, B);
1954 }
1955 
test_mm256_sub_pd(__m256d A,__m256d B)1956 __m256d test_mm256_sub_pd(__m256d A, __m256d B) {
1957   // CHECK-LABEL: test_mm256_sub_pd
1958   // CHECK: fsub <4 x double>
1959   return _mm256_sub_pd(A, B);
1960 }
1961 
test_mm256_sub_ps(__m256 A,__m256 B)1962 __m256 test_mm256_sub_ps(__m256 A, __m256 B) {
1963   // CHECK-LABEL: test_mm256_sub_ps
1964   // CHECK: fsub <8 x float>
1965   return _mm256_sub_ps(A, B);
1966 }
1967 
test_mm_testc_pd(__m128d A,__m128d B)1968 int test_mm_testc_pd(__m128d A, __m128d B) {
1969   // CHECK-LABEL: test_mm_testc_pd
1970   // CHECK: call i32 @llvm.x86.avx.vtestc.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
1971   return _mm_testc_pd(A, B);
1972 }
1973 
test_mm256_testc_pd(__m256d A,__m256d B)1974 int test_mm256_testc_pd(__m256d A, __m256d B) {
1975   // CHECK-LABEL: test_mm256_testc_pd
1976   // CHECK: call i32 @llvm.x86.avx.vtestc.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1977   return _mm256_testc_pd(A, B);
1978 }
1979 
test_mm_testc_ps(__m128 A,__m128 B)1980 int test_mm_testc_ps(__m128 A, __m128 B) {
1981   // CHECK-LABEL: test_mm_testc_ps
1982   // CHECK: call i32 @llvm.x86.avx.vtestc.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}})
1983   return _mm_testc_ps(A, B);
1984 }
1985 
test_mm256_testc_ps(__m256 A,__m256 B)1986 int test_mm256_testc_ps(__m256 A, __m256 B) {
1987   // CHECK-LABEL: test_mm256_testc_ps
1988   // CHECK: call i32 @llvm.x86.avx.vtestc.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1989   return _mm256_testc_ps(A, B);
1990 }
1991 
test_mm256_testc_si256(__m256i A,__m256i B)1992 int test_mm256_testc_si256(__m256i A, __m256i B) {
1993   // CHECK-LABEL: test_mm256_testc_si256
1994   // CHECK: call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}})
1995   return _mm256_testc_si256(A, B);
1996 }
1997 
test_mm_testnzc_pd(__m128d A,__m128d B)1998 int test_mm_testnzc_pd(__m128d A, __m128d B) {
1999   // CHECK-LABEL: test_mm_testnzc_pd
2000   // CHECK: call i32 @llvm.x86.avx.vtestnzc.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
2001   return _mm_testnzc_pd(A, B);
2002 }
2003 
test_mm256_testnzc_pd(__m256d A,__m256d B)2004 int test_mm256_testnzc_pd(__m256d A, __m256d B) {
2005   // CHECK-LABEL: test_mm256_testnzc_pd
2006   // CHECK: call i32 @llvm.x86.avx.vtestnzc.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
2007   return _mm256_testnzc_pd(A, B);
2008 }
2009 
test_mm_testnzc_ps(__m128 A,__m128 B)2010 int test_mm_testnzc_ps(__m128 A, __m128 B) {
2011   // CHECK-LABEL: test_mm_testnzc_ps
2012   // CHECK: call i32 @llvm.x86.avx.vtestnzc.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}})
2013   return _mm_testnzc_ps(A, B);
2014 }
2015 
test_mm256_testnzc_ps(__m256 A,__m256 B)2016 int test_mm256_testnzc_ps(__m256 A, __m256 B) {
2017   // CHECK-LABEL: test_mm256_testnzc_ps
2018   // CHECK: call i32 @llvm.x86.avx.vtestnzc.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
2019   return _mm256_testnzc_ps(A, B);
2020 }
2021 
test_mm256_testnzc_si256(__m256i A,__m256i B)2022 int test_mm256_testnzc_si256(__m256i A, __m256i B) {
2023   // CHECK-LABEL: test_mm256_testnzc_si256
2024   // CHECK: call i32 @llvm.x86.avx.ptestnzc.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}})
2025   return _mm256_testnzc_si256(A, B);
2026 }
2027 
test_mm_testz_pd(__m128d A,__m128d B)2028 int test_mm_testz_pd(__m128d A, __m128d B) {
2029   // CHECK-LABEL: test_mm_testz_pd
2030   // CHECK: call i32 @llvm.x86.avx.vtestz.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
2031   return _mm_testz_pd(A, B);
2032 }
2033 
test_mm256_testz_pd(__m256d A,__m256d B)2034 int test_mm256_testz_pd(__m256d A, __m256d B) {
2035   // CHECK-LABEL: test_mm256_testz_pd
2036   // CHECK: call i32 @llvm.x86.avx.vtestz.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
2037   return _mm256_testz_pd(A, B);
2038 }
2039 
test_mm_testz_ps(__m128 A,__m128 B)2040 int test_mm_testz_ps(__m128 A, __m128 B) {
2041   // CHECK-LABEL: test_mm_testz_ps
2042   // CHECK: call i32 @llvm.x86.avx.vtestz.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}})
2043   return _mm_testz_ps(A, B);
2044 }
2045 
test_mm256_testz_ps(__m256 A,__m256 B)2046 int test_mm256_testz_ps(__m256 A, __m256 B) {
2047   // CHECK-LABEL: test_mm256_testz_ps
2048   // CHECK: call i32 @llvm.x86.avx.vtestz.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
2049   return _mm256_testz_ps(A, B);
2050 }
2051 
test_mm256_testz_si256(__m256i A,__m256i B)2052 int test_mm256_testz_si256(__m256i A, __m256i B) {
2053   // CHECK-LABEL: test_mm256_testz_si256
2054   // CHECK: call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}})
2055   return _mm256_testz_si256(A, B);
2056 }
2057 
test_mm256_undefined_ps()2058 __m256 test_mm256_undefined_ps() {
2059   // CHECK-LABEL: test_mm256_undefined_ps
2060   // CHECK: ret <8 x float> zeroinitializer
2061   return _mm256_undefined_ps();
2062 }
2063 
test_mm256_undefined_pd()2064 __m256d test_mm256_undefined_pd() {
2065   // CHECK-LABEL: test_mm256_undefined_pd
2066   // CHECK: ret <4 x double> zeroinitializer
2067   return _mm256_undefined_pd();
2068 }
2069 
test_mm256_undefined_si256()2070 __m256i test_mm256_undefined_si256() {
2071   // CHECK-LABEL: test_mm256_undefined_si256
2072   // CHECK: ret <4 x i64> zeroinitializer
2073   return _mm256_undefined_si256();
2074 }
2075 
test_mm256_unpackhi_pd(__m256d A,__m256d B)2076 __m256d test_mm256_unpackhi_pd(__m256d A, __m256d B) {
2077   // CHECK-LABEL: test_mm256_unpackhi_pd
2078   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2079   return _mm256_unpackhi_pd(A, B);
2080 }
2081 
test_mm256_unpackhi_ps(__m256 A,__m256 B)2082 __m256 test_mm256_unpackhi_ps(__m256 A, __m256 B) {
2083   // CHECK-LABEL: test_mm256_unpackhi_ps
2084   // 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>
2085   return _mm256_unpackhi_ps(A, B);
2086 }
2087 
test_mm256_unpacklo_pd(__m256d A,__m256d B)2088 __m256d test_mm256_unpacklo_pd(__m256d A, __m256d B) {
2089   // CHECK-LABEL: test_mm256_unpacklo_pd
2090   // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2091   return _mm256_unpacklo_pd(A, B);
2092 }
2093 
test_mm256_unpacklo_ps(__m256 A,__m256 B)2094 __m256 test_mm256_unpacklo_ps(__m256 A, __m256 B) {
2095   // CHECK-LABEL: test_mm256_unpacklo_ps
2096   // 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>
2097   return _mm256_unpacklo_ps(A, B);
2098 }
2099 
test_mm256_xor_pd(__m256d A,__m256d B)2100 __m256d test_mm256_xor_pd(__m256d A, __m256d B) {
2101   // CHECK-LABEL: test_mm256_xor_pd
2102   // CHECK: xor <4 x i64>
2103   return _mm256_xor_pd(A, B);
2104 }
2105 
test_mm256_xor_ps(__m256 A,__m256 B)2106 __m256 test_mm256_xor_ps(__m256 A, __m256 B) {
2107   // CHECK-LABEL: test_mm256_xor_ps
2108   // CHECK: xor <8 x i32>
2109   return _mm256_xor_ps(A, B);
2110 }
2111 
test_mm256_zeroall()2112 void test_mm256_zeroall() {
2113   // CHECK-LABEL: test_mm256_zeroall
2114   // CHECK: call void @llvm.x86.avx.vzeroall()
2115   return _mm256_zeroall();
2116 }
2117 
test_mm256_zeroupper()2118 void test_mm256_zeroupper() {
2119   // CHECK-LABEL: test_mm256_zeroupper
2120   // CHECK: call void @llvm.x86.avx.vzeroupper()
2121   return _mm256_zeroupper();
2122 }
2123 
test_mm256_zextpd128_pd256(__m128d A)2124 __m256d test_mm256_zextpd128_pd256(__m128d A) {
2125   // CHECK-LABEL: test_mm256_zextpd128_pd256
2126   // CHECK: store <2 x double> zeroinitializer
2127   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
2128   return _mm256_zextpd128_pd256(A);
2129 }
2130 
test_mm256_zextps128_ps256(__m128 A)2131 __m256 test_mm256_zextps128_ps256(__m128 A) {
2132   // CHECK-LABEL: test_mm256_zextps128_ps256
2133   // CHECK: store <4 x float> zeroinitializer
2134   // 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>
2135   return _mm256_zextps128_ps256(A);
2136 }
2137 
test_mm256_zextsi128_si256(__m128i A)2138 __m256i test_mm256_zextsi128_si256(__m128i A) {
2139   // CHECK-LABEL: test_mm256_zextsi128_si256
2140   // CHECK: store <2 x i64> zeroinitializer
2141   // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
2142   return _mm256_zextsi128_si256(A);
2143 }
2144 
test_mm256_cvtsd_f64(__m256d __a)2145 double test_mm256_cvtsd_f64(__m256d __a)
2146 {
2147   // CHECK-LABEL: test_mm256_cvtsd_f64
2148   // CHECK: extractelement <4 x double> %{{.*}}, i32 0
2149   return _mm256_cvtsd_f64(__a);
2150 }
2151 
test_mm256_cvtsi256_si32(__m256i __a)2152 int test_mm256_cvtsi256_si32(__m256i __a)
2153 {
2154   // CHECK-LABEL: test_mm256_cvtsi256_si32
2155   // CHECK: extractelement <8 x i32> %{{.*}}, i32 0
2156   return _mm256_cvtsi256_si32(__a);
2157 }
2158 
test_mm256_cvtss_f32(__m256 __a)2159 float test_mm256_cvtss_f32(__m256 __a)
2160 {
2161   // CHECK-LABEL: test_mm256_cvtss_f32
2162   // CHECK: extractelement <8 x float> %{{.*}}, i32 0
2163   return _mm256_cvtss_f32(__a);
2164 }
2165