blob: 64ee4c970fe0ebf4f4384777aa803e7bb2791fa6 [file] [log] [blame]
NAKAMURA Takumib5f8f072011-09-16 03:55:36 +00001// RUN: %clang_cc1 -ffreestanding -triple i386-apple-darwin9 -target-cpu pentium4 -target-feature +sse4.1 -g -emit-llvm %s -o - | FileCheck %s
Eli Friedman7c06f6b2011-09-15 23:15:27 +00002
3#include <emmintrin.h>
4
5__m128 test_loadl_pi(__m128 x, void* y) {
6 // CHECK: define {{.*}} @test_loadl_pi
7 // CHECK: load <2 x float>* {{.*}}, align 1{{$}}
8 // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1
9 // CHECK: shufflevector {{.*}} <4 x i32> <i32 4, i32 5, i32 2, i32 3>
10 return _mm_loadl_pi(x,y);
11}
12
13__m128 test_loadh_pi(__m128 x, void* y) {
14 // CHECK: define {{.*}} @test_loadh_pi
15 // CHECK: load <2 x float>* {{.*}}, align 1{{$}}
16 // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1
17 // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1, i32 4, i32 5>
18 return _mm_loadh_pi(x,y);
19}
20
21__m128 test_load_ss(void* y) {
22 // CHECK: define {{.*}} @test_load_ss
23 // CHECK: load float* {{.*}}, align 1{{$}}
24 return _mm_load_ss(y);
25}
26
27__m128 test_load1_ps(void* y) {
28 // CHECK: define {{.*}} @test_load1_ps
29 // CHECK: load float* {{.*}}, align 1{{$}}
30 return _mm_load1_ps(y);
31}
32
33void test_store_ss(__m128 x, void* y) {
34 // CHECK: define void @test_store_ss
35 // CHECK: store {{.*}} float* {{.*}}, align 1,
36 _mm_store_ss(y, x);
37}
38
39__m128d test_load1_pd(__m128 x, void* y) {
40 // CHECK: define {{.*}} @test_load1_pd
41 // CHECK: load double* {{.*}}, align 1{{$}}
42 return _mm_load1_pd(y);
43}
44
45__m128d test_loadr_pd(__m128 x, void* y) {
46 // CHECK: define {{.*}} @test_loadr_pd
47 // CHECK: load <2 x double>* {{.*}}, align 16{{$}}
48 return _mm_loadr_pd(y);
49}
50
51__m128d test_load_sd(void* y) {
52 // CHECK: define {{.*}} @test_load_sd
53 // CHECK: load double* {{.*}}, align 1{{$}}
54 return _mm_load_sd(y);
55}
56
57__m128d test_loadh_pd(__m128d x, void* y) {
58 // CHECK: define {{.*}} @test_loadh_pd
59 // CHECK: load double* {{.*}}, align 1{{$}}
60 return _mm_loadh_pd(x, y);
61}
62
63__m128d test_loadl_pd(__m128d x, void* y) {
64 // CHECK: define {{.*}} @test_loadl_pd
65 // CHECK: load double* {{.*}}, align 1{{$}}
66 return _mm_loadl_pd(x, y);
67}
68
69void test_store_sd(__m128d x, void* y) {
70 // CHECK: define void @test_store_sd
71 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
72 _mm_store_sd(y, x);
73}
74
75void test_store1_pd(__m128d x, void* y) {
76 // CHECK: define void @test_store1_pd
77 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
78 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
79 _mm_store1_pd(y, x);
80}
81
82void test_storer_pd(__m128d x, void* y) {
83 // CHECK: define void @test_storer_pd
84 // CHECK: store {{.*}} <2 x double>* {{.*}}, align 16{{$}}
85 _mm_storer_pd(y, x);
86}
87
88void test_storeh_pd(__m128d x, void* y) {
89 // CHECK: define void @test_storeh_pd
90 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
91 _mm_storeh_pd(y, x);
92}
93
94void test_storel_pd(__m128d x, void* y) {
95 // CHECK: define void @test_storel_pd
96 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
97 _mm_storel_pd(y, x);
98}
99
100__m128i test_loadl_epi64(void* y) {
101 // CHECK: define {{.*}} @test_loadl_epi64
102 // CHECK: load i64* {{.*}}, align 1{{$}}
103 return _mm_loadl_epi64(y);
104}