Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / CodeGen / X86 / avx-builtins.c
blob9178ecaf3f8fe43e9a4826425b18675b50f0364f
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 --check-prefixes=CHECK,X64
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 --check-prefixes=CHECK,X64
3 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X86
4 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X86
5 // 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 --check-prefixes=CHECK,X64
8 #include <immintrin.h>
10 // NOTE: This should match the tests in llvm/test/CodeGen/X86/sse-intrinsics-fast-isel.ll
12 __m256d test_mm256_add_pd(__m256d A, __m256d B) {
13 // CHECK-LABEL: test_mm256_add_pd
14 // CHECK: fadd <4 x double>
15 return _mm256_add_pd(A, B);
18 __m256 test_mm256_add_ps(__m256 A, __m256 B) {
19 // CHECK-LABEL: test_mm256_add_ps
20 // CHECK: fadd <8 x float>
21 return _mm256_add_ps(A, B);
24 __m256d test_mm256_addsub_pd(__m256d A, __m256d B) {
25 // CHECK-LABEL: test_mm256_addsub_pd
26 // CHECK: call <4 x double> @llvm.x86.avx.addsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
27 return _mm256_addsub_pd(A, B);
30 __m256 test_mm256_addsub_ps(__m256 A, __m256 B) {
31 // CHECK-LABEL: test_mm256_addsub_ps
32 // CHECK: call <8 x float> @llvm.x86.avx.addsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
33 return _mm256_addsub_ps(A, B);
36 __m256d test_mm256_and_pd(__m256d A, __m256d B) {
37 // CHECK-LABEL: test_mm256_and_pd
38 // CHECK: and <4 x i64>
39 return _mm256_and_pd(A, B);
42 __m256 test_mm256_and_ps(__m256 A, __m256 B) {
43 // CHECK-LABEL: test_mm256_and_ps
44 // CHECK: and <8 x i32>
45 return _mm256_and_ps(A, B);
48 __m256d test_mm256_andnot_pd(__m256d A, __m256d B) {
49 // CHECK-LABEL: test_mm256_andnot_pd
50 // CHECK: xor <4 x i64> %{{.*}}, <i64 -1, i64 -1, i64 -1, i64 -1>
51 // CHECK: and <4 x i64>
52 return _mm256_andnot_pd(A, B);
55 __m256 test_mm256_andnot_ps(__m256 A, __m256 B) {
56 // CHECK-LABEL: test_mm256_andnot_ps
57 // CHECK: xor <8 x i32> %{{.*}}, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
58 // CHECK: and <8 x i32>
59 return _mm256_andnot_ps(A, B);
62 __m256d test_mm256_blend_pd(__m256d A, __m256d B) {
63 // CHECK-LABEL: test_mm256_blend_pd
64 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
65 return _mm256_blend_pd(A, B, 0x05);
68 __m256 test_mm256_blend_ps(__m256 A, __m256 B) {
69 // CHECK-LABEL: test_mm256_blend_ps
70 // 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>
71 return _mm256_blend_ps(A, B, 0x35);
74 __m256d test_mm256_blendv_pd(__m256d V1, __m256d V2, __m256d V3) {
75 // CHECK-LABEL: test_mm256_blendv_pd
76 // CHECK: call <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})
77 return _mm256_blendv_pd(V1, V2, V3);
80 __m256 test_mm256_blendv_ps(__m256 V1, __m256 V2, __m256 V3) {
81 // CHECK-LABEL: test_mm256_blendv_ps
82 // CHECK: call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})
83 return _mm256_blendv_ps(V1, V2, V3);
86 __m256d test_mm256_broadcast_pd(__m128d* A) {
87 // CHECK-LABEL: test_mm256_broadcast_pd
88 // CHECK: load <2 x double>, ptr %{{.*}}, align 1{{$}}
89 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
90 return _mm256_broadcast_pd(A);
93 __m256 test_mm256_broadcast_ps(__m128* A) {
94 // CHECK-LABEL: test_mm256_broadcast_ps
95 // CHECK: load <4 x float>, ptr %{{.*}}, align 1{{$}}
96 // 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>
97 return _mm256_broadcast_ps(A);
100 __m256d test_mm256_broadcast_sd(double* A) {
101 // CHECK-LABEL: test_mm256_broadcast_sd
102 // CHECK: load double, ptr %{{.*}}, align 1{{$}}
103 // CHECK: insertelement <4 x double> undef, double %{{.*}}, i32 0
104 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
105 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
106 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
107 return _mm256_broadcast_sd(A);
110 __m128 test_mm_broadcast_ss(float* A) {
111 // CHECK-LABEL: test_mm_broadcast_ss
112 // CHECK: load float, ptr %{{.*}}, align 1{{$}}
113 // CHECK: insertelement <4 x float> undef, float %{{.*}}, i32 0
114 // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 1
115 // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 2
116 // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 3
117 return _mm_broadcast_ss(A);
120 __m256 test_mm256_broadcast_ss(float* A) {
121 // CHECK-LABEL: test_mm256_broadcast_ss
122 // CHECK: load float, ptr %{{.*}}, align 1{{$}}
123 // CHECK: insertelement <8 x float> undef, float %{{.*}}, i32 0
124 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
125 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
126 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
127 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
128 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
129 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
130 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
131 return _mm256_broadcast_ss(A);
134 __m256 test_mm256_castpd_ps(__m256d A) {
135 // CHECK-LABEL: test_mm256_castpd_ps
136 return _mm256_castpd_ps(A);
139 __m256i test_mm256_castpd_si256(__m256d A) {
140 // CHECK-LABEL: test_mm256_castpd_si256
141 return _mm256_castpd_si256(A);
144 __m256d test_mm256_castpd128_pd256(__m128d A) {
145 // CHECK-LABEL: test_mm256_castpd128_pd256
146 // CHECK: [[A:%.*]] = freeze <2 x double> poison
147 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> [[A]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
148 return _mm256_castpd128_pd256(A);
151 __m128d test_mm256_castpd256_pd128(__m256d A) {
152 // CHECK-LABEL: test_mm256_castpd256_pd128
153 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <2 x i32> <i32 0, i32 1>
154 return _mm256_castpd256_pd128(A);
157 __m256d test_mm256_castps_pd(__m256 A) {
158 // CHECK-LABEL: test_mm256_castps_pd
159 return _mm256_castps_pd(A);
162 __m256i test_mm256_castps_si256(__m256 A) {
163 // CHECK-LABEL: test_mm256_castps_si256
164 return _mm256_castps_si256(A);
167 __m256 test_mm256_castps128_ps256(__m128 A) {
168 // CHECK-LABEL: test_mm256_castps128_ps256
169 // CHECK: [[A:%.*]] = freeze <4 x float> poison
170 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> [[A]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
171 return _mm256_castps128_ps256(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);
180 __m256i test_mm256_castsi128_si256(__m128i A) {
181 // CHECK-LABEL: test_mm256_castsi128_si256
182 // CHECK: [[A:%.*]] = freeze <2 x i64> poison
183 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> [[A]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
184 return _mm256_castsi128_si256(A);
187 __m256d test_mm256_castsi256_pd(__m256i A) {
188 // CHECK-LABEL: test_mm256_castsi256_pd
189 return _mm256_castsi256_pd(A);
192 __m256 test_mm256_castsi256_ps(__m256i A) {
193 // CHECK-LABEL: test_mm256_castsi256_ps
194 return _mm256_castsi256_ps(A);
197 __m128i test_mm256_castsi256_si128(__m256i A) {
198 // CHECK-LABEL: test_mm256_castsi256_si128
199 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <2 x i32> <i32 0, i32 1>
200 return _mm256_castsi256_si128(A);
203 __m256d test_mm256_ceil_pd(__m256d x) {
204 // CHECK-LABEL: test_mm256_ceil_pd
205 // CHECK: call <4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %{{.*}}, i32 2)
206 return _mm256_ceil_pd(x);
209 __m256 test_mm_ceil_ps(__m256 x) {
210 // CHECK-LABEL: test_mm_ceil_ps
211 // CHECK: call <8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %{{.*}}, i32 2)
212 return _mm256_ceil_ps(x);
215 __m256d test_mm256_cmp_pd_eq_oq(__m256d a, __m256d b) {
216 // CHECK-LABEL: test_mm256_cmp_pd_eq_oq
217 // CHECK: fcmp oeq <4 x double> %{{.*}}, %{{.*}}
218 return _mm256_cmp_pd(a, b, _CMP_EQ_OQ);
221 __m256d test_mm256_cmp_pd_lt_os(__m256d a, __m256d b) {
222 // CHECK-LABEL: test_mm256_cmp_pd_lt_os
223 // CHECK: fcmp olt <4 x double> %{{.*}}, %{{.*}}
224 return _mm256_cmp_pd(a, b, _CMP_LT_OS);
227 __m256d test_mm256_cmp_pd_le_os(__m256d a, __m256d b) {
228 // CHECK-LABEL: test_mm256_cmp_pd_le_os
229 // CHECK: fcmp ole <4 x double> %{{.*}}, %{{.*}}
230 return _mm256_cmp_pd(a, b, _CMP_LE_OS);
233 __m256d test_mm256_cmp_pd_unord_q(__m256d a, __m256d b) {
234 // CHECK-LABEL: test_mm256_cmp_pd_unord_q
235 // CHECK: fcmp uno <4 x double> %{{.*}}, %{{.*}}
236 return _mm256_cmp_pd(a, b, _CMP_UNORD_Q);
239 __m256d test_mm256_cmp_pd_neq_uq(__m256d a, __m256d b) {
240 // CHECK-LABEL: test_mm256_cmp_pd_neq_uq
241 // CHECK: fcmp une <4 x double> %{{.*}}, %{{.*}}
242 return _mm256_cmp_pd(a, b, _CMP_NEQ_UQ);
245 __m256d test_mm256_cmp_pd_nlt_us(__m256d a, __m256d b) {
246 // CHECK-LABEL: test_mm256_cmp_pd_nlt_us
247 // CHECK: fcmp uge <4 x double> %{{.*}}, %{{.*}}
248 return _mm256_cmp_pd(a, b, _CMP_NLT_US);
251 __m256d test_mm256_cmp_pd_nle_us(__m256d a, __m256d b) {
252 // CHECK-LABEL: test_mm256_cmp_pd_nle_us
253 // CHECK: fcmp ugt <4 x double> %{{.*}}, %{{.*}}
254 return _mm256_cmp_pd(a, b, _CMP_NLE_US);
257 __m256d test_mm256_cmp_pd_ord_q(__m256d a, __m256d b) {
258 // CHECK-LABEL: test_mm256_cmp_pd_ord_q
259 // CHECK: fcmp ord <4 x double> %{{.*}}, %{{.*}}
260 return _mm256_cmp_pd(a, b, _CMP_ORD_Q);
263 __m256d test_mm256_cmp_pd_eq_uq(__m256d a, __m256d b) {
264 // CHECK-LABEL: test_mm256_cmp_pd_eq_uq
265 // CHECK: fcmp ueq <4 x double> %{{.*}}, %{{.*}}
266 return _mm256_cmp_pd(a, b, _CMP_EQ_UQ);
269 __m256d test_mm256_cmp_pd_nge_us(__m256d a, __m256d b) {
270 // CHECK-LABEL: test_mm256_cmp_pd_nge_us
271 // CHECK: fcmp ult <4 x double> %{{.*}}, %{{.*}}
272 return _mm256_cmp_pd(a, b, _CMP_NGE_US);
275 __m256d test_mm256_cmp_pd_ngt_us(__m256d a, __m256d b) {
276 // CHECK-LABEL: test_mm256_cmp_pd_ngt_us
277 // CHECK: fcmp ule <4 x double> %{{.*}}, %{{.*}}
278 return _mm256_cmp_pd(a, b, _CMP_NGT_US);
281 __m256d test_mm256_cmp_pd_false_oq(__m256d a, __m256d b) {
282 // CHECK-LABEL: test_mm256_cmp_pd_false_oq
283 // CHECK: fcmp false <4 x double> %{{.*}}, %{{.*}}
284 return _mm256_cmp_pd(a, b, _CMP_FALSE_OQ);
287 __m256d test_mm256_cmp_pd_neq_oq(__m256d a, __m256d b) {
288 // CHECK-LABEL: test_mm256_cmp_pd_neq_oq
289 // CHECK: fcmp one <4 x double> %{{.*}}, %{{.*}}
290 return _mm256_cmp_pd(a, b, _CMP_NEQ_OQ);
293 __m256d test_mm256_cmp_pd_ge_os(__m256d a, __m256d b) {
294 // CHECK-LABEL: test_mm256_cmp_pd_ge_os
295 // CHECK: fcmp oge <4 x double> %{{.*}}, %{{.*}}
296 return _mm256_cmp_pd(a, b, _CMP_GE_OS);
299 __m256d test_mm256_cmp_pd_gt_os(__m256d a, __m256d b) {
300 // CHECK-LABEL: test_mm256_cmp_pd_gt_os
301 // CHECK: fcmp ogt <4 x double> %{{.*}}, %{{.*}}
302 return _mm256_cmp_pd(a, b, _CMP_GT_OS);
305 __m256d test_mm256_cmp_pd_true_uq(__m256d a, __m256d b) {
306 // CHECK-LABEL: test_mm256_cmp_pd_true_uq
307 // CHECK: fcmp true <4 x double> %{{.*}}, %{{.*}}
308 return _mm256_cmp_pd(a, b, _CMP_TRUE_UQ);
311 __m256d test_mm256_cmp_pd_eq_os(__m256d a, __m256d b) {
312 // CHECK-LABEL: test_mm256_cmp_pd_eq_os
313 // CHECK: fcmp oeq <4 x double> %{{.*}}, %{{.*}}
314 return _mm256_cmp_pd(a, b, _CMP_EQ_OS);
317 __m256d test_mm256_cmp_pd_lt_oq(__m256d a, __m256d b) {
318 // CHECK-LABEL: test_mm256_cmp_pd_lt_oq
319 // CHECK: fcmp olt <4 x double> %{{.*}}, %{{.*}}
320 return _mm256_cmp_pd(a, b, _CMP_LT_OQ);
323 __m256d test_mm256_cmp_pd_le_oq(__m256d a, __m256d b) {
324 // CHECK-LABEL: test_mm256_cmp_pd_le_oq
325 // CHECK: fcmp ole <4 x double> %{{.*}}, %{{.*}}
326 return _mm256_cmp_pd(a, b, _CMP_LE_OQ);
329 __m256d test_mm256_cmp_pd_unord_s(__m256d a, __m256d b) {
330 // CHECK-LABEL: test_mm256_cmp_pd_unord_s
331 // CHECK: fcmp uno <4 x double> %{{.*}}, %{{.*}}
332 return _mm256_cmp_pd(a, b, _CMP_UNORD_S);
335 __m256d test_mm256_cmp_pd_neq_us(__m256d a, __m256d b) {
336 // CHECK-LABEL: test_mm256_cmp_pd_neq_us
337 // CHECK: fcmp une <4 x double> %{{.*}}, %{{.*}}
338 return _mm256_cmp_pd(a, b, _CMP_NEQ_US);
341 __m256d test_mm256_cmp_pd_nlt_uq(__m256d a, __m256d b) {
342 // CHECK-LABEL: test_mm256_cmp_pd_nlt_uq
343 // CHECK: fcmp uge <4 x double> %{{.*}}, %{{.*}}
344 return _mm256_cmp_pd(a, b, _CMP_NLT_UQ);
347 __m256d test_mm256_cmp_pd_nle_uq(__m256d a, __m256d b) {
348 // CHECK-LABEL: test_mm256_cmp_pd_nle_uq
349 // CHECK: fcmp ugt <4 x double> %{{.*}}, %{{.*}}
350 return _mm256_cmp_pd(a, b, _CMP_NLE_UQ);
353 __m256d test_mm256_cmp_pd_ord_s(__m256d a, __m256d b) {
354 // CHECK-LABEL: test_mm256_cmp_pd_ord_s
355 // CHECK: fcmp ord <4 x double> %{{.*}}, %{{.*}}
356 return _mm256_cmp_pd(a, b, _CMP_ORD_S);
359 __m256d test_mm256_cmp_pd_eq_us(__m256d a, __m256d b) {
360 // CHECK-LABEL: test_mm256_cmp_pd_eq_us
361 // CHECK: fcmp ueq <4 x double> %{{.*}}, %{{.*}}
362 return _mm256_cmp_pd(a, b, _CMP_EQ_US);
365 __m256d test_mm256_cmp_pd_nge_uq(__m256d a, __m256d b) {
366 // CHECK-LABEL: test_mm256_cmp_pd_nge_uq
367 // CHECK: fcmp ult <4 x double> %{{.*}}, %{{.*}}
368 return _mm256_cmp_pd(a, b, _CMP_NGE_UQ);
371 __m256d test_mm256_cmp_pd_ngt_uq(__m256d a, __m256d b) {
372 // CHECK-LABEL: test_mm256_cmp_pd_ngt_uq
373 // CHECK: fcmp ule <4 x double> %{{.*}}, %{{.*}}
374 return _mm256_cmp_pd(a, b, _CMP_NGT_UQ);
377 __m256d test_mm256_cmp_pd_false_os(__m256d a, __m256d b) {
378 // CHECK-LABEL: test_mm256_cmp_pd_false_os
379 // CHECK: fcmp false <4 x double> %{{.*}}, %{{.*}}
380 return _mm256_cmp_pd(a, b, _CMP_FALSE_OS);
383 __m256d test_mm256_cmp_pd_neq_os(__m256d a, __m256d b) {
384 // CHECK-LABEL: test_mm256_cmp_pd_neq_os
385 // CHECK: fcmp one <4 x double> %{{.*}}, %{{.*}}
386 return _mm256_cmp_pd(a, b, _CMP_NEQ_OS);
389 __m256d test_mm256_cmp_pd_ge_oq(__m256d a, __m256d b) {
390 // CHECK-LABEL: test_mm256_cmp_pd_ge_oq
391 // CHECK: fcmp oge <4 x double> %{{.*}}, %{{.*}}
392 return _mm256_cmp_pd(a, b, _CMP_GE_OQ);
395 __m256d test_mm256_cmp_pd_gt_oq(__m256d a, __m256d b) {
396 // CHECK-LABEL: test_mm256_cmp_pd_gt_oq
397 // CHECK: fcmp ogt <4 x double> %{{.*}}, %{{.*}}
398 return _mm256_cmp_pd(a, b, _CMP_GT_OQ);
401 __m256d test_mm256_cmp_pd_true_us(__m256d a, __m256d b) {
402 // CHECK-LABEL: test_mm256_cmp_pd_true_us
403 // CHECK: fcmp true <4 x double> %{{.*}}, %{{.*}}
404 return _mm256_cmp_pd(a, b, _CMP_TRUE_US);
407 __m256 test_mm256_cmp_ps_eq_oq(__m256 a, __m256 b) {
408 // CHECK-LABEL: test_mm256_cmp_ps_eq_oq
409 // CHECK: fcmp oeq <8 x float> %{{.*}}, %{{.*}}
410 return _mm256_cmp_ps(a, b, _CMP_EQ_OQ);
413 __m256 test_mm256_cmp_ps_lt_os(__m256 a, __m256 b) {
414 // CHECK-LABEL: test_mm256_cmp_ps_lt_os
415 // CHECK: fcmp olt <8 x float> %{{.*}}, %{{.*}}
416 return _mm256_cmp_ps(a, b, _CMP_LT_OS);
419 __m256 test_mm256_cmp_ps_le_os(__m256 a, __m256 b) {
420 // CHECK-LABEL: test_mm256_cmp_ps_le_os
421 // CHECK: fcmp ole <8 x float> %{{.*}}, %{{.*}}
422 return _mm256_cmp_ps(a, b, _CMP_LE_OS);
425 __m256 test_mm256_cmp_ps_unord_q(__m256 a, __m256 b) {
426 // CHECK-LABEL: test_mm256_cmp_ps_unord_q
427 // CHECK: fcmp uno <8 x float> %{{.*}}, %{{.*}}
428 return _mm256_cmp_ps(a, b, _CMP_UNORD_Q);
431 __m256 test_mm256_cmp_ps_neq_uq(__m256 a, __m256 b) {
432 // CHECK-LABEL: test_mm256_cmp_ps_neq_uq
433 // CHECK: fcmp une <8 x float> %{{.*}}, %{{.*}}
434 return _mm256_cmp_ps(a, b, _CMP_NEQ_UQ);
437 __m256 test_mm256_cmp_ps_nlt_us(__m256 a, __m256 b) {
438 // CHECK-LABEL: test_mm256_cmp_ps_nlt_us
439 // CHECK: fcmp uge <8 x float> %{{.*}}, %{{.*}}
440 return _mm256_cmp_ps(a, b, _CMP_NLT_US);
443 __m256 test_mm256_cmp_ps_nle_us(__m256 a, __m256 b) {
444 // CHECK-LABEL: test_mm256_cmp_ps_nle_us
445 // CHECK: fcmp ugt <8 x float> %{{.*}}, %{{.*}}
446 return _mm256_cmp_ps(a, b, _CMP_NLE_US);
449 __m256 test_mm256_cmp_ps_ord_q(__m256 a, __m256 b) {
450 // CHECK-LABEL: test_mm256_cmp_ps_ord_q
451 // CHECK: fcmp ord <8 x float> %{{.*}}, %{{.*}}
452 return _mm256_cmp_ps(a, b, _CMP_ORD_Q);
455 __m256 test_mm256_cmp_ps_eq_uq(__m256 a, __m256 b) {
456 // CHECK-LABEL: test_mm256_cmp_ps_eq_uq
457 // CHECK: fcmp ueq <8 x float> %{{.*}}, %{{.*}}
458 return _mm256_cmp_ps(a, b, _CMP_EQ_UQ);
461 __m256 test_mm256_cmp_ps_nge_us(__m256 a, __m256 b) {
462 // CHECK-LABEL: test_mm256_cmp_ps_nge_us
463 // CHECK: fcmp ult <8 x float> %{{.*}}, %{{.*}}
464 return _mm256_cmp_ps(a, b, _CMP_NGE_US);
467 __m256 test_mm256_cmp_ps_ngt_us(__m256 a, __m256 b) {
468 // CHECK-LABEL: test_mm256_cmp_ps_ngt_us
469 // CHECK: fcmp ule <8 x float> %{{.*}}, %{{.*}}
470 return _mm256_cmp_ps(a, b, _CMP_NGT_US);
473 __m256 test_mm256_cmp_ps_false_oq(__m256 a, __m256 b) {
474 // CHECK-LABEL: test_mm256_cmp_ps_false_oq
475 // CHECK: fcmp false <8 x float> %{{.*}}, %{{.*}}
476 return _mm256_cmp_ps(a, b, _CMP_FALSE_OQ);
479 __m256 test_mm256_cmp_ps_neq_oq(__m256 a, __m256 b) {
480 // CHECK-LABEL: test_mm256_cmp_ps_neq_oq
481 // CHECK: fcmp one <8 x float> %{{.*}}, %{{.*}}
482 return _mm256_cmp_ps(a, b, _CMP_NEQ_OQ);
485 __m256 test_mm256_cmp_ps_ge_os(__m256 a, __m256 b) {
486 // CHECK-LABEL: test_mm256_cmp_ps_ge_os
487 // CHECK: fcmp oge <8 x float> %{{.*}}, %{{.*}}
488 return _mm256_cmp_ps(a, b, _CMP_GE_OS);
491 __m256 test_mm256_cmp_ps_gt_os(__m256 a, __m256 b) {
492 // CHECK-LABEL: test_mm256_cmp_ps_gt_os
493 // CHECK: fcmp ogt <8 x float> %{{.*}}, %{{.*}}
494 return _mm256_cmp_ps(a, b, _CMP_GT_OS);
497 __m256 test_mm256_cmp_ps_true_uq(__m256 a, __m256 b) {
498 // CHECK-LABEL: test_mm256_cmp_ps_true_uq
499 // CHECK: fcmp true <8 x float> %{{.*}}, %{{.*}}
500 return _mm256_cmp_ps(a, b, _CMP_TRUE_UQ);
503 __m256 test_mm256_cmp_ps_eq_os(__m256 a, __m256 b) {
504 // CHECK-LABEL: test_mm256_cmp_ps_eq_os
505 // CHECK: fcmp oeq <8 x float> %{{.*}}, %{{.*}}
506 return _mm256_cmp_ps(a, b, _CMP_EQ_OS);
509 __m256 test_mm256_cmp_ps_lt_oq(__m256 a, __m256 b) {
510 // CHECK-LABEL: test_mm256_cmp_ps_lt_oq
511 // CHECK: fcmp olt <8 x float> %{{.*}}, %{{.*}}
512 return _mm256_cmp_ps(a, b, _CMP_LT_OQ);
515 __m256 test_mm256_cmp_ps_le_oq(__m256 a, __m256 b) {
516 // CHECK-LABEL: test_mm256_cmp_ps_le_oq
517 // CHECK: fcmp ole <8 x float> %{{.*}}, %{{.*}}
518 return _mm256_cmp_ps(a, b, _CMP_LE_OQ);
521 __m256 test_mm256_cmp_ps_unord_s(__m256 a, __m256 b) {
522 // CHECK-LABEL: test_mm256_cmp_ps_unord_s
523 // CHECK: fcmp uno <8 x float> %{{.*}}, %{{.*}}
524 return _mm256_cmp_ps(a, b, _CMP_UNORD_S);
527 __m256 test_mm256_cmp_ps_neq_us(__m256 a, __m256 b) {
528 // CHECK-LABEL: test_mm256_cmp_ps_neq_us
529 // CHECK: fcmp une <8 x float> %{{.*}}, %{{.*}}
530 return _mm256_cmp_ps(a, b, _CMP_NEQ_US);
533 __m256 test_mm256_cmp_ps_nlt_uq(__m256 a, __m256 b) {
534 // CHECK-LABEL: test_mm256_cmp_ps_nlt_uq
535 // CHECK: fcmp uge <8 x float> %{{.*}}, %{{.*}}
536 return _mm256_cmp_ps(a, b, _CMP_NLT_UQ);
539 __m256 test_mm256_cmp_ps_nle_uq(__m256 a, __m256 b) {
540 // CHECK-LABEL: test_mm256_cmp_ps_nle_uq
541 // CHECK: fcmp ugt <8 x float> %{{.*}}, %{{.*}}
542 return _mm256_cmp_ps(a, b, _CMP_NLE_UQ);
545 __m256 test_mm256_cmp_ps_ord_s(__m256 a, __m256 b) {
546 // CHECK-LABEL: test_mm256_cmp_ps_ord_s
547 // CHECK: fcmp ord <8 x float> %{{.*}}, %{{.*}}
548 return _mm256_cmp_ps(a, b, _CMP_ORD_S);
551 __m256 test_mm256_cmp_ps_eq_us(__m256 a, __m256 b) {
552 // CHECK-LABEL: test_mm256_cmp_ps_eq_us
553 // CHECK: fcmp ueq <8 x float> %{{.*}}, %{{.*}}
554 return _mm256_cmp_ps(a, b, _CMP_EQ_US);
557 __m256 test_mm256_cmp_ps_nge_uq(__m256 a, __m256 b) {
558 // CHECK-LABEL: test_mm256_cmp_ps_nge_uq
559 // CHECK: fcmp ult <8 x float> %{{.*}}, %{{.*}}
560 return _mm256_cmp_ps(a, b, _CMP_NGE_UQ);
563 __m256 test_mm256_cmp_ps_ngt_uq(__m256 a, __m256 b) {
564 // CHECK-LABEL: test_mm256_cmp_ps_ngt_uq
565 // CHECK: fcmp ule <8 x float> %{{.*}}, %{{.*}}
566 return _mm256_cmp_ps(a, b, _CMP_NGT_UQ);
569 __m256 test_mm256_cmp_ps_false_os(__m256 a, __m256 b) {
570 // CHECK-LABEL: test_mm256_cmp_ps_false_os
571 // CHECK: fcmp false <8 x float> %{{.*}}, %{{.*}}
572 return _mm256_cmp_ps(a, b, _CMP_FALSE_OS);
575 __m256 test_mm256_cmp_ps_neq_os(__m256 a, __m256 b) {
576 // CHECK-LABEL: test_mm256_cmp_ps_neq_os
577 // CHECK: fcmp one <8 x float> %{{.*}}, %{{.*}}
578 return _mm256_cmp_ps(a, b, _CMP_NEQ_OS);
581 __m256 test_mm256_cmp_ps_ge_oq(__m256 a, __m256 b) {
582 // CHECK-LABEL: test_mm256_cmp_ps_ge_oq
583 // CHECK: fcmp oge <8 x float> %{{.*}}, %{{.*}}
584 return _mm256_cmp_ps(a, b, _CMP_GE_OQ);
587 __m256 test_mm256_cmp_ps_gt_oq(__m256 a, __m256 b) {
588 // CHECK-LABEL: test_mm256_cmp_ps_gt_oq
589 // CHECK: fcmp ogt <8 x float> %{{.*}}, %{{.*}}
590 return _mm256_cmp_ps(a, b, _CMP_GT_OQ);
593 __m256 test_mm256_cmp_ps_true_us(__m256 a, __m256 b) {
594 // CHECK-LABEL: test_mm256_cmp_ps_true_us
595 // CHECK: fcmp true <8 x float> %{{.*}}, %{{.*}}
596 return _mm256_cmp_ps(a, b, _CMP_TRUE_US);
599 __m128d test_mm_cmp_pd_eq_oq(__m128d a, __m128d b) {
600 // CHECK-LABEL: test_mm_cmp_pd_eq_oq
601 // CHECK: fcmp oeq <2 x double> %{{.*}}, %{{.*}}
602 return _mm_cmp_pd(a, b, _CMP_EQ_OQ);
605 __m128d test_mm_cmp_pd_lt_os(__m128d a, __m128d b) {
606 // CHECK-LABEL: test_mm_cmp_pd_lt_os
607 // CHECK: fcmp olt <2 x double> %{{.*}}, %{{.*}}
608 return _mm_cmp_pd(a, b, _CMP_LT_OS);
611 __m128d test_mm_cmp_pd_le_os(__m128d a, __m128d b) {
612 // CHECK-LABEL: test_mm_cmp_pd_le_os
613 // CHECK: fcmp ole <2 x double> %{{.*}}, %{{.*}}
614 return _mm_cmp_pd(a, b, _CMP_LE_OS);
617 __m128d test_mm_cmp_pd_unord_q(__m128d a, __m128d b) {
618 // CHECK-LABEL: test_mm_cmp_pd_unord_q
619 // CHECK: fcmp uno <2 x double> %{{.*}}, %{{.*}}
620 return _mm_cmp_pd(a, b, _CMP_UNORD_Q);
623 __m128d test_mm_cmp_pd_neq_uq(__m128d a, __m128d b) {
624 // CHECK-LABEL: test_mm_cmp_pd_neq_uq
625 // CHECK: fcmp une <2 x double> %{{.*}}, %{{.*}}
626 return _mm_cmp_pd(a, b, _CMP_NEQ_UQ);
629 __m128d test_mm_cmp_pd_nlt_us(__m128d a, __m128d b) {
630 // CHECK-LABEL: test_mm_cmp_pd_nlt_us
631 // CHECK: fcmp uge <2 x double> %{{.*}}, %{{.*}}
632 return _mm_cmp_pd(a, b, _CMP_NLT_US);
635 __m128d test_mm_cmp_pd_nle_us(__m128d a, __m128d b) {
636 // CHECK-LABEL: test_mm_cmp_pd_nle_us
637 // CHECK: fcmp ugt <2 x double> %{{.*}}, %{{.*}}
638 return _mm_cmp_pd(a, b, _CMP_NLE_US);
641 __m128d test_mm_cmp_pd_ord_q(__m128d a, __m128d b) {
642 // CHECK-LABEL: test_mm_cmp_pd_ord_q
643 // CHECK: fcmp ord <2 x double> %{{.*}}, %{{.*}}
644 return _mm_cmp_pd(a, b, _CMP_ORD_Q);
647 __m128d test_mm_cmp_pd_eq_uq(__m128d a, __m128d b) {
648 // CHECK-LABEL: test_mm_cmp_pd_eq_uq
649 // CHECK: fcmp ueq <2 x double> %{{.*}}, %{{.*}}
650 return _mm_cmp_pd(a, b, _CMP_EQ_UQ);
653 __m128d test_mm_cmp_pd_nge_us(__m128d a, __m128d b) {
654 // CHECK-LABEL: test_mm_cmp_pd_nge_us
655 // CHECK: fcmp ult <2 x double> %{{.*}}, %{{.*}}
656 return _mm_cmp_pd(a, b, _CMP_NGE_US);
659 __m128d test_mm_cmp_pd_ngt_us(__m128d a, __m128d b) {
660 // CHECK-LABEL: test_mm_cmp_pd_ngt_us
661 // CHECK: fcmp ule <2 x double> %{{.*}}, %{{.*}}
662 return _mm_cmp_pd(a, b, _CMP_NGT_US);
665 __m128d test_mm_cmp_pd_false_oq(__m128d a, __m128d b) {
666 // CHECK-LABEL: test_mm_cmp_pd_false_oq
667 // CHECK: fcmp false <2 x double> %{{.*}}, %{{.*}}
668 return _mm_cmp_pd(a, b, _CMP_FALSE_OQ);
671 __m128d test_mm_cmp_pd_neq_oq(__m128d a, __m128d b) {
672 // CHECK-LABEL: test_mm_cmp_pd_neq_oq
673 // CHECK: fcmp one <2 x double> %{{.*}}, %{{.*}}
674 return _mm_cmp_pd(a, b, _CMP_NEQ_OQ);
677 __m128d test_mm_cmp_pd_ge_os(__m128d a, __m128d b) {
678 // CHECK-LABEL: test_mm_cmp_pd_ge_os
679 // CHECK: fcmp oge <2 x double> %{{.*}}, %{{.*}}
680 return _mm_cmp_pd(a, b, _CMP_GE_OS);
683 __m128d test_mm_cmp_pd_gt_os(__m128d a, __m128d b) {
684 // CHECK-LABEL: test_mm_cmp_pd_gt_os
685 // CHECK: fcmp ogt <2 x double> %{{.*}}, %{{.*}}
686 return _mm_cmp_pd(a, b, _CMP_GT_OS);
689 __m128d test_mm_cmp_pd_true_uq(__m128d a, __m128d b) {
690 // CHECK-LABEL: test_mm_cmp_pd_true_uq
691 // CHECK: fcmp true <2 x double> %{{.*}}, %{{.*}}
692 return _mm_cmp_pd(a, b, _CMP_TRUE_UQ);
695 __m128d test_mm_cmp_pd_eq_os(__m128d a, __m128d b) {
696 // CHECK-LABEL: test_mm_cmp_pd_eq_os
697 // CHECK: fcmp oeq <2 x double> %{{.*}}, %{{.*}}
698 return _mm_cmp_pd(a, b, _CMP_EQ_OS);
701 __m128d test_mm_cmp_pd_lt_oq(__m128d a, __m128d b) {
702 // CHECK-LABEL: test_mm_cmp_pd_lt_oq
703 // CHECK: fcmp olt <2 x double> %{{.*}}, %{{.*}}
704 return _mm_cmp_pd(a, b, _CMP_LT_OQ);
707 __m128d test_mm_cmp_pd_le_oq(__m128d a, __m128d b) {
708 // CHECK-LABEL: test_mm_cmp_pd_le_oq
709 // CHECK: fcmp ole <2 x double> %{{.*}}, %{{.*}}
710 return _mm_cmp_pd(a, b, _CMP_LE_OQ);
713 __m128d test_mm_cmp_pd_unord_s(__m128d a, __m128d b) {
714 // CHECK-LABEL: test_mm_cmp_pd_unord_s
715 // CHECK: fcmp uno <2 x double> %{{.*}}, %{{.*}}
716 return _mm_cmp_pd(a, b, _CMP_UNORD_S);
719 __m128d test_mm_cmp_pd_neq_us(__m128d a, __m128d b) {
720 // CHECK-LABEL: test_mm_cmp_pd_neq_us
721 // CHECK: fcmp une <2 x double> %{{.*}}, %{{.*}}
722 return _mm_cmp_pd(a, b, _CMP_NEQ_US);
725 __m128d test_mm_cmp_pd_nlt_uq(__m128d a, __m128d b) {
726 // CHECK-LABEL: test_mm_cmp_pd_nlt_uq
727 // CHECK: fcmp uge <2 x double> %{{.*}}, %{{.*}}
728 return _mm_cmp_pd(a, b, _CMP_NLT_UQ);
731 __m128d test_mm_cmp_pd_nle_uq(__m128d a, __m128d b) {
732 // CHECK-LABEL: test_mm_cmp_pd_nle_uq
733 // CHECK: fcmp ugt <2 x double> %{{.*}}, %{{.*}}
734 return _mm_cmp_pd(a, b, _CMP_NLE_UQ);
737 __m128d test_mm_cmp_pd_ord_s(__m128d a, __m128d b) {
738 // CHECK-LABEL: test_mm_cmp_pd_ord_s
739 // CHECK: fcmp ord <2 x double> %{{.*}}, %{{.*}}
740 return _mm_cmp_pd(a, b, _CMP_ORD_S);
743 __m128d test_mm_cmp_pd_eq_us(__m128d a, __m128d b) {
744 // CHECK-LABEL: test_mm_cmp_pd_eq_us
745 // CHECK: fcmp ueq <2 x double> %{{.*}}, %{{.*}}
746 return _mm_cmp_pd(a, b, _CMP_EQ_US);
749 __m128d test_mm_cmp_pd_nge_uq(__m128d a, __m128d b) {
750 // CHECK-LABEL: test_mm_cmp_pd_nge_uq
751 // CHECK: fcmp ult <2 x double> %{{.*}}, %{{.*}}
752 return _mm_cmp_pd(a, b, _CMP_NGE_UQ);
755 __m128d test_mm_cmp_pd_ngt_uq(__m128d a, __m128d b) {
756 // CHECK-LABEL: test_mm_cmp_pd_ngt_uq
757 // CHECK: fcmp ule <2 x double> %{{.*}}, %{{.*}}
758 return _mm_cmp_pd(a, b, _CMP_NGT_UQ);
761 __m128d test_mm_cmp_pd_false_os(__m128d a, __m128d b) {
762 // CHECK-LABEL: test_mm_cmp_pd_false_os
763 // CHECK: fcmp false <2 x double> %{{.*}}, %{{.*}}
764 return _mm_cmp_pd(a, b, _CMP_FALSE_OS);
767 __m128d test_mm_cmp_pd_neq_os(__m128d a, __m128d b) {
768 // CHECK-LABEL: test_mm_cmp_pd_neq_os
769 // CHECK: fcmp one <2 x double> %{{.*}}, %{{.*}}
770 return _mm_cmp_pd(a, b, _CMP_NEQ_OS);
773 __m128d test_mm_cmp_pd_ge_oq(__m128d a, __m128d b) {
774 // CHECK-LABEL: test_mm_cmp_pd_ge_oq
775 // CHECK: fcmp oge <2 x double> %{{.*}}, %{{.*}}
776 return _mm_cmp_pd(a, b, _CMP_GE_OQ);
779 __m128d test_mm_cmp_pd_gt_oq(__m128d a, __m128d b) {
780 // CHECK-LABEL: test_mm_cmp_pd_gt_oq
781 // CHECK: fcmp ogt <2 x double> %{{.*}}, %{{.*}}
782 return _mm_cmp_pd(a, b, _CMP_GT_OQ);
785 __m128d test_mm_cmp_pd_true_us(__m128d a, __m128d b) {
786 // CHECK-LABEL: test_mm_cmp_pd_true_us
787 // CHECK: fcmp true <2 x double> %{{.*}}, %{{.*}}
788 return _mm_cmp_pd(a, b, _CMP_TRUE_US);
791 __m128 test_mm_cmp_ps_eq_oq(__m128 a, __m128 b) {
792 // CHECK-LABEL: test_mm_cmp_ps_eq_oq
793 // CHECK: fcmp oeq <4 x float> %{{.*}}, %{{.*}}
794 return _mm_cmp_ps(a, b, _CMP_EQ_OQ);
797 __m128 test_mm_cmp_ps_lt_os(__m128 a, __m128 b) {
798 // CHECK-LABEL: test_mm_cmp_ps_lt_os
799 // CHECK: fcmp olt <4 x float> %{{.*}}, %{{.*}}
800 return _mm_cmp_ps(a, b, _CMP_LT_OS);
803 __m128 test_mm_cmp_ps_le_os(__m128 a, __m128 b) {
804 // CHECK-LABEL: test_mm_cmp_ps_le_os
805 // CHECK: fcmp ole <4 x float> %{{.*}}, %{{.*}}
806 return _mm_cmp_ps(a, b, _CMP_LE_OS);
809 __m128 test_mm_cmp_ps_unord_q(__m128 a, __m128 b) {
810 // CHECK-LABEL: test_mm_cmp_ps_unord_q
811 // CHECK: fcmp uno <4 x float> %{{.*}}, %{{.*}}
812 return _mm_cmp_ps(a, b, _CMP_UNORD_Q);
815 __m128 test_mm_cmp_ps_neq_uq(__m128 a, __m128 b) {
816 // CHECK-LABEL: test_mm_cmp_ps_neq_uq
817 // CHECK: fcmp une <4 x float> %{{.*}}, %{{.*}}
818 return _mm_cmp_ps(a, b, _CMP_NEQ_UQ);
821 __m128 test_mm_cmp_ps_nlt_us(__m128 a, __m128 b) {
822 // CHECK-LABEL: test_mm_cmp_ps_nlt_us
823 // CHECK: fcmp uge <4 x float> %{{.*}}, %{{.*}}
824 return _mm_cmp_ps(a, b, _CMP_NLT_US);
827 __m128 test_mm_cmp_ps_nle_us(__m128 a, __m128 b) {
828 // CHECK-LABEL: test_mm_cmp_ps_nle_us
829 // CHECK: fcmp ugt <4 x float> %{{.*}}, %{{.*}}
830 return _mm_cmp_ps(a, b, _CMP_NLE_US);
833 __m128 test_mm_cmp_ps_ord_q(__m128 a, __m128 b) {
834 // CHECK-LABEL: test_mm_cmp_ps_ord_q
835 // CHECK: fcmp ord <4 x float> %{{.*}}, %{{.*}}
836 return _mm_cmp_ps(a, b, _CMP_ORD_Q);
839 __m128 test_mm_cmp_ps_eq_uq(__m128 a, __m128 b) {
840 // CHECK-LABEL: test_mm_cmp_ps_eq_uq
841 // CHECK: fcmp ueq <4 x float> %{{.*}}, %{{.*}}
842 return _mm_cmp_ps(a, b, _CMP_EQ_UQ);
845 __m128 test_mm_cmp_ps_nge_us(__m128 a, __m128 b) {
846 // CHECK-LABEL: test_mm_cmp_ps_nge_us
847 // CHECK: fcmp ult <4 x float> %{{.*}}, %{{.*}}
848 return _mm_cmp_ps(a, b, _CMP_NGE_US);
851 __m128 test_mm_cmp_ps_ngt_us(__m128 a, __m128 b) {
852 // CHECK-LABEL: test_mm_cmp_ps_ngt_us
853 // CHECK: fcmp ule <4 x float> %{{.*}}, %{{.*}}
854 return _mm_cmp_ps(a, b, _CMP_NGT_US);
857 __m128 test_mm_cmp_ps_false_oq(__m128 a, __m128 b) {
858 // CHECK-LABEL: test_mm_cmp_ps_false_oq
859 // CHECK: fcmp false <4 x float> %{{.*}}, %{{.*}}
860 return _mm_cmp_ps(a, b, _CMP_FALSE_OQ);
863 __m128 test_mm_cmp_ps_neq_oq(__m128 a, __m128 b) {
864 // CHECK-LABEL: test_mm_cmp_ps_neq_oq
865 // CHECK: fcmp one <4 x float> %{{.*}}, %{{.*}}
866 return _mm_cmp_ps(a, b, _CMP_NEQ_OQ);
869 __m128 test_mm_cmp_ps_ge_os(__m128 a, __m128 b) {
870 // CHECK-LABEL: test_mm_cmp_ps_ge_os
871 // CHECK: fcmp oge <4 x float> %{{.*}}, %{{.*}}
872 return _mm_cmp_ps(a, b, _CMP_GE_OS);
875 __m128 test_mm_cmp_ps_gt_os(__m128 a, __m128 b) {
876 // CHECK-LABEL: test_mm_cmp_ps_gt_os
877 // CHECK: fcmp ogt <4 x float> %{{.*}}, %{{.*}}
878 return _mm_cmp_ps(a, b, _CMP_GT_OS);
881 __m128 test_mm_cmp_ps_true_uq(__m128 a, __m128 b) {
882 // CHECK-LABEL: test_mm_cmp_ps_true_uq
883 // CHECK: fcmp true <4 x float> %{{.*}}, %{{.*}}
884 return _mm_cmp_ps(a, b, _CMP_TRUE_UQ);
887 __m128 test_mm_cmp_ps_eq_os(__m128 a, __m128 b) {
888 // CHECK-LABEL: test_mm_cmp_ps_eq_os
889 // CHECK: fcmp oeq <4 x float> %{{.*}}, %{{.*}}
890 return _mm_cmp_ps(a, b, _CMP_EQ_OS);
893 __m128 test_mm_cmp_ps_lt_oq(__m128 a, __m128 b) {
894 // CHECK-LABEL: test_mm_cmp_ps_lt_oq
895 // CHECK: fcmp olt <4 x float> %{{.*}}, %{{.*}}
896 return _mm_cmp_ps(a, b, _CMP_LT_OQ);
899 __m128 test_mm_cmp_ps_le_oq(__m128 a, __m128 b) {
900 // CHECK-LABEL: test_mm_cmp_ps_le_oq
901 // CHECK: fcmp ole <4 x float> %{{.*}}, %{{.*}}
902 return _mm_cmp_ps(a, b, _CMP_LE_OQ);
905 __m128 test_mm_cmp_ps_unord_s(__m128 a, __m128 b) {
906 // CHECK-LABEL: test_mm_cmp_ps_unord_s
907 // CHECK: fcmp uno <4 x float> %{{.*}}, %{{.*}}
908 return _mm_cmp_ps(a, b, _CMP_UNORD_S);
911 __m128 test_mm_cmp_ps_neq_us(__m128 a, __m128 b) {
912 // CHECK-LABEL: test_mm_cmp_ps_neq_us
913 // CHECK: fcmp une <4 x float> %{{.*}}, %{{.*}}
914 return _mm_cmp_ps(a, b, _CMP_NEQ_US);
917 __m128 test_mm_cmp_ps_nlt_uq(__m128 a, __m128 b) {
918 // CHECK-LABEL: test_mm_cmp_ps_nlt_uq
919 // CHECK: fcmp uge <4 x float> %{{.*}}, %{{.*}}
920 return _mm_cmp_ps(a, b, _CMP_NLT_UQ);
923 __m128 test_mm_cmp_ps_nle_uq(__m128 a, __m128 b) {
924 // CHECK-LABEL: test_mm_cmp_ps_nle_uq
925 // CHECK: fcmp ugt <4 x float> %{{.*}}, %{{.*}}
926 return _mm_cmp_ps(a, b, _CMP_NLE_UQ);
929 __m128 test_mm_cmp_ps_ord_s(__m128 a, __m128 b) {
930 // CHECK-LABEL: test_mm_cmp_ps_ord_s
931 // CHECK: fcmp ord <4 x float> %{{.*}}, %{{.*}}
932 return _mm_cmp_ps(a, b, _CMP_ORD_S);
935 __m128 test_mm_cmp_ps_eq_us(__m128 a, __m128 b) {
936 // CHECK-LABEL: test_mm_cmp_ps_eq_us
937 // CHECK: fcmp ueq <4 x float> %{{.*}}, %{{.*}}
938 return _mm_cmp_ps(a, b, _CMP_EQ_US);
941 __m128 test_mm_cmp_ps_nge_uq(__m128 a, __m128 b) {
942 // CHECK-LABEL: test_mm_cmp_ps_nge_uq
943 // CHECK: fcmp ult <4 x float> %{{.*}}, %{{.*}}
944 return _mm_cmp_ps(a, b, _CMP_NGE_UQ);
947 __m128 test_mm_cmp_ps_ngt_uq(__m128 a, __m128 b) {
948 // CHECK-LABEL: test_mm_cmp_ps_ngt_uq
949 // CHECK: fcmp ule <4 x float> %{{.*}}, %{{.*}}
950 return _mm_cmp_ps(a, b, _CMP_NGT_UQ);
953 __m128 test_mm_cmp_ps_false_os(__m128 a, __m128 b) {
954 // CHECK-LABEL: test_mm_cmp_ps_false_os
955 // CHECK: fcmp false <4 x float> %{{.*}}, %{{.*}}
956 return _mm_cmp_ps(a, b, _CMP_FALSE_OS);
959 __m128 test_mm_cmp_ps_neq_os(__m128 a, __m128 b) {
960 // CHECK-LABEL: test_mm_cmp_ps_neq_os
961 // CHECK: fcmp one <4 x float> %{{.*}}, %{{.*}}
962 return _mm_cmp_ps(a, b, _CMP_NEQ_OS);
965 __m128 test_mm_cmp_ps_ge_oq(__m128 a, __m128 b) {
966 // CHECK-LABEL: test_mm_cmp_ps_ge_oq
967 // CHECK: fcmp oge <4 x float> %{{.*}}, %{{.*}}
968 return _mm_cmp_ps(a, b, _CMP_GE_OQ);
971 __m128 test_mm_cmp_ps_gt_oq(__m128 a, __m128 b) {
972 // CHECK-LABEL: test_mm_cmp_ps_gt_oq
973 // CHECK: fcmp ogt <4 x float> %{{.*}}, %{{.*}}
974 return _mm_cmp_ps(a, b, _CMP_GT_OQ);
977 __m128 test_mm_cmp_ps_true_us(__m128 a, __m128 b) {
978 // CHECK-LABEL: test_mm_cmp_ps_true_us
979 // CHECK: fcmp true <4 x float> %{{.*}}, %{{.*}}
980 return _mm_cmp_ps(a, b, _CMP_TRUE_US);
983 __m128d test_mm_cmp_sd(__m128d A, __m128d B) {
984 // CHECK-LABEL: test_mm_cmp_sd
985 // CHECK: call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 13)
986 return _mm_cmp_sd(A, B, _CMP_GE_OS);
989 __m128 test_mm_cmp_ss(__m128 A, __m128 B) {
990 // CHECK-LABEL: test_mm_cmp_ss
991 // CHECK: call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 13)
992 return _mm_cmp_ss(A, B, _CMP_GE_OS);
995 __m256d test_mm256_cvtepi32_pd(__m128i A) {
996 // CHECK-LABEL: test_mm256_cvtepi32_pd
997 // CHECK: sitofp <4 x i32> %{{.*}} to <4 x double>
998 return _mm256_cvtepi32_pd(A);
1001 __m256 test_mm256_cvtepi32_ps(__m256i A) {
1002 // CHECK-LABEL: test_mm256_cvtepi32_ps
1003 // CHECK: sitofp <8 x i32> %{{.*}} to <8 x float>
1004 return _mm256_cvtepi32_ps(A);
1007 __m128i test_mm256_cvtpd_epi32(__m256d A) {
1008 // CHECK-LABEL: test_mm256_cvtpd_epi32
1009 // CHECK: call <4 x i32> @llvm.x86.avx.cvt.pd2dq.256(<4 x double> %{{.*}})
1010 return _mm256_cvtpd_epi32(A);
1013 __m128 test_mm256_cvtpd_ps(__m256d A) {
1014 // CHECK-LABEL: test_mm256_cvtpd_ps
1015 // CHECK: call <4 x float> @llvm.x86.avx.cvt.pd2.ps.256(<4 x double> %{{.*}})
1016 return _mm256_cvtpd_ps(A);
1019 __m256i test_mm256_cvtps_epi32(__m256 A) {
1020 // CHECK-LABEL: test_mm256_cvtps_epi32
1021 // CHECK: call <8 x i32> @llvm.x86.avx.cvt.ps2dq.256(<8 x float> %{{.*}})
1022 return _mm256_cvtps_epi32(A);
1025 __m256d test_mm256_cvtps_pd(__m128 A) {
1026 // CHECK-LABEL: test_mm256_cvtps_pd
1027 // CHECK: fpext <4 x float> %{{.*}} to <4 x double>
1028 return _mm256_cvtps_pd(A);
1031 __m128i test_mm256_cvttpd_epi32(__m256d A) {
1032 // CHECK-LABEL: test_mm256_cvttpd_epi32
1033 // CHECK: call <4 x i32> @llvm.x86.avx.cvtt.pd2dq.256(<4 x double> %{{.*}})
1034 return _mm256_cvttpd_epi32(A);
1037 __m256i test_mm256_cvttps_epi32(__m256 A) {
1038 // CHECK-LABEL: test_mm256_cvttps_epi32
1039 // CHECK: call <8 x i32> @llvm.x86.avx.cvtt.ps2dq.256(<8 x float> %{{.*}})
1040 return _mm256_cvttps_epi32(A);
1043 __m256d test_mm256_div_pd(__m256d A, __m256d B) {
1044 // CHECK-LABEL: test_mm256_div_pd
1045 // CHECK: fdiv <4 x double>
1046 return _mm256_div_pd(A, B);
1049 __m256 test_mm256_div_ps(__m256 A, __m256 B) {
1050 // CHECK-LABEL: test_mm256_div_ps
1051 // CHECK: fdiv <8 x float>
1052 return _mm256_div_ps(A, B);
1055 __m256 test_mm256_dp_ps(__m256 A, __m256 B) {
1056 // CHECK-LABEL: test_mm256_dp_ps
1057 // CHECK: call <8 x float> @llvm.x86.avx.dp.ps.256(<8 x float> {{.*}}, <8 x float> {{.*}}, i8 7)
1058 return _mm256_dp_ps(A, B, 7);
1061 int test_mm256_extract_epi8(__m256i A) {
1062 // CHECK-LABEL: test_mm256_extract_epi8
1063 // CHECK: extractelement <32 x i8> %{{.*}}, {{i32|i64}} 31
1064 // CHECK: zext i8 %{{.*}} to i32
1065 return _mm256_extract_epi8(A, 31);
1068 int test_mm256_extract_epi16(__m256i A) {
1069 // CHECK-LABEL: test_mm256_extract_epi16
1070 // CHECK: extractelement <16 x i16> %{{.*}}, {{i32|i64}} 15
1071 // CHECK: zext i16 %{{.*}} to i32
1072 return _mm256_extract_epi16(A, 15);
1075 int test_mm256_extract_epi32(__m256i A) {
1076 // CHECK-LABEL: test_mm256_extract_epi32
1077 // CHECK: extractelement <8 x i32> %{{.*}}, {{i32|i64}} 7
1078 return _mm256_extract_epi32(A, 7);
1081 #if __x86_64__
1082 long long test_mm256_extract_epi64(__m256i A) {
1083 // X64-LABEL: test_mm256_extract_epi64
1084 // X64: extractelement <4 x i64> %{{.*}}, {{i32|i64}} 3
1085 return _mm256_extract_epi64(A, 3);
1087 #endif
1089 __m128d test_mm256_extractf128_pd(__m256d A) {
1090 // CHECK-LABEL: test_mm256_extractf128_pd
1091 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <2 x i32> <i32 2, i32 3>
1092 return _mm256_extractf128_pd(A, 1);
1095 __m128 test_mm256_extractf128_ps(__m256 A) {
1096 // CHECK-LABEL: test_mm256_extractf128_ps
1097 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
1098 return _mm256_extractf128_ps(A, 1);
1101 __m128i test_mm256_extractf128_si256(__m256i A) {
1102 // CHECK-LABEL: test_mm256_extractf128_si256
1103 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
1104 return _mm256_extractf128_si256(A, 1);
1107 __m256d test_mm256_floor_pd(__m256d x) {
1108 // CHECK-LABEL: test_mm256_floor_pd
1109 // CHECK: call <4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %{{.*}}, i32 1)
1110 return _mm256_floor_pd(x);
1113 __m256 test_mm_floor_ps(__m256 x) {
1114 // CHECK-LABEL: test_mm_floor_ps
1115 // CHECK: call <8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %{{.*}}, i32 1)
1116 return _mm256_floor_ps(x);
1119 __m256d test_mm256_hadd_pd(__m256d A, __m256d B) {
1120 // CHECK-LABEL: test_mm256_hadd_pd
1121 // CHECK: call <4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1122 return _mm256_hadd_pd(A, B);
1125 __m256 test_mm256_hadd_ps(__m256 A, __m256 B) {
1126 // CHECK-LABEL: test_mm256_hadd_ps
1127 // CHECK: call <8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1128 return _mm256_hadd_ps(A, B);
1131 __m256d test_mm256_hsub_pd(__m256d A, __m256d B) {
1132 // CHECK-LABEL: test_mm256_hsub_pd
1133 // CHECK: call <4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1134 return _mm256_hsub_pd(A, B);
1137 __m256 test_mm256_hsub_ps(__m256 A, __m256 B) {
1138 // CHECK-LABEL: test_mm256_hsub_ps
1139 // CHECK: call <8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1140 return _mm256_hsub_ps(A, B);
1143 __m256i test_mm256_insert_epi8(__m256i x, char b) {
1144 // CHECK-LABEL: test_mm256_insert_epi8
1145 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, {{i32|i64}} 14
1146 return _mm256_insert_epi8(x, b, 14);
1149 __m256i test_mm256_insert_epi16(__m256i x, int b) {
1150 // CHECK-LABEL: test_mm256_insert_epi16
1151 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, {{i32|i64}} 4
1152 return _mm256_insert_epi16(x, b, 4);
1155 __m256i test_mm256_insert_epi32(__m256i x, int b) {
1156 // CHECK-LABEL: test_mm256_insert_epi32
1157 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, {{i32|i64}} 5
1158 return _mm256_insert_epi32(x, b, 5);
1161 #if __x86_64__
1162 __m256i test_mm256_insert_epi64(__m256i x, long long b) {
1163 // X64-LABEL: test_mm256_insert_epi64
1164 // X64: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, {{i32|i64}} 2
1165 return _mm256_insert_epi64(x, b, 2);
1167 #endif
1169 __m256d test_mm256_insertf128_pd(__m256d A, __m128d B) {
1170 // CHECK-LABEL: test_mm256_insertf128_pd
1171 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1172 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 4, i32 5, i32 2, i32 3>
1173 return _mm256_insertf128_pd(A, B, 0);
1176 __m256 test_mm256_insertf128_ps(__m256 A, __m128 B) {
1177 // CHECK-LABEL: test_mm256_insertf128_ps
1178 // 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>
1179 // 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>
1180 return _mm256_insertf128_ps(A, B, 1);
1183 __m256i test_mm256_insertf128_si256(__m256i A, __m128i B) {
1184 // CHECK-LABEL: test_mm256_insertf128_si256
1185 // 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>
1186 // 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>
1187 return _mm256_insertf128_si256(A, B, 0);
1190 __m256i test_mm256_lddqu_si256(__m256i* A) {
1191 // CHECK-LABEL: test_mm256_lddqu_si256
1192 // CHECK: call <32 x i8> @llvm.x86.avx.ldu.dq.256(ptr %{{.*}})
1193 return _mm256_lddqu_si256(A);
1196 __m256d test_mm256_load_pd(double* A) {
1197 // CHECK-LABEL: test_mm256_load_pd
1198 // CHECK: load <4 x double>, ptr %{{.*}}, align 32
1199 return _mm256_load_pd(A);
1202 __m256 test_mm256_load_ps(float* A) {
1203 // CHECK-LABEL: test_mm256_load_ps
1204 // CHECK: load <8 x float>, ptr %{{.*}}, align 32
1205 return _mm256_load_ps(A);
1208 __m256i test_mm256_load_si256(__m256i* A) {
1209 // CHECK-LABEL: test_mm256_load_si256
1210 // CHECK: load <4 x i64>, ptr %{{.*}}, align 32
1211 return _mm256_load_si256(A);
1214 __m256d test_mm256_loadu_pd(double* A) {
1215 // CHECK-LABEL: test_mm256_loadu_pd
1216 // CHECK: load <4 x double>, ptr %{{.*}}, align 1{{$}}
1217 return _mm256_loadu_pd(A);
1220 __m256 test_mm256_loadu_ps(float* A) {
1221 // CHECK-LABEL: test_mm256_loadu_ps
1222 // CHECK: load <8 x float>, ptr %{{.*}}, align 1{{$}}
1223 return _mm256_loadu_ps(A);
1226 __m256i test_mm256_loadu_si256(__m256i* A) {
1227 // CHECK-LABEL: test_mm256_loadu_si256
1228 // CHECK: load <4 x i64>, ptr %{{.+}}, align 1{{$}}
1229 return _mm256_loadu_si256(A);
1232 __m256 test_mm256_loadu2_m128(float* A, float* B) {
1233 // CHECK-LABEL: test_mm256_loadu2_m128
1234 // CHECK: load <4 x float>, ptr %{{.*}}, align 1{{$}}
1235 // CHECK: load <4 x float>, ptr %{{.*}}, align 1{{$}}
1236 // 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>
1237 return _mm256_loadu2_m128(A, B);
1240 __m256d test_mm256_loadu2_m128d(double* A, double* B) {
1241 // CHECK-LABEL: test_mm256_loadu2_m128d
1242 // CHECK: load <2 x double>, ptr %{{.*}}, align 1{{$}}
1243 // CHECK: load <2 x double>, ptr %{{.*}}, align 1{{$}}
1244 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1245 return _mm256_loadu2_m128d(A, B);
1248 __m256i test_mm256_loadu2_m128i(__m128i* A, __m128i* B) {
1249 // CHECK-LABEL: test_mm256_loadu2_m128i
1250 // CHECK: load <2 x i64>, ptr %{{.*}}, align 1{{$}}
1251 // CHECK: load <2 x i64>, ptr %{{.*}}, align 1{{$}}
1252 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1253 return _mm256_loadu2_m128i(A, B);
1256 __m128d test_mm_maskload_pd(double* A, __m128i B) {
1257 // CHECK-LABEL: test_mm_maskload_pd
1258 // CHECK: call <2 x double> @llvm.x86.avx.maskload.pd(ptr %{{.*}}, <2 x i64> %{{.*}})
1259 return _mm_maskload_pd(A, B);
1262 __m256d test_mm256_maskload_pd(double* A, __m256i B) {
1263 // CHECK-LABEL: test_mm256_maskload_pd
1264 // CHECK: call <4 x double> @llvm.x86.avx.maskload.pd.256(ptr %{{.*}}, <4 x i64> %{{.*}})
1265 return _mm256_maskload_pd(A, B);
1268 __m128 test_mm_maskload_ps(float* A, __m128i B) {
1269 // CHECK-LABEL: test_mm_maskload_ps
1270 // CHECK: call <4 x float> @llvm.x86.avx.maskload.ps(ptr %{{.*}}, <4 x i32> %{{.*}})
1271 return _mm_maskload_ps(A, B);
1274 __m256 test_mm256_maskload_ps(float* A, __m256i B) {
1275 // CHECK-LABEL: test_mm256_maskload_ps
1276 // CHECK: call <8 x float> @llvm.x86.avx.maskload.ps.256(ptr %{{.*}}, <8 x i32> %{{.*}})
1277 return _mm256_maskload_ps(A, B);
1280 void test_mm_maskstore_pd(double* A, __m128i B, __m128d C) {
1281 // CHECK-LABEL: test_mm_maskstore_pd
1282 // CHECK: call void @llvm.x86.avx.maskstore.pd(ptr %{{.*}}, <2 x i64> %{{.*}}, <2 x double> %{{.*}})
1283 _mm_maskstore_pd(A, B, C);
1286 void test_mm256_maskstore_pd(double* A, __m256i B, __m256d C) {
1287 // CHECK-LABEL: test_mm256_maskstore_pd
1288 // CHECK: call void @llvm.x86.avx.maskstore.pd.256(ptr %{{.*}}, <4 x i64> %{{.*}}, <4 x double> %{{.*}})
1289 _mm256_maskstore_pd(A, B, C);
1292 void test_mm_maskstore_ps(float* A, __m128i B, __m128 C) {
1293 // CHECK-LABEL: test_mm_maskstore_ps
1294 // CHECK: call void @llvm.x86.avx.maskstore.ps(ptr %{{.*}}, <4 x i32> %{{.*}}, <4 x float> %{{.*}})
1295 _mm_maskstore_ps(A, B, C);
1298 void test_mm256_maskstore_ps(float* A, __m256i B, __m256 C) {
1299 // CHECK-LABEL: test_mm256_maskstore_ps
1300 // CHECK: call void @llvm.x86.avx.maskstore.ps.256(ptr %{{.*}}, <8 x i32> %{{.*}}, <8 x float> %{{.*}})
1301 _mm256_maskstore_ps(A, B, C);
1304 __m256d test_mm256_max_pd(__m256d A, __m256d B) {
1305 // CHECK-LABEL: test_mm256_max_pd
1306 // CHECK: call <4 x double> @llvm.x86.avx.max.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1307 return _mm256_max_pd(A, B);
1310 __m256 test_mm256_max_ps(__m256 A, __m256 B) {
1311 // CHECK-LABEL: test_mm256_max_ps
1312 // CHECK: call <8 x float> @llvm.x86.avx.max.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1313 return _mm256_max_ps(A, B);
1316 __m256d test_mm256_min_pd(__m256d A, __m256d B) {
1317 // CHECK-LABEL: test_mm256_min_pd
1318 // CHECK: call <4 x double> @llvm.x86.avx.min.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1319 return _mm256_min_pd(A, B);
1322 __m256 test_mm256_min_ps(__m256 A, __m256 B) {
1323 // CHECK-LABEL: test_mm256_min_ps
1324 // CHECK: call <8 x float> @llvm.x86.avx.min.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1325 return _mm256_min_ps(A, B);
1328 __m256d test_mm256_movedup_pd(__m256d A) {
1329 // CHECK-LABEL: test_mm256_movedup_pd
1330 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 0, i32 2, i32 2>
1331 return _mm256_movedup_pd(A);
1334 __m256 test_mm256_movehdup_ps(__m256 A) {
1335 // CHECK-LABEL: test_mm256_movehdup_ps
1336 // 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>
1337 return _mm256_movehdup_ps(A);
1340 __m256 test_mm256_moveldup_ps(__m256 A) {
1341 // CHECK-LABEL: test_mm256_moveldup_ps
1342 // 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>
1343 return _mm256_moveldup_ps(A);
1346 int test_mm256_movemask_pd(__m256d A) {
1347 // CHECK-LABEL: test_mm256_movemask_pd
1348 // CHECK: call i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> %{{.*}})
1349 return _mm256_movemask_pd(A);
1352 int test_mm256_movemask_ps(__m256 A) {
1353 // CHECK-LABEL: test_mm256_movemask_ps
1354 // CHECK: call i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> %{{.*}})
1355 return _mm256_movemask_ps(A);
1358 __m256d test_mm256_mul_pd(__m256d A, __m256d B) {
1359 // CHECK-LABEL: test_mm256_mul_pd
1360 // CHECK: fmul <4 x double>
1361 return _mm256_mul_pd(A, B);
1364 __m256 test_mm256_mul_ps(__m256 A, __m256 B) {
1365 // CHECK-LABEL: test_mm256_mul_ps
1366 // CHECK: fmul <8 x float>
1367 return _mm256_mul_ps(A, B);
1370 __m256d test_mm256_or_pd(__m256d A, __m256d B) {
1371 // CHECK-LABEL: test_mm256_or_pd
1372 // CHECK: or <4 x i64>
1373 return _mm256_or_pd(A, B);
1376 __m256 test_mm256_or_ps(__m256 A, __m256 B) {
1377 // CHECK-LABEL: test_mm256_or_ps
1378 // CHECK: or <8 x i32>
1379 return _mm256_or_ps(A, B);
1382 __m128d test_mm_permute_pd(__m128d A) {
1383 // CHECK-LABEL: test_mm_permute_pd
1384 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> <i32 1, i32 0>
1385 return _mm_permute_pd(A, 1);
1388 __m256d test_mm256_permute_pd(__m256d A) {
1389 // CHECK-LABEL: test_mm256_permute_pd
1390 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
1391 return _mm256_permute_pd(A, 5);
1394 __m128 test_mm_permute_ps(__m128 A) {
1395 // CHECK-LABEL: test_mm_permute_ps
1396 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
1397 return _mm_permute_ps(A, 0x1b);
1400 // Test case for PR12401
1401 __m128 test2_mm_permute_ps(__m128 a) {
1402 // CHECK-LABEL: test2_mm_permute_ps
1403 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> <i32 2, i32 1, i32 2, i32 3>
1404 return _mm_permute_ps(a, 0xe6);
1407 __m256 test_mm256_permute_ps(__m256 A) {
1408 // CHECK-LABEL: test_mm256_permute_ps
1409 // 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>
1410 return _mm256_permute_ps(A, 0x1b);
1413 __m256d test_mm256_permute2f128_pd(__m256d A, __m256d B) {
1414 // CHECK-LABEL: test_mm256_permute2f128_pd
1415 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 2, i32 3, i32 6, i32 7>
1416 return _mm256_permute2f128_pd(A, B, 0x31);
1419 __m256 test_mm256_permute2f128_ps(__m256 A, __m256 B) {
1420 // CHECK-LABEL: test_mm256_permute2f128_ps
1421 // 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>
1422 return _mm256_permute2f128_ps(A, B, 0x13);
1425 __m256i test_mm256_permute2f128_si256(__m256i A, __m256i B) {
1426 // CHECK-LABEL: test_mm256_permute2f128_si256
1427 // 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>
1428 return _mm256_permute2f128_si256(A, B, 0x20);
1431 __m128d test_mm_permutevar_pd(__m128d A, __m128i B) {
1432 // CHECK-LABEL: test_mm_permutevar_pd
1433 // CHECK: call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %{{.*}}, <2 x i64> %{{.*}})
1434 return _mm_permutevar_pd(A, B);
1437 __m256d test_mm256_permutevar_pd(__m256d A, __m256i B) {
1438 // CHECK-LABEL: test_mm256_permutevar_pd
1439 // CHECK: call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %{{.*}}, <4 x i64> %{{.*}})
1440 return _mm256_permutevar_pd(A, B);
1443 __m128 test_mm_permutevar_ps(__m128 A, __m128i B) {
1444 // CHECK-LABEL: test_mm_permutevar_ps
1445 // CHECK: call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %{{.*}}, <4 x i32> %{{.*}})
1446 return _mm_permutevar_ps(A, B);
1449 __m256 test_mm256_permutevar_ps(__m256 A, __m256i B) {
1450 // CHECK-LABEL: test_mm256_permutevar_ps
1451 // CHECK: call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %{{.*}}, <8 x i32> %{{.*}})
1452 return _mm256_permutevar_ps(A, B);
1455 __m256 test_mm256_rcp_ps(__m256 A) {
1456 // CHECK-LABEL: test_mm256_rcp_ps
1457 // CHECK: call <8 x float> @llvm.x86.avx.rcp.ps.256(<8 x float> %{{.*}})
1458 return _mm256_rcp_ps(A);
1461 __m256d test_mm256_round_pd(__m256d x) {
1462 // CHECK-LABEL: test_mm256_round_pd
1463 // CHECK: call <4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %{{.*}}, i32 4)
1464 return _mm256_round_pd(x, 4);
1467 __m256 test_mm256_round_ps(__m256 x) {
1468 // CHECK-LABEL: test_mm256_round_ps
1469 // CHECK: call <8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %{{.*}}, i32 4)
1470 return _mm256_round_ps(x, 4);
1473 __m256 test_mm256_rsqrt_ps(__m256 A) {
1474 // CHECK-LABEL: test_mm256_rsqrt_ps
1475 // CHECK: call <8 x float> @llvm.x86.avx.rsqrt.ps.256(<8 x float> %{{.*}})
1476 return _mm256_rsqrt_ps(A);
1479 __m256i test_mm256_set_epi8(char A0, char A1, char A2, char A3, char A4, char A5, char A6, char A7,
1480 char A8, char A9, char A10, char A11, char A12, char A13, char A14, char A15,
1481 char A16, char A17, char A18, char A19, char A20, char A21, char A22, char A23,
1482 char A24, char A25, char A26, char A27, char A28, char A29, char A30, char A31) {
1483 // CHECK-LABEL: test_mm256_set_epi8
1484 // CHECK: insertelement <32 x i8> undef, i8 %{{.*}}, i32 0
1485 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 1
1486 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 2
1487 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 3
1488 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 4
1489 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 5
1490 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 6
1491 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 7
1492 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 8
1493 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 9
1494 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 10
1495 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 11
1496 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 12
1497 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 13
1498 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 14
1499 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 15
1500 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 16
1501 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 17
1502 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 18
1503 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 19
1504 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 20
1505 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 21
1506 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 22
1507 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 23
1508 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 24
1509 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 25
1510 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 26
1511 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 27
1512 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 28
1513 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 29
1514 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 30
1515 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31
1516 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);
1519 __m256i test_mm256_set_epi16(short A0, short A1, short A2, short A3, short A4, short A5, short A6, short A7,
1520 short A8, short A9, short A10, short A11, short A12, short A13, short A14, short A15) {
1521 // CHECK-LABEL: test_mm256_set_epi16
1522 // CHECK: insertelement <16 x i16> undef, i16 %{{.*}}, i32 0
1523 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 1
1524 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 2
1525 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 3
1526 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 4
1527 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 5
1528 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 6
1529 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 7
1530 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 8
1531 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 9
1532 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 10
1533 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 11
1534 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 12
1535 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 13
1536 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 14
1537 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 15
1538 return _mm256_set_epi16(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15);
1541 __m256i test_mm256_set_epi32(int A0, int A1, int A2, int A3, int A4, int A5, int A6, int A7) {
1542 // CHECK-LABEL: test_mm256_set_epi32
1543 // CHECK: insertelement <8 x i32> undef, i32 %{{.*}}, i32 0
1544 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 1
1545 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 2
1546 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 3
1547 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 4
1548 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 5
1549 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 6
1550 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7
1551 return _mm256_set_epi32(A0, A1, A2, A3, A4, A5, A6, A7);
1554 __m256i test_mm256_set_epi64x(long long A0, long long A1, long long A2, long long A3) {
1555 // CHECK-LABEL: test_mm256_set_epi64x
1556 // CHECK: insertelement <4 x i64> undef, i64 %{{.*}}, i32 0
1557 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 1
1558 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 2
1559 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3
1560 return _mm256_set_epi64x(A0, A1, A2, A3);
1563 __m256 test_mm256_set_m128(__m128 A, __m128 B) {
1564 // CHECK-LABEL: test_mm256_set_m128
1565 // 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>
1566 return _mm256_set_m128(A, B);
1569 __m256d test_mm256_set_m128d(__m128d A, __m128d B) {
1570 // CHECK-LABEL: test_mm256_set_m128d
1571 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1572 return _mm256_set_m128d(A, B);
1575 __m256i test_mm256_set_m128i(__m128i A, __m128i B) {
1576 // CHECK-LABEL: test_mm256_set_m128i
1577 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1578 return _mm256_set_m128i(A, B);
1581 __m256d test_mm256_set_pd(double A0, double A1, double A2, double A3) {
1582 // CHECK-LABEL: test_mm256_set_pd
1583 // CHECK: insertelement <4 x double> undef, double %{{.*}}, i32 0
1584 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
1585 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
1586 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
1587 return _mm256_set_pd(A0, A1, A2, A3);
1590 __m256 test_mm256_set_ps(float A0, float A1, float A2, float A3, float A4, float A5, float A6, float A7) {
1591 // CHECK-LABEL: test_mm256_set_ps
1592 // CHECK: insertelement <8 x float> undef, float %{{.*}}, i32 0
1593 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
1594 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
1595 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
1596 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
1597 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
1598 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
1599 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
1600 return _mm256_set_ps(A0, A1, A2, A3, A4, A5, A6, A7);
1603 __m256i test_mm256_set1_epi8(char A) {
1604 // CHECK-LABEL: test_mm256_set1_epi8
1605 // CHECK: insertelement <32 x i8> undef, i8 %{{.*}}, i32 0
1606 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 1
1607 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 2
1608 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 3
1609 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 4
1610 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 5
1611 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 6
1612 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 7
1613 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 8
1614 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 9
1615 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 10
1616 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 11
1617 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 12
1618 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 13
1619 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 14
1620 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 15
1621 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 16
1622 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 17
1623 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 18
1624 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 19
1625 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 20
1626 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 21
1627 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 22
1628 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 23
1629 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 24
1630 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 25
1631 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 26
1632 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 27
1633 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 28
1634 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 29
1635 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 30
1636 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31
1637 return _mm256_set1_epi8(A);
1640 __m256i test_mm256_set1_epi16(short A) {
1641 // CHECK-LABEL: test_mm256_set1_epi16
1642 // CHECK: insertelement <16 x i16> undef, i16 %{{.*}}, i32 0
1643 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 1
1644 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 2
1645 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 3
1646 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 4
1647 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 5
1648 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 6
1649 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 7
1650 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 8
1651 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 9
1652 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 10
1653 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 11
1654 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 12
1655 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 13
1656 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 14
1657 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 15
1658 return _mm256_set1_epi16(A);
1661 __m256i test_mm256_set1_epi32(int A) {
1662 // CHECK-LABEL: test_mm256_set1_epi32
1663 // CHECK: insertelement <8 x i32> undef, i32 %{{.*}}, i32 0
1664 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 1
1665 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 2
1666 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 3
1667 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 4
1668 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 5
1669 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 6
1670 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7
1671 return _mm256_set1_epi32(A);
1674 __m256i test_mm256_set1_epi64x(long long A) {
1675 // CHECK-LABEL: test_mm256_set1_epi64x
1676 // CHECK: insertelement <4 x i64> undef, i64 %{{.*}}, i32 0
1677 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 1
1678 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 2
1679 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3
1680 return _mm256_set1_epi64x(A);
1683 __m256d test_mm256_set1_pd(double A) {
1684 // CHECK-LABEL: test_mm256_set1_pd
1685 // CHECK: insertelement <4 x double> undef, double %{{.*}}, i32 0
1686 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
1687 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
1688 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
1689 return _mm256_set1_pd(A);
1692 __m256 test_mm256_set1_ps(float A) {
1693 // CHECK-LABEL: test_mm256_set1_ps
1694 // CHECK: insertelement <8 x float> undef, float %{{.*}}, i32 0
1695 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
1696 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
1697 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
1698 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
1699 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
1700 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
1701 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
1702 return _mm256_set1_ps(A);
1705 __m256i test_mm256_setr_epi8(char A0, char A1, char A2, char A3, char A4, char A5, char A6, char A7,
1706 char A8, char A9, char A10, char A11, char A12, char A13, char A14, char A15,
1707 char A16, char A17, char A18, char A19, char A20, char A21, char A22, char A23,
1708 char A24, char A25, char A26, char A27, char A28, char A29, char A30, char A31) {
1709 // CHECK-LABEL: test_mm256_setr_epi8
1710 // CHECK: insertelement <32 x i8> undef, i8 %{{.*}}, i32 0
1711 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 1
1712 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 2
1713 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 3
1714 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 4
1715 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 5
1716 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 6
1717 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 7
1718 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 8
1719 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 9
1720 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 10
1721 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 11
1722 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 12
1723 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 13
1724 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 14
1725 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 15
1726 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 16
1727 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 17
1728 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 18
1729 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 19
1730 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 20
1731 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 21
1732 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 22
1733 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 23
1734 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 24
1735 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 25
1736 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 26
1737 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 27
1738 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 28
1739 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 29
1740 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 30
1741 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31
1742 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);
1745 __m256i test_mm256_setr_epi16(short A0, short A1, short A2, short A3, short A4, short A5, short A6, short A7,
1746 short A8, short A9, short A10, short A11, short A12, short A13, short A14, short A15) {
1747 // CHECK-LABEL: test_mm256_setr_epi16
1748 // CHECK: insertelement <16 x i16> undef, i16 %{{.*}}, i32 0
1749 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 1
1750 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 2
1751 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 3
1752 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 4
1753 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 5
1754 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 6
1755 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 7
1756 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 8
1757 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 9
1758 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 10
1759 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 11
1760 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 12
1761 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 13
1762 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 14
1763 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 15
1764 return _mm256_setr_epi16(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15);
1767 __m256i test_mm256_setr_epi32(int A0, int A1, int A2, int A3, int A4, int A5, int A6, int A7) {
1768 // CHECK-LABEL: test_mm256_setr_epi32
1769 // CHECK: insertelement <8 x i32> undef, i32 %{{.*}}, i32 0
1770 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 1
1771 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 2
1772 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 3
1773 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 4
1774 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 5
1775 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 6
1776 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7
1777 return _mm256_setr_epi32(A0, A1, A2, A3, A4, A5, A6, A7);
1780 __m256i test_mm256_setr_epi64x(long long A0, long long A1, long long A2, long long A3) {
1781 // CHECK-LABEL: test_mm256_setr_epi64x
1782 // CHECK: insertelement <4 x i64> undef, i64 %{{.*}}, i32 0
1783 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 1
1784 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 2
1785 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3
1786 return _mm256_setr_epi64x(A0, A1, A2, A3);
1789 __m256 test_mm256_setr_m128(__m128 A, __m128 B) {
1790 // CHECK-LABEL: test_mm256_setr_m128
1791 // 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>
1792 return _mm256_setr_m128(A, B);
1795 __m256d test_mm256_setr_m128d(__m128d A, __m128d B) {
1796 // CHECK-LABEL: test_mm256_setr_m128d
1797 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1798 return _mm256_setr_m128d(A, B);
1801 __m256i test_mm256_setr_m128i(__m128i A, __m128i B) {
1802 // CHECK-LABEL: test_mm256_setr_m128i
1803 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1804 return _mm256_setr_m128i(A, B);
1807 __m256d test_mm256_setr_pd(double A0, double A1, double A2, double A3) {
1808 // CHECK-LABEL: test_mm256_setr_pd
1809 // CHECK: insertelement <4 x double> undef, double %{{.*}}, i32 0
1810 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
1811 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
1812 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
1813 return _mm256_setr_pd(A0, A1, A2, A3);
1816 __m256 test_mm256_setr_ps(float A0, float A1, float A2, float A3, float A4, float A5, float A6, float A7) {
1817 // CHECK-LABEL: test_mm256_setr_ps
1818 // CHECK: insertelement <8 x float> undef, float %{{.*}}, i32 0
1819 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
1820 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
1821 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
1822 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
1823 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
1824 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
1825 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
1826 return _mm256_setr_ps(A0, A1, A2, A3, A4, A5, A6, A7);
1829 __m256d test_mm256_setzero_pd(void) {
1830 // CHECK-LABEL: test_mm256_setzero_pd
1831 // CHECK: store <4 x double> zeroinitializer
1832 return _mm256_setzero_pd();
1835 __m256 test_mm256_setzero_ps(void) {
1836 // CHECK-LABEL: test_mm256_setzero_ps
1837 // CHECK: store <8 x float> zeroinitializer
1838 return _mm256_setzero_ps();
1841 __m256i test_mm256_setzero_si256(void) {
1842 // CHECK-LABEL: test_mm256_setzero_si256
1843 // CHECK: store <4 x i64> zeroinitializer
1844 return _mm256_setzero_si256();
1847 __m256d test_mm256_shuffle_pd(__m256d A, __m256d B) {
1848 // CHECK-LABEL: test_mm256_shuffle_pd
1849 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1850 return _mm256_shuffle_pd(A, B, 0);
1853 __m256 test_mm256_shuffle_ps(__m256 A, __m256 B) {
1854 // CHECK-LABEL: test_mm256_shuffle_ps
1855 // 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>
1856 return _mm256_shuffle_ps(A, B, 0);
1859 __m256d test_mm256_sqrt_pd(__m256d A) {
1860 // CHECK-LABEL: test_mm256_sqrt_pd
1861 // CHECK: call <4 x double> @llvm.sqrt.v4f64(<4 x double> %{{.*}})
1862 return _mm256_sqrt_pd(A);
1865 __m256 test_mm256_sqrt_ps(__m256 A) {
1866 // CHECK-LABEL: test_mm256_sqrt_ps
1867 // CHECK: call <8 x float> @llvm.sqrt.v8f32(<8 x float> %{{.*}})
1868 return _mm256_sqrt_ps(A);
1871 void test_mm256_store_pd(double* A, __m256d B) {
1872 // CHECK-LABEL: test_mm256_store_pd
1873 // CHECK: store <4 x double> %{{.*}}, ptr %{{.*}}, align 32
1874 _mm256_store_pd(A, B);
1877 void test_mm256_store_ps(float* A, __m256 B) {
1878 // CHECK-LABEL: test_mm256_store_ps
1879 // CHECK: store <8 x float> %{{.*}}, ptr %{{.*}}, align 32
1880 _mm256_store_ps(A, B);
1883 void test_mm256_store_si256(__m256i* A, __m256i B) {
1884 // CHECK-LABEL: test_mm256_store_si256
1885 // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 32
1886 _mm256_store_si256(A, B);
1889 void test_mm256_storeu_pd(double* A, __m256d B) {
1890 // CHECK-LABEL: test_mm256_storeu_pd
1891 // CHECK: store <4 x double> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1892 // CHECK-NEXT: ret void
1893 _mm256_storeu_pd(A, B);
1896 void test_mm256_storeu_ps(float* A, __m256 B) {
1897 // CHECK-LABEL: test_mm256_storeu_ps
1898 // CHECK: store <8 x float> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1899 // CHECk-NEXT: ret void
1900 _mm256_storeu_ps(A, B);
1903 void test_mm256_storeu_si256(__m256i* A, __m256i B) {
1904 // CHECK-LABEL: test_mm256_storeu_si256
1905 // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1906 // CHECk-NEXT: ret void
1907 _mm256_storeu_si256(A, B);
1910 void test_mm256_storeu2_m128(float* A, float* B, __m256 C) {
1911 // CHECK-LABEL: test_mm256_storeu2_m128
1912 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1913 // CHECK: store <4 x float> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1914 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
1915 // CHECK: store <4 x float> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1916 _mm256_storeu2_m128(A, B, C);
1919 void test_mm256_storeu2_m128d(double* A, double* B, __m256d C) {
1920 // CHECK-LABEL: test_mm256_storeu2_m128d
1921 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <2 x i32> <i32 0, i32 1>
1922 // CHECK: store <2 x double> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1923 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <2 x i32> <i32 2, i32 3>
1924 // CHECK: store <2 x double> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1925 _mm256_storeu2_m128d(A, B, C);
1928 void test_mm256_storeu2_m128i(__m128i* A, __m128i* B, __m256i C) {
1929 // CHECK-LABEL: test_mm256_storeu2_m128i
1930 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <2 x i32> <i32 0, i32 1>
1931 // CHECK: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1932 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
1933 // CHECK: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1934 _mm256_storeu2_m128i(A, B, C);
1937 void test_mm256_stream_pd(double* A, __m256d B) {
1938 // CHECK-LABEL: test_mm256_stream_pd
1939 // CHECK: store <4 x double> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal
1940 _mm256_stream_pd(A, B);
1943 void test_mm256_stream_pd_void(void *A, __m256d B) {
1944 // CHECK-LABEL: test_mm256_stream_pd_void
1945 // CHECK: store <4 x double> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal
1946 _mm256_stream_pd(A, B);
1949 void test_mm256_stream_ps(float* A, __m256 B) {
1950 // CHECK-LABEL: test_mm256_stream_ps
1951 // CHECK: store <8 x float> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal
1952 _mm256_stream_ps(A, B);
1955 void test_mm256_stream_ps_void(void *A, __m256 B) {
1956 // CHECK-LABEL: test_mm256_stream_ps_void
1957 // CHECK: store <8 x float> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal
1958 _mm256_stream_ps(A, B);
1961 void test_mm256_stream_si256(__m256i* A, __m256i B) {
1962 // CHECK-LABEL: test_mm256_stream_si256
1963 // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal
1964 _mm256_stream_si256(A, B);
1967 void test_mm256_stream_si256_void(void *A, __m256i B) {
1968 // CHECK-LABEL: test_mm256_stream_si256_void
1969 // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal
1970 _mm256_stream_si256(A, B);
1973 __m256d test_mm256_sub_pd(__m256d A, __m256d B) {
1974 // CHECK-LABEL: test_mm256_sub_pd
1975 // CHECK: fsub <4 x double>
1976 return _mm256_sub_pd(A, B);
1979 __m256 test_mm256_sub_ps(__m256 A, __m256 B) {
1980 // CHECK-LABEL: test_mm256_sub_ps
1981 // CHECK: fsub <8 x float>
1982 return _mm256_sub_ps(A, B);
1985 int test_mm_testc_pd(__m128d A, __m128d B) {
1986 // CHECK-LABEL: test_mm_testc_pd
1987 // CHECK: call i32 @llvm.x86.avx.vtestc.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
1988 return _mm_testc_pd(A, B);
1991 int test_mm256_testc_pd(__m256d A, __m256d B) {
1992 // CHECK-LABEL: test_mm256_testc_pd
1993 // CHECK: call i32 @llvm.x86.avx.vtestc.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1994 return _mm256_testc_pd(A, B);
1997 int test_mm_testc_ps(__m128 A, __m128 B) {
1998 // CHECK-LABEL: test_mm_testc_ps
1999 // CHECK: call i32 @llvm.x86.avx.vtestc.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}})
2000 return _mm_testc_ps(A, B);
2003 int test_mm256_testc_ps(__m256 A, __m256 B) {
2004 // CHECK-LABEL: test_mm256_testc_ps
2005 // CHECK: call i32 @llvm.x86.avx.vtestc.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
2006 return _mm256_testc_ps(A, B);
2009 int test_mm256_testc_si256(__m256i A, __m256i B) {
2010 // CHECK-LABEL: test_mm256_testc_si256
2011 // CHECK: call i32 @llvm.x86.avx.ptestc.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}})
2012 return _mm256_testc_si256(A, B);
2015 int test_mm_testnzc_pd(__m128d A, __m128d B) {
2016 // CHECK-LABEL: test_mm_testnzc_pd
2017 // CHECK: call i32 @llvm.x86.avx.vtestnzc.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
2018 return _mm_testnzc_pd(A, B);
2021 int test_mm256_testnzc_pd(__m256d A, __m256d B) {
2022 // CHECK-LABEL: test_mm256_testnzc_pd
2023 // CHECK: call i32 @llvm.x86.avx.vtestnzc.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
2024 return _mm256_testnzc_pd(A, B);
2027 int test_mm_testnzc_ps(__m128 A, __m128 B) {
2028 // CHECK-LABEL: test_mm_testnzc_ps
2029 // CHECK: call i32 @llvm.x86.avx.vtestnzc.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}})
2030 return _mm_testnzc_ps(A, B);
2033 int test_mm256_testnzc_ps(__m256 A, __m256 B) {
2034 // CHECK-LABEL: test_mm256_testnzc_ps
2035 // CHECK: call i32 @llvm.x86.avx.vtestnzc.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
2036 return _mm256_testnzc_ps(A, B);
2039 int test_mm256_testnzc_si256(__m256i A, __m256i B) {
2040 // CHECK-LABEL: test_mm256_testnzc_si256
2041 // CHECK: call i32 @llvm.x86.avx.ptestnzc.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}})
2042 return _mm256_testnzc_si256(A, B);
2045 int test_mm_testz_pd(__m128d A, __m128d B) {
2046 // CHECK-LABEL: test_mm_testz_pd
2047 // CHECK: call i32 @llvm.x86.avx.vtestz.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
2048 return _mm_testz_pd(A, B);
2051 int test_mm256_testz_pd(__m256d A, __m256d B) {
2052 // CHECK-LABEL: test_mm256_testz_pd
2053 // CHECK: call i32 @llvm.x86.avx.vtestz.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
2054 return _mm256_testz_pd(A, B);
2057 int test_mm_testz_ps(__m128 A, __m128 B) {
2058 // CHECK-LABEL: test_mm_testz_ps
2059 // CHECK: call i32 @llvm.x86.avx.vtestz.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}})
2060 return _mm_testz_ps(A, B);
2063 int test_mm256_testz_ps(__m256 A, __m256 B) {
2064 // CHECK-LABEL: test_mm256_testz_ps
2065 // CHECK: call i32 @llvm.x86.avx.vtestz.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
2066 return _mm256_testz_ps(A, B);
2069 int test_mm256_testz_si256(__m256i A, __m256i B) {
2070 // CHECK-LABEL: test_mm256_testz_si256
2071 // CHECK: call i32 @llvm.x86.avx.ptestz.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}})
2072 return _mm256_testz_si256(A, B);
2075 __m256 test_mm256_undefined_ps(void) {
2076 // X64-LABEL: test_mm256_undefined_ps
2077 // X64: ret <8 x float> zeroinitializer
2079 // X86-LABEL: test_mm256_undefined_ps
2080 // X86: store <8 x float> zeroinitializer
2081 return _mm256_undefined_ps();
2084 __m256d test_mm256_undefined_pd(void) {
2085 // X64-LABEL: test_mm256_undefined_pd
2086 // X64: ret <4 x double> zeroinitializer
2088 // X86-LABEL: test_mm256_undefined_pd
2089 // X86: store <4 x double> zeroinitializer
2090 return _mm256_undefined_pd();
2093 __m256i test_mm256_undefined_si256(void) {
2094 // X64-LABEL: test_mm256_undefined_si256
2095 // X64: ret <4 x i64> zeroinitializer
2097 // X86-LABEL: test_mm256_undefined_si256
2098 // X86: store <4 x i64> zeroinitializer
2099 return _mm256_undefined_si256();
2102 __m256d test_mm256_unpackhi_pd(__m256d A, __m256d B) {
2103 // CHECK-LABEL: test_mm256_unpackhi_pd
2104 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2105 return _mm256_unpackhi_pd(A, B);
2108 __m256 test_mm256_unpackhi_ps(__m256 A, __m256 B) {
2109 // CHECK-LABEL: test_mm256_unpackhi_ps
2110 // 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>
2111 return _mm256_unpackhi_ps(A, B);
2114 __m256d test_mm256_unpacklo_pd(__m256d A, __m256d B) {
2115 // CHECK-LABEL: test_mm256_unpacklo_pd
2116 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2117 return _mm256_unpacklo_pd(A, B);
2120 __m256 test_mm256_unpacklo_ps(__m256 A, __m256 B) {
2121 // CHECK-LABEL: test_mm256_unpacklo_ps
2122 // 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>
2123 return _mm256_unpacklo_ps(A, B);
2126 __m256d test_mm256_xor_pd(__m256d A, __m256d B) {
2127 // CHECK-LABEL: test_mm256_xor_pd
2128 // CHECK: xor <4 x i64>
2129 return _mm256_xor_pd(A, B);
2132 __m256 test_mm256_xor_ps(__m256 A, __m256 B) {
2133 // CHECK-LABEL: test_mm256_xor_ps
2134 // CHECK: xor <8 x i32>
2135 return _mm256_xor_ps(A, B);
2138 void test_mm256_zeroall(void) {
2139 // CHECK-LABEL: test_mm256_zeroall
2140 // CHECK: call void @llvm.x86.avx.vzeroall()
2141 return _mm256_zeroall();
2144 void test_mm256_zeroupper(void) {
2145 // CHECK-LABEL: test_mm256_zeroupper
2146 // CHECK: call void @llvm.x86.avx.vzeroupper()
2147 return _mm256_zeroupper();
2150 __m256d test_mm256_zextpd128_pd256(__m128d A) {
2151 // CHECK-LABEL: test_mm256_zextpd128_pd256
2152 // CHECK: store <2 x double> zeroinitializer
2153 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
2154 return _mm256_zextpd128_pd256(A);
2157 __m256 test_mm256_zextps128_ps256(__m128 A) {
2158 // CHECK-LABEL: test_mm256_zextps128_ps256
2159 // CHECK: store <4 x float> zeroinitializer
2160 // 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>
2161 return _mm256_zextps128_ps256(A);
2164 __m256i test_mm256_zextsi128_si256(__m128i A) {
2165 // CHECK-LABEL: test_mm256_zextsi128_si256
2166 // CHECK: store <2 x i64> zeroinitializer
2167 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
2168 return _mm256_zextsi128_si256(A);
2171 double test_mm256_cvtsd_f64(__m256d __a)
2173 // CHECK-LABEL: test_mm256_cvtsd_f64
2174 // CHECK: extractelement <4 x double> %{{.*}}, i32 0
2175 return _mm256_cvtsd_f64(__a);
2178 int test_mm256_cvtsi256_si32(__m256i __a)
2180 // CHECK-LABEL: test_mm256_cvtsi256_si32
2181 // CHECK: extractelement <8 x i32> %{{.*}}, i32 0
2182 return _mm256_cvtsi256_si32(__a);
2185 float test_mm256_cvtss_f32(__m256 __a)
2187 // CHECK-LABEL: test_mm256_cvtss_f32
2188 // CHECK: extractelement <8 x float> %{{.*}}, i32 0
2189 return _mm256_cvtss_f32(__a);