• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +sse4.1 -emit-llvm -o - -Werror | FileCheck %s
2 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +sse4.1 -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/sse41-intrinsics-fast-isel.ll
10 
test_mm_blend_epi16(__m128i V1,__m128i V2)11 __m128i test_mm_blend_epi16(__m128i V1, __m128i V2) {
12   // CHECK-LABEL: test_mm_blend_epi16
13   // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 7>
14   return _mm_blend_epi16(V1, V2, 42);
15 }
16 
test_mm_blend_pd(__m128d V1,__m128d V2)17 __m128d test_mm_blend_pd(__m128d V1, __m128d V2) {
18   // CHECK-LABEL: test_mm_blend_pd
19   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> <i32 0, i32 3>
20   return _mm_blend_pd(V1, V2, 2);
21 }
22 
test_mm_blend_ps(__m128 V1,__m128 V2)23 __m128 test_mm_blend_ps(__m128 V1, __m128 V2) {
24   // CHECK-LABEL: test_mm_blend_ps
25   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 0, i32 5, i32 6, i32 3>
26   return _mm_blend_ps(V1, V2, 6);
27 }
28 
test_mm_blendv_epi8(__m128i V1,__m128i V2,__m128i V3)29 __m128i test_mm_blendv_epi8(__m128i V1, __m128i V2, __m128i V3) {
30   // CHECK-LABEL: test_mm_blendv_epi8
31   // CHECK: call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})
32   return _mm_blendv_epi8(V1, V2, V3);
33 }
34 
test_mm_blendv_pd(__m128d V1,__m128d V2,__m128d V3)35 __m128d test_mm_blendv_pd(__m128d V1, __m128d V2, __m128d V3) {
36   // CHECK-LABEL: test_mm_blendv_pd
37   // CHECK: call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}})
38   return _mm_blendv_pd(V1, V2, V3);
39 }
40 
test_mm_blendv_ps(__m128 V1,__m128 V2,__m128 V3)41 __m128 test_mm_blendv_ps(__m128 V1, __m128 V2, __m128 V3) {
42   // CHECK-LABEL: test_mm_blendv_ps
43   // CHECK: call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})
44   return _mm_blendv_ps(V1, V2, V3);
45 }
46 
test_mm_ceil_pd(__m128d x)47 __m128d test_mm_ceil_pd(__m128d x) {
48   // CHECK-LABEL: test_mm_ceil_pd
49   // CHECK: call <2 x double> @llvm.x86.sse41.round.pd(<2 x double> %{{.*}}, i32 2)
50   return _mm_ceil_pd(x);
51 }
52 
test_mm_ceil_ps(__m128 x)53 __m128 test_mm_ceil_ps(__m128 x) {
54   // CHECK-LABEL: test_mm_ceil_ps
55   // CHECK: call <4 x float> @llvm.x86.sse41.round.ps(<4 x float> %{{.*}}, i32 2)
56   return _mm_ceil_ps(x);
57 }
58 
test_mm_ceil_sd(__m128d x,__m128d y)59 __m128d test_mm_ceil_sd(__m128d x, __m128d y) {
60   // CHECK-LABEL: test_mm_ceil_sd
61   // CHECK: call <2 x double> @llvm.x86.sse41.round.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i32 2)
62   return _mm_ceil_sd(x, y);
63 }
64 
test_mm_ceil_ss(__m128 x,__m128 y)65 __m128 test_mm_ceil_ss(__m128 x, __m128 y) {
66   // CHECK-LABEL: test_mm_ceil_ss
67   // CHECK: call <4 x float> @llvm.x86.sse41.round.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i32 2)
68   return _mm_ceil_ss(x, y);
69 }
70 
test_mm_cmpeq_epi64(__m128i A,__m128i B)71 __m128i test_mm_cmpeq_epi64(__m128i A, __m128i B) {
72   // CHECK-LABEL: test_mm_cmpeq_epi64
73   // CHECK: icmp eq <2 x i64>
74   // CHECK: sext <2 x i1> %{{.*}} to <2 x i64>
75   return _mm_cmpeq_epi64(A, B);
76 }
77 
test_mm_cvtepi8_epi16(__m128i a)78 __m128i test_mm_cvtepi8_epi16(__m128i a) {
79   // CHECK-LABEL: test_mm_cvtepi8_epi16
80   // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> {{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
81   // CHECK: sext <8 x i8> {{.*}} to <8 x i16>
82   return _mm_cvtepi8_epi16(a);
83 }
84 
test_mm_cvtepi8_epi32(__m128i a)85 __m128i test_mm_cvtepi8_epi32(__m128i a) {
86   // CHECK-LABEL: test_mm_cvtepi8_epi32
87   // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> {{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
88   // CHECK: sext <4 x i8> {{.*}} to <4 x i32>
89   return _mm_cvtepi8_epi32(a);
90 }
91 
test_mm_cvtepi8_epi64(__m128i a)92 __m128i test_mm_cvtepi8_epi64(__m128i a) {
93   // CHECK-LABEL: test_mm_cvtepi8_epi64
94   // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> {{.*}}, <2 x i32> <i32 0, i32 1>
95   // CHECK: sext <2 x i8> {{.*}} to <2 x i64>
96   return _mm_cvtepi8_epi64(a);
97 }
98 
test_mm_cvtepi16_epi32(__m128i a)99 __m128i test_mm_cvtepi16_epi32(__m128i a) {
100   // CHECK-LABEL: test_mm_cvtepi16_epi32
101   // CHECK: shufflevector <8 x i16> {{.*}}, <8 x i16> {{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
102   // CHECK: sext <4 x i16> {{.*}} to <4 x i32>
103   return _mm_cvtepi16_epi32(a);
104 }
105 
test_mm_cvtepi16_epi64(__m128i a)106 __m128i test_mm_cvtepi16_epi64(__m128i a) {
107   // CHECK-LABEL: test_mm_cvtepi16_epi64
108   // CHECK: shufflevector <8 x i16> {{.*}}, <8 x i16> {{.*}}, <2 x i32> <i32 0, i32 1>
109   // CHECK: sext <2 x i16> {{.*}} to <2 x i64>
110   return _mm_cvtepi16_epi64(a);
111 }
112 
test_mm_cvtepi32_epi64(__m128i a)113 __m128i test_mm_cvtepi32_epi64(__m128i a) {
114   // CHECK-LABEL: test_mm_cvtepi32_epi64
115   // CHECK: shufflevector <4 x i32> {{.*}}, <4 x i32> {{.*}}, <2 x i32> <i32 0, i32 1>
116   // CHECK: sext <2 x i32> {{.*}} to <2 x i64>
117   return _mm_cvtepi32_epi64(a);
118 }
119 
test_mm_cvtepu8_epi16(__m128i a)120 __m128i test_mm_cvtepu8_epi16(__m128i a) {
121   // CHECK-LABEL: test_mm_cvtepu8_epi16
122   // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> {{.*}}, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
123   // CHECK: zext <8 x i8> {{.*}} to <8 x i16>
124   return _mm_cvtepu8_epi16(a);
125 }
126 
test_mm_cvtepu8_epi32(__m128i a)127 __m128i test_mm_cvtepu8_epi32(__m128i a) {
128   // CHECK-LABEL: test_mm_cvtepu8_epi32
129   // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> {{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
130   // CHECK: zext <4 x i8> {{.*}} to <4 x i32>
131   return _mm_cvtepu8_epi32(a);
132 }
133 
test_mm_cvtepu8_epi64(__m128i a)134 __m128i test_mm_cvtepu8_epi64(__m128i a) {
135   // CHECK-LABEL: test_mm_cvtepu8_epi64
136   // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> {{.*}}, <2 x i32> <i32 0, i32 1>
137   // CHECK: zext <2 x i8> {{.*}} to <2 x i64>
138   return _mm_cvtepu8_epi64(a);
139 }
140 
test_mm_cvtepu16_epi32(__m128i a)141 __m128i test_mm_cvtepu16_epi32(__m128i a) {
142   // CHECK-LABEL: test_mm_cvtepu16_epi32
143   // CHECK: shufflevector <8 x i16> {{.*}}, <8 x i16> {{.*}}, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
144   // CHECK: zext <4 x i16> {{.*}} to <4 x i32>
145   return _mm_cvtepu16_epi32(a);
146 }
147 
test_mm_cvtepu16_epi64(__m128i a)148 __m128i test_mm_cvtepu16_epi64(__m128i a) {
149   // CHECK-LABEL: test_mm_cvtepu16_epi64
150   // CHECK: shufflevector <8 x i16> {{.*}}, <8 x i16> {{.*}}, <2 x i32> <i32 0, i32 1>
151   // CHECK: zext <2 x i16> {{.*}} to <2 x i64>
152   return _mm_cvtepu16_epi64(a);
153 }
154 
test_mm_cvtepu32_epi64(__m128i a)155 __m128i test_mm_cvtepu32_epi64(__m128i a) {
156   // CHECK-LABEL: test_mm_cvtepu32_epi64
157   // CHECK: shufflevector <4 x i32> {{.*}}, <4 x i32> {{.*}}, <2 x i32> <i32 0, i32 1>
158   // CHECK: zext <2 x i32> {{.*}} to <2 x i64>
159   return _mm_cvtepu32_epi64(a);
160 }
161 
test_mm_dp_pd(__m128d x,__m128d y)162 __m128d test_mm_dp_pd(__m128d x, __m128d y) {
163   // CHECK-LABEL: test_mm_dp_pd
164   // CHECK: call <2 x double> @llvm.x86.sse41.dppd(<2 x double> {{.*}}, <2 x double> {{.*}}, i8 7)
165   return _mm_dp_pd(x, y, 7);
166 }
167 
test_mm_dp_ps(__m128 x,__m128 y)168 __m128 test_mm_dp_ps(__m128 x, __m128 y) {
169   // CHECK-LABEL: test_mm_dp_ps
170   // CHECK: call <4 x float> @llvm.x86.sse41.dpps(<4 x float> {{.*}}, <4 x float> {{.*}}, i8 7)
171   return _mm_dp_ps(x, y, 7);
172 }
173 
test_mm_extract_epi8(__m128i x)174 int test_mm_extract_epi8(__m128i x) {
175   // CHECK-LABEL: test_mm_extract_epi8
176   // CHECK: extractelement <16 x i8> %{{.*}}, i32 1
177   // CHECK: zext i8 %{{.*}} to i32
178   return _mm_extract_epi8(x, 1);
179 }
180 
test_mm_extract_epi32(__m128i x)181 int test_mm_extract_epi32(__m128i x) {
182   // CHECK-LABEL: test_mm_extract_epi32
183   // CHECK: extractelement <4 x i32> %{{.*}}, i32 1
184   return _mm_extract_epi32(x, 1);
185 }
186 
test_mm_extract_epi64(__m128i x)187 long long test_mm_extract_epi64(__m128i x) {
188   // CHECK-LABEL: test_mm_extract_epi64
189   // CHECK: extractelement <2 x i64> %{{.*}}, i32 1
190   return _mm_extract_epi64(x, 1);
191 }
192 
test_mm_extract_ps(__m128 x)193 int test_mm_extract_ps(__m128 x) {
194   // CHECK-LABEL: test_mm_extract_ps
195   // CHECK: extractelement <4 x float> %{{.*}}, i32 1
196   return _mm_extract_ps(x, 1);
197 }
198 
test_mm_floor_pd(__m128d x)199 __m128d test_mm_floor_pd(__m128d x) {
200   // CHECK-LABEL: test_mm_floor_pd
201   // CHECK: call <2 x double> @llvm.x86.sse41.round.pd(<2 x double> %{{.*}}, i32 1)
202   return _mm_floor_pd(x);
203 }
204 
test_mm_floor_ps(__m128 x)205 __m128 test_mm_floor_ps(__m128 x) {
206   // CHECK-LABEL: test_mm_floor_ps
207   // CHECK: call <4 x float> @llvm.x86.sse41.round.ps(<4 x float> %{{.*}}, i32 1)
208   return _mm_floor_ps(x);
209 }
210 
test_mm_floor_sd(__m128d x,__m128d y)211 __m128d test_mm_floor_sd(__m128d x, __m128d y) {
212   // CHECK-LABEL: test_mm_floor_sd
213   // CHECK: call <2 x double> @llvm.x86.sse41.round.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i32 1)
214   return _mm_floor_sd(x, y);
215 }
216 
test_mm_floor_ss(__m128 x,__m128 y)217 __m128 test_mm_floor_ss(__m128 x, __m128 y) {
218   // CHECK-LABEL: test_mm_floor_ss
219   // CHECK: call <4 x float> @llvm.x86.sse41.round.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i32 1)
220   return _mm_floor_ss(x, y);
221 }
222 
test_mm_insert_epi8(__m128i x,char b)223 __m128i test_mm_insert_epi8(__m128i x, char b) {
224   // CHECK-LABEL: test_mm_insert_epi8
225   // CHECK: insertelement <16 x i8> %{{.*}}, i8 %{{.*}}, i32 0
226   return _mm_insert_epi8(x, b, 16);
227 }
228 
test_mm_insert_epi32(__m128i x,int b)229 __m128i test_mm_insert_epi32(__m128i x, int b) {
230   // CHECK-LABEL: test_mm_insert_epi32
231   // CHECK: insertelement <4 x i32> %{{.*}}, i32 %{{.*}}, i32 0
232   return _mm_insert_epi32(x, b, 4);
233 }
234 
test_mm_insert_epi64(__m128i x,long long b)235 __m128i test_mm_insert_epi64(__m128i x, long long b) {
236   // CHECK-LABEL: test_mm_insert_epi64
237   // CHECK: insertelement <2 x i64> %{{.*}}, i64 %{{.*}}, i32 0
238   return _mm_insert_epi64(x, b, 2);
239 }
240 
test_mm_insert_ps(__m128 x,__m128 y)241 __m128 test_mm_insert_ps(__m128 x, __m128 y) {
242   // CHECK-LABEL: test_mm_insert_ps
243   // CHECK: call <4 x float> @llvm.x86.sse41.insertps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 4)
244   return _mm_insert_ps(x, y, 4);
245 }
246 
test_mm_max_epi8(__m128i x,__m128i y)247 __m128i test_mm_max_epi8(__m128i x, __m128i y) {
248   // CHECK-LABEL: test_mm_max_epi8
249   // CHECK:       [[CMP:%.*]] = icmp sgt <16 x i8> [[X:%.*]], [[Y:%.*]]
250   // CHECK-NEXT:  select <16 x i1> [[CMP]], <16 x i8> [[X]], <16 x i8> [[Y]]
251   return _mm_max_epi8(x, y);
252 }
253 
test_mm_max_epi32(__m128i x,__m128i y)254 __m128i test_mm_max_epi32(__m128i x, __m128i y) {
255   // CHECK-LABEL: test_mm_max_epi32
256   // CHECK:       [[CMP:%.*]] = icmp sgt <4 x i32> [[X:%.*]], [[Y:%.*]]
257   // CHECK-NEXT:  select <4 x i1> [[CMP]], <4 x i32> [[X]], <4 x i32> [[Y]]
258   return _mm_max_epi32(x, y);
259 }
260 
test_mm_max_epu16(__m128i x,__m128i y)261 __m128i test_mm_max_epu16(__m128i x, __m128i y) {
262   // CHECK-LABEL: test_mm_max_epu16
263   // CHECK:       [[CMP:%.*]] = icmp ugt <8 x i16> [[X:%.*]], [[Y:%.*]]
264   // CHECK-NEXT:  select <8 x i1> [[CMP]], <8 x i16> [[X]], <8 x i16> [[Y]]
265   return _mm_max_epu16(x, y);
266 }
267 
test_mm_max_epu32(__m128i x,__m128i y)268 __m128i test_mm_max_epu32(__m128i x, __m128i y) {
269   // CHECK-LABEL: test_mm_max_epu32
270   // CHECK:       [[CMP:%.*]] = icmp ugt <4 x i32> [[X:%.*]], [[Y:%.*]]
271   // CHECK-NEXT:  select <4 x i1> [[CMP]], <4 x i32> [[X]], <4 x i32> [[Y]]
272   return _mm_max_epu32(x, y);
273 }
274 
test_mm_min_epi8(__m128i x,__m128i y)275 __m128i test_mm_min_epi8(__m128i x, __m128i y) {
276   // CHECK-LABEL: test_mm_min_epi8
277   // CHECK:       [[CMP:%.*]] = icmp slt <16 x i8> [[X:%.*]], [[Y:%.*]]
278   // CHECK-NEXT:  select <16 x i1> [[CMP]], <16 x i8> [[X]], <16 x i8> [[Y]]
279   return _mm_min_epi8(x, y);
280 }
281 
test_mm_min_epi32(__m128i x,__m128i y)282 __m128i test_mm_min_epi32(__m128i x, __m128i y) {
283   // CHECK-LABEL: test_mm_min_epi32
284   // CHECK:       [[CMP:%.*]] = icmp slt <4 x i32> [[X:%.*]], [[Y:%.*]]
285   // CHECK-NEXT:  select <4 x i1> [[CMP]], <4 x i32> [[X]], <4 x i32> [[Y]]
286   return _mm_min_epi32(x, y);
287 }
288 
test_mm_min_epu16(__m128i x,__m128i y)289 __m128i test_mm_min_epu16(__m128i x, __m128i y) {
290   // CHECK-LABEL: test_mm_min_epu16
291   // CHECK:       [[CMP:%.*]] = icmp ult <8 x i16> [[X:%.*]], [[Y:%.*]]
292   // CHECK-NEXT:  select <8 x i1> [[CMP]], <8 x i16> [[X]], <8 x i16> [[Y]]
293   return _mm_min_epu16(x, y);
294 }
295 
test_mm_min_epu32(__m128i x,__m128i y)296 __m128i test_mm_min_epu32(__m128i x, __m128i y) {
297   // CHECK-LABEL: test_mm_min_epu32
298   // CHECK:       [[CMP:%.*]] = icmp ult <4 x i32> [[X:%.*]], [[Y:%.*]]
299   // CHECK-NEXT:  select <4 x i1> [[CMP]], <4 x i32> [[X]], <4 x i32> [[Y]]
300   return _mm_min_epu32(x, y);
301 }
302 
test_mm_minpos_epu16(__m128i x)303 __m128i test_mm_minpos_epu16(__m128i x) {
304   // CHECK-LABEL: test_mm_minpos_epu16
305   // CHECK: call <8 x i16> @llvm.x86.sse41.phminposuw(<8 x i16> %{{.*}})
306   return _mm_minpos_epu16(x);
307 }
308 
test_mm_mpsadbw_epu8(__m128i x,__m128i y)309 __m128i test_mm_mpsadbw_epu8(__m128i x, __m128i y) {
310   // CHECK-LABEL: test_mm_mpsadbw_epu8
311   // CHECK: call <8 x i16> @llvm.x86.sse41.mpsadbw(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i8 1)
312   return _mm_mpsadbw_epu8(x, y, 1);
313 }
314 
test_mm_mul_epi32(__m128i x,__m128i y)315 __m128i test_mm_mul_epi32(__m128i x, __m128i y) {
316   // CHECK-LABEL: test_mm_mul_epi32
317   // CHECK: call <2 x i64> @llvm.x86.sse41.pmuldq(<4 x i32> %{{.*}}, <4 x i32> %{{.*}})
318   return _mm_mul_epi32(x, y);
319 }
320 
test_mm_mullo_epi32(__m128i x,__m128i y)321 __m128i test_mm_mullo_epi32(__m128i x, __m128i y) {
322   // CHECK-LABEL: test_mm_mullo_epi32
323   // CHECK: mul <4 x i32>
324   return _mm_mullo_epi32(x, y);
325 }
326 
test_mm_packus_epi32(__m128i x,__m128i y)327 __m128i test_mm_packus_epi32(__m128i x, __m128i y) {
328   // CHECK-LABEL: test_mm_packus_epi32
329   // CHECK: call <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32> %{{.*}}, <4 x i32> %{{.*}})
330   return _mm_packus_epi32(x, y);
331 }
332 
test_mm_round_pd(__m128d x)333 __m128d test_mm_round_pd(__m128d x) {
334   // CHECK-LABEL: test_mm_round_pd
335   // CHECK: call <2 x double> @llvm.x86.sse41.round.pd(<2 x double> %{{.*}}, i32 4)
336   return _mm_round_pd(x, 4);
337 }
338 
test_mm_round_ps(__m128 x)339 __m128 test_mm_round_ps(__m128 x) {
340   // CHECK-LABEL: test_mm_round_ps
341   // CHECK: call <4 x float> @llvm.x86.sse41.round.ps(<4 x float> %{{.*}}, i32 4)
342   return _mm_round_ps(x, 4);
343 }
344 
test_mm_round_sd(__m128d x,__m128d y)345 __m128d test_mm_round_sd(__m128d x, __m128d y) {
346   // CHECK-LABEL: test_mm_round_sd
347   // CHECK: call <2 x double> @llvm.x86.sse41.round.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i32 4)
348   return _mm_round_sd(x, y, 4);
349 }
350 
test_mm_round_ss(__m128 x,__m128 y)351 __m128 test_mm_round_ss(__m128 x, __m128 y) {
352   // CHECK-LABEL: test_mm_round_ss
353   // CHECK: call <4 x float> @llvm.x86.sse41.round.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i32 4)
354   return _mm_round_ss(x, y, 4);
355 }
356 
test_mm_stream_load_si128(__m128i const * a)357 __m128i test_mm_stream_load_si128(__m128i const *a) {
358   // CHECK-LABEL: test_mm_stream_load_si128
359   // CHECK: call <2 x i64> @llvm.x86.sse41.movntdqa(i8* %{{.*}})
360   return _mm_stream_load_si128(a);
361 }
362 
test_mm_test_all_ones(__m128i x)363 int test_mm_test_all_ones(__m128i x) {
364   // CHECK-LABEL: test_mm_test_all_ones
365   // CHECK: call i32 @llvm.x86.sse41.ptestc(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})
366   return _mm_test_all_ones(x);
367 }
368 
test_mm_test_all_zeros(__m128i x,__m128i y)369 int test_mm_test_all_zeros(__m128i x, __m128i y) {
370   // CHECK-LABEL: test_mm_test_all_zeros
371   // CHECK: call i32 @llvm.x86.sse41.ptestz(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})
372   return _mm_test_all_zeros(x, y);
373 }
374 
test_mm_test_mix_ones_zeros(__m128i x,__m128i y)375 int test_mm_test_mix_ones_zeros(__m128i x, __m128i y) {
376   // CHECK-LABEL: test_mm_test_mix_ones_zeros
377   // CHECK: call i32 @llvm.x86.sse41.ptestnzc(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})
378   return _mm_test_mix_ones_zeros(x, y);
379 }
380 
test_mm_testc_si128(__m128i x,__m128i y)381 int test_mm_testc_si128(__m128i x, __m128i y) {
382   // CHECK-LABEL: test_mm_testc_si128
383   // CHECK: call i32 @llvm.x86.sse41.ptestc(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})
384   return _mm_testc_si128(x, y);
385 }
386 
test_mm_testnzc_si128(__m128i x,__m128i y)387 int test_mm_testnzc_si128(__m128i x, __m128i y) {
388   // CHECK-LABEL: test_mm_testnzc_si128
389   // CHECK: call i32 @llvm.x86.sse41.ptestnzc(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})
390   return _mm_testnzc_si128(x, y);
391 }
392 
test_mm_testz_si128(__m128i x,__m128i y)393 int test_mm_testz_si128(__m128i x, __m128i y) {
394   // CHECK-LABEL: test_mm_testz_si128
395   // CHECK: call i32 @llvm.x86.sse41.ptestz(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})
396   return _mm_testz_si128(x, y);
397 }
398