Add a triple to switch.ll test.
[oota-llvm.git] / test / CodeGen / X86 / sse-intrinsics-x86.ll
1 ; RUN: llc < %s -mtriple=i386-apple-darwin -mattr=-avx,+sse | FileCheck %s
2
3 define <4 x float> @test_x86_sse_add_ss(<4 x float> %a0, <4 x float> %a1) {
4   ; CHECK: addss
5   %res = call <4 x float> @llvm.x86.sse.add.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
6   ret <4 x float> %res
7 }
8 declare <4 x float> @llvm.x86.sse.add.ss(<4 x float>, <4 x float>) nounwind readnone
9
10
11 define <4 x float> @test_x86_sse_cmp_ps(<4 x float> %a0, <4 x float> %a1) {
12   ; CHECK: cmpordps
13   %res = call <4 x float> @llvm.x86.sse.cmp.ps(<4 x float> %a0, <4 x float> %a1, i8 7) ; <<4 x float>> [#uses=1]
14   ret <4 x float> %res
15 }
16 declare <4 x float> @llvm.x86.sse.cmp.ps(<4 x float>, <4 x float>, i8) nounwind readnone
17
18
19 define <4 x float> @test_x86_sse_cmp_ss(<4 x float> %a0, <4 x float> %a1) {
20   ; CHECK: cmpordss
21   %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 7) ; <<4 x float>> [#uses=1]
22   ret <4 x float> %res
23 }
24 declare <4 x float> @llvm.x86.sse.cmp.ss(<4 x float>, <4 x float>, i8) nounwind readnone
25
26
27 define i32 @test_x86_sse_comieq_ss(<4 x float> %a0, <4 x float> %a1) {
28   ; CHECK: comiss
29   ; CHECK: sete
30   ; CHECK: movzbl
31   %res = call i32 @llvm.x86.sse.comieq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
32   ret i32 %res
33 }
34 declare i32 @llvm.x86.sse.comieq.ss(<4 x float>, <4 x float>) nounwind readnone
35
36
37 define i32 @test_x86_sse_comige_ss(<4 x float> %a0, <4 x float> %a1) {
38   ; CHECK: comiss
39   ; CHECK: setae
40   ; CHECK: movzbl
41   %res = call i32 @llvm.x86.sse.comige.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
42   ret i32 %res
43 }
44 declare i32 @llvm.x86.sse.comige.ss(<4 x float>, <4 x float>) nounwind readnone
45
46
47 define i32 @test_x86_sse_comigt_ss(<4 x float> %a0, <4 x float> %a1) {
48   ; CHECK: comiss
49   ; CHECK: seta
50   ; CHECK: movzbl
51   %res = call i32 @llvm.x86.sse.comigt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
52   ret i32 %res
53 }
54 declare i32 @llvm.x86.sse.comigt.ss(<4 x float>, <4 x float>) nounwind readnone
55
56
57 define i32 @test_x86_sse_comile_ss(<4 x float> %a0, <4 x float> %a1) {
58   ; CHECK: comiss
59   ; CHECK: setbe
60   ; CHECK: movzbl
61   %res = call i32 @llvm.x86.sse.comile.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
62   ret i32 %res
63 }
64 declare i32 @llvm.x86.sse.comile.ss(<4 x float>, <4 x float>) nounwind readnone
65
66
67 define i32 @test_x86_sse_comilt_ss(<4 x float> %a0, <4 x float> %a1) {
68   ; CHECK: comiss
69   ; CHECK: sbb
70   %res = call i32 @llvm.x86.sse.comilt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
71   ret i32 %res
72 }
73 declare i32 @llvm.x86.sse.comilt.ss(<4 x float>, <4 x float>) nounwind readnone
74
75
76 define i32 @test_x86_sse_comineq_ss(<4 x float> %a0, <4 x float> %a1) {
77   ; CHECK: comiss
78   ; CHECK: setne
79   ; CHECK: movzbl
80   %res = call i32 @llvm.x86.sse.comineq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
81   ret i32 %res
82 }
83 declare i32 @llvm.x86.sse.comineq.ss(<4 x float>, <4 x float>) nounwind readnone
84
85
86 define <4 x float> @test_x86_sse_cvtsi2ss(<4 x float> %a0) {
87   ; CHECK: movl
88   ; CHECK: cvtsi2ss
89   %res = call <4 x float> @llvm.x86.sse.cvtsi2ss(<4 x float> %a0, i32 7) ; <<4 x float>> [#uses=1]
90   ret <4 x float> %res
91 }
92 declare <4 x float> @llvm.x86.sse.cvtsi2ss(<4 x float>, i32) nounwind readnone
93
94
95 define i32 @test_x86_sse_cvtss2si(<4 x float> %a0) {
96   ; CHECK: cvtss2si
97   %res = call i32 @llvm.x86.sse.cvtss2si(<4 x float> %a0) ; <i32> [#uses=1]
98   ret i32 %res
99 }
100 declare i32 @llvm.x86.sse.cvtss2si(<4 x float>) nounwind readnone
101
102
103 define i32 @test_x86_sse_cvttss2si(<4 x float> %a0) {
104   ; CHECK: cvttss2si
105   %res = call i32 @llvm.x86.sse.cvttss2si(<4 x float> %a0) ; <i32> [#uses=1]
106   ret i32 %res
107 }
108 declare i32 @llvm.x86.sse.cvttss2si(<4 x float>) nounwind readnone
109
110
111 define <4 x float> @test_x86_sse_div_ss(<4 x float> %a0, <4 x float> %a1) {
112   ; CHECK: divss
113   %res = call <4 x float> @llvm.x86.sse.div.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
114   ret <4 x float> %res
115 }
116 declare <4 x float> @llvm.x86.sse.div.ss(<4 x float>, <4 x float>) nounwind readnone
117
118
119 define void @test_x86_sse_ldmxcsr(i8* %a0) {
120   ; CHECK: movl
121   ; CHECK: ldmxcsr
122   call void @llvm.x86.sse.ldmxcsr(i8* %a0)
123   ret void
124 }
125 declare void @llvm.x86.sse.ldmxcsr(i8*) nounwind
126
127
128
129 define <4 x float> @test_x86_sse_max_ps(<4 x float> %a0, <4 x float> %a1) {
130   ; CHECK: maxps
131   %res = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
132   ret <4 x float> %res
133 }
134 declare <4 x float> @llvm.x86.sse.max.ps(<4 x float>, <4 x float>) nounwind readnone
135
136
137 define <4 x float> @test_x86_sse_max_ss(<4 x float> %a0, <4 x float> %a1) {
138   ; CHECK: maxss
139   %res = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
140   ret <4 x float> %res
141 }
142 declare <4 x float> @llvm.x86.sse.max.ss(<4 x float>, <4 x float>) nounwind readnone
143
144
145 define <4 x float> @test_x86_sse_min_ps(<4 x float> %a0, <4 x float> %a1) {
146   ; CHECK: minps
147   %res = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
148   ret <4 x float> %res
149 }
150 declare <4 x float> @llvm.x86.sse.min.ps(<4 x float>, <4 x float>) nounwind readnone
151
152
153 define <4 x float> @test_x86_sse_min_ss(<4 x float> %a0, <4 x float> %a1) {
154   ; CHECK: minss
155   %res = call <4 x float> @llvm.x86.sse.min.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
156   ret <4 x float> %res
157 }
158 declare <4 x float> @llvm.x86.sse.min.ss(<4 x float>, <4 x float>) nounwind readnone
159
160
161 define i32 @test_x86_sse_movmsk_ps(<4 x float> %a0) {
162   ; CHECK: movmskps
163   %res = call i32 @llvm.x86.sse.movmsk.ps(<4 x float> %a0) ; <i32> [#uses=1]
164   ret i32 %res
165 }
166 declare i32 @llvm.x86.sse.movmsk.ps(<4 x float>) nounwind readnone
167
168
169
170 define <4 x float> @test_x86_sse_mul_ss(<4 x float> %a0, <4 x float> %a1) {
171   ; CHECK: mulss
172   %res = call <4 x float> @llvm.x86.sse.mul.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
173   ret <4 x float> %res
174 }
175 declare <4 x float> @llvm.x86.sse.mul.ss(<4 x float>, <4 x float>) nounwind readnone
176
177
178 define <4 x float> @test_x86_sse_rcp_ps(<4 x float> %a0) {
179   ; CHECK: rcpps
180   %res = call <4 x float> @llvm.x86.sse.rcp.ps(<4 x float> %a0) ; <<4 x float>> [#uses=1]
181   ret <4 x float> %res
182 }
183 declare <4 x float> @llvm.x86.sse.rcp.ps(<4 x float>) nounwind readnone
184
185
186 define <4 x float> @test_x86_sse_rcp_ss(<4 x float> %a0) {
187   ; CHECK: rcpss
188   %res = call <4 x float> @llvm.x86.sse.rcp.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
189   ret <4 x float> %res
190 }
191 declare <4 x float> @llvm.x86.sse.rcp.ss(<4 x float>) nounwind readnone
192
193
194 define <4 x float> @test_x86_sse_rsqrt_ps(<4 x float> %a0) {
195   ; CHECK: rsqrtps
196   %res = call <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float> %a0) ; <<4 x float>> [#uses=1]
197   ret <4 x float> %res
198 }
199 declare <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float>) nounwind readnone
200
201
202 define <4 x float> @test_x86_sse_rsqrt_ss(<4 x float> %a0) {
203   ; CHECK: rsqrtss
204   %res = call <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
205   ret <4 x float> %res
206 }
207 declare <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float>) nounwind readnone
208
209
210 define <4 x float> @test_x86_sse_sqrt_ps(<4 x float> %a0) {
211   ; CHECK: sqrtps
212   %res = call <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float> %a0) ; <<4 x float>> [#uses=1]
213   ret <4 x float> %res
214 }
215 declare <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float>) nounwind readnone
216
217
218 define <4 x float> @test_x86_sse_sqrt_ss(<4 x float> %a0) {
219   ; CHECK: sqrtss
220   %res = call <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
221   ret <4 x float> %res
222 }
223 declare <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float>) nounwind readnone
224
225
226 define void @test_x86_sse_stmxcsr(i8* %a0) {
227   ; CHECK: movl
228   ; CHECK: stmxcsr
229   call void @llvm.x86.sse.stmxcsr(i8* %a0)
230   ret void
231 }
232 declare void @llvm.x86.sse.stmxcsr(i8*) nounwind
233
234
235 define void @test_x86_sse_storeu_ps(i8* %a0, <4 x float> %a1) {
236   ; CHECK: movl
237   ; CHECK: movups
238   call void @llvm.x86.sse.storeu.ps(i8* %a0, <4 x float> %a1)
239   ret void
240 }
241 declare void @llvm.x86.sse.storeu.ps(i8*, <4 x float>) nounwind
242
243
244 define <4 x float> @test_x86_sse_sub_ss(<4 x float> %a0, <4 x float> %a1) {
245   ; CHECK: subss
246   %res = call <4 x float> @llvm.x86.sse.sub.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
247   ret <4 x float> %res
248 }
249 declare <4 x float> @llvm.x86.sse.sub.ss(<4 x float>, <4 x float>) nounwind readnone
250
251
252 define i32 @test_x86_sse_ucomieq_ss(<4 x float> %a0, <4 x float> %a1) {
253   ; CHECK: ucomiss
254   ; CHECK: sete
255   ; CHECK: movzbl
256   %res = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
257   ret i32 %res
258 }
259 declare i32 @llvm.x86.sse.ucomieq.ss(<4 x float>, <4 x float>) nounwind readnone
260
261
262 define i32 @test_x86_sse_ucomige_ss(<4 x float> %a0, <4 x float> %a1) {
263   ; CHECK: ucomiss
264   ; CHECK: setae
265   ; CHECK: movzbl
266   %res = call i32 @llvm.x86.sse.ucomige.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
267   ret i32 %res
268 }
269 declare i32 @llvm.x86.sse.ucomige.ss(<4 x float>, <4 x float>) nounwind readnone
270
271
272 define i32 @test_x86_sse_ucomigt_ss(<4 x float> %a0, <4 x float> %a1) {
273   ; CHECK: ucomiss
274   ; CHECK: seta
275   ; CHECK: movzbl
276   %res = call i32 @llvm.x86.sse.ucomigt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
277   ret i32 %res
278 }
279 declare i32 @llvm.x86.sse.ucomigt.ss(<4 x float>, <4 x float>) nounwind readnone
280
281
282 define i32 @test_x86_sse_ucomile_ss(<4 x float> %a0, <4 x float> %a1) {
283   ; CHECK: ucomiss
284   ; CHECK: setbe
285   ; CHECK: movzbl
286   %res = call i32 @llvm.x86.sse.ucomile.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
287   ret i32 %res
288 }
289 declare i32 @llvm.x86.sse.ucomile.ss(<4 x float>, <4 x float>) nounwind readnone
290
291
292 define i32 @test_x86_sse_ucomilt_ss(<4 x float> %a0, <4 x float> %a1) {
293   ; CHECK: ucomiss
294   ; CHECK: sbbl
295   %res = call i32 @llvm.x86.sse.ucomilt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
296   ret i32 %res
297 }
298 declare i32 @llvm.x86.sse.ucomilt.ss(<4 x float>, <4 x float>) nounwind readnone
299
300
301 define i32 @test_x86_sse_ucomineq_ss(<4 x float> %a0, <4 x float> %a1) {
302   ; CHECK: ucomiss
303   ; CHECK: setne
304   ; CHECK: movzbl
305   %res = call i32 @llvm.x86.sse.ucomineq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
306   ret i32 %res
307 }
308 declare i32 @llvm.x86.sse.ucomineq.ss(<4 x float>, <4 x float>) nounwind readnone