[OpenACC] Enable 'attach' clause for combined constructs
[llvm-project.git] / llvm / test / CodeGen / X86 / fp-strict-libcalls-msvc32.ll
blob74291fbb75e81af4be29473c77ff7ab59ef40f15
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -O3 -mtriple=i686-pc-windows-msvc -mattr=+cmov < %s | FileCheck %s
4 define float @ceil(float %x) #0 {
5 ; CHECK-LABEL: ceil:
6 ; CHECK:       # %bb.0:
7 ; CHECK-NEXT:    subl $12, %esp
8 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
9 ; CHECK-NEXT:    fstpl (%esp)
10 ; CHECK-NEXT:    wait
11 ; CHECK-NEXT:    calll _ceil
12 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
13 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
14 ; CHECK-NEXT:    wait
15 ; CHECK-NEXT:    addl $12, %esp
16 ; CHECK-NEXT:    retl
17   %result = call float @llvm.experimental.constrained.ceil.f32(float %x, metadata !"fpexcept.strict") #0
18   ret float %result
21 define float @cos(float %x) #0 {
22 ; CHECK-LABEL: cos:
23 ; CHECK:       # %bb.0:
24 ; CHECK-NEXT:    subl $12, %esp
25 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
26 ; CHECK-NEXT:    fstpl (%esp)
27 ; CHECK-NEXT:    wait
28 ; CHECK-NEXT:    calll _cos
29 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
30 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
31 ; CHECK-NEXT:    wait
32 ; CHECK-NEXT:    addl $12, %esp
33 ; CHECK-NEXT:    retl
34   %result = call float @llvm.experimental.constrained.cos.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
35   ret float %result
38 define float @exp(float %x) #0 {
39 ; CHECK-LABEL: exp:
40 ; CHECK:       # %bb.0:
41 ; CHECK-NEXT:    subl $12, %esp
42 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
43 ; CHECK-NEXT:    fstpl (%esp)
44 ; CHECK-NEXT:    wait
45 ; CHECK-NEXT:    calll _exp
46 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
47 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
48 ; CHECK-NEXT:    wait
49 ; CHECK-NEXT:    addl $12, %esp
50 ; CHECK-NEXT:    retl
51   %result = call float @llvm.experimental.constrained.exp.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
52   ret float %result
55 define float @floor(float %x) #0 {
56 ; CHECK-LABEL: floor:
57 ; CHECK:       # %bb.0:
58 ; CHECK-NEXT:    subl $12, %esp
59 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
60 ; CHECK-NEXT:    fstpl (%esp)
61 ; CHECK-NEXT:    wait
62 ; CHECK-NEXT:    calll _floor
63 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
64 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
65 ; CHECK-NEXT:    wait
66 ; CHECK-NEXT:    addl $12, %esp
67 ; CHECK-NEXT:    retl
68   %result = call float @llvm.experimental.constrained.floor.f32(float %x, metadata !"fpexcept.strict") #0
69   ret float %result
72 define float @frem(float %x, float %y) #0 {
73 ; CHECK-LABEL: frem:
74 ; CHECK:       # %bb.0:
75 ; CHECK-NEXT:    subl $20, %esp
76 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
77 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
78 ; CHECK-NEXT:    fxch %st(1)
79 ; CHECK-NEXT:    fstpl {{[0-9]+}}(%esp)
80 ; CHECK-NEXT:    fstpl (%esp)
81 ; CHECK-NEXT:    wait
82 ; CHECK-NEXT:    calll _fmod
83 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
84 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
85 ; CHECK-NEXT:    wait
86 ; CHECK-NEXT:    addl $20, %esp
87 ; CHECK-NEXT:    retl
88   %result = call float @llvm.experimental.constrained.frem.f32(float %x, float %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
89   ret float %result
92 define float @log(float %x) #0 {
93 ; CHECK-LABEL: log:
94 ; CHECK:       # %bb.0:
95 ; CHECK-NEXT:    subl $12, %esp
96 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
97 ; CHECK-NEXT:    fstpl (%esp)
98 ; CHECK-NEXT:    wait
99 ; CHECK-NEXT:    calll _log
100 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
101 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
102 ; CHECK-NEXT:    wait
103 ; CHECK-NEXT:    addl $12, %esp
104 ; CHECK-NEXT:    retl
105   %result = call float @llvm.experimental.constrained.log.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
106   ret float %result
109 define float @log10(float %x) #0 {
110 ; CHECK-LABEL: log10:
111 ; CHECK:       # %bb.0:
112 ; CHECK-NEXT:    subl $12, %esp
113 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
114 ; CHECK-NEXT:    fstpl (%esp)
115 ; CHECK-NEXT:    wait
116 ; CHECK-NEXT:    calll _log10
117 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
118 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
119 ; CHECK-NEXT:    wait
120 ; CHECK-NEXT:    addl $12, %esp
121 ; CHECK-NEXT:    retl
122   %result = call float @llvm.experimental.constrained.log10.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
123   ret float %result
126 define float @pow(float %x, float %y) #0 {
127 ; CHECK-LABEL: pow:
128 ; CHECK:       # %bb.0:
129 ; CHECK-NEXT:    subl $20, %esp
130 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
131 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
132 ; CHECK-NEXT:    fxch %st(1)
133 ; CHECK-NEXT:    fstpl {{[0-9]+}}(%esp)
134 ; CHECK-NEXT:    fstpl (%esp)
135 ; CHECK-NEXT:    wait
136 ; CHECK-NEXT:    calll _pow
137 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
138 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
139 ; CHECK-NEXT:    wait
140 ; CHECK-NEXT:    addl $20, %esp
141 ; CHECK-NEXT:    retl
142   %result = call float @llvm.experimental.constrained.pow.f32(float %x, float %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
143   ret float %result
146 define float @sin(float %x) #0 {
147 ; CHECK-LABEL: sin:
148 ; CHECK:       # %bb.0:
149 ; CHECK-NEXT:    subl $12, %esp
150 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
151 ; CHECK-NEXT:    fstpl (%esp)
152 ; CHECK-NEXT:    wait
153 ; CHECK-NEXT:    calll _sin
154 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
155 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
156 ; CHECK-NEXT:    wait
157 ; CHECK-NEXT:    addl $12, %esp
158 ; CHECK-NEXT:    retl
159   %result = call float @llvm.experimental.constrained.sin.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
160   ret float %result
163 define float @tan(float %x) #0 {
164 ; CHECK-LABEL: tan:
165 ; CHECK:       # %bb.0:
166 ; CHECK-NEXT:    subl $12, %esp
167 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
168 ; CHECK-NEXT:    fstpl (%esp)
169 ; CHECK-NEXT:    wait
170 ; CHECK-NEXT:    calll _tan
171 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
172 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
173 ; CHECK-NEXT:    wait
174 ; CHECK-NEXT:    addl $12, %esp
175 ; CHECK-NEXT:    retl
176   %result = call float @llvm.experimental.constrained.tan.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
177   ret float %result
180 define float @acos(float %x) #0 {
181 ; CHECK-LABEL: acos:
182 ; CHECK:       # %bb.0:
183 ; CHECK-NEXT:    subl $12, %esp
184 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
185 ; CHECK-NEXT:    fstpl (%esp)
186 ; CHECK-NEXT:    wait
187 ; CHECK-NEXT:    calll _acos
188 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
189 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
190 ; CHECK-NEXT:    wait
191 ; CHECK-NEXT:    addl $12, %esp
192 ; CHECK-NEXT:    retl
193   %result = call float @llvm.experimental.constrained.acos.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
194   ret float %result
197 define float @asin(float %x) #0 {
198 ; CHECK-LABEL: asin:
199 ; CHECK:       # %bb.0:
200 ; CHECK-NEXT:    subl $12, %esp
201 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
202 ; CHECK-NEXT:    fstpl (%esp)
203 ; CHECK-NEXT:    wait
204 ; CHECK-NEXT:    calll _asin
205 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
206 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
207 ; CHECK-NEXT:    wait
208 ; CHECK-NEXT:    addl $12, %esp
209 ; CHECK-NEXT:    retl
210   %result = call float @llvm.experimental.constrained.asin.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
211   ret float %result
214 define float @atan(float %x) #0 {
215 ; CHECK-LABEL: atan:
216 ; CHECK:       # %bb.0:
217 ; CHECK-NEXT:    subl $12, %esp
218 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
219 ; CHECK-NEXT:    fstpl (%esp)
220 ; CHECK-NEXT:    wait
221 ; CHECK-NEXT:    calll _atan
222 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
223 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
224 ; CHECK-NEXT:    wait
225 ; CHECK-NEXT:    addl $12, %esp
226 ; CHECK-NEXT:    retl
227   %result = call float @llvm.experimental.constrained.atan.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
228   ret float %result
231 define float @atan2(float %x, float %y) #0 {
232 ; CHECK-LABEL: atan2:
233 ; CHECK:       # %bb.0:
234 ; CHECK-NEXT:    subl $20, %esp
235 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
236 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
237 ; CHECK-NEXT:    fxch %st(1)
238 ; CHECK-NEXT:    fstpl {{[0-9]+}}(%esp)
239 ; CHECK-NEXT:    fstpl (%esp)
240 ; CHECK-NEXT:    wait
241 ; CHECK-NEXT:    calll _atan2
242 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
243 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
244 ; CHECK-NEXT:    wait
245 ; CHECK-NEXT:    addl $20, %esp
246 ; CHECK-NEXT:    retl
247   %result = call float @llvm.experimental.constrained.atan2.f32(float %x, float %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
248   ret float %result
251 define float @cosh(float %x) #0 {
252 ; CHECK-LABEL: cosh:
253 ; CHECK:       # %bb.0:
254 ; CHECK-NEXT:    subl $12, %esp
255 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
256 ; CHECK-NEXT:    fstpl (%esp)
257 ; CHECK-NEXT:    wait
258 ; CHECK-NEXT:    calll _cosh
259 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
260 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
261 ; CHECK-NEXT:    wait
262 ; CHECK-NEXT:    addl $12, %esp
263 ; CHECK-NEXT:    retl
264   %result = call float @llvm.experimental.constrained.cosh.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
265   ret float %result
268 define float @sinh(float %x) #0 {
269 ; CHECK-LABEL: sinh:
270 ; CHECK:       # %bb.0:
271 ; CHECK-NEXT:    subl $12, %esp
272 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
273 ; CHECK-NEXT:    fstpl (%esp)
274 ; CHECK-NEXT:    wait
275 ; CHECK-NEXT:    calll _sinh
276 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
277 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
278 ; CHECK-NEXT:    wait
279 ; CHECK-NEXT:    addl $12, %esp
280 ; CHECK-NEXT:    retl
281   %result = call float @llvm.experimental.constrained.sinh.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
282   ret float %result
285 define float @tanh(float %x) #0 {
286 ; CHECK-LABEL: tanh:
287 ; CHECK:       # %bb.0:
288 ; CHECK-NEXT:    subl $12, %esp
289 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
290 ; CHECK-NEXT:    fstpl (%esp)
291 ; CHECK-NEXT:    wait
292 ; CHECK-NEXT:    calll _tanh
293 ; CHECK-NEXT:    fstps {{[0-9]+}}(%esp)
294 ; CHECK-NEXT:    flds {{[0-9]+}}(%esp)
295 ; CHECK-NEXT:    wait
296 ; CHECK-NEXT:    addl $12, %esp
297 ; CHECK-NEXT:    retl
298   %result = call float @llvm.experimental.constrained.tanh.f32(float %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
299   ret float %result
302 attributes #0 = { strictfp }
304 declare float @llvm.experimental.constrained.ceil.f32(float, metadata)
305 declare float @llvm.experimental.constrained.cos.f32(float, metadata, metadata)
306 declare float @llvm.experimental.constrained.exp.f32(float, metadata, metadata)
307 declare float @llvm.experimental.constrained.floor.f32(float, metadata)
308 declare float @llvm.experimental.constrained.frem.f32(float, float, metadata, metadata)
309 declare float @llvm.experimental.constrained.log.f32(float, metadata, metadata)
310 declare float @llvm.experimental.constrained.log10.f32(float, metadata, metadata)
311 declare float @llvm.experimental.constrained.pow.f32(float, float, metadata, metadata)
312 declare float @llvm.experimental.constrained.sin.f32(float, metadata, metadata)
313 declare float @llvm.experimental.constrained.tan.f32(float, metadata, metadata)
314 declare float @llvm.experimental.constrained.acos.f32(float, metadata, metadata)
315 declare float @llvm.experimental.constrained.asin.f32(float, metadata, metadata)
316 declare float @llvm.experimental.constrained.atan.f32(float, metadata, metadata)
317 declare float @llvm.experimental.constrained.atan2.f32(float, float, metadata, metadata)
318 declare float @llvm.experimental.constrained.cosh.f32(float, metadata, metadata)
319 declare float @llvm.experimental.constrained.sinh.f32(float, metadata, metadata)
320 declare float @llvm.experimental.constrained.tanh.f32(float, metadata, metadata)