blob: 0e48560b0869c14c4e20fb7834f3ea19b80a778e [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>
Craig Topper52289822012-03-30 05:41:28 +00004#include <smmintrin.h>
Eli Friedman7c06f6b2011-09-15 23:15:27 +00005
6__m128 test_loadl_pi(__m128 x, void* y) {
7 // CHECK: define {{.*}} @test_loadl_pi
8 // CHECK: load <2 x float>* {{.*}}, align 1{{$}}
9 // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1
10 // CHECK: shufflevector {{.*}} <4 x i32> <i32 4, i32 5, i32 2, i32 3>
11 return _mm_loadl_pi(x,y);
12}
13
14__m128 test_loadh_pi(__m128 x, void* y) {
15 // CHECK: define {{.*}} @test_loadh_pi
16 // CHECK: load <2 x float>* {{.*}}, align 1{{$}}
17 // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1
18 // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1, i32 4, i32 5>
19 return _mm_loadh_pi(x,y);
20}
21
22__m128 test_load_ss(void* y) {
23 // CHECK: define {{.*}} @test_load_ss
24 // CHECK: load float* {{.*}}, align 1{{$}}
25 return _mm_load_ss(y);
26}
27
28__m128 test_load1_ps(void* y) {
29 // CHECK: define {{.*}} @test_load1_ps
30 // CHECK: load float* {{.*}}, align 1{{$}}
31 return _mm_load1_ps(y);
32}
33
34void test_store_ss(__m128 x, void* y) {
35 // CHECK: define void @test_store_ss
36 // CHECK: store {{.*}} float* {{.*}}, align 1,
37 _mm_store_ss(y, x);
38}
39
40__m128d test_load1_pd(__m128 x, void* y) {
41 // CHECK: define {{.*}} @test_load1_pd
42 // CHECK: load double* {{.*}}, align 1{{$}}
43 return _mm_load1_pd(y);
44}
45
46__m128d test_loadr_pd(__m128 x, void* y) {
47 // CHECK: define {{.*}} @test_loadr_pd
48 // CHECK: load <2 x double>* {{.*}}, align 16{{$}}
49 return _mm_loadr_pd(y);
50}
51
52__m128d test_load_sd(void* y) {
53 // CHECK: define {{.*}} @test_load_sd
54 // CHECK: load double* {{.*}}, align 1{{$}}
55 return _mm_load_sd(y);
56}
57
58__m128d test_loadh_pd(__m128d x, void* y) {
59 // CHECK: define {{.*}} @test_loadh_pd
60 // CHECK: load double* {{.*}}, align 1{{$}}
61 return _mm_loadh_pd(x, y);
62}
63
64__m128d test_loadl_pd(__m128d x, void* y) {
65 // CHECK: define {{.*}} @test_loadl_pd
66 // CHECK: load double* {{.*}}, align 1{{$}}
67 return _mm_loadl_pd(x, y);
68}
69
70void test_store_sd(__m128d x, void* y) {
71 // CHECK: define void @test_store_sd
72 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
73 _mm_store_sd(y, x);
74}
75
76void test_store1_pd(__m128d x, void* y) {
77 // CHECK: define void @test_store1_pd
78 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
79 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
80 _mm_store1_pd(y, x);
81}
82
83void test_storer_pd(__m128d x, void* y) {
84 // CHECK: define void @test_storer_pd
85 // CHECK: store {{.*}} <2 x double>* {{.*}}, align 16{{$}}
86 _mm_storer_pd(y, x);
87}
88
89void test_storeh_pd(__m128d x, void* y) {
90 // CHECK: define void @test_storeh_pd
91 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
92 _mm_storeh_pd(y, x);
93}
94
95void test_storel_pd(__m128d x, void* y) {
96 // CHECK: define void @test_storel_pd
97 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
98 _mm_storel_pd(y, x);
99}
100
101__m128i test_loadl_epi64(void* y) {
102 // CHECK: define {{.*}} @test_loadl_epi64
103 // CHECK: load i64* {{.*}}, align 1{{$}}
104 return _mm_loadl_epi64(y);
105}
Craig Topper52289822012-03-30 05:41:28 +0000106
107__m128i test_mm_minpos_epu16(__m128i x) {
Craig Topper5aeaca32012-03-30 07:01:17 +0000108 // CHECK: define {{.*}} @test_mm_minpos_epu16
109 // CHECK: @llvm.x86.sse41.phminposuw
Craig Topper52289822012-03-30 05:41:28 +0000110 return _mm_minpos_epu16(x);
111}
Craig Topper5aeaca32012-03-30 07:01:17 +0000112
113__m128i test_mm_mpsadbw_epu8(__m128i x, __m128i y) {
114 // CHECK: define {{.*}} @test_mm_mpsadbw_epu8
115 // CHECK: @llvm.x86.sse41.mpsadbw
116 return _mm_mpsadbw_epu8(x, y, 1);
117}
118
119__m128 test_mm_dp_ps(__m128 x, __m128 y) {
120 // CHECK: define {{.*}} @test_mm_dp_ps
121 // CHECK: @llvm.x86.sse41.dpps
122 return _mm_dp_ps(x, y, 2);
123}
124
125__m128d test_mm_dp_pd(__m128d x, __m128d y) {
126 // CHECK: define {{.*}} @test_mm_dp_pd
127 // CHECK: @llvm.x86.sse41.dppd
128 return _mm_dp_pd(x, y, 2);
129}
130
131__m128 test_mm_round_ps(__m128 x) {
132 // CHECK: define {{.*}} @test_mm_round_ps
133 // CHECK: @llvm.x86.sse41.round.ps
134 return _mm_round_ps(x, 2);
135}
136
137__m128 test_mm_round_ss(__m128 x, __m128 y) {
138 // CHECK: define {{.*}} @test_mm_round_ss
139 // CHECK: @llvm.x86.sse41.round.ss
140 return _mm_round_ss(x, y, 2);
141}
142
143__m128d test_mm_round_pd(__m128d x) {
144 // CHECK: define {{.*}} @test_mm_round_pd
145 // CHECK: @llvm.x86.sse41.round.pd
146 return _mm_round_pd(x, 2);
147}
148
149__m128d test_mm_round_sd(__m128d x, __m128d y) {
150 // CHECK: define {{.*}} @test_mm_round_sd
151 // CHECK: @llvm.x86.sse41.round.sd
152 return _mm_round_sd(x, y, 2);
153}
Chad Rosierc5713cf2012-05-01 18:11:51 +0000154
155void test_storel_epi64(__m128i x, void* y) {
156 // CHECK: define void @test_storel_epi64
157 // CHECK: store {{.*}} i64* {{.*}}, align 1{{$}}
158 _mm_storel_epi64(y, x);
159}