1 // RUN: %clang_cc1 -ffreestanding -triple x86_64-apple-macosx10.8.0 -target-feature +sse4.1 -emit-llvm %s -o - | FileCheck %s
7 __m128 test_rsqrt_ss(__m128 x) {
8 // CHECK: define {{.*}} @test_rsqrt_ss
9 // CHECK: call <4 x float> @llvm.x86.sse.rsqrt.ss
10 // CHECK: extractelement <4 x float> {{.*}}, i32 0
11 // CHECK: extractelement <4 x float> {{.*}}, i32 1
12 // CHECK: extractelement <4 x float> {{.*}}, i32 2
13 // CHECK: extractelement <4 x float> {{.*}}, i32 3
14 return _mm_rsqrt_ss(x);
17 __m128 test_rcp_ss(__m128 x) {
18 // CHECK: define {{.*}} @test_rcp_ss
19 // CHECK: call <4 x float> @llvm.x86.sse.rcp.ss
20 // CHECK: extractelement <4 x float> {{.*}}, i32 0
21 // CHECK: extractelement <4 x float> {{.*}}, i32 1
22 // CHECK: extractelement <4 x float> {{.*}}, i32 2
23 // CHECK: extractelement <4 x float> {{.*}}, i32 3
27 __m128 test_sqrt_ss(__m128 x) {
28 // CHECK: define {{.*}} @test_sqrt_ss
29 // CHECK: call <4 x float> @llvm.x86.sse.sqrt.ss
30 // CHECK: extractelement <4 x float> {{.*}}, i32 0
31 // CHECK: extractelement <4 x float> {{.*}}, i32 1
32 // CHECK: extractelement <4 x float> {{.*}}, i32 2
33 // CHECK: extractelement <4 x float> {{.*}}, i32 3
34 return _mm_sqrt_ss(x);
37 __m128 test_loadl_pi(__m128 x, void* y) {
38 // CHECK: define {{.*}} @test_loadl_pi
39 // CHECK: load <2 x float>, <2 x float>* {{.*}}, align 1{{$}}
40 // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1
41 // CHECK: shufflevector {{.*}} <4 x i32> <i32 4, i32 5, i32 2, i32 3>
42 return _mm_loadl_pi(x,y);
45 __m128 test_loadh_pi(__m128 x, void* y) {
46 // CHECK: define {{.*}} @test_loadh_pi
47 // CHECK: load <2 x float>, <2 x float>* {{.*}}, align 1{{$}}
48 // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1
49 // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1, i32 4, i32 5>
50 return _mm_loadh_pi(x,y);
53 __m128 test_load_ss(void* y) {
54 // CHECK: define {{.*}} @test_load_ss
55 // CHECK: load float, float* {{.*}}, align 1{{$}}
56 return _mm_load_ss(y);
59 __m128 test_load1_ps(void* y) {
60 // CHECK: define {{.*}} @test_load1_ps
61 // CHECK: load float, float* {{.*}}, align 1{{$}}
62 return _mm_load1_ps(y);
65 void test_store_ss(__m128 x, void* y) {
66 // CHECK-LABEL: define void @test_store_ss
67 // CHECK: store {{.*}} float* {{.*}}, align 1{{$}}
71 __m128d test_load1_pd(__m128 x, void* y) {
72 // CHECK: define {{.*}} @test_load1_pd
73 // CHECK: load double, double* {{.*}}, align 1{{$}}
74 return _mm_load1_pd(y);
77 __m128d test_loadr_pd(__m128 x, void* y) {
78 // CHECK: define {{.*}} @test_loadr_pd
79 // CHECK: load <2 x double>, <2 x double>* {{.*}}, align 16{{$}}
80 return _mm_loadr_pd(y);
83 __m128d test_load_sd(void* y) {
84 // CHECK: define {{.*}} @test_load_sd
85 // CHECK: load double, double* {{.*}}, align 1{{$}}
86 return _mm_load_sd(y);
89 __m128d test_loadh_pd(__m128d x, void* y) {
90 // CHECK: define {{.*}} @test_loadh_pd
91 // CHECK: load double, double* {{.*}}, align 1{{$}}
92 return _mm_loadh_pd(x, y);
95 __m128d test_loadl_pd(__m128d x, void* y) {
96 // CHECK: define {{.*}} @test_loadl_pd
97 // CHECK: load double, double* {{.*}}, align 1{{$}}
98 return _mm_loadl_pd(x, y);
101 void test_store_sd(__m128d x, void* y) {
102 // CHECK-LABEL: define void @test_store_sd
103 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
107 void test_store1_pd(__m128d x, void* y) {
108 // CHECK-LABEL: define void @test_store1_pd
109 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
110 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
114 void test_storer_pd(__m128d x, void* y) {
115 // CHECK-LABEL: define void @test_storer_pd
116 // CHECK: store {{.*}} <2 x double>* {{.*}}, align 16{{$}}
120 void test_storeh_pd(__m128d x, void* y) {
121 // CHECK-LABEL: define void @test_storeh_pd
122 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
126 void test_storel_pd(__m128d x, void* y) {
127 // CHECK-LABEL: define void @test_storel_pd
128 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
132 __m128i test_loadl_epi64(void* y) {
133 // CHECK: define {{.*}} @test_loadl_epi64
134 // CHECK: load i64, i64* {{.*}}, align 1{{$}}
135 return _mm_loadl_epi64(y);
138 __m128i test_mm_minpos_epu16(__m128i x) {
139 // CHECK: define {{.*}} @test_mm_minpos_epu16
140 // CHECK: @llvm.x86.sse41.phminposuw
141 return _mm_minpos_epu16(x);
144 __m128i test_mm_mpsadbw_epu8(__m128i x, __m128i y) {
145 // CHECK: define {{.*}} @test_mm_mpsadbw_epu8
146 // CHECK: @llvm.x86.sse41.mpsadbw
147 return _mm_mpsadbw_epu8(x, y, 1);
150 __m128 test_mm_dp_ps(__m128 x, __m128 y) {
151 // CHECK: define {{.*}} @test_mm_dp_ps
152 // CHECK: @llvm.x86.sse41.dpps
153 return _mm_dp_ps(x, y, 2);
156 __m128d test_mm_dp_pd(__m128d x, __m128d y) {
157 // CHECK: define {{.*}} @test_mm_dp_pd
158 // CHECK: @llvm.x86.sse41.dppd
159 return _mm_dp_pd(x, y, 2);
162 __m128 test_mm_round_ps(__m128 x) {
163 // CHECK: define {{.*}} @test_mm_round_ps
164 // CHECK: @llvm.x86.sse41.round.ps
165 return _mm_round_ps(x, 2);
168 __m128 test_mm_round_ss(__m128 x, __m128 y) {
169 // CHECK: define {{.*}} @test_mm_round_ss
170 // CHECK: @llvm.x86.sse41.round.ss
171 return _mm_round_ss(x, y, 2);
174 __m128d test_mm_round_pd(__m128d x) {
175 // CHECK: define {{.*}} @test_mm_round_pd
176 // CHECK: @llvm.x86.sse41.round.pd
177 return _mm_round_pd(x, 2);
180 __m128d test_mm_round_sd(__m128d x, __m128d y) {
181 // CHECK: define {{.*}} @test_mm_round_sd
182 // CHECK: @llvm.x86.sse41.round.sd
183 return _mm_round_sd(x, y, 2);
186 void test_storel_epi64(__m128i x, void* y) {
187 // CHECK-LABEL: define void @test_storel_epi64
188 // CHECK: store {{.*}} i64* {{.*}}, align 1{{$}}
189 _mm_storel_epi64(y, x);
192 void test_stream_si32(int x, void *y) {
193 // CHECK-LABEL: define void @test_stream_si32
194 // CHECK: store {{.*}} i32* {{.*}}, align 1, !nontemporal
195 _mm_stream_si32(y, x);
198 void test_stream_si64(long long x, void *y) {
199 // CHECK-LABEL: define void @test_stream_si64
200 // CHECK: store {{.*}} i64* {{.*}}, align 1, !nontemporal
201 _mm_stream_si64(y, x);
204 void test_stream_si128(__m128i x, void *y) {
205 // CHECK-LABEL: define void @test_stream_si128
206 // CHECK: store {{.*}} <2 x i64>* {{.*}}, align 16, !nontemporal
207 _mm_stream_si128(y, x);
210 void test_extract_epi16(__m128i __a) {
211 // CHECK-LABEL: define void @test_extract_epi16
212 // CHECK: [[x:%.*]] = and i32 %{{.*}}, 7
213 // CHECK: extractelement <8 x i16> %{{.*}}, i32 [[x]]
214 _mm_extract_epi16(__a, 8);
217 int test_extract_ps(__m128i __a) {
218 // CHECK-LABEL: @test_extract_ps
219 // CHECK: extractelement <4 x float> %{{.*}}, i32 0
220 return _mm_extract_ps(__a, 4);
223 int test_extract_epi8(__m128i __a) {
224 // CHECK-LABEL: @test_extract_epi8
225 // CHECK: extractelement <16 x i8> %{{.*}}, i32 0
226 return _mm_extract_epi8(__a, 16);
229 int test_extract_epi32(__m128i __a) {
230 // CHECK-LABEL: @test_extract_epi32
231 // CHECK: extractelement <4 x i32> %{{.*}}, i32 0
232 return _mm_extract_epi32(__a, 4);
235 void test_insert_epi32(__m128i __a, int b) {
236 // CHECK-LABEL: @test_insert_epi32
237 // CHECK: insertelement <4 x i32> %{{.*}}, i32 %{{.*}}, i32 0
238 _mm_insert_epi32(__a, b, 4);
241 __m128d test_blend_pd(__m128d V1, __m128d V2) {
242 // CHECK-LABEL: @test_blend_pd
243 // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> <i32 2, i32 1>
244 return _mm_blend_pd(V1, V2, 1);
247 __m128 test_blend_ps(__m128 V1, __m128 V2) {
248 // CHECK-LABEL: @test_blend_ps
249 // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
250 return _mm_blend_ps(V1, V2, 5);
253 __m128i test_blend_epi16(__m128i V1, __m128i V2) {
254 // CHECK-LABEL: @test_blend_epi16
255 // 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>
256 return _mm_blend_epi16(V1, V2, 42);
259 __m128 test_mm_cmpeq_ss(__m128 __a, __m128 __b) {
260 // CHECK-LABEL: @test_mm_cmpeq_ss
261 // CHECK: @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 0)
262 return _mm_cmpeq_ss(__a, __b);
265 __m128 test_mm_cmplt_ss(__m128 __a, __m128 __b) {
266 // CHECK-LABEL: @test_mm_cmplt_ss
267 // CHECK: @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 1)
268 return _mm_cmplt_ss(__a, __b);
271 __m128 test_mm_cmple_ss(__m128 __a, __m128 __b) {
272 // CHECK-LABEL: @test_mm_cmple_ss
273 // CHECK: @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 2)
274 return _mm_cmple_ss(__a, __b);
277 __m128 test_mm_cmpunord_ss(__m128 __a, __m128 __b) {
278 // CHECK-LABEL: @test_mm_cmpunord_ss
279 // CHECK: @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 3)
280 return _mm_cmpunord_ss(__a, __b);
283 __m128 test_mm_cmpneq_ss(__m128 __a, __m128 __b) {
284 // CHECK-LABEL: @test_mm_cmpneq_ss
285 // CHECK: @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 4)
286 return _mm_cmpneq_ss(__a, __b);
289 __m128 test_mm_cmpnlt_ss(__m128 __a, __m128 __b) {
290 // CHECK-LABEL: @test_mm_cmpnlt_ss
291 // CHECK: @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 5)
292 return _mm_cmpnlt_ss(__a, __b);
295 __m128 test_mm_cmpnle_ss(__m128 __a, __m128 __b) {
296 // CHECK-LABEL: @test_mm_cmpnle_ss
297 // CHECK: @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 6)
298 return _mm_cmpnle_ss(__a, __b);
301 __m128 test_mm_cmpord_ss(__m128 __a, __m128 __b) {
302 // CHECK-LABEL: @test_mm_cmpord_ss
303 // CHECK: @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 7)
304 return _mm_cmpord_ss(__a, __b);
307 __m128 test_mm_cmpgt_ss(__m128 __a, __m128 __b) {
308 // CHECK-LABEL: @test_mm_cmpgt_ss
309 // CHECK: @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 1)
310 return _mm_cmpgt_ss(__a, __b);
313 __m128 test_mm_cmpge_ss(__m128 __a, __m128 __b) {
314 // CHECK-LABEL: @test_mm_cmpge_ss
315 // CHECK: @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 2)
316 return _mm_cmpge_ss(__a, __b);
319 __m128 test_mm_cmpngt_ss(__m128 __a, __m128 __b) {
320 // CHECK-LABEL: @test_mm_cmpngt_ss
321 // CHECK: @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 5)
322 return _mm_cmpngt_ss(__a, __b);
325 __m128 test_mm_cmpnge_ss(__m128 __a, __m128 __b) {
326 // CHECK-LABEL: @test_mm_cmpnge_ss
327 // CHECK: @llvm.x86.sse.cmp.ss(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 6)
328 return _mm_cmpnge_ss(__a, __b);
331 __m128 test_mm_cmpeq_ps(__m128 __a, __m128 __b) {
332 // CHECK-LABEL: @test_mm_cmpeq_ps
333 // CHECK: @llvm.x86.sse.cmp.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 0)
334 return _mm_cmpeq_ps(__a, __b);
337 __m128 test_mm_cmplt_ps(__m128 __a, __m128 __b) {
338 // CHECK-LABEL: @test_mm_cmplt_ps
339 // CHECK: @llvm.x86.sse.cmp.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 1)
340 return _mm_cmplt_ps(__a, __b);
343 __m128 test_mm_cmple_ps(__m128 __a, __m128 __b) {
344 // CHECK-LABEL: @test_mm_cmple_ps
345 // CHECK: @llvm.x86.sse.cmp.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 2)
346 return _mm_cmple_ps(__a, __b);
349 __m128 test_mm_cmpunord_ps(__m128 __a, __m128 __b) {
350 // CHECK-LABEL: @test_mm_cmpunord_ps
351 // CHECK: @llvm.x86.sse.cmp.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 3)
352 return _mm_cmpunord_ps(__a, __b);
355 __m128 test_mm_cmpneq_ps(__m128 __a, __m128 __b) {
356 // CHECK-LABEL: @test_mm_cmpneq_ps
357 // CHECK: @llvm.x86.sse.cmp.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 4)
358 return _mm_cmpneq_ps(__a, __b);
361 __m128 test_mm_cmpnlt_ps(__m128 __a, __m128 __b) {
362 // CHECK-LABEL: @test_mm_cmpnlt_ps
363 // CHECK: @llvm.x86.sse.cmp.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 5)
364 return _mm_cmpnlt_ps(__a, __b);
367 __m128 test_mm_cmpnle_ps(__m128 __a, __m128 __b) {
368 // CHECK-LABEL: @test_mm_cmpnle_ps
369 // CHECK: @llvm.x86.sse.cmp.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 6)
370 return _mm_cmpnle_ps(__a, __b);
373 __m128 test_mm_cmpord_ps(__m128 __a, __m128 __b) {
374 // CHECK-LABEL: @test_mm_cmpord_ps
375 // CHECK: @llvm.x86.sse.cmp.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 7)
376 return _mm_cmpord_ps(__a, __b);
379 __m128 test_mm_cmpgt_ps(__m128 __a, __m128 __b) {
380 // CHECK-LABEL: @test_mm_cmpgt_ps
381 // CHECK: @llvm.x86.sse.cmp.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 1)
382 return _mm_cmpgt_ps(__a, __b);
385 __m128 test_mm_cmpge_ps(__m128 __a, __m128 __b) {
386 // CHECK-LABEL: @test_mm_cmpge_ps
387 // CHECK: @llvm.x86.sse.cmp.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 2)
388 return _mm_cmpge_ps(__a, __b);
391 __m128 test_mm_cmpngt_ps(__m128 __a, __m128 __b) {
392 // CHECK-LABEL: @test_mm_cmpngt_ps
393 // CHECK: @llvm.x86.sse.cmp.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 5)
394 return _mm_cmpngt_ps(__a, __b);
397 __m128 test_mm_cmpnge_ps(__m128 __a, __m128 __b) {
398 // CHECK-LABEL: @test_mm_cmpnge_ps
399 // CHECK: @llvm.x86.sse.cmp.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, i8 6)
400 return _mm_cmpnge_ps(__a, __b);
403 __m128d test_mm_cmpeq_sd(__m128d __a, __m128d __b) {
404 // CHECK-LABEL: @test_mm_cmpeq_sd
405 // CHECK: @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 0)
406 return _mm_cmpeq_sd(__a, __b);
409 __m128d test_mm_cmplt_sd(__m128d __a, __m128d __b) {
410 // CHECK-LABEL: @test_mm_cmplt_sd
411 // CHECK: @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 1)
412 return _mm_cmplt_sd(__a, __b);
415 __m128d test_mm_cmple_sd(__m128d __a, __m128d __b) {
416 // CHECK-LABEL: @test_mm_cmple_sd
417 // CHECK: @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 2)
418 return _mm_cmple_sd(__a, __b);
421 __m128d test_mm_cmpunord_sd(__m128d __a, __m128d __b) {
422 // CHECK-LABEL: @test_mm_cmpunord_sd
423 // CHECK: @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 3)
424 return _mm_cmpunord_sd(__a, __b);
427 __m128d test_mm_cmpneq_sd(__m128d __a, __m128d __b) {
428 // CHECK-LABEL: @test_mm_cmpneq_sd
429 // CHECK: @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 4)
430 return _mm_cmpneq_sd(__a, __b);
433 __m128d test_mm_cmpnlt_sd(__m128d __a, __m128d __b) {
434 // CHECK-LABEL: @test_mm_cmpnlt_sd
435 // CHECK: @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 5)
436 return _mm_cmpnlt_sd(__a, __b);
439 __m128d test_mm_cmpnle_sd(__m128d __a, __m128d __b) {
440 // CHECK-LABEL: @test_mm_cmpnle_sd
441 // CHECK: @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 6)
442 return _mm_cmpnle_sd(__a, __b);
445 __m128d test_mm_cmpord_sd(__m128d __a, __m128d __b) {
446 // CHECK-LABEL: @test_mm_cmpord_sd
447 // CHECK: @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 7)
448 return _mm_cmpord_sd(__a, __b);
451 __m128d test_mm_cmpgt_sd(__m128d __a, __m128d __b) {
452 // CHECK-LABEL: @test_mm_cmpgt_sd
453 // CHECK: @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 1)
454 return _mm_cmpgt_sd(__a, __b);
457 __m128d test_mm_cmpge_sd(__m128d __a, __m128d __b) {
458 // CHECK-LABEL: @test_mm_cmpge_sd
459 // CHECK: @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 2)
460 return _mm_cmpge_sd(__a, __b);
463 __m128d test_mm_cmpngt_sd(__m128d __a, __m128d __b) {
464 // CHECK-LABEL: @test_mm_cmpngt_sd
465 // CHECK: @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 5)
466 return _mm_cmpngt_sd(__a, __b);
469 __m128d test_mm_cmpnge_sd(__m128d __a, __m128d __b) {
470 // CHECK-LABEL: @test_mm_cmpnge_sd
471 // CHECK: @llvm.x86.sse2.cmp.sd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 6)
472 return _mm_cmpnge_sd(__a, __b);
475 __m128d test_mm_cmpeq_pd(__m128d __a, __m128d __b) {
476 // CHECK-LABEL: @test_mm_cmpeq_pd
477 // CHECK: @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 0)
478 return _mm_cmpeq_pd(__a, __b);
481 __m128d test_mm_cmplt_pd(__m128d __a, __m128d __b) {
482 // CHECK-LABEL: @test_mm_cmplt_pd
483 // CHECK: @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 1)
484 return _mm_cmplt_pd(__a, __b);
487 __m128d test_mm_cmple_pd(__m128d __a, __m128d __b) {
488 // CHECK-LABEL: @test_mm_cmple_pd
489 // CHECK: @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 2)
490 return _mm_cmple_pd(__a, __b);
493 __m128d test_mm_cmpunord_pd(__m128d __a, __m128d __b) {
494 // CHECK-LABEL: @test_mm_cmpunord_pd
495 // CHECK: @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 3)
496 return _mm_cmpunord_pd(__a, __b);
499 __m128d test_mm_cmpneq_pd(__m128d __a, __m128d __b) {
500 // CHECK-LABEL: @test_mm_cmpneq_pd
501 // CHECK: @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 4)
502 return _mm_cmpneq_pd(__a, __b);
505 __m128d test_mm_cmpnlt_pd(__m128d __a, __m128d __b) {
506 // CHECK-LABEL: @test_mm_cmpnlt_pd
507 // CHECK: @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 5)
508 return _mm_cmpnlt_pd(__a, __b);
511 __m128d test_mm_cmpnle_pd(__m128d __a, __m128d __b) {
512 // CHECK-LABEL: @test_mm_cmpnle_pd
513 // CHECK: @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 6)
514 return _mm_cmpnle_pd(__a, __b);
517 __m128d test_mm_cmpord_pd(__m128d __a, __m128d __b) {
518 // CHECK-LABEL: @test_mm_cmpord_pd
519 // CHECK: @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 7)
520 return _mm_cmpord_pd(__a, __b);
523 __m128d test_mm_cmpgt_pd(__m128d __a, __m128d __b) {
524 // CHECK-LABEL: @test_mm_cmpgt_pd
525 // CHECK: @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 1)
526 return _mm_cmpgt_pd(__a, __b);
529 __m128d test_mm_cmpge_pd(__m128d __a, __m128d __b) {
530 // CHECK-LABEL: @test_mm_cmpge_pd
531 // CHECK: @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 2)
532 return _mm_cmpge_pd(__a, __b);
535 __m128d test_mm_cmpngt_pd(__m128d __a, __m128d __b) {
536 // CHECK-LABEL: @test_mm_cmpngt_pd
537 // CHECK: @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 5)
538 return _mm_cmpngt_pd(__a, __b);
541 __m128d test_mm_cmpnge_pd(__m128d __a, __m128d __b) {
542 // CHECK-LABEL: @test_mm_cmpnge_pd
543 // CHECK: @llvm.x86.sse2.cmp.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, i8 6)
544 return _mm_cmpnge_pd(__a, __b);
547 __m128 test_mm_slli_si128(__m128 a) {
548 // CHECK-LABEL: @test_mm_slli_si128
549 // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> {{.*}}, <16 x i32> <i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26>
550 return _mm_slli_si128(a, 5);
553 __m128 test_mm_bslli_si128(__m128 a) {
554 // CHECK-LABEL: @test_mm_bslli_si128
555 // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> {{.*}}, <16 x i32> <i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26>
556 return _mm_bslli_si128(a, 5);
559 __m128 test_mm_srli_si128(__m128 a) {
560 // CHECK-LABEL: @test_mm_srli_si128
561 // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> {{.*}}, <16 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20>
562 return _mm_srli_si128(a, 5);
565 __m128 test_mm_bsrli_si128(__m128 a) {
566 // CHECK-LABEL: @test_mm_bsrli_si128
567 // CHECK: shufflevector <16 x i8> {{.*}}, <16 x i8> {{.*}}, <16 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20>
568 return _mm_bsrli_si128(a, 5);
571 __m128i test_mm_alignr_epi8(__m128i a, __m128i b) {
572 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17>
573 return _mm_alignr_epi8(a, b, 2);
576 __m128i test2_mm_alignr_epi8(__m128i a, __m128i b) {
577 // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> zeroinitializer, <16 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16>
578 return _mm_alignr_epi8(a, b, 17);