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