1 // RUN: %clang_cc1 -x c -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 -x c -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 -x c -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 -x c -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 -x c -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
6 // RUN: %clang_cc1 -x c++ -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
7 // RUN: %clang_cc1 -x c++ -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
8 // RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes=CHECK,X86
9 // RUN: %clang_cc1 -x c++ -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
10 // RUN: %clang_cc1 -x c++ -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
13 #include <immintrin.h>
14 #include "builtin_test_helpers.h"
16 // NOTE: This should match the tests in llvm/test/CodeGen/X86/avx-intrinsics-fast-isel.ll
18 __m256d
test_mm256_add_pd(__m256d A
, __m256d B
) {
19 // CHECK-LABEL: test_mm256_add_pd
20 // CHECK: fadd <4 x double>
21 return _mm256_add_pd(A
, B
);
24 __m256
test_mm256_add_ps(__m256 A
, __m256 B
) {
25 // CHECK-LABEL: test_mm256_add_ps
26 // CHECK: fadd <8 x float>
27 return _mm256_add_ps(A
, B
);
30 __m256d
test_mm256_addsub_pd(__m256d A
, __m256d B
) {
31 // CHECK-LABEL: test_mm256_addsub_pd
32 // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.addsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
33 return _mm256_addsub_pd(A
, B
);
36 __m256
test_mm256_addsub_ps(__m256 A
, __m256 B
) {
37 // CHECK-LABEL: test_mm256_addsub_ps
38 // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.addsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
39 return _mm256_addsub_ps(A
, B
);
42 __m256d
test_mm256_and_pd(__m256d A
, __m256d B
) {
43 // CHECK-LABEL: test_mm256_and_pd
44 // CHECK: and <4 x i64>
45 return _mm256_and_pd(A
, B
);
48 __m256
test_mm256_and_ps(__m256 A
, __m256 B
) {
49 // CHECK-LABEL: test_mm256_and_ps
50 // CHECK: and <8 x i32>
51 return _mm256_and_ps(A
, B
);
54 __m256d
test_mm256_andnot_pd(__m256d A
, __m256d B
) {
55 // CHECK-LABEL: test_mm256_andnot_pd
56 // CHECK: xor <4 x i64> %{{.*}}, splat (i64 -1)
57 // CHECK: and <4 x i64>
58 return _mm256_andnot_pd(A
, B
);
61 __m256
test_mm256_andnot_ps(__m256 A
, __m256 B
) {
62 // CHECK-LABEL: test_mm256_andnot_ps
63 // CHECK: xor <8 x i32> %{{.*}}, splat (i32 -1)
64 // CHECK: and <8 x i32>
65 return _mm256_andnot_ps(A
, B
);
68 __m256d
test_mm256_blend_pd(__m256d A
, __m256d B
) {
69 // CHECK-LABEL: test_mm256_blend_pd
70 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
71 return _mm256_blend_pd(A
, B
, 0x05);
74 __m256
test_mm256_blend_ps(__m256 A
, __m256 B
) {
75 // CHECK-LABEL: test_mm256_blend_ps
76 // 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>
77 return _mm256_blend_ps(A
, B
, 0x35);
80 __m256d
test_mm256_blendv_pd(__m256d V1
, __m256d V2
, __m256d V3
) {
81 // CHECK-LABEL: test_mm256_blendv_pd
82 // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})
83 return _mm256_blendv_pd(V1
, V2
, V3
);
86 __m256
test_mm256_blendv_ps(__m256 V1
, __m256 V2
, __m256 V3
) {
87 // CHECK-LABEL: test_mm256_blendv_ps
88 // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})
89 return _mm256_blendv_ps(V1
, V2
, V3
);
92 __m256d
test_mm256_broadcast_pd(__m128d
* A
) {
93 // CHECK-LABEL: test_mm256_broadcast_pd
94 // CHECK: load <2 x double>, ptr %{{.*}}, align 1{{$}}
95 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
96 return _mm256_broadcast_pd(A
);
99 __m256
test_mm256_broadcast_ps(__m128
* A
) {
100 // CHECK-LABEL: test_mm256_broadcast_ps
101 // CHECK: load <4 x float>, ptr %{{.*}}, align 1{{$}}
102 // 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>
103 return _mm256_broadcast_ps(A
);
106 __m256d
test_mm256_broadcast_sd(double* A
) {
107 // CHECK-LABEL: test_mm256_broadcast_sd
108 // CHECK: load double, ptr %{{.*}}, align 1{{$}}
109 // CHECK: insertelement <4 x double> poison, double %{{.*}}, i32 0
110 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
111 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
112 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
113 return _mm256_broadcast_sd(A
);
116 __m128
test_mm_broadcast_ss(float* A
) {
117 // CHECK-LABEL: test_mm_broadcast_ss
118 // CHECK: load float, ptr %{{.*}}, align 1{{$}}
119 // CHECK: insertelement <4 x float> poison, float %{{.*}}, i32 0
120 // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 1
121 // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 2
122 // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 3
123 return _mm_broadcast_ss(A
);
126 __m256
test_mm256_broadcast_ss(float* A
) {
127 // CHECK-LABEL: test_mm256_broadcast_ss
128 // CHECK: load float, ptr %{{.*}}, align 1{{$}}
129 // CHECK: insertelement <8 x float> poison, float %{{.*}}, i32 0
130 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
131 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
132 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
133 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
134 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
135 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
136 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
137 return _mm256_broadcast_ss(A
);
140 __m256
test_mm256_castpd_ps(__m256d A
) {
141 // CHECK-LABEL: test_mm256_castpd_ps
142 return _mm256_castpd_ps(A
);
145 __m256i
test_mm256_castpd_si256(__m256d A
) {
146 // CHECK-LABEL: test_mm256_castpd_si256
147 return _mm256_castpd_si256(A
);
150 __m256d
test_mm256_castpd128_pd256(__m128d A
) {
151 // CHECK-LABEL: test_mm256_castpd128_pd256
152 // CHECK: [[A:%.*]] = freeze <2 x double> poison
153 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> [[A]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
154 return _mm256_castpd128_pd256(A
);
157 __m128d
test_mm256_castpd256_pd128(__m256d A
) {
158 // CHECK-LABEL: test_mm256_castpd256_pd128
159 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <2 x i32> <i32 0, i32 1>
160 return _mm256_castpd256_pd128(A
);
163 __m256d
test_mm256_castps_pd(__m256 A
) {
164 // CHECK-LABEL: test_mm256_castps_pd
165 return _mm256_castps_pd(A
);
168 __m256i
test_mm256_castps_si256(__m256 A
) {
169 // CHECK-LABEL: test_mm256_castps_si256
170 return _mm256_castps_si256(A
);
173 __m256
test_mm256_castps128_ps256(__m128 A
) {
174 // CHECK-LABEL: test_mm256_castps128_ps256
175 // CHECK: [[A:%.*]] = freeze <4 x float> poison
176 // 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>
177 return _mm256_castps128_ps256(A
);
180 __m128
test_mm256_castps256_ps128(__m256 A
) {
181 // CHECK-LABEL: test_mm256_castps256_ps128
182 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
183 return _mm256_castps256_ps128(A
);
186 __m256i
test_mm256_castsi128_si256(__m128i A
) {
187 // CHECK-LABEL: test_mm256_castsi128_si256
188 // CHECK: [[A:%.*]] = freeze <2 x i64> poison
189 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> [[A]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
190 return _mm256_castsi128_si256(A
);
193 __m256d
test_mm256_castsi256_pd(__m256i A
) {
194 // CHECK-LABEL: test_mm256_castsi256_pd
195 return _mm256_castsi256_pd(A
);
198 __m256
test_mm256_castsi256_ps(__m256i A
) {
199 // CHECK-LABEL: test_mm256_castsi256_ps
200 return _mm256_castsi256_ps(A
);
203 __m128i
test_mm256_castsi256_si128(__m256i A
) {
204 // CHECK-LABEL: test_mm256_castsi256_si128
205 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <2 x i32> <i32 0, i32 1>
206 return _mm256_castsi256_si128(A
);
209 __m256d
test_mm256_ceil_pd(__m256d x
) {
210 // CHECK-LABEL: test_mm256_ceil_pd
211 // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %{{.*}}, i32 2)
212 return _mm256_ceil_pd(x
);
215 __m256
test_mm_ceil_ps(__m256 x
) {
216 // CHECK-LABEL: test_mm_ceil_ps
217 // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %{{.*}}, i32 2)
218 return _mm256_ceil_ps(x
);
221 __m256d
test_mm256_cmp_pd_eq_oq(__m256d a
, __m256d b
) {
222 // CHECK-LABEL: test_mm256_cmp_pd_eq_oq
223 // CHECK: fcmp oeq <4 x double> %{{.*}}, %{{.*}}
224 return _mm256_cmp_pd(a
, b
, _CMP_EQ_OQ
);
227 __m256d
test_mm256_cmp_pd_lt_os(__m256d a
, __m256d b
) {
228 // CHECK-LABEL: test_mm256_cmp_pd_lt_os
229 // CHECK: fcmp olt <4 x double> %{{.*}}, %{{.*}}
230 return _mm256_cmp_pd(a
, b
, _CMP_LT_OS
);
233 __m256d
test_mm256_cmp_pd_le_os(__m256d a
, __m256d b
) {
234 // CHECK-LABEL: test_mm256_cmp_pd_le_os
235 // CHECK: fcmp ole <4 x double> %{{.*}}, %{{.*}}
236 return _mm256_cmp_pd(a
, b
, _CMP_LE_OS
);
239 __m256d
test_mm256_cmp_pd_unord_q(__m256d a
, __m256d b
) {
240 // CHECK-LABEL: test_mm256_cmp_pd_unord_q
241 // CHECK: fcmp uno <4 x double> %{{.*}}, %{{.*}}
242 return _mm256_cmp_pd(a
, b
, _CMP_UNORD_Q
);
245 __m256d
test_mm256_cmp_pd_neq_uq(__m256d a
, __m256d b
) {
246 // CHECK-LABEL: test_mm256_cmp_pd_neq_uq
247 // CHECK: fcmp une <4 x double> %{{.*}}, %{{.*}}
248 return _mm256_cmp_pd(a
, b
, _CMP_NEQ_UQ
);
251 __m256d
test_mm256_cmp_pd_nlt_us(__m256d a
, __m256d b
) {
252 // CHECK-LABEL: test_mm256_cmp_pd_nlt_us
253 // CHECK: fcmp uge <4 x double> %{{.*}}, %{{.*}}
254 return _mm256_cmp_pd(a
, b
, _CMP_NLT_US
);
257 __m256d
test_mm256_cmp_pd_nle_us(__m256d a
, __m256d b
) {
258 // CHECK-LABEL: test_mm256_cmp_pd_nle_us
259 // CHECK: fcmp ugt <4 x double> %{{.*}}, %{{.*}}
260 return _mm256_cmp_pd(a
, b
, _CMP_NLE_US
);
263 __m256d
test_mm256_cmp_pd_ord_q(__m256d a
, __m256d b
) {
264 // CHECK-LABEL: test_mm256_cmp_pd_ord_q
265 // CHECK: fcmp ord <4 x double> %{{.*}}, %{{.*}}
266 return _mm256_cmp_pd(a
, b
, _CMP_ORD_Q
);
269 __m256d
test_mm256_cmp_pd_eq_uq(__m256d a
, __m256d b
) {
270 // CHECK-LABEL: test_mm256_cmp_pd_eq_uq
271 // CHECK: fcmp ueq <4 x double> %{{.*}}, %{{.*}}
272 return _mm256_cmp_pd(a
, b
, _CMP_EQ_UQ
);
275 __m256d
test_mm256_cmp_pd_nge_us(__m256d a
, __m256d b
) {
276 // CHECK-LABEL: test_mm256_cmp_pd_nge_us
277 // CHECK: fcmp ult <4 x double> %{{.*}}, %{{.*}}
278 return _mm256_cmp_pd(a
, b
, _CMP_NGE_US
);
281 __m256d
test_mm256_cmp_pd_ngt_us(__m256d a
, __m256d b
) {
282 // CHECK-LABEL: test_mm256_cmp_pd_ngt_us
283 // CHECK: fcmp ule <4 x double> %{{.*}}, %{{.*}}
284 return _mm256_cmp_pd(a
, b
, _CMP_NGT_US
);
287 __m256d
test_mm256_cmp_pd_false_oq(__m256d a
, __m256d b
) {
288 // CHECK-LABEL: test_mm256_cmp_pd_false_oq
289 // CHECK: fcmp false <4 x double> %{{.*}}, %{{.*}}
290 return _mm256_cmp_pd(a
, b
, _CMP_FALSE_OQ
);
293 __m256d
test_mm256_cmp_pd_neq_oq(__m256d a
, __m256d b
) {
294 // CHECK-LABEL: test_mm256_cmp_pd_neq_oq
295 // CHECK: fcmp one <4 x double> %{{.*}}, %{{.*}}
296 return _mm256_cmp_pd(a
, b
, _CMP_NEQ_OQ
);
299 __m256d
test_mm256_cmp_pd_ge_os(__m256d a
, __m256d b
) {
300 // CHECK-LABEL: test_mm256_cmp_pd_ge_os
301 // CHECK: fcmp oge <4 x double> %{{.*}}, %{{.*}}
302 return _mm256_cmp_pd(a
, b
, _CMP_GE_OS
);
305 __m256d
test_mm256_cmp_pd_gt_os(__m256d a
, __m256d b
) {
306 // CHECK-LABEL: test_mm256_cmp_pd_gt_os
307 // CHECK: fcmp ogt <4 x double> %{{.*}}, %{{.*}}
308 return _mm256_cmp_pd(a
, b
, _CMP_GT_OS
);
311 __m256d
test_mm256_cmp_pd_true_uq(__m256d a
, __m256d b
) {
312 // CHECK-LABEL: test_mm256_cmp_pd_true_uq
313 // CHECK: fcmp true <4 x double> %{{.*}}, %{{.*}}
314 return _mm256_cmp_pd(a
, b
, _CMP_TRUE_UQ
);
317 __m256d
test_mm256_cmp_pd_eq_os(__m256d a
, __m256d b
) {
318 // CHECK-LABEL: test_mm256_cmp_pd_eq_os
319 // CHECK: fcmp oeq <4 x double> %{{.*}}, %{{.*}}
320 return _mm256_cmp_pd(a
, b
, _CMP_EQ_OS
);
323 __m256d
test_mm256_cmp_pd_lt_oq(__m256d a
, __m256d b
) {
324 // CHECK-LABEL: test_mm256_cmp_pd_lt_oq
325 // CHECK: fcmp olt <4 x double> %{{.*}}, %{{.*}}
326 return _mm256_cmp_pd(a
, b
, _CMP_LT_OQ
);
329 __m256d
test_mm256_cmp_pd_le_oq(__m256d a
, __m256d b
) {
330 // CHECK-LABEL: test_mm256_cmp_pd_le_oq
331 // CHECK: fcmp ole <4 x double> %{{.*}}, %{{.*}}
332 return _mm256_cmp_pd(a
, b
, _CMP_LE_OQ
);
335 __m256d
test_mm256_cmp_pd_unord_s(__m256d a
, __m256d b
) {
336 // CHECK-LABEL: test_mm256_cmp_pd_unord_s
337 // CHECK: fcmp uno <4 x double> %{{.*}}, %{{.*}}
338 return _mm256_cmp_pd(a
, b
, _CMP_UNORD_S
);
341 __m256d
test_mm256_cmp_pd_neq_us(__m256d a
, __m256d b
) {
342 // CHECK-LABEL: test_mm256_cmp_pd_neq_us
343 // CHECK: fcmp une <4 x double> %{{.*}}, %{{.*}}
344 return _mm256_cmp_pd(a
, b
, _CMP_NEQ_US
);
347 __m256d
test_mm256_cmp_pd_nlt_uq(__m256d a
, __m256d b
) {
348 // CHECK-LABEL: test_mm256_cmp_pd_nlt_uq
349 // CHECK: fcmp uge <4 x double> %{{.*}}, %{{.*}}
350 return _mm256_cmp_pd(a
, b
, _CMP_NLT_UQ
);
353 __m256d
test_mm256_cmp_pd_nle_uq(__m256d a
, __m256d b
) {
354 // CHECK-LABEL: test_mm256_cmp_pd_nle_uq
355 // CHECK: fcmp ugt <4 x double> %{{.*}}, %{{.*}}
356 return _mm256_cmp_pd(a
, b
, _CMP_NLE_UQ
);
359 __m256d
test_mm256_cmp_pd_ord_s(__m256d a
, __m256d b
) {
360 // CHECK-LABEL: test_mm256_cmp_pd_ord_s
361 // CHECK: fcmp ord <4 x double> %{{.*}}, %{{.*}}
362 return _mm256_cmp_pd(a
, b
, _CMP_ORD_S
);
365 __m256d
test_mm256_cmp_pd_eq_us(__m256d a
, __m256d b
) {
366 // CHECK-LABEL: test_mm256_cmp_pd_eq_us
367 // CHECK: fcmp ueq <4 x double> %{{.*}}, %{{.*}}
368 return _mm256_cmp_pd(a
, b
, _CMP_EQ_US
);
371 __m256d
test_mm256_cmp_pd_nge_uq(__m256d a
, __m256d b
) {
372 // CHECK-LABEL: test_mm256_cmp_pd_nge_uq
373 // CHECK: fcmp ult <4 x double> %{{.*}}, %{{.*}}
374 return _mm256_cmp_pd(a
, b
, _CMP_NGE_UQ
);
377 __m256d
test_mm256_cmp_pd_ngt_uq(__m256d a
, __m256d b
) {
378 // CHECK-LABEL: test_mm256_cmp_pd_ngt_uq
379 // CHECK: fcmp ule <4 x double> %{{.*}}, %{{.*}}
380 return _mm256_cmp_pd(a
, b
, _CMP_NGT_UQ
);
383 __m256d
test_mm256_cmp_pd_false_os(__m256d a
, __m256d b
) {
384 // CHECK-LABEL: test_mm256_cmp_pd_false_os
385 // CHECK: fcmp false <4 x double> %{{.*}}, %{{.*}}
386 return _mm256_cmp_pd(a
, b
, _CMP_FALSE_OS
);
389 __m256d
test_mm256_cmp_pd_neq_os(__m256d a
, __m256d b
) {
390 // CHECK-LABEL: test_mm256_cmp_pd_neq_os
391 // CHECK: fcmp one <4 x double> %{{.*}}, %{{.*}}
392 return _mm256_cmp_pd(a
, b
, _CMP_NEQ_OS
);
395 __m256d
test_mm256_cmp_pd_ge_oq(__m256d a
, __m256d b
) {
396 // CHECK-LABEL: test_mm256_cmp_pd_ge_oq
397 // CHECK: fcmp oge <4 x double> %{{.*}}, %{{.*}}
398 return _mm256_cmp_pd(a
, b
, _CMP_GE_OQ
);
401 __m256d
test_mm256_cmp_pd_gt_oq(__m256d a
, __m256d b
) {
402 // CHECK-LABEL: test_mm256_cmp_pd_gt_oq
403 // CHECK: fcmp ogt <4 x double> %{{.*}}, %{{.*}}
404 return _mm256_cmp_pd(a
, b
, _CMP_GT_OQ
);
407 __m256d
test_mm256_cmp_pd_true_us(__m256d a
, __m256d b
) {
408 // CHECK-LABEL: test_mm256_cmp_pd_true_us
409 // CHECK: fcmp true <4 x double> %{{.*}}, %{{.*}}
410 return _mm256_cmp_pd(a
, b
, _CMP_TRUE_US
);
413 __m256
test_mm256_cmp_ps_eq_oq(__m256 a
, __m256 b
) {
414 // CHECK-LABEL: test_mm256_cmp_ps_eq_oq
415 // CHECK: fcmp oeq <8 x float> %{{.*}}, %{{.*}}
416 return _mm256_cmp_ps(a
, b
, _CMP_EQ_OQ
);
419 __m256
test_mm256_cmp_ps_lt_os(__m256 a
, __m256 b
) {
420 // CHECK-LABEL: test_mm256_cmp_ps_lt_os
421 // CHECK: fcmp olt <8 x float> %{{.*}}, %{{.*}}
422 return _mm256_cmp_ps(a
, b
, _CMP_LT_OS
);
425 __m256
test_mm256_cmp_ps_le_os(__m256 a
, __m256 b
) {
426 // CHECK-LABEL: test_mm256_cmp_ps_le_os
427 // CHECK: fcmp ole <8 x float> %{{.*}}, %{{.*}}
428 return _mm256_cmp_ps(a
, b
, _CMP_LE_OS
);
431 __m256
test_mm256_cmp_ps_unord_q(__m256 a
, __m256 b
) {
432 // CHECK-LABEL: test_mm256_cmp_ps_unord_q
433 // CHECK: fcmp uno <8 x float> %{{.*}}, %{{.*}}
434 return _mm256_cmp_ps(a
, b
, _CMP_UNORD_Q
);
437 __m256
test_mm256_cmp_ps_neq_uq(__m256 a
, __m256 b
) {
438 // CHECK-LABEL: test_mm256_cmp_ps_neq_uq
439 // CHECK: fcmp une <8 x float> %{{.*}}, %{{.*}}
440 return _mm256_cmp_ps(a
, b
, _CMP_NEQ_UQ
);
443 __m256
test_mm256_cmp_ps_nlt_us(__m256 a
, __m256 b
) {
444 // CHECK-LABEL: test_mm256_cmp_ps_nlt_us
445 // CHECK: fcmp uge <8 x float> %{{.*}}, %{{.*}}
446 return _mm256_cmp_ps(a
, b
, _CMP_NLT_US
);
449 __m256
test_mm256_cmp_ps_nle_us(__m256 a
, __m256 b
) {
450 // CHECK-LABEL: test_mm256_cmp_ps_nle_us
451 // CHECK: fcmp ugt <8 x float> %{{.*}}, %{{.*}}
452 return _mm256_cmp_ps(a
, b
, _CMP_NLE_US
);
455 __m256
test_mm256_cmp_ps_ord_q(__m256 a
, __m256 b
) {
456 // CHECK-LABEL: test_mm256_cmp_ps_ord_q
457 // CHECK: fcmp ord <8 x float> %{{.*}}, %{{.*}}
458 return _mm256_cmp_ps(a
, b
, _CMP_ORD_Q
);
461 __m256
test_mm256_cmp_ps_eq_uq(__m256 a
, __m256 b
) {
462 // CHECK-LABEL: test_mm256_cmp_ps_eq_uq
463 // CHECK: fcmp ueq <8 x float> %{{.*}}, %{{.*}}
464 return _mm256_cmp_ps(a
, b
, _CMP_EQ_UQ
);
467 __m256
test_mm256_cmp_ps_nge_us(__m256 a
, __m256 b
) {
468 // CHECK-LABEL: test_mm256_cmp_ps_nge_us
469 // CHECK: fcmp ult <8 x float> %{{.*}}, %{{.*}}
470 return _mm256_cmp_ps(a
, b
, _CMP_NGE_US
);
473 __m256
test_mm256_cmp_ps_ngt_us(__m256 a
, __m256 b
) {
474 // CHECK-LABEL: test_mm256_cmp_ps_ngt_us
475 // CHECK: fcmp ule <8 x float> %{{.*}}, %{{.*}}
476 return _mm256_cmp_ps(a
, b
, _CMP_NGT_US
);
479 __m256
test_mm256_cmp_ps_false_oq(__m256 a
, __m256 b
) {
480 // CHECK-LABEL: test_mm256_cmp_ps_false_oq
481 // CHECK: fcmp false <8 x float> %{{.*}}, %{{.*}}
482 return _mm256_cmp_ps(a
, b
, _CMP_FALSE_OQ
);
485 __m256
test_mm256_cmp_ps_neq_oq(__m256 a
, __m256 b
) {
486 // CHECK-LABEL: test_mm256_cmp_ps_neq_oq
487 // CHECK: fcmp one <8 x float> %{{.*}}, %{{.*}}
488 return _mm256_cmp_ps(a
, b
, _CMP_NEQ_OQ
);
491 __m256
test_mm256_cmp_ps_ge_os(__m256 a
, __m256 b
) {
492 // CHECK-LABEL: test_mm256_cmp_ps_ge_os
493 // CHECK: fcmp oge <8 x float> %{{.*}}, %{{.*}}
494 return _mm256_cmp_ps(a
, b
, _CMP_GE_OS
);
497 __m256
test_mm256_cmp_ps_gt_os(__m256 a
, __m256 b
) {
498 // CHECK-LABEL: test_mm256_cmp_ps_gt_os
499 // CHECK: fcmp ogt <8 x float> %{{.*}}, %{{.*}}
500 return _mm256_cmp_ps(a
, b
, _CMP_GT_OS
);
503 __m256
test_mm256_cmp_ps_true_uq(__m256 a
, __m256 b
) {
504 // CHECK-LABEL: test_mm256_cmp_ps_true_uq
505 // CHECK: fcmp true <8 x float> %{{.*}}, %{{.*}}
506 return _mm256_cmp_ps(a
, b
, _CMP_TRUE_UQ
);
509 __m256
test_mm256_cmp_ps_eq_os(__m256 a
, __m256 b
) {
510 // CHECK-LABEL: test_mm256_cmp_ps_eq_os
511 // CHECK: fcmp oeq <8 x float> %{{.*}}, %{{.*}}
512 return _mm256_cmp_ps(a
, b
, _CMP_EQ_OS
);
515 __m256
test_mm256_cmp_ps_lt_oq(__m256 a
, __m256 b
) {
516 // CHECK-LABEL: test_mm256_cmp_ps_lt_oq
517 // CHECK: fcmp olt <8 x float> %{{.*}}, %{{.*}}
518 return _mm256_cmp_ps(a
, b
, _CMP_LT_OQ
);
521 __m256
test_mm256_cmp_ps_le_oq(__m256 a
, __m256 b
) {
522 // CHECK-LABEL: test_mm256_cmp_ps_le_oq
523 // CHECK: fcmp ole <8 x float> %{{.*}}, %{{.*}}
524 return _mm256_cmp_ps(a
, b
, _CMP_LE_OQ
);
527 __m256
test_mm256_cmp_ps_unord_s(__m256 a
, __m256 b
) {
528 // CHECK-LABEL: test_mm256_cmp_ps_unord_s
529 // CHECK: fcmp uno <8 x float> %{{.*}}, %{{.*}}
530 return _mm256_cmp_ps(a
, b
, _CMP_UNORD_S
);
533 __m256
test_mm256_cmp_ps_neq_us(__m256 a
, __m256 b
) {
534 // CHECK-LABEL: test_mm256_cmp_ps_neq_us
535 // CHECK: fcmp une <8 x float> %{{.*}}, %{{.*}}
536 return _mm256_cmp_ps(a
, b
, _CMP_NEQ_US
);
539 __m256
test_mm256_cmp_ps_nlt_uq(__m256 a
, __m256 b
) {
540 // CHECK-LABEL: test_mm256_cmp_ps_nlt_uq
541 // CHECK: fcmp uge <8 x float> %{{.*}}, %{{.*}}
542 return _mm256_cmp_ps(a
, b
, _CMP_NLT_UQ
);
545 __m256
test_mm256_cmp_ps_nle_uq(__m256 a
, __m256 b
) {
546 // CHECK-LABEL: test_mm256_cmp_ps_nle_uq
547 // CHECK: fcmp ugt <8 x float> %{{.*}}, %{{.*}}
548 return _mm256_cmp_ps(a
, b
, _CMP_NLE_UQ
);
551 __m256
test_mm256_cmp_ps_ord_s(__m256 a
, __m256 b
) {
552 // CHECK-LABEL: test_mm256_cmp_ps_ord_s
553 // CHECK: fcmp ord <8 x float> %{{.*}}, %{{.*}}
554 return _mm256_cmp_ps(a
, b
, _CMP_ORD_S
);
557 __m256
test_mm256_cmp_ps_eq_us(__m256 a
, __m256 b
) {
558 // CHECK-LABEL: test_mm256_cmp_ps_eq_us
559 // CHECK: fcmp ueq <8 x float> %{{.*}}, %{{.*}}
560 return _mm256_cmp_ps(a
, b
, _CMP_EQ_US
);
563 __m256
test_mm256_cmp_ps_nge_uq(__m256 a
, __m256 b
) {
564 // CHECK-LABEL: test_mm256_cmp_ps_nge_uq
565 // CHECK: fcmp ult <8 x float> %{{.*}}, %{{.*}}
566 return _mm256_cmp_ps(a
, b
, _CMP_NGE_UQ
);
569 __m256
test_mm256_cmp_ps_ngt_uq(__m256 a
, __m256 b
) {
570 // CHECK-LABEL: test_mm256_cmp_ps_ngt_uq
571 // CHECK: fcmp ule <8 x float> %{{.*}}, %{{.*}}
572 return _mm256_cmp_ps(a
, b
, _CMP_NGT_UQ
);
575 __m256
test_mm256_cmp_ps_false_os(__m256 a
, __m256 b
) {
576 // CHECK-LABEL: test_mm256_cmp_ps_false_os
577 // CHECK: fcmp false <8 x float> %{{.*}}, %{{.*}}
578 return _mm256_cmp_ps(a
, b
, _CMP_FALSE_OS
);
581 __m256
test_mm256_cmp_ps_neq_os(__m256 a
, __m256 b
) {
582 // CHECK-LABEL: test_mm256_cmp_ps_neq_os
583 // CHECK: fcmp one <8 x float> %{{.*}}, %{{.*}}
584 return _mm256_cmp_ps(a
, b
, _CMP_NEQ_OS
);
587 __m256
test_mm256_cmp_ps_ge_oq(__m256 a
, __m256 b
) {
588 // CHECK-LABEL: test_mm256_cmp_ps_ge_oq
589 // CHECK: fcmp oge <8 x float> %{{.*}}, %{{.*}}
590 return _mm256_cmp_ps(a
, b
, _CMP_GE_OQ
);
593 __m256
test_mm256_cmp_ps_gt_oq(__m256 a
, __m256 b
) {
594 // CHECK-LABEL: test_mm256_cmp_ps_gt_oq
595 // CHECK: fcmp ogt <8 x float> %{{.*}}, %{{.*}}
596 return _mm256_cmp_ps(a
, b
, _CMP_GT_OQ
);
599 __m256
test_mm256_cmp_ps_true_us(__m256 a
, __m256 b
) {
600 // CHECK-LABEL: test_mm256_cmp_ps_true_us
601 // CHECK: fcmp true <8 x float> %{{.*}}, %{{.*}}
602 return _mm256_cmp_ps(a
, b
, _CMP_TRUE_US
);
605 __m128d
test_mm_cmp_pd_eq_uq(__m128d a
, __m128d b
) {
606 // CHECK-LABEL: test_mm_cmp_pd_eq_uq
607 // CHECK: fcmp ueq <2 x double> %{{.*}}, %{{.*}}
608 return _mm_cmp_pd(a
, b
, _CMP_EQ_UQ
);
611 __m128d
test_mm_cmp_pd_nge_us(__m128d a
, __m128d b
) {
612 // CHECK-LABEL: test_mm_cmp_pd_nge_us
613 // CHECK: fcmp ult <2 x double> %{{.*}}, %{{.*}}
614 return _mm_cmp_pd(a
, b
, _CMP_NGE_US
);
617 __m128d
test_mm_cmp_pd_ngt_us(__m128d a
, __m128d b
) {
618 // CHECK-LABEL: test_mm_cmp_pd_ngt_us
619 // CHECK: fcmp ule <2 x double> %{{.*}}, %{{.*}}
620 return _mm_cmp_pd(a
, b
, _CMP_NGT_US
);
623 __m128d
test_mm_cmp_pd_false_oq(__m128d a
, __m128d b
) {
624 // CHECK-LABEL: test_mm_cmp_pd_false_oq
625 // CHECK: fcmp false <2 x double> %{{.*}}, %{{.*}}
626 return _mm_cmp_pd(a
, b
, _CMP_FALSE_OQ
);
629 __m128d
test_mm_cmp_pd_neq_oq(__m128d a
, __m128d b
) {
630 // CHECK-LABEL: test_mm_cmp_pd_neq_oq
631 // CHECK: fcmp one <2 x double> %{{.*}}, %{{.*}}
632 return _mm_cmp_pd(a
, b
, _CMP_NEQ_OQ
);
635 __m128d
test_mm_cmp_pd_ge_os(__m128d a
, __m128d b
) {
636 // CHECK-LABEL: test_mm_cmp_pd_ge_os
637 // CHECK: fcmp oge <2 x double> %{{.*}}, %{{.*}}
638 return _mm_cmp_pd(a
, b
, _CMP_GE_OS
);
641 __m128d
test_mm_cmp_pd_gt_os(__m128d a
, __m128d b
) {
642 // CHECK-LABEL: test_mm_cmp_pd_gt_os
643 // CHECK: fcmp ogt <2 x double> %{{.*}}, %{{.*}}
644 return _mm_cmp_pd(a
, b
, _CMP_GT_OS
);
647 __m128d
test_mm_cmp_pd_true_uq(__m128d a
, __m128d b
) {
648 // CHECK-LABEL: test_mm_cmp_pd_true_uq
649 // CHECK: fcmp true <2 x double> %{{.*}}, %{{.*}}
650 return _mm_cmp_pd(a
, b
, _CMP_TRUE_UQ
);
653 __m128d
test_mm_cmp_pd_eq_os(__m128d a
, __m128d b
) {
654 // CHECK-LABEL: test_mm_cmp_pd_eq_os
655 // CHECK: fcmp oeq <2 x double> %{{.*}}, %{{.*}}
656 return _mm_cmp_pd(a
, b
, _CMP_EQ_OS
);
659 __m128d
test_mm_cmp_pd_lt_oq(__m128d a
, __m128d b
) {
660 // CHECK-LABEL: test_mm_cmp_pd_lt_oq
661 // CHECK: fcmp olt <2 x double> %{{.*}}, %{{.*}}
662 return _mm_cmp_pd(a
, b
, _CMP_LT_OQ
);
665 __m128d
test_mm_cmp_pd_le_oq(__m128d a
, __m128d b
) {
666 // CHECK-LABEL: test_mm_cmp_pd_le_oq
667 // CHECK: fcmp ole <2 x double> %{{.*}}, %{{.*}}
668 return _mm_cmp_pd(a
, b
, _CMP_LE_OQ
);
671 __m128d
test_mm_cmp_pd_unord_s(__m128d a
, __m128d b
) {
672 // CHECK-LABEL: test_mm_cmp_pd_unord_s
673 // CHECK: fcmp uno <2 x double> %{{.*}}, %{{.*}}
674 return _mm_cmp_pd(a
, b
, _CMP_UNORD_S
);
677 __m128d
test_mm_cmp_pd_neq_us(__m128d a
, __m128d b
) {
678 // CHECK-LABEL: test_mm_cmp_pd_neq_us
679 // CHECK: fcmp une <2 x double> %{{.*}}, %{{.*}}
680 return _mm_cmp_pd(a
, b
, _CMP_NEQ_US
);
683 __m128d
test_mm_cmp_pd_nlt_uq(__m128d a
, __m128d b
) {
684 // CHECK-LABEL: test_mm_cmp_pd_nlt_uq
685 // CHECK: fcmp uge <2 x double> %{{.*}}, %{{.*}}
686 return _mm_cmp_pd(a
, b
, _CMP_NLT_UQ
);
689 __m128d
test_mm_cmp_pd_nle_uq(__m128d a
, __m128d b
) {
690 // CHECK-LABEL: test_mm_cmp_pd_nle_uq
691 // CHECK: fcmp ugt <2 x double> %{{.*}}, %{{.*}}
692 return _mm_cmp_pd(a
, b
, _CMP_NLE_UQ
);
695 __m128d
test_mm_cmp_pd_ord_s(__m128d a
, __m128d b
) {
696 // CHECK-LABEL: test_mm_cmp_pd_ord_s
697 // CHECK: fcmp ord <2 x double> %{{.*}}, %{{.*}}
698 return _mm_cmp_pd(a
, b
, _CMP_ORD_S
);
701 __m128d
test_mm_cmp_pd_eq_us(__m128d a
, __m128d b
) {
702 // CHECK-LABEL: test_mm_cmp_pd_eq_us
703 // CHECK: fcmp ueq <2 x double> %{{.*}}, %{{.*}}
704 return _mm_cmp_pd(a
, b
, _CMP_EQ_US
);
707 __m128d
test_mm_cmp_pd_nge_uq(__m128d a
, __m128d b
) {
708 // CHECK-LABEL: test_mm_cmp_pd_nge_uq
709 // CHECK: fcmp ult <2 x double> %{{.*}}, %{{.*}}
710 return _mm_cmp_pd(a
, b
, _CMP_NGE_UQ
);
713 __m128d
test_mm_cmp_pd_ngt_uq(__m128d a
, __m128d b
) {
714 // CHECK-LABEL: test_mm_cmp_pd_ngt_uq
715 // CHECK: fcmp ule <2 x double> %{{.*}}, %{{.*}}
716 return _mm_cmp_pd(a
, b
, _CMP_NGT_UQ
);
719 __m128d
test_mm_cmp_pd_false_os(__m128d a
, __m128d b
) {
720 // CHECK-LABEL: test_mm_cmp_pd_false_os
721 // CHECK: fcmp false <2 x double> %{{.*}}, %{{.*}}
722 return _mm_cmp_pd(a
, b
, _CMP_FALSE_OS
);
725 __m128d
test_mm_cmp_pd_neq_os(__m128d a
, __m128d b
) {
726 // CHECK-LABEL: test_mm_cmp_pd_neq_os
727 // CHECK: fcmp one <2 x double> %{{.*}}, %{{.*}}
728 return _mm_cmp_pd(a
, b
, _CMP_NEQ_OS
);
731 __m128d
test_mm_cmp_pd_ge_oq(__m128d a
, __m128d b
) {
732 // CHECK-LABEL: test_mm_cmp_pd_ge_oq
733 // CHECK: fcmp oge <2 x double> %{{.*}}, %{{.*}}
734 return _mm_cmp_pd(a
, b
, _CMP_GE_OQ
);
737 __m128d
test_mm_cmp_pd_gt_oq(__m128d a
, __m128d b
) {
738 // CHECK-LABEL: test_mm_cmp_pd_gt_oq
739 // CHECK: fcmp ogt <2 x double> %{{.*}}, %{{.*}}
740 return _mm_cmp_pd(a
, b
, _CMP_GT_OQ
);
743 __m128d
test_mm_cmp_pd_true_us(__m128d a
, __m128d b
) {
744 // CHECK-LABEL: test_mm_cmp_pd_true_us
745 // CHECK: fcmp true <2 x double> %{{.*}}, %{{.*}}
746 return _mm_cmp_pd(a
, b
, _CMP_TRUE_US
);
749 __m128
test_mm_cmp_ps_eq_uq(__m128 a
, __m128 b
) {
750 // CHECK-LABEL: test_mm_cmp_ps_eq_uq
751 // CHECK: fcmp ueq <4 x float> %{{.*}}, %{{.*}}
752 return _mm_cmp_ps(a
, b
, _CMP_EQ_UQ
);
755 __m128
test_mm_cmp_ps_nge_us(__m128 a
, __m128 b
) {
756 // CHECK-LABEL: test_mm_cmp_ps_nge_us
757 // CHECK: fcmp ult <4 x float> %{{.*}}, %{{.*}}
758 return _mm_cmp_ps(a
, b
, _CMP_NGE_US
);
761 __m128
test_mm_cmp_ps_ngt_us(__m128 a
, __m128 b
) {
762 // CHECK-LABEL: test_mm_cmp_ps_ngt_us
763 // CHECK: fcmp ule <4 x float> %{{.*}}, %{{.*}}
764 return _mm_cmp_ps(a
, b
, _CMP_NGT_US
);
767 __m128
test_mm_cmp_ps_false_oq(__m128 a
, __m128 b
) {
768 // CHECK-LABEL: test_mm_cmp_ps_false_oq
769 // CHECK: fcmp false <4 x float> %{{.*}}, %{{.*}}
770 return _mm_cmp_ps(a
, b
, _CMP_FALSE_OQ
);
773 __m128
test_mm_cmp_ps_neq_oq(__m128 a
, __m128 b
) {
774 // CHECK-LABEL: test_mm_cmp_ps_neq_oq
775 // CHECK: fcmp one <4 x float> %{{.*}}, %{{.*}}
776 return _mm_cmp_ps(a
, b
, _CMP_NEQ_OQ
);
779 __m128
test_mm_cmp_ps_ge_os(__m128 a
, __m128 b
) {
780 // CHECK-LABEL: test_mm_cmp_ps_ge_os
781 // CHECK: fcmp oge <4 x float> %{{.*}}, %{{.*}}
782 return _mm_cmp_ps(a
, b
, _CMP_GE_OS
);
785 __m128
test_mm_cmp_ps_gt_os(__m128 a
, __m128 b
) {
786 // CHECK-LABEL: test_mm_cmp_ps_gt_os
787 // CHECK: fcmp ogt <4 x float> %{{.*}}, %{{.*}}
788 return _mm_cmp_ps(a
, b
, _CMP_GT_OS
);
791 __m128
test_mm_cmp_ps_true_uq(__m128 a
, __m128 b
) {
792 // CHECK-LABEL: test_mm_cmp_ps_true_uq
793 // CHECK: fcmp true <4 x float> %{{.*}}, %{{.*}}
794 return _mm_cmp_ps(a
, b
, _CMP_TRUE_UQ
);
797 __m128
test_mm_cmp_ps_eq_os(__m128 a
, __m128 b
) {
798 // CHECK-LABEL: test_mm_cmp_ps_eq_os
799 // CHECK: fcmp oeq <4 x float> %{{.*}}, %{{.*}}
800 return _mm_cmp_ps(a
, b
, _CMP_EQ_OS
);
803 __m128
test_mm_cmp_ps_lt_oq(__m128 a
, __m128 b
) {
804 // CHECK-LABEL: test_mm_cmp_ps_lt_oq
805 // CHECK: fcmp olt <4 x float> %{{.*}}, %{{.*}}
806 return _mm_cmp_ps(a
, b
, _CMP_LT_OQ
);
809 __m128
test_mm_cmp_ps_le_oq(__m128 a
, __m128 b
) {
810 // CHECK-LABEL: test_mm_cmp_ps_le_oq
811 // CHECK: fcmp ole <4 x float> %{{.*}}, %{{.*}}
812 return _mm_cmp_ps(a
, b
, _CMP_LE_OQ
);
815 __m128
test_mm_cmp_ps_unord_s(__m128 a
, __m128 b
) {
816 // CHECK-LABEL: test_mm_cmp_ps_unord_s
817 // CHECK: fcmp uno <4 x float> %{{.*}}, %{{.*}}
818 return _mm_cmp_ps(a
, b
, _CMP_UNORD_S
);
821 __m128
test_mm_cmp_ps_neq_us(__m128 a
, __m128 b
) {
822 // CHECK-LABEL: test_mm_cmp_ps_neq_us
823 // CHECK: fcmp une <4 x float> %{{.*}}, %{{.*}}
824 return _mm_cmp_ps(a
, b
, _CMP_NEQ_US
);
827 __m128
test_mm_cmp_ps_nlt_uq(__m128 a
, __m128 b
) {
828 // CHECK-LABEL: test_mm_cmp_ps_nlt_uq
829 // CHECK: fcmp uge <4 x float> %{{.*}}, %{{.*}}
830 return _mm_cmp_ps(a
, b
, _CMP_NLT_UQ
);
833 __m128
test_mm_cmp_ps_nle_uq(__m128 a
, __m128 b
) {
834 // CHECK-LABEL: test_mm_cmp_ps_nle_uq
835 // CHECK: fcmp ugt <4 x float> %{{.*}}, %{{.*}}
836 return _mm_cmp_ps(a
, b
, _CMP_NLE_UQ
);
839 __m128
test_mm_cmp_ps_ord_s(__m128 a
, __m128 b
) {
840 // CHECK-LABEL: test_mm_cmp_ps_ord_s
841 // CHECK: fcmp ord <4 x float> %{{.*}}, %{{.*}}
842 return _mm_cmp_ps(a
, b
, _CMP_ORD_S
);
845 __m128
test_mm_cmp_ps_eq_us(__m128 a
, __m128 b
) {
846 // CHECK-LABEL: test_mm_cmp_ps_eq_us
847 // CHECK: fcmp ueq <4 x float> %{{.*}}, %{{.*}}
848 return _mm_cmp_ps(a
, b
, _CMP_EQ_US
);
851 __m128
test_mm_cmp_ps_nge_uq(__m128 a
, __m128 b
) {
852 // CHECK-LABEL: test_mm_cmp_ps_nge_uq
853 // CHECK: fcmp ult <4 x float> %{{.*}}, %{{.*}}
854 return _mm_cmp_ps(a
, b
, _CMP_NGE_UQ
);
857 __m128
test_mm_cmp_ps_ngt_uq(__m128 a
, __m128 b
) {
858 // CHECK-LABEL: test_mm_cmp_ps_ngt_uq
859 // CHECK: fcmp ule <4 x float> %{{.*}}, %{{.*}}
860 return _mm_cmp_ps(a
, b
, _CMP_NGT_UQ
);
863 __m128
test_mm_cmp_ps_false_os(__m128 a
, __m128 b
) {
864 // CHECK-LABEL: test_mm_cmp_ps_false_os
865 // CHECK: fcmp false <4 x float> %{{.*}}, %{{.*}}
866 return _mm_cmp_ps(a
, b
, _CMP_FALSE_OS
);
869 __m128
test_mm_cmp_ps_neq_os(__m128 a
, __m128 b
) {
870 // CHECK-LABEL: test_mm_cmp_ps_neq_os
871 // CHECK: fcmp one <4 x float> %{{.*}}, %{{.*}}
872 return _mm_cmp_ps(a
, b
, _CMP_NEQ_OS
);
875 __m128
test_mm_cmp_ps_ge_oq(__m128 a
, __m128 b
) {
876 // CHECK-LABEL: test_mm_cmp_ps_ge_oq
877 // CHECK: fcmp oge <4 x float> %{{.*}}, %{{.*}}
878 return _mm_cmp_ps(a
, b
, _CMP_GE_OQ
);
881 __m128
test_mm_cmp_ps_gt_oq(__m128 a
, __m128 b
) {
882 // CHECK-LABEL: test_mm_cmp_ps_gt_oq
883 // CHECK: fcmp ogt <4 x float> %{{.*}}, %{{.*}}
884 return _mm_cmp_ps(a
, b
, _CMP_GT_OQ
);
887 __m128
test_mm_cmp_ps_true_us(__m128 a
, __m128 b
) {
888 // CHECK-LABEL: test_mm_cmp_ps_true_us
889 // CHECK: fcmp true <4 x float> %{{.*}}, %{{.*}}
890 return _mm_cmp_ps(a
, b
, _CMP_TRUE_US
);
893 __m128d
test_mm_cmp_sd(__m128d A
, __m128d B
) {
894 // CHECK-LABEL: test_mm_cmp_sd
895 // CHECK: call {{.*}}<2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 13)
896 return _mm_cmp_sd(A
, B
, _CMP_GE_OS
);
899 __m128
test_mm_cmp_ss(__m128 A
, __m128 B
) {
900 // CHECK-LABEL: test_mm_cmp_ss
901 // CHECK: call {{.*}}<4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 13)
902 return _mm_cmp_ss(A
, B
, _CMP_GE_OS
);
905 __m256d
test_mm256_cvtepi32_pd(__m128i A
) {
906 // CHECK-LABEL: test_mm256_cvtepi32_pd
907 // CHECK: sitofp <4 x i32> %{{.*}} to <4 x double>
908 return _mm256_cvtepi32_pd(A
);
911 __m256
test_mm256_cvtepi32_ps(__m256i A
) {
912 // CHECK-LABEL: test_mm256_cvtepi32_ps
913 // CHECK: sitofp <8 x i32> %{{.*}} to <8 x float>
914 return _mm256_cvtepi32_ps(A
);
917 __m128i
test_mm256_cvtpd_epi32(__m256d A
) {
918 // CHECK-LABEL: test_mm256_cvtpd_epi32
919 // CHECK: call <4 x i32> @llvm.x86.avx.cvt.pd2dq.256(<4 x double> %{{.*}})
920 return _mm256_cvtpd_epi32(A
);
923 __m128
test_mm256_cvtpd_ps(__m256d A
) {
924 // CHECK-LABEL: test_mm256_cvtpd_ps
925 // CHECK: call {{.*}}<4 x float> @llvm.x86.avx.cvt.pd2.ps.256(<4 x double> %{{.*}})
926 return _mm256_cvtpd_ps(A
);
929 __m256i
test_mm256_cvtps_epi32(__m256 A
) {
930 // CHECK-LABEL: test_mm256_cvtps_epi32
931 // CHECK: call <8 x i32> @llvm.x86.avx.cvt.ps2dq.256(<8 x float> %{{.*}})
932 return _mm256_cvtps_epi32(A
);
935 __m256d
test_mm256_cvtps_pd(__m128 A
) {
936 // CHECK-LABEL: test_mm256_cvtps_pd
937 // CHECK: fpext <4 x float> %{{.*}} to <4 x double>
938 return _mm256_cvtps_pd(A
);
941 double test_mm256_cvtsd_f64(__m256d __a
) {
942 // CHECK-LABEL: test_mm256_cvtsd_f64
943 // CHECK: extractelement <4 x double> %{{.*}}, i32 0
944 return _mm256_cvtsd_f64(__a
);
947 int test_mm256_cvtsi256_si32(__m256i __a
) {
948 // CHECK-LABEL: test_mm256_cvtsi256_si32
949 // CHECK: extractelement <8 x i32> %{{.*}}, i32 0
950 return _mm256_cvtsi256_si32(__a
);
953 float test_mm256_cvtss_f32(__m256 __a
) {
954 // CHECK-LABEL: test_mm256_cvtss_f32
955 // CHECK: extractelement <8 x float> %{{.*}}, i32 0
956 return _mm256_cvtss_f32(__a
);
959 __m128i
test_mm256_cvttpd_epi32(__m256d A
) {
960 // CHECK-LABEL: test_mm256_cvttpd_epi32
961 // CHECK: call <4 x i32> @llvm.x86.avx.cvtt.pd2dq.256(<4 x double> %{{.*}})
962 return _mm256_cvttpd_epi32(A
);
965 __m256i
test_mm256_cvttps_epi32(__m256 A
) {
966 // CHECK-LABEL: test_mm256_cvttps_epi32
967 // CHECK: call <8 x i32> @llvm.x86.avx.cvtt.ps2dq.256(<8 x float> %{{.*}})
968 return _mm256_cvttps_epi32(A
);
971 __m256d
test_mm256_div_pd(__m256d A
, __m256d B
) {
972 // CHECK-LABEL: test_mm256_div_pd
973 // CHECK: fdiv <4 x double>
974 return _mm256_div_pd(A
, B
);
977 __m256
test_mm256_div_ps(__m256 A
, __m256 B
) {
978 // CHECK-LABEL: test_mm256_div_ps
979 // CHECK: fdiv <8 x float>
980 return _mm256_div_ps(A
, B
);
983 __m256
test_mm256_dp_ps(__m256 A
, __m256 B
) {
984 // CHECK-LABEL: test_mm256_dp_ps
985 // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.dp.ps.256(<8 x float> {{.*}}, <8 x float> {{.*}}, i8 7)
986 return _mm256_dp_ps(A
, B
, 7);
989 int test_mm256_extract_epi8(__m256i A
) {
990 // CHECK-LABEL: test_mm256_extract_epi8
991 // CHECK: extractelement <32 x i8> %{{.*}}, {{i32|i64}} 31
992 // CHECK: zext i8 %{{.*}} to i32
993 return _mm256_extract_epi8(A
, 31);
996 int test_mm256_extract_epi16(__m256i A
) {
997 // CHECK-LABEL: test_mm256_extract_epi16
998 // CHECK: extractelement <16 x i16> %{{.*}}, {{i32|i64}} 15
999 // CHECK: zext i16 %{{.*}} to i32
1000 return _mm256_extract_epi16(A
, 15);
1003 int test_mm256_extract_epi32(__m256i A
) {
1004 // CHECK-LABEL: test_mm256_extract_epi32
1005 // CHECK: extractelement <8 x i32> %{{.*}}, {{i32|i64}} 7
1006 return _mm256_extract_epi32(A
, 7);
1010 long long test_mm256_extract_epi64(__m256i A
) {
1011 // X64-LABEL: test_mm256_extract_epi64
1012 // X64: extractelement <4 x i64> %{{.*}}, {{i32|i64}} 3
1013 return _mm256_extract_epi64(A
, 3);
1017 __m128d
test_mm256_extractf128_pd(__m256d A
) {
1018 // CHECK-LABEL: test_mm256_extractf128_pd
1019 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <2 x i32> <i32 2, i32 3>
1020 return _mm256_extractf128_pd(A
, 1);
1023 __m128
test_mm256_extractf128_ps(__m256 A
) {
1024 // CHECK-LABEL: test_mm256_extractf128_ps
1025 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
1026 return _mm256_extractf128_ps(A
, 1);
1029 __m128i
test_mm256_extractf128_si256(__m256i A
) {
1030 // CHECK-LABEL: test_mm256_extractf128_si256
1031 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
1032 return _mm256_extractf128_si256(A
, 1);
1035 __m256d
test_mm256_floor_pd(__m256d x
) {
1036 // CHECK-LABEL: test_mm256_floor_pd
1037 // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %{{.*}}, i32 1)
1038 return _mm256_floor_pd(x
);
1041 __m256
test_mm_floor_ps(__m256 x
) {
1042 // CHECK-LABEL: test_mm_floor_ps
1043 // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %{{.*}}, i32 1)
1044 return _mm256_floor_ps(x
);
1047 __m256d
test_mm256_hadd_pd(__m256d A
, __m256d B
) {
1048 // CHECK-LABEL: test_mm256_hadd_pd
1049 // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.hadd.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1050 return _mm256_hadd_pd(A
, B
);
1053 __m256
test_mm256_hadd_ps(__m256 A
, __m256 B
) {
1054 // CHECK-LABEL: test_mm256_hadd_ps
1055 // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.hadd.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1056 return _mm256_hadd_ps(A
, B
);
1059 __m256d
test_mm256_hsub_pd(__m256d A
, __m256d B
) {
1060 // CHECK-LABEL: test_mm256_hsub_pd
1061 // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.hsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1062 return _mm256_hsub_pd(A
, B
);
1065 __m256
test_mm256_hsub_ps(__m256 A
, __m256 B
) {
1066 // CHECK-LABEL: test_mm256_hsub_ps
1067 // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.hsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1068 return _mm256_hsub_ps(A
, B
);
1071 __m256i
test_mm256_insert_epi8(__m256i x
, char b
) {
1072 // CHECK-LABEL: test_mm256_insert_epi8
1073 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, {{i32|i64}} 14
1074 return _mm256_insert_epi8(x
, b
, 14);
1077 __m256i
test_mm256_insert_epi16(__m256i x
, int b
) {
1078 // CHECK-LABEL: test_mm256_insert_epi16
1079 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, {{i32|i64}} 4
1080 return _mm256_insert_epi16(x
, b
, 4);
1083 __m256i
test_mm256_insert_epi32(__m256i x
, int b
) {
1084 // CHECK-LABEL: test_mm256_insert_epi32
1085 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, {{i32|i64}} 5
1086 return _mm256_insert_epi32(x
, b
, 5);
1090 __m256i
test_mm256_insert_epi64(__m256i x
, long long b
) {
1091 // X64-LABEL: test_mm256_insert_epi64
1092 // X64: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, {{i32|i64}} 2
1093 return _mm256_insert_epi64(x
, b
, 2);
1097 __m256d
test_mm256_insertf128_pd(__m256d A
, __m128d B
) {
1098 // CHECK-LABEL: test_mm256_insertf128_pd
1099 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1100 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 4, i32 5, i32 2, i32 3>
1101 return _mm256_insertf128_pd(A
, B
, 0);
1104 __m256
test_mm256_insertf128_ps(__m256 A
, __m128 B
) {
1105 // CHECK-LABEL: test_mm256_insertf128_ps
1106 // 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>
1107 // 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>
1108 return _mm256_insertf128_ps(A
, B
, 1);
1111 __m256i
test_mm256_insertf128_si256(__m256i A
, __m128i B
) {
1112 // CHECK-LABEL: test_mm256_insertf128_si256
1113 // 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>
1114 // 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>
1115 return _mm256_insertf128_si256(A
, B
, 0);
1118 __m256i
test_mm256_lddqu_si256(__m256i
* A
) {
1119 // CHECK-LABEL: test_mm256_lddqu_si256
1120 // CHECK: call <32 x i8> @llvm.x86.avx.ldu.dq.256(ptr %{{.*}})
1121 return _mm256_lddqu_si256(A
);
1124 __m256d
test_mm256_load_pd(double* A
) {
1125 // CHECK-LABEL: test_mm256_load_pd
1126 // CHECK: load <4 x double>, ptr %{{.*}}, align 32
1127 return _mm256_load_pd(A
);
1130 __m256
test_mm256_load_ps(float* A
) {
1131 // CHECK-LABEL: test_mm256_load_ps
1132 // CHECK: load <8 x float>, ptr %{{.*}}, align 32
1133 return _mm256_load_ps(A
);
1136 __m256i
test_mm256_load_si256(__m256i
* A
) {
1137 // CHECK-LABEL: test_mm256_load_si256
1138 // CHECK: load <4 x i64>, ptr %{{.*}}, align 32
1139 return _mm256_load_si256(A
);
1142 __m256d
test_mm256_loadu_pd(double* A
) {
1143 // CHECK-LABEL: test_mm256_loadu_pd
1144 // CHECK: load <4 x double>, ptr %{{.*}}, align 1{{$}}
1145 return _mm256_loadu_pd(A
);
1148 __m256
test_mm256_loadu_ps(float* A
) {
1149 // CHECK-LABEL: test_mm256_loadu_ps
1150 // CHECK: load <8 x float>, ptr %{{.*}}, align 1{{$}}
1151 return _mm256_loadu_ps(A
);
1154 __m256i
test_mm256_loadu_si256(__m256i
* A
) {
1155 // CHECK-LABEL: test_mm256_loadu_si256
1156 // CHECK: load <4 x i64>, ptr %{{.+}}, align 1{{$}}
1157 return _mm256_loadu_si256(A
);
1160 __m256
test_mm256_loadu2_m128(float* A
, float* B
) {
1161 // CHECK-LABEL: test_mm256_loadu2_m128
1162 // CHECK: load <4 x float>, ptr %{{.*}}, align 1{{$}}
1163 // CHECK: load <4 x float>, ptr %{{.*}}, align 1{{$}}
1164 // 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>
1165 return _mm256_loadu2_m128(A
, B
);
1168 __m256d
test_mm256_loadu2_m128d(double* A
, double* B
) {
1169 // CHECK-LABEL: test_mm256_loadu2_m128d
1170 // CHECK: load <2 x double>, ptr %{{.*}}, align 1{{$}}
1171 // CHECK: load <2 x double>, ptr %{{.*}}, align 1{{$}}
1172 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1173 return _mm256_loadu2_m128d(A
, B
);
1176 __m256i
test_mm256_loadu2_m128i(__m128i
* A
, __m128i
* B
) {
1177 // CHECK-LABEL: test_mm256_loadu2_m128i
1178 // CHECK: load <2 x i64>, ptr %{{.*}}, align 1{{$}}
1179 // CHECK: load <2 x i64>, ptr %{{.*}}, align 1{{$}}
1180 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1181 return _mm256_loadu2_m128i(A
, B
);
1184 __m128d
test_mm_maskload_pd(double* A
, __m128i B
) {
1185 // CHECK-LABEL: test_mm_maskload_pd
1186 // CHECK: call {{.*}}<2 x double> @llvm.x86.avx.maskload.pd(ptr %{{.*}}, <2 x i64> %{{.*}})
1187 return _mm_maskload_pd(A
, B
);
1190 __m256d
test_mm256_maskload_pd(double* A
, __m256i B
) {
1191 // CHECK-LABEL: test_mm256_maskload_pd
1192 // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.maskload.pd.256(ptr %{{.*}}, <4 x i64> %{{.*}})
1193 return _mm256_maskload_pd(A
, B
);
1196 __m128
test_mm_maskload_ps(float* A
, __m128i B
) {
1197 // CHECK-LABEL: test_mm_maskload_ps
1198 // CHECK: call {{.*}}<4 x float> @llvm.x86.avx.maskload.ps(ptr %{{.*}}, <4 x i32> %{{.*}})
1199 return _mm_maskload_ps(A
, B
);
1202 __m256
test_mm256_maskload_ps(float* A
, __m256i B
) {
1203 // CHECK-LABEL: test_mm256_maskload_ps
1204 // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.maskload.ps.256(ptr %{{.*}}, <8 x i32> %{{.*}})
1205 return _mm256_maskload_ps(A
, B
);
1208 void test_mm_maskstore_pd(double* A
, __m128i B
, __m128d C
) {
1209 // CHECK-LABEL: test_mm_maskstore_pd
1210 // CHECK: call void @llvm.x86.avx.maskstore.pd(ptr %{{.*}}, <2 x i64> %{{.*}}, <2 x double> %{{.*}})
1211 _mm_maskstore_pd(A
, B
, C
);
1214 void test_mm256_maskstore_pd(double* A
, __m256i B
, __m256d C
) {
1215 // CHECK-LABEL: test_mm256_maskstore_pd
1216 // CHECK: call void @llvm.x86.avx.maskstore.pd.256(ptr %{{.*}}, <4 x i64> %{{.*}}, <4 x double> %{{.*}})
1217 _mm256_maskstore_pd(A
, B
, C
);
1220 void test_mm_maskstore_ps(float* A
, __m128i B
, __m128 C
) {
1221 // CHECK-LABEL: test_mm_maskstore_ps
1222 // CHECK: call void @llvm.x86.avx.maskstore.ps(ptr %{{.*}}, <4 x i32> %{{.*}}, <4 x float> %{{.*}})
1223 _mm_maskstore_ps(A
, B
, C
);
1226 void test_mm256_maskstore_ps(float* A
, __m256i B
, __m256 C
) {
1227 // CHECK-LABEL: test_mm256_maskstore_ps
1228 // CHECK: call void @llvm.x86.avx.maskstore.ps.256(ptr %{{.*}}, <8 x i32> %{{.*}}, <8 x float> %{{.*}})
1229 _mm256_maskstore_ps(A
, B
, C
);
1232 __m256d
test_mm256_max_pd(__m256d A
, __m256d B
) {
1233 // CHECK-LABEL: test_mm256_max_pd
1234 // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.max.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1235 return _mm256_max_pd(A
, B
);
1238 __m256
test_mm256_max_ps(__m256 A
, __m256 B
) {
1239 // CHECK-LABEL: test_mm256_max_ps
1240 // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.max.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1241 return _mm256_max_ps(A
, B
);
1244 __m256d
test_mm256_min_pd(__m256d A
, __m256d B
) {
1245 // CHECK-LABEL: test_mm256_min_pd
1246 // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.min.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1247 return _mm256_min_pd(A
, B
);
1250 __m256
test_mm256_min_ps(__m256 A
, __m256 B
) {
1251 // CHECK-LABEL: test_mm256_min_ps
1252 // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.min.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1253 return _mm256_min_ps(A
, B
);
1256 __m256d
test_mm256_movedup_pd(__m256d A
) {
1257 // CHECK-LABEL: test_mm256_movedup_pd
1258 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 0, i32 2, i32 2>
1259 return _mm256_movedup_pd(A
);
1262 __m256
test_mm256_movehdup_ps(__m256 A
) {
1263 // CHECK-LABEL: test_mm256_movehdup_ps
1264 // 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>
1265 return _mm256_movehdup_ps(A
);
1268 __m256
test_mm256_moveldup_ps(__m256 A
) {
1269 // CHECK-LABEL: test_mm256_moveldup_ps
1270 // 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>
1271 return _mm256_moveldup_ps(A
);
1274 int test_mm256_movemask_pd(__m256d A
) {
1275 // CHECK-LABEL: test_mm256_movemask_pd
1276 // CHECK: call {{.*}}i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> %{{.*}})
1277 return _mm256_movemask_pd(A
);
1280 int test_mm256_movemask_ps(__m256 A
) {
1281 // CHECK-LABEL: test_mm256_movemask_ps
1282 // CHECK: call {{.*}}i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> %{{.*}})
1283 return _mm256_movemask_ps(A
);
1286 __m256d
test_mm256_mul_pd(__m256d A
, __m256d B
) {
1287 // CHECK-LABEL: test_mm256_mul_pd
1288 // CHECK: fmul <4 x double>
1289 return _mm256_mul_pd(A
, B
);
1292 __m256
test_mm256_mul_ps(__m256 A
, __m256 B
) {
1293 // CHECK-LABEL: test_mm256_mul_ps
1294 // CHECK: fmul <8 x float>
1295 return _mm256_mul_ps(A
, B
);
1298 __m256d
test_mm256_or_pd(__m256d A
, __m256d B
) {
1299 // CHECK-LABEL: test_mm256_or_pd
1300 // CHECK: or <4 x i64>
1301 return _mm256_or_pd(A
, B
);
1304 __m256
test_mm256_or_ps(__m256 A
, __m256 B
) {
1305 // CHECK-LABEL: test_mm256_or_ps
1306 // CHECK: or <8 x i32>
1307 return _mm256_or_ps(A
, B
);
1310 __m128d
test_mm_permute_pd(__m128d A
) {
1311 // CHECK-LABEL: test_mm_permute_pd
1312 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> <i32 1, i32 0>
1313 return _mm_permute_pd(A
, 1);
1316 __m256d
test_mm256_permute_pd(__m256d A
) {
1317 // CHECK-LABEL: test_mm256_permute_pd
1318 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
1319 return _mm256_permute_pd(A
, 5);
1322 __m128
test_mm_permute_ps(__m128 A
) {
1323 // CHECK-LABEL: test_mm_permute_ps
1324 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
1325 return _mm_permute_ps(A
, 0x1b);
1328 // Test case for PR12401
1329 __m128
test2_mm_permute_ps(__m128 a
) {
1330 // CHECK-LABEL: test2_mm_permute_ps
1331 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> <i32 2, i32 1, i32 2, i32 3>
1332 return _mm_permute_ps(a
, 0xe6);
1335 __m256
test_mm256_permute_ps(__m256 A
) {
1336 // CHECK-LABEL: test_mm256_permute_ps
1337 // 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>
1338 return _mm256_permute_ps(A
, 0x1b);
1341 __m256d
test_mm256_permute2f128_pd(__m256d A
, __m256d B
) {
1342 // CHECK-LABEL: test_mm256_permute2f128_pd
1343 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 2, i32 3, i32 6, i32 7>
1344 return _mm256_permute2f128_pd(A
, B
, 0x31);
1347 __m256
test_mm256_permute2f128_ps(__m256 A
, __m256 B
) {
1348 // CHECK-LABEL: test_mm256_permute2f128_ps
1349 // 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>
1350 return _mm256_permute2f128_ps(A
, B
, 0x13);
1353 __m256i
test_mm256_permute2f128_si256(__m256i A
, __m256i B
) {
1354 // CHECK-LABEL: test_mm256_permute2f128_si256
1355 // 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>
1356 return _mm256_permute2f128_si256(A
, B
, 0x20);
1359 __m128d
test_mm_permutevar_pd(__m128d A
, __m128i B
) {
1360 // CHECK-LABEL: test_mm_permutevar_pd
1361 // CHECK: call {{.*}}<2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %{{.*}}, <2 x i64> %{{.*}})
1362 return _mm_permutevar_pd(A
, B
);
1365 __m256d
test_mm256_permutevar_pd(__m256d A
, __m256i B
) {
1366 // CHECK-LABEL: test_mm256_permutevar_pd
1367 // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %{{.*}}, <4 x i64> %{{.*}})
1368 return _mm256_permutevar_pd(A
, B
);
1371 __m128
test_mm_permutevar_ps(__m128 A
, __m128i B
) {
1372 // CHECK-LABEL: test_mm_permutevar_ps
1373 // CHECK: call {{.*}}<4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %{{.*}}, <4 x i32> %{{.*}})
1374 return _mm_permutevar_ps(A
, B
);
1377 __m256
test_mm256_permutevar_ps(__m256 A
, __m256i B
) {
1378 // CHECK-LABEL: test_mm256_permutevar_ps
1379 // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %{{.*}}, <8 x i32> %{{.*}})
1380 return _mm256_permutevar_ps(A
, B
);
1383 __m256
test_mm256_rcp_ps(__m256 A
) {
1384 // CHECK-LABEL: test_mm256_rcp_ps
1385 // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.rcp.ps.256(<8 x float> %{{.*}})
1386 return _mm256_rcp_ps(A
);
1389 __m256d
test_mm256_round_pd(__m256d x
) {
1390 // CHECK-LABEL: test_mm256_round_pd
1391 // CHECK: call {{.*}}<4 x double> @llvm.x86.avx.round.pd.256(<4 x double> %{{.*}}, i32 4)
1392 return _mm256_round_pd(x
, 4);
1395 __m256
test_mm256_round_ps(__m256 x
) {
1396 // CHECK-LABEL: test_mm256_round_ps
1397 // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.round.ps.256(<8 x float> %{{.*}}, i32 4)
1398 return _mm256_round_ps(x
, 4);
1401 __m256
test_mm256_rsqrt_ps(__m256 A
) {
1402 // CHECK-LABEL: test_mm256_rsqrt_ps
1403 // CHECK: call {{.*}}<8 x float> @llvm.x86.avx.rsqrt.ps.256(<8 x float> %{{.*}})
1404 return _mm256_rsqrt_ps(A
);
1407 __m256i
test_mm256_set_epi8(char A0
, char A1
, char A2
, char A3
, char A4
, char A5
, char A6
, char A7
,
1408 char A8
, char A9
, char A10
, char A11
, char A12
, char A13
, char A14
, char A15
,
1409 char A16
, char A17
, char A18
, char A19
, char A20
, char A21
, char A22
, char A23
,
1410 char A24
, char A25
, char A26
, char A27
, char A28
, char A29
, char A30
, char A31
) {
1411 // CHECK-LABEL: test_mm256_set_epi8
1412 // CHECK: insertelement <32 x i8> poison, i8 %{{.*}}, i32 0
1413 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 1
1414 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 2
1415 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 3
1416 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 4
1417 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 5
1418 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 6
1419 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 7
1420 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 8
1421 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 9
1422 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 10
1423 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 11
1424 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 12
1425 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 13
1426 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 14
1427 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 15
1428 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 16
1429 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 17
1430 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 18
1431 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 19
1432 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 20
1433 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 21
1434 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 22
1435 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 23
1436 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 24
1437 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 25
1438 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 26
1439 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 27
1440 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 28
1441 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 29
1442 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 30
1443 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31
1444 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
);
1447 __m256i
test_mm256_set_epi16(short A0
, short A1
, short A2
, short A3
, short A4
, short A5
, short A6
, short A7
,
1448 short A8
, short A9
, short A10
, short A11
, short A12
, short A13
, short A14
, short A15
) {
1449 // CHECK-LABEL: test_mm256_set_epi16
1450 // CHECK: insertelement <16 x i16> poison, i16 %{{.*}}, i32 0
1451 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 1
1452 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 2
1453 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 3
1454 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 4
1455 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 5
1456 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 6
1457 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 7
1458 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 8
1459 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 9
1460 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 10
1461 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 11
1462 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 12
1463 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 13
1464 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 14
1465 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 15
1466 return _mm256_set_epi16(A0
, A1
, A2
, A3
, A4
, A5
, A6
, A7
, A8
, A9
, A10
, A11
, A12
, A13
, A14
, A15
);
1469 __m256i
test_mm256_set_epi32(int A0
, int A1
, int A2
, int A3
, int A4
, int A5
, int A6
, int A7
) {
1470 // CHECK-LABEL: test_mm256_set_epi32
1471 // CHECK: insertelement <8 x i32> poison, i32 %{{.*}}, i32 0
1472 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 1
1473 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 2
1474 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 3
1475 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 4
1476 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 5
1477 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 6
1478 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7
1479 return _mm256_set_epi32(A0
, A1
, A2
, A3
, A4
, A5
, A6
, A7
);
1482 __m256i
test_mm256_set_epi64x(long long A0
, long long A1
, long long A2
, long long A3
) {
1483 // CHECK-LABEL: test_mm256_set_epi64x
1484 // CHECK: insertelement <4 x i64> poison, i64 %{{.*}}, i32 0
1485 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 1
1486 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 2
1487 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3
1488 return _mm256_set_epi64x(A0
, A1
, A2
, A3
);
1491 __m256
test_mm256_set_m128(__m128 A
, __m128 B
) {
1492 // CHECK-LABEL: test_mm256_set_m128
1493 // 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>
1494 return _mm256_set_m128(A
, B
);
1497 __m256d
test_mm256_set_m128d(__m128d A
, __m128d B
) {
1498 // CHECK-LABEL: test_mm256_set_m128d
1499 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1500 return _mm256_set_m128d(A
, B
);
1503 __m256i
test_mm256_set_m128i(__m128i A
, __m128i B
) {
1504 // CHECK-LABEL: test_mm256_set_m128i
1505 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1506 return _mm256_set_m128i(A
, B
);
1509 __m256d
test_mm256_set_pd(double A0
, double A1
, double A2
, double A3
) {
1510 // CHECK-LABEL: test_mm256_set_pd
1511 // CHECK: insertelement <4 x double> poison, double %{{.*}}, i32 0
1512 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
1513 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
1514 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
1515 return _mm256_set_pd(A0
, A1
, A2
, A3
);
1517 TEST_CONSTEXPR(match_m256d(_mm256_set_pd(-100.0, +90.0, -50.0, +1.0), +1.0, -50.0, +90.0, -100.0));
1519 __m256
test_mm256_set_ps(float A0
, float A1
, float A2
, float A3
, float A4
, float A5
, float A6
, float A7
) {
1520 // CHECK-LABEL: test_mm256_set_ps
1521 // CHECK: insertelement <8 x float> poison, float %{{.*}}, i32 0
1522 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
1523 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
1524 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
1525 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
1526 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
1527 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
1528 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
1529 return _mm256_set_ps(A0
, A1
, A2
, A3
, A4
, A5
, A6
, A7
);
1531 TEST_CONSTEXPR(match_m256(_mm256_set_ps(-1.0f
, +2.0f
, -3.0f
, +4.0f
, -5.0f
, +6.0f
, -7.0f
, +8.0f
), +8.0f
, -7.0f
, +6.0f
, -5.0f
, +4.0f
, -3.0f
, +2.0f
, -1.0f
));
1533 __m256i
test_mm256_set1_epi8(char A
) {
1534 // CHECK-LABEL: test_mm256_set1_epi8
1535 // CHECK: insertelement <32 x i8> poison, i8 %{{.*}}, i32 0
1536 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 1
1537 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 2
1538 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 3
1539 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 4
1540 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 5
1541 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 6
1542 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 7
1543 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 8
1544 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 9
1545 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 10
1546 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 11
1547 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 12
1548 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 13
1549 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 14
1550 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 15
1551 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 16
1552 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 17
1553 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 18
1554 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 19
1555 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 20
1556 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 21
1557 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 22
1558 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 23
1559 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 24
1560 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 25
1561 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 26
1562 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 27
1563 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 28
1564 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 29
1565 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 30
1566 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31
1567 return _mm256_set1_epi8(A
);
1570 __m256i
test_mm256_set1_epi16(short A
) {
1571 // CHECK-LABEL: test_mm256_set1_epi16
1572 // CHECK: insertelement <16 x i16> poison, i16 %{{.*}}, i32 0
1573 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 1
1574 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 2
1575 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 3
1576 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 4
1577 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 5
1578 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 6
1579 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 7
1580 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 8
1581 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 9
1582 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 10
1583 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 11
1584 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 12
1585 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 13
1586 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 14
1587 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 15
1588 return _mm256_set1_epi16(A
);
1591 __m256i
test_mm256_set1_epi32(int A
) {
1592 // CHECK-LABEL: test_mm256_set1_epi32
1593 // CHECK: insertelement <8 x i32> poison, i32 %{{.*}}, i32 0
1594 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 1
1595 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 2
1596 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 3
1597 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 4
1598 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 5
1599 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 6
1600 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7
1601 return _mm256_set1_epi32(A
);
1604 __m256i
test_mm256_set1_epi64x(long long A
) {
1605 // CHECK-LABEL: test_mm256_set1_epi64x
1606 // CHECK: insertelement <4 x i64> poison, i64 %{{.*}}, i32 0
1607 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 1
1608 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 2
1609 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3
1610 return _mm256_set1_epi64x(A
);
1613 __m256d
test_mm256_set1_pd(double A
) {
1614 // CHECK-LABEL: test_mm256_set1_pd
1615 // CHECK: insertelement <4 x double> poison, double %{{.*}}, i32 0
1616 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
1617 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
1618 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
1619 return _mm256_set1_pd(A
);
1621 TEST_CONSTEXPR(match_m256d(_mm256_set1_pd(+42.0), +42.0, +42.0, +42.0, +42.0));
1623 __m256
test_mm256_set1_ps(float A
) {
1624 // CHECK-LABEL: test_mm256_set1_ps
1625 // CHECK: insertelement <8 x float> poison, float %{{.*}}, i32 0
1626 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
1627 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
1628 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
1629 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
1630 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
1631 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
1632 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
1633 return _mm256_set1_ps(A
);
1635 TEST_CONSTEXPR(match_m256(_mm256_set1_ps(-101.0f
), -101.0f
, -101.0f
, -101.0f
, -101.0f
, -101.0f
, -101.0f
, -101.0f
, -101.0f
));
1637 __m256i
test_mm256_setr_epi8(char A0
, char A1
, char A2
, char A3
, char A4
, char A5
, char A6
, char A7
,
1638 char A8
, char A9
, char A10
, char A11
, char A12
, char A13
, char A14
, char A15
,
1639 char A16
, char A17
, char A18
, char A19
, char A20
, char A21
, char A22
, char A23
,
1640 char A24
, char A25
, char A26
, char A27
, char A28
, char A29
, char A30
, char A31
) {
1641 // CHECK-LABEL: test_mm256_setr_epi8
1642 // CHECK: insertelement <32 x i8> poison, i8 %{{.*}}, i32 0
1643 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 1
1644 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 2
1645 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 3
1646 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 4
1647 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 5
1648 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 6
1649 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 7
1650 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 8
1651 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 9
1652 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 10
1653 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 11
1654 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 12
1655 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 13
1656 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 14
1657 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 15
1658 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 16
1659 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 17
1660 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 18
1661 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 19
1662 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 20
1663 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 21
1664 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 22
1665 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 23
1666 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 24
1667 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 25
1668 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 26
1669 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 27
1670 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 28
1671 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 29
1672 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 30
1673 // CHECK: insertelement <32 x i8> %{{.*}}, i8 %{{.*}}, i32 31
1674 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
);
1677 __m256i
test_mm256_setr_epi16(short A0
, short A1
, short A2
, short A3
, short A4
, short A5
, short A6
, short A7
,
1678 short A8
, short A9
, short A10
, short A11
, short A12
, short A13
, short A14
, short A15
) {
1679 // CHECK-LABEL: test_mm256_setr_epi16
1680 // CHECK: insertelement <16 x i16> poison, i16 %{{.*}}, i32 0
1681 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 1
1682 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 2
1683 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 3
1684 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 4
1685 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 5
1686 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 6
1687 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 7
1688 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 8
1689 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 9
1690 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 10
1691 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 11
1692 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 12
1693 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 13
1694 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 14
1695 // CHECK: insertelement <16 x i16> %{{.*}}, i16 %{{.*}}, i32 15
1696 return _mm256_setr_epi16(A0
, A1
, A2
, A3
, A4
, A5
, A6
, A7
, A8
, A9
, A10
, A11
, A12
, A13
, A14
, A15
);
1699 __m256i
test_mm256_setr_epi32(int A0
, int A1
, int A2
, int A3
, int A4
, int A5
, int A6
, int A7
) {
1700 // CHECK-LABEL: test_mm256_setr_epi32
1701 // CHECK: insertelement <8 x i32> poison, i32 %{{.*}}, i32 0
1702 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 1
1703 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 2
1704 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 3
1705 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 4
1706 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 5
1707 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 6
1708 // CHECK: insertelement <8 x i32> %{{.*}}, i32 %{{.*}}, i32 7
1709 return _mm256_setr_epi32(A0
, A1
, A2
, A3
, A4
, A5
, A6
, A7
);
1712 __m256i
test_mm256_setr_epi64x(long long A0
, long long A1
, long long A2
, long long A3
) {
1713 // CHECK-LABEL: test_mm256_setr_epi64x
1714 // CHECK: insertelement <4 x i64> poison, i64 %{{.*}}, i32 0
1715 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 1
1716 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 2
1717 // CHECK: insertelement <4 x i64> %{{.*}}, i64 %{{.*}}, i32 3
1718 return _mm256_setr_epi64x(A0
, A1
, A2
, A3
);
1721 __m256
test_mm256_setr_m128(__m128 A
, __m128 B
) {
1722 // CHECK-LABEL: test_mm256_setr_m128
1723 // 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>
1724 return _mm256_setr_m128(A
, B
);
1727 __m256d
test_mm256_setr_m128d(__m128d A
, __m128d B
) {
1728 // CHECK-LABEL: test_mm256_setr_m128d
1729 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1730 return _mm256_setr_m128d(A
, B
);
1733 __m256i
test_mm256_setr_m128i(__m128i A
, __m128i B
) {
1734 // CHECK-LABEL: test_mm256_setr_m128i
1735 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1736 return _mm256_setr_m128i(A
, B
);
1739 __m256d
test_mm256_setr_pd(double A0
, double A1
, double A2
, double A3
) {
1740 // CHECK-LABEL: test_mm256_setr_pd
1741 // CHECK: insertelement <4 x double> poison, double %{{.*}}, i32 0
1742 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 1
1743 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 2
1744 // CHECK: insertelement <4 x double> %{{.*}}, double %{{.*}}, i32 3
1745 return _mm256_setr_pd(A0
, A1
, A2
, A3
);
1747 TEST_CONSTEXPR(match_m256d(_mm256_setr_pd(-100.0, +90.0, -50.0, +1.0), -100.0, +90.0, -50.0, +1.0));
1749 __m256
test_mm256_setr_ps(float A0
, float A1
, float A2
, float A3
, float A4
, float A5
, float A6
, float A7
) {
1750 // CHECK-LABEL: test_mm256_setr_ps
1751 // CHECK: insertelement <8 x float> poison, float %{{.*}}, i32 0
1752 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 1
1753 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 2
1754 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 3
1755 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 4
1756 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 5
1757 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 6
1758 // CHECK: insertelement <8 x float> %{{.*}}, float %{{.*}}, i32 7
1759 return _mm256_setr_ps(A0
, A1
, A2
, A3
, A4
, A5
, A6
, A7
);
1761 TEST_CONSTEXPR(match_m256(_mm256_setr_ps(-1.0f
, +2.0f
, -3.0f
, +4.0f
, -5.0f
, +6.0f
, -7.0f
, +8.0f
), -1.0f
, +2.0f
, -3.0f
, +4.0f
, -5.0f
, +6.0f
, -7.0f
, +8.0f
));
1763 __m256d
test_mm256_setzero_pd(void) {
1764 // CHECK-LABEL: test_mm256_setzero_pd
1765 // CHECK: store <4 x double> zeroinitializer
1766 return _mm256_setzero_pd();
1768 TEST_CONSTEXPR(match_m256d(_mm256_setzero_pd(), +0.0, +0.0, +0.0, +0.0));
1770 __m256
test_mm256_setzero_ps(void) {
1771 // CHECK-LABEL: test_mm256_setzero_ps
1772 // CHECK: store <8 x float> zeroinitializer
1773 return _mm256_setzero_ps();
1775 TEST_CONSTEXPR(match_m256(_mm256_setzero_ps(), +0.0f
, +0.0f
, +0.0f
, +0.0f
, +0.0f
, +0.0f
, +0.0f
, +0.0f
));
1777 __m256i
test_mm256_setzero_si256(void) {
1778 // CHECK-LABEL: test_mm256_setzero_si256
1779 // CHECK: store <4 x i64> zeroinitializer
1780 return _mm256_setzero_si256();
1782 TEST_CONSTEXPR(match_m256i(_mm256_setzero_si256(), 0, 0, 0, 0));
1784 __m256d
test_mm256_shuffle_pd(__m256d A
, __m256d B
) {
1785 // CHECK-LABEL: test_mm256_shuffle_pd
1786 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
1787 return _mm256_shuffle_pd(A
, B
, 0);
1790 __m256
test_mm256_shuffle_ps(__m256 A
, __m256 B
) {
1791 // CHECK-LABEL: test_mm256_shuffle_ps
1792 // 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>
1793 return _mm256_shuffle_ps(A
, B
, 0);
1796 __m256d
test_mm256_sqrt_pd(__m256d A
) {
1797 // CHECK-LABEL: test_mm256_sqrt_pd
1798 // CHECK: call {{.*}}<4 x double> @llvm.sqrt.v4f64(<4 x double> %{{.*}})
1799 return _mm256_sqrt_pd(A
);
1802 __m256
test_mm256_sqrt_ps(__m256 A
) {
1803 // CHECK-LABEL: test_mm256_sqrt_ps
1804 // CHECK: call {{.*}}<8 x float> @llvm.sqrt.v8f32(<8 x float> %{{.*}})
1805 return _mm256_sqrt_ps(A
);
1808 void test_mm256_store_pd(double* A
, __m256d B
) {
1809 // CHECK-LABEL: test_mm256_store_pd
1810 // CHECK: store <4 x double> %{{.*}}, ptr %{{.*}}, align 32
1811 _mm256_store_pd(A
, B
);
1814 void test_mm256_store_ps(float* A
, __m256 B
) {
1815 // CHECK-LABEL: test_mm256_store_ps
1816 // CHECK: store <8 x float> %{{.*}}, ptr %{{.*}}, align 32
1817 _mm256_store_ps(A
, B
);
1820 void test_mm256_store_si256(__m256i
* A
, __m256i B
) {
1821 // CHECK-LABEL: test_mm256_store_si256
1822 // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 32
1823 _mm256_store_si256(A
, B
);
1826 void test_mm256_storeu_pd(double* A
, __m256d B
) {
1827 // CHECK-LABEL: test_mm256_storeu_pd
1828 // CHECK: store <4 x double> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1829 // CHECK-NEXT: ret void
1830 _mm256_storeu_pd(A
, B
);
1833 void test_mm256_storeu_ps(float* A
, __m256 B
) {
1834 // CHECK-LABEL: test_mm256_storeu_ps
1835 // CHECK: store <8 x float> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1836 // CHECk-NEXT: ret void
1837 _mm256_storeu_ps(A
, B
);
1840 void test_mm256_storeu_si256(__m256i
* A
, __m256i B
) {
1841 // CHECK-LABEL: test_mm256_storeu_si256
1842 // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1843 // CHECk-NEXT: ret void
1844 _mm256_storeu_si256(A
, B
);
1847 void test_mm256_storeu2_m128(float* A
, float* B
, __m256 C
) {
1848 // CHECK-LABEL: test_mm256_storeu2_m128
1849 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1850 // CHECK: store <4 x float> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1851 // CHECK: shufflevector <8 x float> %{{.*}}, <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
1852 // CHECK: store <4 x float> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1853 _mm256_storeu2_m128(A
, B
, C
);
1856 void test_mm256_storeu2_m128d(double* A
, double* B
, __m256d C
) {
1857 // CHECK-LABEL: test_mm256_storeu2_m128d
1858 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <2 x i32> <i32 0, i32 1>
1859 // CHECK: store <2 x double> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1860 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> poison, <2 x i32> <i32 2, i32 3>
1861 // CHECK: store <2 x double> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1862 _mm256_storeu2_m128d(A
, B
, C
);
1865 void test_mm256_storeu2_m128i(__m128i
* A
, __m128i
* B
, __m256i C
) {
1866 // CHECK-LABEL: test_mm256_storeu2_m128i
1867 // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <2 x i32> <i32 0, i32 1>
1868 // CHECK: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1869 // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
1870 // CHECK: store <2 x i64> %{{.*}}, ptr %{{.*}}, align 1{{$}}
1871 _mm256_storeu2_m128i(A
, B
, C
);
1874 void test_mm256_stream_pd(double* A
, __m256d B
) {
1875 // CHECK-LABEL: test_mm256_stream_pd
1876 // CHECK: store <4 x double> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal
1877 _mm256_stream_pd(A
, B
);
1880 void test_mm256_stream_pd_void(void *A
, __m256d B
) {
1881 // CHECK-LABEL: test_mm256_stream_pd_void
1882 // CHECK: store <4 x double> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal
1883 _mm256_stream_pd(A
, B
);
1886 void test_mm256_stream_ps(float* A
, __m256 B
) {
1887 // CHECK-LABEL: test_mm256_stream_ps
1888 // CHECK: store <8 x float> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal
1889 _mm256_stream_ps(A
, B
);
1892 void test_mm256_stream_ps_void(void *A
, __m256 B
) {
1893 // CHECK-LABEL: test_mm256_stream_ps_void
1894 // CHECK: store <8 x float> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal
1895 _mm256_stream_ps(A
, B
);
1898 void test_mm256_stream_si256(__m256i
* A
, __m256i B
) {
1899 // CHECK-LABEL: test_mm256_stream_si256
1900 // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal
1901 _mm256_stream_si256(A
, B
);
1904 void test_mm256_stream_si256_void(void *A
, __m256i B
) {
1905 // CHECK-LABEL: test_mm256_stream_si256_void
1906 // CHECK: store <4 x i64> %{{.*}}, ptr %{{.*}}, align 32, !nontemporal
1907 _mm256_stream_si256(A
, B
);
1910 __m256d
test_mm256_sub_pd(__m256d A
, __m256d B
) {
1911 // CHECK-LABEL: test_mm256_sub_pd
1912 // CHECK: fsub <4 x double>
1913 return _mm256_sub_pd(A
, B
);
1916 __m256
test_mm256_sub_ps(__m256 A
, __m256 B
) {
1917 // CHECK-LABEL: test_mm256_sub_ps
1918 // CHECK: fsub <8 x float>
1919 return _mm256_sub_ps(A
, B
);
1922 int test_mm_testc_pd(__m128d A
, __m128d B
) {
1923 // CHECK-LABEL: test_mm_testc_pd
1924 // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestc.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
1925 return _mm_testc_pd(A
, B
);
1928 int test_mm256_testc_pd(__m256d A
, __m256d B
) {
1929 // CHECK-LABEL: test_mm256_testc_pd
1930 // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestc.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1931 return _mm256_testc_pd(A
, B
);
1934 int test_mm_testc_ps(__m128 A
, __m128 B
) {
1935 // CHECK-LABEL: test_mm_testc_ps
1936 // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestc.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}})
1937 return _mm_testc_ps(A
, B
);
1940 int test_mm256_testc_ps(__m256 A
, __m256 B
) {
1941 // CHECK-LABEL: test_mm256_testc_ps
1942 // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestc.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1943 return _mm256_testc_ps(A
, B
);
1946 int test_mm256_testc_si256(__m256i A
, __m256i B
) {
1947 // CHECK-LABEL: test_mm256_testc_si256
1948 // CHECK: call {{.*}}i32 @llvm.x86.avx.ptestc.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}})
1949 return _mm256_testc_si256(A
, B
);
1952 int test_mm_testnzc_pd(__m128d A
, __m128d B
) {
1953 // CHECK-LABEL: test_mm_testnzc_pd
1954 // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestnzc.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
1955 return _mm_testnzc_pd(A
, B
);
1958 int test_mm256_testnzc_pd(__m256d A
, __m256d B
) {
1959 // CHECK-LABEL: test_mm256_testnzc_pd
1960 // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestnzc.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1961 return _mm256_testnzc_pd(A
, B
);
1964 int test_mm_testnzc_ps(__m128 A
, __m128 B
) {
1965 // CHECK-LABEL: test_mm_testnzc_ps
1966 // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestnzc.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}})
1967 return _mm_testnzc_ps(A
, B
);
1970 int test_mm256_testnzc_ps(__m256 A
, __m256 B
) {
1971 // CHECK-LABEL: test_mm256_testnzc_ps
1972 // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestnzc.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
1973 return _mm256_testnzc_ps(A
, B
);
1976 int test_mm256_testnzc_si256(__m256i A
, __m256i B
) {
1977 // CHECK-LABEL: test_mm256_testnzc_si256
1978 // CHECK: call {{.*}}i32 @llvm.x86.avx.ptestnzc.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}})
1979 return _mm256_testnzc_si256(A
, B
);
1982 int test_mm_testz_pd(__m128d A
, __m128d B
) {
1983 // CHECK-LABEL: test_mm_testz_pd
1984 // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestz.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
1985 return _mm_testz_pd(A
, B
);
1988 int test_mm256_testz_pd(__m256d A
, __m256d B
) {
1989 // CHECK-LABEL: test_mm256_testz_pd
1990 // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestz.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}})
1991 return _mm256_testz_pd(A
, B
);
1994 int test_mm_testz_ps(__m128 A
, __m128 B
) {
1995 // CHECK-LABEL: test_mm_testz_ps
1996 // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestz.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}})
1997 return _mm_testz_ps(A
, B
);
2000 int test_mm256_testz_ps(__m256 A
, __m256 B
) {
2001 // CHECK-LABEL: test_mm256_testz_ps
2002 // CHECK: call {{.*}}i32 @llvm.x86.avx.vtestz.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}})
2003 return _mm256_testz_ps(A
, B
);
2006 int test_mm256_testz_si256(__m256i A
, __m256i B
) {
2007 // CHECK-LABEL: test_mm256_testz_si256
2008 // CHECK: call {{.*}}i32 @llvm.x86.avx.ptestz.256(<4 x i64> %{{.*}}, <4 x i64> %{{.*}})
2009 return _mm256_testz_si256(A
, B
);
2012 __m256
test_mm256_undefined_ps(void) {
2013 // X64-LABEL: test_mm256_undefined_ps
2014 // X64: ret <8 x float> zeroinitializer
2016 // X86-LABEL: test_mm256_undefined_ps
2017 // X86: store <8 x float> zeroinitializer
2018 return _mm256_undefined_ps();
2021 __m256d
test_mm256_undefined_pd(void) {
2022 // X64-LABEL: test_mm256_undefined_pd
2023 // X64: ret <4 x double> zeroinitializer
2025 // X86-LABEL: test_mm256_undefined_pd
2026 // X86: store <4 x double> zeroinitializer
2027 return _mm256_undefined_pd();
2030 __m256i
test_mm256_undefined_si256(void) {
2031 // X64-LABEL: test_mm256_undefined_si256
2032 // X64: ret <4 x i64> zeroinitializer
2034 // X86-LABEL: test_mm256_undefined_si256
2035 // X86: store <4 x i64> zeroinitializer
2036 return _mm256_undefined_si256();
2039 __m256d
test_mm256_unpackhi_pd(__m256d A
, __m256d B
) {
2040 // CHECK-LABEL: test_mm256_unpackhi_pd
2041 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
2042 return _mm256_unpackhi_pd(A
, B
);
2045 __m256
test_mm256_unpackhi_ps(__m256 A
, __m256 B
) {
2046 // CHECK-LABEL: test_mm256_unpackhi_ps
2047 // 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>
2048 return _mm256_unpackhi_ps(A
, B
);
2051 __m256d
test_mm256_unpacklo_pd(__m256d A
, __m256d B
) {
2052 // CHECK-LABEL: test_mm256_unpacklo_pd
2053 // CHECK: shufflevector <4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
2054 return _mm256_unpacklo_pd(A
, B
);
2057 __m256
test_mm256_unpacklo_ps(__m256 A
, __m256 B
) {
2058 // CHECK-LABEL: test_mm256_unpacklo_ps
2059 // 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>
2060 return _mm256_unpacklo_ps(A
, B
);
2063 __m256d
test_mm256_xor_pd(__m256d A
, __m256d B
) {
2064 // CHECK-LABEL: test_mm256_xor_pd
2065 // CHECK: xor <4 x i64>
2066 return _mm256_xor_pd(A
, B
);
2069 __m256
test_mm256_xor_ps(__m256 A
, __m256 B
) {
2070 // CHECK-LABEL: test_mm256_xor_ps
2071 // CHECK: xor <8 x i32>
2072 return _mm256_xor_ps(A
, B
);
2075 void test_mm256_zeroall(void) {
2076 // CHECK-LABEL: test_mm256_zeroall
2077 // CHECK: call void @llvm.x86.avx.vzeroall()
2078 return _mm256_zeroall();
2081 void test_mm256_zeroupper(void) {
2082 // CHECK-LABEL: test_mm256_zeroupper
2083 // CHECK: call void @llvm.x86.avx.vzeroupper()
2084 return _mm256_zeroupper();
2087 __m256d
test_mm256_zextpd128_pd256(__m128d A
) {
2088 // CHECK-LABEL: test_mm256_zextpd128_pd256
2089 // CHECK: store <2 x double> zeroinitializer
2090 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
2091 return _mm256_zextpd128_pd256(A
);
2094 __m256
test_mm256_zextps128_ps256(__m128 A
) {
2095 // CHECK-LABEL: test_mm256_zextps128_ps256
2096 // CHECK: store <4 x float> zeroinitializer
2097 // 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>
2098 return _mm256_zextps128_ps256(A
);
2101 __m256i
test_mm256_zextsi128_si256(__m128i A
) {
2102 // CHECK-LABEL: test_mm256_zextsi128_si256
2103 // CHECK: store <2 x i64> zeroinitializer
2104 // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
2105 return _mm256_zextsi128_si256(A
);