[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / X86 / fp128-libcalls-strict.ll
blobcaea147ec81cd73779a6ef3177e71a7e58d031a3
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -O2 -mtriple=x86_64-linux-android \
3 ; RUN:     -enable-legalize-types-checking \
4 ; RUN:     | FileCheck %s
5 ; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu \
6 ; RUN:     -enable-legalize-types-checking \
7 ; RUN:     | FileCheck %s
8 ; RUN: llc < %s -O2 -mtriple=i686-linux-gnu -mattr=+sse2 \
9 ; RUN:     -enable-legalize-types-checking \
10 ; RUN:     | FileCheck %s --check-prefix=X86
12 ; Check all soft floating point library function calls.
14 define fp128 @add(fp128 %x, fp128 %y) nounwind strictfp {
15 ; CHECK-LABEL: add:
16 ; CHECK:       # %bb.0: # %entry
17 ; CHECK-NEXT:    pushq %rax
18 ; CHECK-NEXT:    callq __addtf3@PLT
19 ; CHECK-NEXT:    popq %rax
20 ; CHECK-NEXT:    retq
22 ; X86-LABEL: add:
23 ; X86:       # %bb.0: # %entry
24 ; X86-NEXT:    pushl %edi
25 ; X86-NEXT:    pushl %esi
26 ; X86-NEXT:    subl $20, %esp
27 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
28 ; X86-NEXT:    subl $12, %esp
29 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
30 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
31 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
32 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
33 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
34 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
35 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
36 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
37 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
38 ; X86-NEXT:    pushl %eax
39 ; X86-NEXT:    calll __addtf3
40 ; X86-NEXT:    addl $44, %esp
41 ; X86-NEXT:    movl (%esp), %eax
42 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
43 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
44 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
45 ; X86-NEXT:    movl %edi, 8(%esi)
46 ; X86-NEXT:    movl %edx, 12(%esi)
47 ; X86-NEXT:    movl %eax, (%esi)
48 ; X86-NEXT:    movl %ecx, 4(%esi)
49 ; X86-NEXT:    movl %esi, %eax
50 ; X86-NEXT:    addl $20, %esp
51 ; X86-NEXT:    popl %esi
52 ; X86-NEXT:    popl %edi
53 ; X86-NEXT:    retl $4
54 entry:
55   %add = call fp128 @llvm.experimental.constrained.fadd.f128(fp128 %x, fp128 %y,  metadata !"round.dynamic", metadata !"fpexcept.strict") #0
56   ret fp128 %add
59 define fp128 @sub(fp128 %x, fp128 %y) nounwind strictfp {
60 ; CHECK-LABEL: sub:
61 ; CHECK:       # %bb.0: # %entry
62 ; CHECK-NEXT:    pushq %rax
63 ; CHECK-NEXT:    callq __subtf3@PLT
64 ; CHECK-NEXT:    popq %rax
65 ; CHECK-NEXT:    retq
67 ; X86-LABEL: sub:
68 ; X86:       # %bb.0: # %entry
69 ; X86-NEXT:    pushl %edi
70 ; X86-NEXT:    pushl %esi
71 ; X86-NEXT:    subl $20, %esp
72 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
73 ; X86-NEXT:    subl $12, %esp
74 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
75 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
76 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
77 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
78 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
79 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
80 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
81 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
82 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
83 ; X86-NEXT:    pushl %eax
84 ; X86-NEXT:    calll __subtf3
85 ; X86-NEXT:    addl $44, %esp
86 ; X86-NEXT:    movl (%esp), %eax
87 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
88 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
89 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
90 ; X86-NEXT:    movl %edi, 8(%esi)
91 ; X86-NEXT:    movl %edx, 12(%esi)
92 ; X86-NEXT:    movl %eax, (%esi)
93 ; X86-NEXT:    movl %ecx, 4(%esi)
94 ; X86-NEXT:    movl %esi, %eax
95 ; X86-NEXT:    addl $20, %esp
96 ; X86-NEXT:    popl %esi
97 ; X86-NEXT:    popl %edi
98 ; X86-NEXT:    retl $4
99 entry:
100   %sub = call fp128 @llvm.experimental.constrained.fsub.f128(fp128 %x, fp128 %y,  metadata !"round.dynamic", metadata !"fpexcept.strict") #0
101   ret fp128 %sub
104 define fp128 @mul(fp128 %x, fp128 %y) nounwind strictfp {
105 ; CHECK-LABEL: mul:
106 ; CHECK:       # %bb.0: # %entry
107 ; CHECK-NEXT:    pushq %rax
108 ; CHECK-NEXT:    callq __multf3@PLT
109 ; CHECK-NEXT:    popq %rax
110 ; CHECK-NEXT:    retq
112 ; X86-LABEL: mul:
113 ; X86:       # %bb.0: # %entry
114 ; X86-NEXT:    pushl %edi
115 ; X86-NEXT:    pushl %esi
116 ; X86-NEXT:    subl $20, %esp
117 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
118 ; X86-NEXT:    subl $12, %esp
119 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
120 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
121 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
122 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
123 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
124 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
125 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
126 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
127 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
128 ; X86-NEXT:    pushl %eax
129 ; X86-NEXT:    calll __multf3
130 ; X86-NEXT:    addl $44, %esp
131 ; X86-NEXT:    movl (%esp), %eax
132 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
133 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
134 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
135 ; X86-NEXT:    movl %edi, 8(%esi)
136 ; X86-NEXT:    movl %edx, 12(%esi)
137 ; X86-NEXT:    movl %eax, (%esi)
138 ; X86-NEXT:    movl %ecx, 4(%esi)
139 ; X86-NEXT:    movl %esi, %eax
140 ; X86-NEXT:    addl $20, %esp
141 ; X86-NEXT:    popl %esi
142 ; X86-NEXT:    popl %edi
143 ; X86-NEXT:    retl $4
144 entry:
145   %mul = call fp128 @llvm.experimental.constrained.fmul.f128(fp128 %x, fp128 %y,  metadata !"round.dynamic", metadata !"fpexcept.strict") #0
146   ret fp128 %mul
149 define fp128 @div(fp128 %x, fp128 %y) nounwind strictfp {
150 ; CHECK-LABEL: div:
151 ; CHECK:       # %bb.0: # %entry
152 ; CHECK-NEXT:    pushq %rax
153 ; CHECK-NEXT:    callq __divtf3@PLT
154 ; CHECK-NEXT:    popq %rax
155 ; CHECK-NEXT:    retq
157 ; X86-LABEL: div:
158 ; X86:       # %bb.0: # %entry
159 ; X86-NEXT:    pushl %edi
160 ; X86-NEXT:    pushl %esi
161 ; X86-NEXT:    subl $20, %esp
162 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
163 ; X86-NEXT:    subl $12, %esp
164 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
165 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
166 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
167 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
168 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
169 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
170 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
171 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
172 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
173 ; X86-NEXT:    pushl %eax
174 ; X86-NEXT:    calll __divtf3
175 ; X86-NEXT:    addl $44, %esp
176 ; X86-NEXT:    movl (%esp), %eax
177 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
178 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
179 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
180 ; X86-NEXT:    movl %edi, 8(%esi)
181 ; X86-NEXT:    movl %edx, 12(%esi)
182 ; X86-NEXT:    movl %eax, (%esi)
183 ; X86-NEXT:    movl %ecx, 4(%esi)
184 ; X86-NEXT:    movl %esi, %eax
185 ; X86-NEXT:    addl $20, %esp
186 ; X86-NEXT:    popl %esi
187 ; X86-NEXT:    popl %edi
188 ; X86-NEXT:    retl $4
189 entry:
190   %div = call fp128 @llvm.experimental.constrained.fdiv.f128(fp128 %x, fp128 %y,  metadata !"round.dynamic", metadata !"fpexcept.strict") #0
191   ret fp128 %div
194 define fp128 @fma(fp128 %x, fp128 %y, fp128 %z) nounwind strictfp {
195 ; CHECK-LABEL: fma:
196 ; CHECK:       # %bb.0: # %entry
197 ; CHECK-NEXT:    pushq %rax
198 ; CHECK-NEXT:    callq fmal@PLT
199 ; CHECK-NEXT:    popq %rax
200 ; CHECK-NEXT:    retq
202 ; X86-LABEL: fma:
203 ; X86:       # %bb.0: # %entry
204 ; X86-NEXT:    pushl %edi
205 ; X86-NEXT:    pushl %esi
206 ; X86-NEXT:    subl $20, %esp
207 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
208 ; X86-NEXT:    subl $12, %esp
209 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
210 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
211 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
212 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
213 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
214 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
215 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
216 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
217 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
218 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
219 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
220 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
221 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
222 ; X86-NEXT:    pushl %eax
223 ; X86-NEXT:    calll fmal
224 ; X86-NEXT:    addl $60, %esp
225 ; X86-NEXT:    movl (%esp), %eax
226 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
227 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
228 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
229 ; X86-NEXT:    movl %edi, 8(%esi)
230 ; X86-NEXT:    movl %edx, 12(%esi)
231 ; X86-NEXT:    movl %eax, (%esi)
232 ; X86-NEXT:    movl %ecx, 4(%esi)
233 ; X86-NEXT:    movl %esi, %eax
234 ; X86-NEXT:    addl $20, %esp
235 ; X86-NEXT:    popl %esi
236 ; X86-NEXT:    popl %edi
237 ; X86-NEXT:    retl $4
238 entry:
239   %fma = call fp128 @llvm.experimental.constrained.fma.f128(fp128 %x, fp128 %y,  fp128 %z, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
240   ret fp128 %fma
243 define fp128 @frem(fp128 %x, fp128 %y) nounwind strictfp {
244 ; CHECK-LABEL: frem:
245 ; CHECK:       # %bb.0: # %entry
246 ; CHECK-NEXT:    pushq %rax
247 ; CHECK-NEXT:    callq fmodl@PLT
248 ; CHECK-NEXT:    popq %rax
249 ; CHECK-NEXT:    retq
251 ; X86-LABEL: frem:
252 ; X86:       # %bb.0: # %entry
253 ; X86-NEXT:    pushl %edi
254 ; X86-NEXT:    pushl %esi
255 ; X86-NEXT:    subl $20, %esp
256 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
257 ; X86-NEXT:    subl $12, %esp
258 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
259 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
260 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
261 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
262 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
263 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
264 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
265 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
266 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
267 ; X86-NEXT:    pushl %eax
268 ; X86-NEXT:    calll fmodl
269 ; X86-NEXT:    addl $44, %esp
270 ; X86-NEXT:    movl (%esp), %eax
271 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
272 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
273 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
274 ; X86-NEXT:    movl %edi, 8(%esi)
275 ; X86-NEXT:    movl %edx, 12(%esi)
276 ; X86-NEXT:    movl %eax, (%esi)
277 ; X86-NEXT:    movl %ecx, 4(%esi)
278 ; X86-NEXT:    movl %esi, %eax
279 ; X86-NEXT:    addl $20, %esp
280 ; X86-NEXT:    popl %esi
281 ; X86-NEXT:    popl %edi
282 ; X86-NEXT:    retl $4
283 entry:
284   %div = call fp128 @llvm.experimental.constrained.frem.f128(fp128 %x, fp128 %y,  metadata !"round.dynamic", metadata !"fpexcept.strict") #0
285   ret fp128 %div
288 define fp128 @ceil(fp128 %x) nounwind strictfp {
289 ; CHECK-LABEL: ceil:
290 ; CHECK:       # %bb.0: # %entry
291 ; CHECK-NEXT:    pushq %rax
292 ; CHECK-NEXT:    callq ceill@PLT
293 ; CHECK-NEXT:    popq %rax
294 ; CHECK-NEXT:    retq
296 ; X86-LABEL: ceil:
297 ; X86:       # %bb.0: # %entry
298 ; X86-NEXT:    pushl %edi
299 ; X86-NEXT:    pushl %esi
300 ; X86-NEXT:    subl $20, %esp
301 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
302 ; X86-NEXT:    subl $12, %esp
303 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
304 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
305 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
306 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
307 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
308 ; X86-NEXT:    pushl %eax
309 ; X86-NEXT:    calll ceill
310 ; X86-NEXT:    addl $28, %esp
311 ; X86-NEXT:    movl (%esp), %eax
312 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
313 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
314 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
315 ; X86-NEXT:    movl %edi, 8(%esi)
316 ; X86-NEXT:    movl %edx, 12(%esi)
317 ; X86-NEXT:    movl %eax, (%esi)
318 ; X86-NEXT:    movl %ecx, 4(%esi)
319 ; X86-NEXT:    movl %esi, %eax
320 ; X86-NEXT:    addl $20, %esp
321 ; X86-NEXT:    popl %esi
322 ; X86-NEXT:    popl %edi
323 ; X86-NEXT:    retl $4
324 entry:
325   %ceil = call fp128 @llvm.experimental.constrained.ceil.f128(fp128 %x, metadata !"fpexcept.strict") #0
326   ret fp128 %ceil
329 define fp128 @cos(fp128 %x) nounwind strictfp {
330 ; CHECK-LABEL: cos:
331 ; CHECK:       # %bb.0: # %entry
332 ; CHECK-NEXT:    pushq %rax
333 ; CHECK-NEXT:    callq cosl@PLT
334 ; CHECK-NEXT:    popq %rax
335 ; CHECK-NEXT:    retq
337 ; X86-LABEL: cos:
338 ; X86:       # %bb.0: # %entry
339 ; X86-NEXT:    pushl %edi
340 ; X86-NEXT:    pushl %esi
341 ; X86-NEXT:    subl $20, %esp
342 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
343 ; X86-NEXT:    subl $12, %esp
344 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
345 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
346 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
347 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
348 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
349 ; X86-NEXT:    pushl %eax
350 ; X86-NEXT:    calll cosl
351 ; X86-NEXT:    addl $28, %esp
352 ; X86-NEXT:    movl (%esp), %eax
353 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
354 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
355 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
356 ; X86-NEXT:    movl %edi, 8(%esi)
357 ; X86-NEXT:    movl %edx, 12(%esi)
358 ; X86-NEXT:    movl %eax, (%esi)
359 ; X86-NEXT:    movl %ecx, 4(%esi)
360 ; X86-NEXT:    movl %esi, %eax
361 ; X86-NEXT:    addl $20, %esp
362 ; X86-NEXT:    popl %esi
363 ; X86-NEXT:    popl %edi
364 ; X86-NEXT:    retl $4
365 entry:
366   %cos = call fp128 @llvm.experimental.constrained.cos.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
367   ret fp128 %cos
370 define fp128 @exp(fp128 %x) nounwind strictfp {
371 ; CHECK-LABEL: exp:
372 ; CHECK:       # %bb.0: # %entry
373 ; CHECK-NEXT:    pushq %rax
374 ; CHECK-NEXT:    callq expl@PLT
375 ; CHECK-NEXT:    popq %rax
376 ; CHECK-NEXT:    retq
378 ; X86-LABEL: exp:
379 ; X86:       # %bb.0: # %entry
380 ; X86-NEXT:    pushl %edi
381 ; X86-NEXT:    pushl %esi
382 ; X86-NEXT:    subl $20, %esp
383 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
384 ; X86-NEXT:    subl $12, %esp
385 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
386 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
387 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
388 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
389 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
390 ; X86-NEXT:    pushl %eax
391 ; X86-NEXT:    calll expl
392 ; X86-NEXT:    addl $28, %esp
393 ; X86-NEXT:    movl (%esp), %eax
394 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
395 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
396 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
397 ; X86-NEXT:    movl %edi, 8(%esi)
398 ; X86-NEXT:    movl %edx, 12(%esi)
399 ; X86-NEXT:    movl %eax, (%esi)
400 ; X86-NEXT:    movl %ecx, 4(%esi)
401 ; X86-NEXT:    movl %esi, %eax
402 ; X86-NEXT:    addl $20, %esp
403 ; X86-NEXT:    popl %esi
404 ; X86-NEXT:    popl %edi
405 ; X86-NEXT:    retl $4
406 entry:
407   %exp = call fp128 @llvm.experimental.constrained.exp.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
408   ret fp128 %exp
411 define fp128 @exp2(fp128 %x) nounwind strictfp {
412 ; CHECK-LABEL: exp2:
413 ; CHECK:       # %bb.0: # %entry
414 ; CHECK-NEXT:    pushq %rax
415 ; CHECK-NEXT:    callq exp2l@PLT
416 ; CHECK-NEXT:    popq %rax
417 ; CHECK-NEXT:    retq
419 ; X86-LABEL: exp2:
420 ; X86:       # %bb.0: # %entry
421 ; X86-NEXT:    pushl %edi
422 ; X86-NEXT:    pushl %esi
423 ; X86-NEXT:    subl $20, %esp
424 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
425 ; X86-NEXT:    subl $12, %esp
426 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
427 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
428 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
429 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
430 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
431 ; X86-NEXT:    pushl %eax
432 ; X86-NEXT:    calll exp2l
433 ; X86-NEXT:    addl $28, %esp
434 ; X86-NEXT:    movl (%esp), %eax
435 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
436 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
437 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
438 ; X86-NEXT:    movl %edi, 8(%esi)
439 ; X86-NEXT:    movl %edx, 12(%esi)
440 ; X86-NEXT:    movl %eax, (%esi)
441 ; X86-NEXT:    movl %ecx, 4(%esi)
442 ; X86-NEXT:    movl %esi, %eax
443 ; X86-NEXT:    addl $20, %esp
444 ; X86-NEXT:    popl %esi
445 ; X86-NEXT:    popl %edi
446 ; X86-NEXT:    retl $4
447 entry:
448   %exp2 = call fp128 @llvm.experimental.constrained.exp2.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
449   ret fp128 %exp2
452 define fp128 @floor(fp128 %x) nounwind strictfp {
453 ; CHECK-LABEL: floor:
454 ; CHECK:       # %bb.0: # %entry
455 ; CHECK-NEXT:    pushq %rax
456 ; CHECK-NEXT:    callq floorl@PLT
457 ; CHECK-NEXT:    popq %rax
458 ; CHECK-NEXT:    retq
460 ; X86-LABEL: floor:
461 ; X86:       # %bb.0: # %entry
462 ; X86-NEXT:    pushl %edi
463 ; X86-NEXT:    pushl %esi
464 ; X86-NEXT:    subl $20, %esp
465 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
466 ; X86-NEXT:    subl $12, %esp
467 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
468 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
469 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
470 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
471 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
472 ; X86-NEXT:    pushl %eax
473 ; X86-NEXT:    calll floorl
474 ; X86-NEXT:    addl $28, %esp
475 ; X86-NEXT:    movl (%esp), %eax
476 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
477 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
478 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
479 ; X86-NEXT:    movl %edi, 8(%esi)
480 ; X86-NEXT:    movl %edx, 12(%esi)
481 ; X86-NEXT:    movl %eax, (%esi)
482 ; X86-NEXT:    movl %ecx, 4(%esi)
483 ; X86-NEXT:    movl %esi, %eax
484 ; X86-NEXT:    addl $20, %esp
485 ; X86-NEXT:    popl %esi
486 ; X86-NEXT:    popl %edi
487 ; X86-NEXT:    retl $4
488 entry:
489   %floor = call fp128 @llvm.experimental.constrained.floor.f128(fp128 %x, metadata !"fpexcept.strict") #0
490   ret fp128 %floor
493 define fp128 @log(fp128 %x) nounwind strictfp {
494 ; CHECK-LABEL: log:
495 ; CHECK:       # %bb.0: # %entry
496 ; CHECK-NEXT:    pushq %rax
497 ; CHECK-NEXT:    callq logl@PLT
498 ; CHECK-NEXT:    popq %rax
499 ; CHECK-NEXT:    retq
501 ; X86-LABEL: log:
502 ; X86:       # %bb.0: # %entry
503 ; X86-NEXT:    pushl %edi
504 ; X86-NEXT:    pushl %esi
505 ; X86-NEXT:    subl $20, %esp
506 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
507 ; X86-NEXT:    subl $12, %esp
508 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
509 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
510 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
511 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
512 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
513 ; X86-NEXT:    pushl %eax
514 ; X86-NEXT:    calll logl
515 ; X86-NEXT:    addl $28, %esp
516 ; X86-NEXT:    movl (%esp), %eax
517 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
518 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
519 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
520 ; X86-NEXT:    movl %edi, 8(%esi)
521 ; X86-NEXT:    movl %edx, 12(%esi)
522 ; X86-NEXT:    movl %eax, (%esi)
523 ; X86-NEXT:    movl %ecx, 4(%esi)
524 ; X86-NEXT:    movl %esi, %eax
525 ; X86-NEXT:    addl $20, %esp
526 ; X86-NEXT:    popl %esi
527 ; X86-NEXT:    popl %edi
528 ; X86-NEXT:    retl $4
529 entry:
530   %log = call fp128 @llvm.experimental.constrained.log.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
531   ret fp128 %log
534 define fp128 @log10(fp128 %x) nounwind strictfp {
535 ; CHECK-LABEL: log10:
536 ; CHECK:       # %bb.0: # %entry
537 ; CHECK-NEXT:    pushq %rax
538 ; CHECK-NEXT:    callq log10l@PLT
539 ; CHECK-NEXT:    popq %rax
540 ; CHECK-NEXT:    retq
542 ; X86-LABEL: log10:
543 ; X86:       # %bb.0: # %entry
544 ; X86-NEXT:    pushl %edi
545 ; X86-NEXT:    pushl %esi
546 ; X86-NEXT:    subl $20, %esp
547 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
548 ; X86-NEXT:    subl $12, %esp
549 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
550 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
551 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
552 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
553 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
554 ; X86-NEXT:    pushl %eax
555 ; X86-NEXT:    calll log10l
556 ; X86-NEXT:    addl $28, %esp
557 ; X86-NEXT:    movl (%esp), %eax
558 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
559 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
560 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
561 ; X86-NEXT:    movl %edi, 8(%esi)
562 ; X86-NEXT:    movl %edx, 12(%esi)
563 ; X86-NEXT:    movl %eax, (%esi)
564 ; X86-NEXT:    movl %ecx, 4(%esi)
565 ; X86-NEXT:    movl %esi, %eax
566 ; X86-NEXT:    addl $20, %esp
567 ; X86-NEXT:    popl %esi
568 ; X86-NEXT:    popl %edi
569 ; X86-NEXT:    retl $4
570 entry:
571   %log10 = call fp128 @llvm.experimental.constrained.log10.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
572   ret fp128 %log10
575 define fp128 @log2(fp128 %x) nounwind strictfp {
576 ; CHECK-LABEL: log2:
577 ; CHECK:       # %bb.0: # %entry
578 ; CHECK-NEXT:    pushq %rax
579 ; CHECK-NEXT:    callq log2l@PLT
580 ; CHECK-NEXT:    popq %rax
581 ; CHECK-NEXT:    retq
583 ; X86-LABEL: log2:
584 ; X86:       # %bb.0: # %entry
585 ; X86-NEXT:    pushl %edi
586 ; X86-NEXT:    pushl %esi
587 ; X86-NEXT:    subl $20, %esp
588 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
589 ; X86-NEXT:    subl $12, %esp
590 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
591 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
592 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
593 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
594 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
595 ; X86-NEXT:    pushl %eax
596 ; X86-NEXT:    calll log2l
597 ; X86-NEXT:    addl $28, %esp
598 ; X86-NEXT:    movl (%esp), %eax
599 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
600 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
601 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
602 ; X86-NEXT:    movl %edi, 8(%esi)
603 ; X86-NEXT:    movl %edx, 12(%esi)
604 ; X86-NEXT:    movl %eax, (%esi)
605 ; X86-NEXT:    movl %ecx, 4(%esi)
606 ; X86-NEXT:    movl %esi, %eax
607 ; X86-NEXT:    addl $20, %esp
608 ; X86-NEXT:    popl %esi
609 ; X86-NEXT:    popl %edi
610 ; X86-NEXT:    retl $4
611 entry:
612   %log2 = call fp128 @llvm.experimental.constrained.log2.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
613   ret fp128 %log2
616 define fp128 @maxnum(fp128 %x, fp128 %y) nounwind strictfp {
617 ; CHECK-LABEL: maxnum:
618 ; CHECK:       # %bb.0: # %entry
619 ; CHECK-NEXT:    pushq %rax
620 ; CHECK-NEXT:    callq fmaxl@PLT
621 ; CHECK-NEXT:    popq %rax
622 ; CHECK-NEXT:    retq
624 ; X86-LABEL: maxnum:
625 ; X86:       # %bb.0: # %entry
626 ; X86-NEXT:    pushl %edi
627 ; X86-NEXT:    pushl %esi
628 ; X86-NEXT:    subl $20, %esp
629 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
630 ; X86-NEXT:    subl $12, %esp
631 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
632 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
633 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
634 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
635 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
636 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
637 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
638 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
639 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
640 ; X86-NEXT:    pushl %eax
641 ; X86-NEXT:    calll fmaxl
642 ; X86-NEXT:    addl $44, %esp
643 ; X86-NEXT:    movl (%esp), %eax
644 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
645 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
646 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
647 ; X86-NEXT:    movl %edi, 8(%esi)
648 ; X86-NEXT:    movl %edx, 12(%esi)
649 ; X86-NEXT:    movl %eax, (%esi)
650 ; X86-NEXT:    movl %ecx, 4(%esi)
651 ; X86-NEXT:    movl %esi, %eax
652 ; X86-NEXT:    addl $20, %esp
653 ; X86-NEXT:    popl %esi
654 ; X86-NEXT:    popl %edi
655 ; X86-NEXT:    retl $4
656 entry:
657   %maxnum = call fp128 @llvm.experimental.constrained.maxnum.f128(fp128 %x, fp128 %y, metadata !"fpexcept.strict") #0
658   ret fp128 %maxnum
661 define fp128 @minnum(fp128 %x, fp128 %y) nounwind strictfp {
662 ; CHECK-LABEL: minnum:
663 ; CHECK:       # %bb.0: # %entry
664 ; CHECK-NEXT:    pushq %rax
665 ; CHECK-NEXT:    callq fminl@PLT
666 ; CHECK-NEXT:    popq %rax
667 ; CHECK-NEXT:    retq
669 ; X86-LABEL: minnum:
670 ; X86:       # %bb.0: # %entry
671 ; X86-NEXT:    pushl %edi
672 ; X86-NEXT:    pushl %esi
673 ; X86-NEXT:    subl $20, %esp
674 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
675 ; X86-NEXT:    subl $12, %esp
676 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
677 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
678 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
679 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
680 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
681 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
682 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
683 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
684 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
685 ; X86-NEXT:    pushl %eax
686 ; X86-NEXT:    calll fminl
687 ; X86-NEXT:    addl $44, %esp
688 ; X86-NEXT:    movl (%esp), %eax
689 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
690 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
691 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
692 ; X86-NEXT:    movl %edi, 8(%esi)
693 ; X86-NEXT:    movl %edx, 12(%esi)
694 ; X86-NEXT:    movl %eax, (%esi)
695 ; X86-NEXT:    movl %ecx, 4(%esi)
696 ; X86-NEXT:    movl %esi, %eax
697 ; X86-NEXT:    addl $20, %esp
698 ; X86-NEXT:    popl %esi
699 ; X86-NEXT:    popl %edi
700 ; X86-NEXT:    retl $4
701 entry:
702   %minnum = call fp128 @llvm.experimental.constrained.minnum.f128(fp128 %x, fp128 %y, metadata !"fpexcept.strict") #0
703   ret fp128 %minnum
706 define fp128 @nearbyint(fp128 %x) nounwind strictfp {
707 ; CHECK-LABEL: nearbyint:
708 ; CHECK:       # %bb.0: # %entry
709 ; CHECK-NEXT:    pushq %rax
710 ; CHECK-NEXT:    callq nearbyintl@PLT
711 ; CHECK-NEXT:    popq %rax
712 ; CHECK-NEXT:    retq
714 ; X86-LABEL: nearbyint:
715 ; X86:       # %bb.0: # %entry
716 ; X86-NEXT:    pushl %edi
717 ; X86-NEXT:    pushl %esi
718 ; X86-NEXT:    subl $20, %esp
719 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
720 ; X86-NEXT:    subl $12, %esp
721 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
722 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
723 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
724 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
725 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
726 ; X86-NEXT:    pushl %eax
727 ; X86-NEXT:    calll nearbyintl
728 ; X86-NEXT:    addl $28, %esp
729 ; X86-NEXT:    movl (%esp), %eax
730 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
731 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
732 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
733 ; X86-NEXT:    movl %edi, 8(%esi)
734 ; X86-NEXT:    movl %edx, 12(%esi)
735 ; X86-NEXT:    movl %eax, (%esi)
736 ; X86-NEXT:    movl %ecx, 4(%esi)
737 ; X86-NEXT:    movl %esi, %eax
738 ; X86-NEXT:    addl $20, %esp
739 ; X86-NEXT:    popl %esi
740 ; X86-NEXT:    popl %edi
741 ; X86-NEXT:    retl $4
742 entry:
743   %nearbyint = call fp128 @llvm.experimental.constrained.nearbyint.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
744   ret fp128 %nearbyint
747 define fp128 @pow(fp128 %x, fp128 %y) nounwind strictfp {
748 ; CHECK-LABEL: pow:
749 ; CHECK:       # %bb.0: # %entry
750 ; CHECK-NEXT:    pushq %rax
751 ; CHECK-NEXT:    callq powl@PLT
752 ; CHECK-NEXT:    popq %rax
753 ; CHECK-NEXT:    retq
755 ; X86-LABEL: pow:
756 ; X86:       # %bb.0: # %entry
757 ; X86-NEXT:    pushl %edi
758 ; X86-NEXT:    pushl %esi
759 ; X86-NEXT:    subl $20, %esp
760 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
761 ; X86-NEXT:    subl $12, %esp
762 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
763 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
764 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
765 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
766 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
767 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
768 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
769 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
770 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
771 ; X86-NEXT:    pushl %eax
772 ; X86-NEXT:    calll powl
773 ; X86-NEXT:    addl $44, %esp
774 ; X86-NEXT:    movl (%esp), %eax
775 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
776 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
777 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
778 ; X86-NEXT:    movl %edi, 8(%esi)
779 ; X86-NEXT:    movl %edx, 12(%esi)
780 ; X86-NEXT:    movl %eax, (%esi)
781 ; X86-NEXT:    movl %ecx, 4(%esi)
782 ; X86-NEXT:    movl %esi, %eax
783 ; X86-NEXT:    addl $20, %esp
784 ; X86-NEXT:    popl %esi
785 ; X86-NEXT:    popl %edi
786 ; X86-NEXT:    retl $4
787 entry:
788   %pow = call fp128 @llvm.experimental.constrained.pow.f128(fp128 %x, fp128 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
789   ret fp128 %pow
792 define fp128 @powi(fp128 %x, i32 %y) nounwind strictfp {
793 ; CHECK-LABEL: powi:
794 ; CHECK:       # %bb.0: # %entry
795 ; CHECK-NEXT:    pushq %rax
796 ; CHECK-NEXT:    callq __powitf2@PLT
797 ; CHECK-NEXT:    popq %rax
798 ; CHECK-NEXT:    retq
800 ; X86-LABEL: powi:
801 ; X86:       # %bb.0: # %entry
802 ; X86-NEXT:    pushl %edi
803 ; X86-NEXT:    pushl %esi
804 ; X86-NEXT:    subl $20, %esp
805 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
806 ; X86-NEXT:    subl $8, %esp
807 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
808 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
809 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
810 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
811 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
812 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
813 ; X86-NEXT:    pushl %eax
814 ; X86-NEXT:    calll __powitf2
815 ; X86-NEXT:    addl $28, %esp
816 ; X86-NEXT:    movl (%esp), %eax
817 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
818 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
819 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
820 ; X86-NEXT:    movl %edi, 8(%esi)
821 ; X86-NEXT:    movl %edx, 12(%esi)
822 ; X86-NEXT:    movl %eax, (%esi)
823 ; X86-NEXT:    movl %ecx, 4(%esi)
824 ; X86-NEXT:    movl %esi, %eax
825 ; X86-NEXT:    addl $20, %esp
826 ; X86-NEXT:    popl %esi
827 ; X86-NEXT:    popl %edi
828 ; X86-NEXT:    retl $4
829 entry:
830   %powi = call fp128 @llvm.experimental.constrained.powi.f128(fp128 %x, i32 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
831   ret fp128 %powi
834 define fp128 @rint(fp128 %x) nounwind strictfp {
835 ; CHECK-LABEL: rint:
836 ; CHECK:       # %bb.0: # %entry
837 ; CHECK-NEXT:    pushq %rax
838 ; CHECK-NEXT:    callq rintl@PLT
839 ; CHECK-NEXT:    popq %rax
840 ; CHECK-NEXT:    retq
842 ; X86-LABEL: rint:
843 ; X86:       # %bb.0: # %entry
844 ; X86-NEXT:    pushl %edi
845 ; X86-NEXT:    pushl %esi
846 ; X86-NEXT:    subl $20, %esp
847 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
848 ; X86-NEXT:    subl $12, %esp
849 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
850 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
851 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
852 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
853 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
854 ; X86-NEXT:    pushl %eax
855 ; X86-NEXT:    calll rintl
856 ; X86-NEXT:    addl $28, %esp
857 ; X86-NEXT:    movl (%esp), %eax
858 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
859 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
860 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
861 ; X86-NEXT:    movl %edi, 8(%esi)
862 ; X86-NEXT:    movl %edx, 12(%esi)
863 ; X86-NEXT:    movl %eax, (%esi)
864 ; X86-NEXT:    movl %ecx, 4(%esi)
865 ; X86-NEXT:    movl %esi, %eax
866 ; X86-NEXT:    addl $20, %esp
867 ; X86-NEXT:    popl %esi
868 ; X86-NEXT:    popl %edi
869 ; X86-NEXT:    retl $4
870 entry:
871   %rint = call fp128 @llvm.experimental.constrained.rint.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
872   ret fp128 %rint
875 define fp128 @round(fp128 %x) nounwind strictfp {
876 ; CHECK-LABEL: round:
877 ; CHECK:       # %bb.0: # %entry
878 ; CHECK-NEXT:    pushq %rax
879 ; CHECK-NEXT:    callq roundl@PLT
880 ; CHECK-NEXT:    popq %rax
881 ; CHECK-NEXT:    retq
883 ; X86-LABEL: round:
884 ; X86:       # %bb.0: # %entry
885 ; X86-NEXT:    pushl %edi
886 ; X86-NEXT:    pushl %esi
887 ; X86-NEXT:    subl $20, %esp
888 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
889 ; X86-NEXT:    subl $12, %esp
890 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
891 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
892 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
893 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
894 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
895 ; X86-NEXT:    pushl %eax
896 ; X86-NEXT:    calll roundl
897 ; X86-NEXT:    addl $28, %esp
898 ; X86-NEXT:    movl (%esp), %eax
899 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
900 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
901 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
902 ; X86-NEXT:    movl %edi, 8(%esi)
903 ; X86-NEXT:    movl %edx, 12(%esi)
904 ; X86-NEXT:    movl %eax, (%esi)
905 ; X86-NEXT:    movl %ecx, 4(%esi)
906 ; X86-NEXT:    movl %esi, %eax
907 ; X86-NEXT:    addl $20, %esp
908 ; X86-NEXT:    popl %esi
909 ; X86-NEXT:    popl %edi
910 ; X86-NEXT:    retl $4
911 entry:
912   %round = call fp128 @llvm.experimental.constrained.round.f128(fp128 %x, metadata !"fpexcept.strict") #0
913   ret fp128 %round
916 define fp128 @roundeven(fp128 %x) nounwind strictfp {
917 ; CHECK-LABEL: roundeven:
918 ; CHECK:       # %bb.0: # %entry
919 ; CHECK-NEXT:    pushq %rax
920 ; CHECK-NEXT:    callq roundevenl@PLT
921 ; CHECK-NEXT:    popq %rax
922 ; CHECK-NEXT:    retq
924 ; X86-LABEL: roundeven:
925 ; X86:       # %bb.0: # %entry
926 ; X86-NEXT:    pushl %edi
927 ; X86-NEXT:    pushl %esi
928 ; X86-NEXT:    subl $20, %esp
929 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
930 ; X86-NEXT:    subl $12, %esp
931 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
932 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
933 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
934 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
935 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
936 ; X86-NEXT:    pushl %eax
937 ; X86-NEXT:    calll roundevenl
938 ; X86-NEXT:    addl $28, %esp
939 ; X86-NEXT:    movl (%esp), %eax
940 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
941 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
942 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
943 ; X86-NEXT:    movl %edi, 8(%esi)
944 ; X86-NEXT:    movl %edx, 12(%esi)
945 ; X86-NEXT:    movl %eax, (%esi)
946 ; X86-NEXT:    movl %ecx, 4(%esi)
947 ; X86-NEXT:    movl %esi, %eax
948 ; X86-NEXT:    addl $20, %esp
949 ; X86-NEXT:    popl %esi
950 ; X86-NEXT:    popl %edi
951 ; X86-NEXT:    retl $4
952 entry:
953   %roundeven = call fp128 @llvm.experimental.constrained.roundeven.f128(fp128 %x, metadata !"fpexcept.strict") #0
954   ret fp128 %roundeven
957 define fp128 @sin(fp128 %x) nounwind strictfp {
958 ; CHECK-LABEL: sin:
959 ; CHECK:       # %bb.0: # %entry
960 ; CHECK-NEXT:    pushq %rax
961 ; CHECK-NEXT:    callq sinl@PLT
962 ; CHECK-NEXT:    popq %rax
963 ; CHECK-NEXT:    retq
965 ; X86-LABEL: sin:
966 ; X86:       # %bb.0: # %entry
967 ; X86-NEXT:    pushl %edi
968 ; X86-NEXT:    pushl %esi
969 ; X86-NEXT:    subl $20, %esp
970 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
971 ; X86-NEXT:    subl $12, %esp
972 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
973 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
974 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
975 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
976 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
977 ; X86-NEXT:    pushl %eax
978 ; X86-NEXT:    calll sinl
979 ; X86-NEXT:    addl $28, %esp
980 ; X86-NEXT:    movl (%esp), %eax
981 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
982 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
983 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
984 ; X86-NEXT:    movl %edi, 8(%esi)
985 ; X86-NEXT:    movl %edx, 12(%esi)
986 ; X86-NEXT:    movl %eax, (%esi)
987 ; X86-NEXT:    movl %ecx, 4(%esi)
988 ; X86-NEXT:    movl %esi, %eax
989 ; X86-NEXT:    addl $20, %esp
990 ; X86-NEXT:    popl %esi
991 ; X86-NEXT:    popl %edi
992 ; X86-NEXT:    retl $4
993 entry:
994   %sin = call fp128 @llvm.experimental.constrained.sin.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
995   ret fp128 %sin
998 define fp128 @sqrt(fp128 %x) nounwind strictfp {
999 ; CHECK-LABEL: sqrt:
1000 ; CHECK:       # %bb.0: # %entry
1001 ; CHECK-NEXT:    pushq %rax
1002 ; CHECK-NEXT:    callq sqrtl@PLT
1003 ; CHECK-NEXT:    popq %rax
1004 ; CHECK-NEXT:    retq
1006 ; X86-LABEL: sqrt:
1007 ; X86:       # %bb.0: # %entry
1008 ; X86-NEXT:    pushl %edi
1009 ; X86-NEXT:    pushl %esi
1010 ; X86-NEXT:    subl $20, %esp
1011 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
1012 ; X86-NEXT:    subl $12, %esp
1013 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
1014 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1015 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1016 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1017 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1018 ; X86-NEXT:    pushl %eax
1019 ; X86-NEXT:    calll sqrtl
1020 ; X86-NEXT:    addl $28, %esp
1021 ; X86-NEXT:    movl (%esp), %eax
1022 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1023 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
1024 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
1025 ; X86-NEXT:    movl %edi, 8(%esi)
1026 ; X86-NEXT:    movl %edx, 12(%esi)
1027 ; X86-NEXT:    movl %eax, (%esi)
1028 ; X86-NEXT:    movl %ecx, 4(%esi)
1029 ; X86-NEXT:    movl %esi, %eax
1030 ; X86-NEXT:    addl $20, %esp
1031 ; X86-NEXT:    popl %esi
1032 ; X86-NEXT:    popl %edi
1033 ; X86-NEXT:    retl $4
1034 entry:
1035   %sqrt = call fp128 @llvm.experimental.constrained.sqrt.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1036   ret fp128 %sqrt
1039 define fp128 @trunc(fp128 %x) nounwind strictfp {
1040 ; CHECK-LABEL: trunc:
1041 ; CHECK:       # %bb.0: # %entry
1042 ; CHECK-NEXT:    pushq %rax
1043 ; CHECK-NEXT:    callq truncl@PLT
1044 ; CHECK-NEXT:    popq %rax
1045 ; CHECK-NEXT:    retq
1047 ; X86-LABEL: trunc:
1048 ; X86:       # %bb.0: # %entry
1049 ; X86-NEXT:    pushl %edi
1050 ; X86-NEXT:    pushl %esi
1051 ; X86-NEXT:    subl $20, %esp
1052 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %esi
1053 ; X86-NEXT:    subl $12, %esp
1054 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
1055 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1056 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1057 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1058 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1059 ; X86-NEXT:    pushl %eax
1060 ; X86-NEXT:    calll truncl
1061 ; X86-NEXT:    addl $28, %esp
1062 ; X86-NEXT:    movl (%esp), %eax
1063 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1064 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
1065 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
1066 ; X86-NEXT:    movl %edi, 8(%esi)
1067 ; X86-NEXT:    movl %edx, 12(%esi)
1068 ; X86-NEXT:    movl %eax, (%esi)
1069 ; X86-NEXT:    movl %ecx, 4(%esi)
1070 ; X86-NEXT:    movl %esi, %eax
1071 ; X86-NEXT:    addl $20, %esp
1072 ; X86-NEXT:    popl %esi
1073 ; X86-NEXT:    popl %edi
1074 ; X86-NEXT:    retl $4
1075 entry:
1076   %trunc = call fp128 @llvm.experimental.constrained.trunc.f128(fp128 %x, metadata !"fpexcept.strict") #0
1077   ret fp128 %trunc
1080 define i32 @lrint(fp128 %x) nounwind strictfp {
1081 ; CHECK-LABEL: lrint:
1082 ; CHECK:       # %bb.0: # %entry
1083 ; CHECK-NEXT:    pushq %rax
1084 ; CHECK-NEXT:    callq lrintl@PLT
1085 ; CHECK-NEXT:    popq %rcx
1086 ; CHECK-NEXT:    retq
1088 ; X86-LABEL: lrint:
1089 ; X86:       # %bb.0: # %entry
1090 ; X86-NEXT:    subl $12, %esp
1091 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1092 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1093 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1094 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1095 ; X86-NEXT:    calll lrintl
1096 ; X86-NEXT:    addl $28, %esp
1097 ; X86-NEXT:    retl
1098 entry:
1099   %rint = call i32 @llvm.experimental.constrained.lrint.i32.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1100   ret i32 %rint
1103 define i64 @llrint(fp128 %x) nounwind strictfp {
1104 ; CHECK-LABEL: llrint:
1105 ; CHECK:       # %bb.0: # %entry
1106 ; CHECK-NEXT:    pushq %rax
1107 ; CHECK-NEXT:    callq llrintl@PLT
1108 ; CHECK-NEXT:    popq %rcx
1109 ; CHECK-NEXT:    retq
1111 ; X86-LABEL: llrint:
1112 ; X86:       # %bb.0: # %entry
1113 ; X86-NEXT:    subl $12, %esp
1114 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1115 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1116 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1117 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1118 ; X86-NEXT:    calll llrintl
1119 ; X86-NEXT:    addl $28, %esp
1120 ; X86-NEXT:    retl
1121 entry:
1122   %rint = call i64 @llvm.experimental.constrained.llrint.i64.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
1123   ret i64 %rint
1126 define i32 @lround(fp128 %x) nounwind strictfp {
1127 ; CHECK-LABEL: lround:
1128 ; CHECK:       # %bb.0: # %entry
1129 ; CHECK-NEXT:    pushq %rax
1130 ; CHECK-NEXT:    callq lroundl@PLT
1131 ; CHECK-NEXT:    popq %rcx
1132 ; CHECK-NEXT:    retq
1134 ; X86-LABEL: lround:
1135 ; X86:       # %bb.0: # %entry
1136 ; X86-NEXT:    subl $12, %esp
1137 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1138 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1139 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1140 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1141 ; X86-NEXT:    calll lroundl
1142 ; X86-NEXT:    addl $28, %esp
1143 ; X86-NEXT:    retl
1144 entry:
1145   %round = call i32 @llvm.experimental.constrained.lround.i32.f128(fp128 %x, metadata !"fpexcept.strict") #0
1146   ret i32 %round
1149 define i64 @llround(fp128 %x) nounwind strictfp {
1150 ; CHECK-LABEL: llround:
1151 ; CHECK:       # %bb.0: # %entry
1152 ; CHECK-NEXT:    pushq %rax
1153 ; CHECK-NEXT:    callq llroundl@PLT
1154 ; CHECK-NEXT:    popq %rcx
1155 ; CHECK-NEXT:    retq
1157 ; X86-LABEL: llround:
1158 ; X86:       # %bb.0: # %entry
1159 ; X86-NEXT:    subl $12, %esp
1160 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1161 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1162 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1163 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1164 ; X86-NEXT:    calll llroundl
1165 ; X86-NEXT:    addl $28, %esp
1166 ; X86-NEXT:    retl
1167 entry:
1168   %round = call i64 @llvm.experimental.constrained.llround.i64.f128(fp128 %x, metadata !"fpexcept.strict") #0
1169   ret i64 %round
1172 define i64 @cmp(i64 %a, i64 %b, fp128 %x, fp128 %y) #0 {
1173 ; CHECK-LABEL: cmp:
1174 ; CHECK:       # %bb.0:
1175 ; CHECK-NEXT:    pushq %r14
1176 ; CHECK-NEXT:    pushq %rbx
1177 ; CHECK-NEXT:    pushq %rax
1178 ; CHECK-NEXT:    movq %rsi, %rbx
1179 ; CHECK-NEXT:    movq %rdi, %r14
1180 ; CHECK-NEXT:    callq __eqtf2@PLT
1181 ; CHECK-NEXT:    testl %eax, %eax
1182 ; CHECK-NEXT:    cmovneq %rbx, %r14
1183 ; CHECK-NEXT:    movq %r14, %rax
1184 ; CHECK-NEXT:    addq $8, %rsp
1185 ; CHECK-NEXT:    popq %rbx
1186 ; CHECK-NEXT:    popq %r14
1187 ; CHECK-NEXT:    retq
1189 ; X86-LABEL: cmp:
1190 ; X86:       # %bb.0:
1191 ; X86-NEXT:    subl $12, %esp
1192 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1193 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1194 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1195 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1196 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1197 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1198 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1199 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1200 ; X86-NEXT:    calll __eqtf2
1201 ; X86-NEXT:    addl $32, %esp
1202 ; X86-NEXT:    testl %eax, %eax
1203 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
1204 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %ecx
1205 ; X86-NEXT:    cmovel %eax, %ecx
1206 ; X86-NEXT:    movl (%ecx), %eax
1207 ; X86-NEXT:    movl 4(%ecx), %edx
1208 ; X86-NEXT:    addl $12, %esp
1209 ; X86-NEXT:    retl
1210   %cond = call i1 @llvm.experimental.constrained.fcmp.f128(
1211                                                fp128 %x, fp128 %y,
1212                                                metadata !"oeq",
1213                                                metadata !"fpexcept.strict") #0
1214   %res = select i1 %cond, i64 %a, i64 %b
1215   ret i64 %res
1218 define i64 @cmps(i64 %a, i64 %b, fp128 %x, fp128 %y) #0 {
1219 ; CHECK-LABEL: cmps:
1220 ; CHECK:       # %bb.0:
1221 ; CHECK-NEXT:    pushq %r14
1222 ; CHECK-NEXT:    pushq %rbx
1223 ; CHECK-NEXT:    pushq %rax
1224 ; CHECK-NEXT:    movq %rsi, %rbx
1225 ; CHECK-NEXT:    movq %rdi, %r14
1226 ; CHECK-NEXT:    callq __eqtf2@PLT
1227 ; CHECK-NEXT:    testl %eax, %eax
1228 ; CHECK-NEXT:    cmovneq %rbx, %r14
1229 ; CHECK-NEXT:    movq %r14, %rax
1230 ; CHECK-NEXT:    addq $8, %rsp
1231 ; CHECK-NEXT:    popq %rbx
1232 ; CHECK-NEXT:    popq %r14
1233 ; CHECK-NEXT:    retq
1235 ; X86-LABEL: cmps:
1236 ; X86:       # %bb.0:
1237 ; X86-NEXT:    subl $12, %esp
1238 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1239 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1240 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1241 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1242 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1243 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1244 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1245 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1246 ; X86-NEXT:    calll __eqtf2
1247 ; X86-NEXT:    addl $32, %esp
1248 ; X86-NEXT:    testl %eax, %eax
1249 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
1250 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %ecx
1251 ; X86-NEXT:    cmovel %eax, %ecx
1252 ; X86-NEXT:    movl (%ecx), %eax
1253 ; X86-NEXT:    movl 4(%ecx), %edx
1254 ; X86-NEXT:    addl $12, %esp
1255 ; X86-NEXT:    retl
1256   %cond = call i1 @llvm.experimental.constrained.fcmps.f128(
1257                                                fp128 %x, fp128 %y,
1258                                                metadata !"oeq",
1259                                                metadata !"fpexcept.strict") #0
1260   %res = select i1 %cond, i64 %a, i64 %b
1261   ret i64 %res
1264 define i64 @cmp_ueq_q(i64 %a, i64 %b, fp128 %x, fp128 %y) #0 {
1265 ; CHECK-LABEL: cmp_ueq_q:
1266 ; CHECK:       # %bb.0:
1267 ; CHECK-NEXT:    pushq %rbp
1268 ; CHECK-NEXT:    pushq %r14
1269 ; CHECK-NEXT:    pushq %rbx
1270 ; CHECK-NEXT:    subq $32, %rsp
1271 ; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1272 ; CHECK-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill
1273 ; CHECK-NEXT:    movq %rsi, %rbx
1274 ; CHECK-NEXT:    movq %rdi, %r14
1275 ; CHECK-NEXT:    callq __eqtf2@PLT
1276 ; CHECK-NEXT:    testl %eax, %eax
1277 ; CHECK-NEXT:    sete %bpl
1278 ; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload
1279 ; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1280 ; CHECK-NEXT:    callq __unordtf2@PLT
1281 ; CHECK-NEXT:    testl %eax, %eax
1282 ; CHECK-NEXT:    setne %al
1283 ; CHECK-NEXT:    orb %bpl, %al
1284 ; CHECK-NEXT:    cmoveq %rbx, %r14
1285 ; CHECK-NEXT:    movq %r14, %rax
1286 ; CHECK-NEXT:    addq $32, %rsp
1287 ; CHECK-NEXT:    popq %rbx
1288 ; CHECK-NEXT:    popq %r14
1289 ; CHECK-NEXT:    popq %rbp
1290 ; CHECK-NEXT:    retq
1292 ; X86-LABEL: cmp_ueq_q:
1293 ; X86:       # %bb.0:
1294 ; X86-NEXT:    pushl %ebp
1295 ; X86-NEXT:    pushl %ebx
1296 ; X86-NEXT:    pushl %edi
1297 ; X86-NEXT:    pushl %esi
1298 ; X86-NEXT:    subl $12, %esp
1299 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebp
1300 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
1301 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx
1302 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1303 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1304 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1305 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1306 ; X86-NEXT:    pushl %ebx
1307 ; X86-NEXT:    movl %ebx, %esi
1308 ; X86-NEXT:    pushl %edi
1309 ; X86-NEXT:    pushl %ebp
1310 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1311 ; X86-NEXT:    calll __eqtf2
1312 ; X86-NEXT:    addl $32, %esp
1313 ; X86-NEXT:    testl %eax, %eax
1314 ; X86-NEXT:    sete %bl
1315 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1316 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1317 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1318 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1319 ; X86-NEXT:    pushl %esi
1320 ; X86-NEXT:    pushl %edi
1321 ; X86-NEXT:    pushl %ebp
1322 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1323 ; X86-NEXT:    calll __unordtf2
1324 ; X86-NEXT:    addl $32, %esp
1325 ; X86-NEXT:    testl %eax, %eax
1326 ; X86-NEXT:    setne %al
1327 ; X86-NEXT:    orb %bl, %al
1328 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
1329 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %ecx
1330 ; X86-NEXT:    cmovnel %eax, %ecx
1331 ; X86-NEXT:    movl (%ecx), %eax
1332 ; X86-NEXT:    movl 4(%ecx), %edx
1333 ; X86-NEXT:    addl $12, %esp
1334 ; X86-NEXT:    popl %esi
1335 ; X86-NEXT:    popl %edi
1336 ; X86-NEXT:    popl %ebx
1337 ; X86-NEXT:    popl %ebp
1338 ; X86-NEXT:    retl
1339   %cond = call i1 @llvm.experimental.constrained.fcmp.f128(
1340                                                fp128 %x, fp128 %y,
1341                                                metadata !"ueq",
1342                                                metadata !"fpexcept.strict") #0
1343   %res = select i1 %cond, i64 %a, i64 %b
1344   ret i64 %res
1347 define i64 @cmp_one_q(i64 %a, i64 %b, fp128 %x, fp128 %y) #0 {
1348 ; CHECK-LABEL: cmp_one_q:
1349 ; CHECK:       # %bb.0:
1350 ; CHECK-NEXT:    pushq %rbp
1351 ; CHECK-NEXT:    pushq %r14
1352 ; CHECK-NEXT:    pushq %rbx
1353 ; CHECK-NEXT:    subq $32, %rsp
1354 ; CHECK-NEXT:    movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1355 ; CHECK-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill
1356 ; CHECK-NEXT:    movq %rsi, %rbx
1357 ; CHECK-NEXT:    movq %rdi, %r14
1358 ; CHECK-NEXT:    callq __eqtf2@PLT
1359 ; CHECK-NEXT:    testl %eax, %eax
1360 ; CHECK-NEXT:    setne %bpl
1361 ; CHECK-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload
1362 ; CHECK-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1363 ; CHECK-NEXT:    callq __unordtf2@PLT
1364 ; CHECK-NEXT:    testl %eax, %eax
1365 ; CHECK-NEXT:    sete %al
1366 ; CHECK-NEXT:    testb %bpl, %al
1367 ; CHECK-NEXT:    cmoveq %rbx, %r14
1368 ; CHECK-NEXT:    movq %r14, %rax
1369 ; CHECK-NEXT:    addq $32, %rsp
1370 ; CHECK-NEXT:    popq %rbx
1371 ; CHECK-NEXT:    popq %r14
1372 ; CHECK-NEXT:    popq %rbp
1373 ; CHECK-NEXT:    retq
1375 ; X86-LABEL: cmp_one_q:
1376 ; X86:       # %bb.0:
1377 ; X86-NEXT:    pushl %ebp
1378 ; X86-NEXT:    pushl %ebx
1379 ; X86-NEXT:    pushl %edi
1380 ; X86-NEXT:    pushl %esi
1381 ; X86-NEXT:    subl $12, %esp
1382 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebp
1383 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %edi
1384 ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ebx
1385 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1386 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1387 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1388 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1389 ; X86-NEXT:    pushl %ebx
1390 ; X86-NEXT:    movl %ebx, %esi
1391 ; X86-NEXT:    pushl %edi
1392 ; X86-NEXT:    pushl %ebp
1393 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1394 ; X86-NEXT:    calll __eqtf2
1395 ; X86-NEXT:    addl $32, %esp
1396 ; X86-NEXT:    testl %eax, %eax
1397 ; X86-NEXT:    setne %bl
1398 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1399 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1400 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1401 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1402 ; X86-NEXT:    pushl %esi
1403 ; X86-NEXT:    pushl %edi
1404 ; X86-NEXT:    pushl %ebp
1405 ; X86-NEXT:    pushl {{[0-9]+}}(%esp)
1406 ; X86-NEXT:    calll __unordtf2
1407 ; X86-NEXT:    addl $32, %esp
1408 ; X86-NEXT:    testl %eax, %eax
1409 ; X86-NEXT:    sete %al
1410 ; X86-NEXT:    testb %bl, %al
1411 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
1412 ; X86-NEXT:    leal {{[0-9]+}}(%esp), %ecx
1413 ; X86-NEXT:    cmovnel %eax, %ecx
1414 ; X86-NEXT:    movl (%ecx), %eax
1415 ; X86-NEXT:    movl 4(%ecx), %edx
1416 ; X86-NEXT:    addl $12, %esp
1417 ; X86-NEXT:    popl %esi
1418 ; X86-NEXT:    popl %edi
1419 ; X86-NEXT:    popl %ebx
1420 ; X86-NEXT:    popl %ebp
1421 ; X86-NEXT:    retl
1422   %cond = call i1 @llvm.experimental.constrained.fcmp.f128(
1423                                                fp128 %x, fp128 %y,
1424                                                metadata !"one",
1425                                                metadata !"fpexcept.strict") #0
1426   %res = select i1 %cond, i64 %a, i64 %b
1427   ret i64 %res
1430 attributes #0 = { nounwind strictfp }
1432 declare fp128 @llvm.experimental.constrained.fadd.f128(fp128, fp128, metadata, metadata)
1433 declare fp128 @llvm.experimental.constrained.fsub.f128(fp128, fp128, metadata, metadata)
1434 declare fp128 @llvm.experimental.constrained.fmul.f128(fp128, fp128, metadata, metadata)
1435 declare fp128 @llvm.experimental.constrained.fdiv.f128(fp128, fp128, metadata, metadata)
1436 declare fp128 @llvm.experimental.constrained.fma.f128(fp128, fp128, fp128, metadata, metadata)
1437 declare fp128 @llvm.experimental.constrained.frem.f128(fp128, fp128, metadata, metadata)
1438 declare fp128 @llvm.experimental.constrained.ceil.f128(fp128, metadata)
1439 declare fp128 @llvm.experimental.constrained.cos.f128(fp128, metadata, metadata)
1440 declare fp128 @llvm.experimental.constrained.exp.f128(fp128, metadata, metadata)
1441 declare fp128 @llvm.experimental.constrained.exp2.f128(fp128, metadata, metadata)
1442 declare fp128 @llvm.experimental.constrained.floor.f128(fp128, metadata)
1443 declare fp128 @llvm.experimental.constrained.log.f128(fp128, metadata, metadata)
1444 declare fp128 @llvm.experimental.constrained.log10.f128(fp128, metadata, metadata)
1445 declare fp128 @llvm.experimental.constrained.log2.f128(fp128, metadata, metadata)
1446 declare fp128 @llvm.experimental.constrained.maxnum.f128(fp128, fp128, metadata)
1447 declare fp128 @llvm.experimental.constrained.minnum.f128(fp128, fp128, metadata)
1448 declare fp128 @llvm.experimental.constrained.nearbyint.f128(fp128, metadata, metadata)
1449 declare fp128 @llvm.experimental.constrained.pow.f128(fp128, fp128, metadata, metadata)
1450 declare fp128 @llvm.experimental.constrained.powi.f128(fp128, i32, metadata, metadata)
1451 declare fp128 @llvm.experimental.constrained.rint.f128(fp128, metadata, metadata)
1452 declare fp128 @llvm.experimental.constrained.round.f128(fp128, metadata)
1453 declare fp128 @llvm.experimental.constrained.roundeven.f128(fp128, metadata)
1454 declare fp128 @llvm.experimental.constrained.sin.f128(fp128, metadata, metadata)
1455 declare fp128 @llvm.experimental.constrained.sqrt.f128(fp128, metadata, metadata)
1456 declare fp128 @llvm.experimental.constrained.trunc.f128(fp128, metadata)
1457 declare i32 @llvm.experimental.constrained.lrint.i32.f128(fp128, metadata, metadata)
1458 declare i64 @llvm.experimental.constrained.llrint.i64.f128(fp128, metadata, metadata)
1459 declare i32 @llvm.experimental.constrained.lround.i32.f128(fp128, metadata)
1460 declare i64 @llvm.experimental.constrained.llround.i64.f128(fp128, metadata)
1461 declare i1 @llvm.experimental.constrained.fcmp.f128(fp128, fp128, metadata, metadata)
1462 declare i1 @llvm.experimental.constrained.fcmps.f128(fp128, fp128, metadata, metadata)