1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2 ; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK-SD
3 ; RUN: llc -mtriple=aarch64 -global-isel -global-isel-abort=1 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK-GI
5 ; Checks generated libcalls for fp128 types
7 define double @oeq(fp128 %a, fp128 %b, double %d, double %e) {
9 ; CHECK-SD: // %bb.0: // %entry
10 ; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
11 ; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
12 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
13 ; CHECK-SD-NEXT: .cfi_offset w30, -16
14 ; CHECK-SD-NEXT: .cfi_offset b8, -24
15 ; CHECK-SD-NEXT: .cfi_offset b9, -32
16 ; CHECK-SD-NEXT: fmov d8, d3
17 ; CHECK-SD-NEXT: fmov d9, d2
18 ; CHECK-SD-NEXT: bl __eqtf2
19 ; CHECK-SD-NEXT: cmp w0, #0
20 ; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
21 ; CHECK-SD-NEXT: fcsel d0, d9, d8, eq
22 ; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
25 ; CHECK-GI-LABEL: oeq:
26 ; CHECK-GI: // %bb.0: // %entry
27 ; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
28 ; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
29 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
30 ; CHECK-GI-NEXT: .cfi_offset w30, -16
31 ; CHECK-GI-NEXT: .cfi_offset b8, -24
32 ; CHECK-GI-NEXT: .cfi_offset b9, -32
33 ; CHECK-GI-NEXT: fmov d8, d2
34 ; CHECK-GI-NEXT: fmov d9, d3
35 ; CHECK-GI-NEXT: bl __eqtf2
36 ; CHECK-GI-NEXT: cmp w0, #0
37 ; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
38 ; CHECK-GI-NEXT: fcsel d0, d8, d9, eq
39 ; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
42 %c = fcmp oeq fp128 %a, %b
43 %s = select i1 %c, double %d, double %e
47 define double @ogt(fp128 %a, fp128 %b, double %d, double %e) {
48 ; CHECK-SD-LABEL: ogt:
49 ; CHECK-SD: // %bb.0: // %entry
50 ; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
51 ; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
52 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
53 ; CHECK-SD-NEXT: .cfi_offset w30, -16
54 ; CHECK-SD-NEXT: .cfi_offset b8, -24
55 ; CHECK-SD-NEXT: .cfi_offset b9, -32
56 ; CHECK-SD-NEXT: fmov d8, d3
57 ; CHECK-SD-NEXT: fmov d9, d2
58 ; CHECK-SD-NEXT: bl __gttf2
59 ; CHECK-SD-NEXT: cmp w0, #0
60 ; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
61 ; CHECK-SD-NEXT: fcsel d0, d9, d8, gt
62 ; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
65 ; CHECK-GI-LABEL: ogt:
66 ; CHECK-GI: // %bb.0: // %entry
67 ; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
68 ; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
69 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
70 ; CHECK-GI-NEXT: .cfi_offset w30, -16
71 ; CHECK-GI-NEXT: .cfi_offset b8, -24
72 ; CHECK-GI-NEXT: .cfi_offset b9, -32
73 ; CHECK-GI-NEXT: fmov d8, d2
74 ; CHECK-GI-NEXT: fmov d9, d3
75 ; CHECK-GI-NEXT: bl __gttf2
76 ; CHECK-GI-NEXT: cmp w0, #0
77 ; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
78 ; CHECK-GI-NEXT: fcsel d0, d8, d9, gt
79 ; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
82 %c = fcmp ogt fp128 %a, %b
83 %s = select i1 %c, double %d, double %e
87 define double @olt(fp128 %a, fp128 %b, double %d, double %e) {
88 ; CHECK-SD-LABEL: olt:
89 ; CHECK-SD: // %bb.0: // %entry
90 ; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
91 ; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
92 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
93 ; CHECK-SD-NEXT: .cfi_offset w30, -16
94 ; CHECK-SD-NEXT: .cfi_offset b8, -24
95 ; CHECK-SD-NEXT: .cfi_offset b9, -32
96 ; CHECK-SD-NEXT: fmov d8, d3
97 ; CHECK-SD-NEXT: fmov d9, d2
98 ; CHECK-SD-NEXT: bl __lttf2
99 ; CHECK-SD-NEXT: cmp w0, #0
100 ; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
101 ; CHECK-SD-NEXT: fcsel d0, d9, d8, lt
102 ; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
105 ; CHECK-GI-LABEL: olt:
106 ; CHECK-GI: // %bb.0: // %entry
107 ; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
108 ; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
109 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
110 ; CHECK-GI-NEXT: .cfi_offset w30, -16
111 ; CHECK-GI-NEXT: .cfi_offset b8, -24
112 ; CHECK-GI-NEXT: .cfi_offset b9, -32
113 ; CHECK-GI-NEXT: fmov d8, d2
114 ; CHECK-GI-NEXT: fmov d9, d3
115 ; CHECK-GI-NEXT: bl __lttf2
116 ; CHECK-GI-NEXT: cmp w0, #0
117 ; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
118 ; CHECK-GI-NEXT: fcsel d0, d8, d9, lt
119 ; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
122 %c = fcmp olt fp128 %a, %b
123 %s = select i1 %c, double %d, double %e
127 define double @ole(fp128 %a, fp128 %b, double %d, double %e) {
128 ; CHECK-SD-LABEL: ole:
129 ; CHECK-SD: // %bb.0: // %entry
130 ; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
131 ; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
132 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
133 ; CHECK-SD-NEXT: .cfi_offset w30, -16
134 ; CHECK-SD-NEXT: .cfi_offset b8, -24
135 ; CHECK-SD-NEXT: .cfi_offset b9, -32
136 ; CHECK-SD-NEXT: fmov d8, d3
137 ; CHECK-SD-NEXT: fmov d9, d2
138 ; CHECK-SD-NEXT: bl __letf2
139 ; CHECK-SD-NEXT: cmp w0, #0
140 ; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
141 ; CHECK-SD-NEXT: fcsel d0, d9, d8, le
142 ; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
145 ; CHECK-GI-LABEL: ole:
146 ; CHECK-GI: // %bb.0: // %entry
147 ; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
148 ; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
149 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
150 ; CHECK-GI-NEXT: .cfi_offset w30, -16
151 ; CHECK-GI-NEXT: .cfi_offset b8, -24
152 ; CHECK-GI-NEXT: .cfi_offset b9, -32
153 ; CHECK-GI-NEXT: fmov d8, d2
154 ; CHECK-GI-NEXT: fmov d9, d3
155 ; CHECK-GI-NEXT: bl __letf2
156 ; CHECK-GI-NEXT: cmp w0, #0
157 ; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
158 ; CHECK-GI-NEXT: fcsel d0, d8, d9, le
159 ; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
162 %c = fcmp ole fp128 %a, %b
163 %s = select i1 %c, double %d, double %e
167 define double @one(fp128 %a, fp128 %b, double %d, double %e) {
168 ; CHECK-SD-LABEL: one:
169 ; CHECK-SD: // %bb.0: // %entry
170 ; CHECK-SD-NEXT: sub sp, sp, #64
171 ; CHECK-SD-NEXT: stp d9, d8, [sp, #32] // 16-byte Folded Spill
172 ; CHECK-SD-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
173 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 64
174 ; CHECK-SD-NEXT: .cfi_offset w19, -8
175 ; CHECK-SD-NEXT: .cfi_offset w30, -16
176 ; CHECK-SD-NEXT: .cfi_offset b8, -24
177 ; CHECK-SD-NEXT: .cfi_offset b9, -32
178 ; CHECK-SD-NEXT: fmov d8, d3
179 ; CHECK-SD-NEXT: fmov d9, d2
180 ; CHECK-SD-NEXT: stp q0, q1, [sp] // 32-byte Folded Spill
181 ; CHECK-SD-NEXT: bl __eqtf2
182 ; CHECK-SD-NEXT: ldp q0, q1, [sp] // 32-byte Folded Reload
183 ; CHECK-SD-NEXT: cmp w0, #0
184 ; CHECK-SD-NEXT: cset w19, ne
185 ; CHECK-SD-NEXT: bl __unordtf2
186 ; CHECK-SD-NEXT: cmp w0, #0
187 ; CHECK-SD-NEXT: cset w8, eq
188 ; CHECK-SD-NEXT: tst w8, w19
189 ; CHECK-SD-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
190 ; CHECK-SD-NEXT: fcsel d0, d9, d8, ne
191 ; CHECK-SD-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload
192 ; CHECK-SD-NEXT: add sp, sp, #64
195 ; CHECK-GI-LABEL: one:
196 ; CHECK-GI: // %bb.0: // %entry
197 ; CHECK-GI-NEXT: sub sp, sp, #64
198 ; CHECK-GI-NEXT: stp d9, d8, [sp, #32] // 16-byte Folded Spill
199 ; CHECK-GI-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
200 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 64
201 ; CHECK-GI-NEXT: .cfi_offset w19, -8
202 ; CHECK-GI-NEXT: .cfi_offset w30, -16
203 ; CHECK-GI-NEXT: .cfi_offset b8, -24
204 ; CHECK-GI-NEXT: .cfi_offset b9, -32
205 ; CHECK-GI-NEXT: stp q1, q0, [sp] // 32-byte Folded Spill
206 ; CHECK-GI-NEXT: fmov d8, d2
207 ; CHECK-GI-NEXT: fmov d9, d3
208 ; CHECK-GI-NEXT: bl __eqtf2
209 ; CHECK-GI-NEXT: ldp q1, q0, [sp] // 32-byte Folded Reload
210 ; CHECK-GI-NEXT: mov w19, w0
211 ; CHECK-GI-NEXT: bl __unordtf2
212 ; CHECK-GI-NEXT: cmp w0, #0
213 ; CHECK-GI-NEXT: ccmp w19, #0, #4, eq
214 ; CHECK-GI-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
215 ; CHECK-GI-NEXT: fcsel d0, d8, d9, ne
216 ; CHECK-GI-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload
217 ; CHECK-GI-NEXT: add sp, sp, #64
220 %c = fcmp one fp128 %a, %b
221 %s = select i1 %c, double %d, double %e
225 define double @ord(fp128 %a, fp128 %b, double %d, double %e) {
226 ; CHECK-SD-LABEL: ord:
227 ; CHECK-SD: // %bb.0: // %entry
228 ; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
229 ; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
230 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
231 ; CHECK-SD-NEXT: .cfi_offset w30, -16
232 ; CHECK-SD-NEXT: .cfi_offset b8, -24
233 ; CHECK-SD-NEXT: .cfi_offset b9, -32
234 ; CHECK-SD-NEXT: fmov d8, d3
235 ; CHECK-SD-NEXT: fmov d9, d2
236 ; CHECK-SD-NEXT: bl __unordtf2
237 ; CHECK-SD-NEXT: cmp w0, #0
238 ; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
239 ; CHECK-SD-NEXT: fcsel d0, d9, d8, eq
240 ; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
243 ; CHECK-GI-LABEL: ord:
244 ; CHECK-GI: // %bb.0: // %entry
245 ; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
246 ; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
247 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
248 ; CHECK-GI-NEXT: .cfi_offset w30, -16
249 ; CHECK-GI-NEXT: .cfi_offset b8, -24
250 ; CHECK-GI-NEXT: .cfi_offset b9, -32
251 ; CHECK-GI-NEXT: fmov d8, d2
252 ; CHECK-GI-NEXT: fmov d9, d3
253 ; CHECK-GI-NEXT: bl __unordtf2
254 ; CHECK-GI-NEXT: cmp w0, #0
255 ; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
256 ; CHECK-GI-NEXT: fcsel d0, d8, d9, eq
257 ; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
260 %c = fcmp ord fp128 %a, %b
261 %s = select i1 %c, double %d, double %e
265 define double @uno(fp128 %a, fp128 %b, double %d, double %e) {
266 ; CHECK-SD-LABEL: uno:
267 ; CHECK-SD: // %bb.0: // %entry
268 ; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
269 ; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
270 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
271 ; CHECK-SD-NEXT: .cfi_offset w30, -16
272 ; CHECK-SD-NEXT: .cfi_offset b8, -24
273 ; CHECK-SD-NEXT: .cfi_offset b9, -32
274 ; CHECK-SD-NEXT: fmov d8, d3
275 ; CHECK-SD-NEXT: fmov d9, d2
276 ; CHECK-SD-NEXT: bl __unordtf2
277 ; CHECK-SD-NEXT: cmp w0, #0
278 ; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
279 ; CHECK-SD-NEXT: fcsel d0, d9, d8, ne
280 ; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
283 ; CHECK-GI-LABEL: uno:
284 ; CHECK-GI: // %bb.0: // %entry
285 ; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
286 ; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
287 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
288 ; CHECK-GI-NEXT: .cfi_offset w30, -16
289 ; CHECK-GI-NEXT: .cfi_offset b8, -24
290 ; CHECK-GI-NEXT: .cfi_offset b9, -32
291 ; CHECK-GI-NEXT: fmov d8, d2
292 ; CHECK-GI-NEXT: fmov d9, d3
293 ; CHECK-GI-NEXT: bl __unordtf2
294 ; CHECK-GI-NEXT: cmp w0, #0
295 ; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
296 ; CHECK-GI-NEXT: fcsel d0, d8, d9, ne
297 ; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
300 %c = fcmp uno fp128 %a, %b
301 %s = select i1 %c, double %d, double %e
305 define double @ueq(fp128 %a, fp128 %b, double %d, double %e) {
306 ; CHECK-SD-LABEL: ueq:
307 ; CHECK-SD: // %bb.0: // %entry
308 ; CHECK-SD-NEXT: sub sp, sp, #64
309 ; CHECK-SD-NEXT: stp d9, d8, [sp, #32] // 16-byte Folded Spill
310 ; CHECK-SD-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
311 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 64
312 ; CHECK-SD-NEXT: .cfi_offset w19, -8
313 ; CHECK-SD-NEXT: .cfi_offset w30, -16
314 ; CHECK-SD-NEXT: .cfi_offset b8, -24
315 ; CHECK-SD-NEXT: .cfi_offset b9, -32
316 ; CHECK-SD-NEXT: fmov d8, d3
317 ; CHECK-SD-NEXT: fmov d9, d2
318 ; CHECK-SD-NEXT: stp q0, q1, [sp] // 32-byte Folded Spill
319 ; CHECK-SD-NEXT: bl __eqtf2
320 ; CHECK-SD-NEXT: ldp q0, q1, [sp] // 32-byte Folded Reload
321 ; CHECK-SD-NEXT: mov w19, w0
322 ; CHECK-SD-NEXT: bl __unordtf2
323 ; CHECK-SD-NEXT: cmp w0, #0
324 ; CHECK-SD-NEXT: ccmp w19, #0, #4, eq
325 ; CHECK-SD-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
326 ; CHECK-SD-NEXT: fcsel d0, d9, d8, eq
327 ; CHECK-SD-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload
328 ; CHECK-SD-NEXT: add sp, sp, #64
331 ; CHECK-GI-LABEL: ueq:
332 ; CHECK-GI: // %bb.0: // %entry
333 ; CHECK-GI-NEXT: sub sp, sp, #64
334 ; CHECK-GI-NEXT: stp d9, d8, [sp, #32] // 16-byte Folded Spill
335 ; CHECK-GI-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
336 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 64
337 ; CHECK-GI-NEXT: .cfi_offset w19, -8
338 ; CHECK-GI-NEXT: .cfi_offset w30, -16
339 ; CHECK-GI-NEXT: .cfi_offset b8, -24
340 ; CHECK-GI-NEXT: .cfi_offset b9, -32
341 ; CHECK-GI-NEXT: stp q1, q0, [sp] // 32-byte Folded Spill
342 ; CHECK-GI-NEXT: fmov d8, d2
343 ; CHECK-GI-NEXT: fmov d9, d3
344 ; CHECK-GI-NEXT: bl __eqtf2
345 ; CHECK-GI-NEXT: ldp q1, q0, [sp] // 32-byte Folded Reload
346 ; CHECK-GI-NEXT: mov w19, w0
347 ; CHECK-GI-NEXT: bl __unordtf2
348 ; CHECK-GI-NEXT: cmp w0, #0
349 ; CHECK-GI-NEXT: ccmp w19, #0, #4, eq
350 ; CHECK-GI-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
351 ; CHECK-GI-NEXT: fcsel d0, d8, d9, eq
352 ; CHECK-GI-NEXT: ldp d9, d8, [sp, #32] // 16-byte Folded Reload
353 ; CHECK-GI-NEXT: add sp, sp, #64
356 %c = fcmp ueq fp128 %a, %b
357 %s = select i1 %c, double %d, double %e
361 define double @ugt(fp128 %a, fp128 %b, double %d, double %e) {
362 ; CHECK-SD-LABEL: ugt:
363 ; CHECK-SD: // %bb.0: // %entry
364 ; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
365 ; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
366 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
367 ; CHECK-SD-NEXT: .cfi_offset w30, -16
368 ; CHECK-SD-NEXT: .cfi_offset b8, -24
369 ; CHECK-SD-NEXT: .cfi_offset b9, -32
370 ; CHECK-SD-NEXT: fmov d8, d3
371 ; CHECK-SD-NEXT: fmov d9, d2
372 ; CHECK-SD-NEXT: bl __letf2
373 ; CHECK-SD-NEXT: cmp w0, #0
374 ; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
375 ; CHECK-SD-NEXT: fcsel d0, d9, d8, gt
376 ; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
379 ; CHECK-GI-LABEL: ugt:
380 ; CHECK-GI: // %bb.0: // %entry
381 ; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
382 ; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
383 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
384 ; CHECK-GI-NEXT: .cfi_offset w30, -16
385 ; CHECK-GI-NEXT: .cfi_offset b8, -24
386 ; CHECK-GI-NEXT: .cfi_offset b9, -32
387 ; CHECK-GI-NEXT: fmov d8, d2
388 ; CHECK-GI-NEXT: fmov d9, d3
389 ; CHECK-GI-NEXT: bl __letf2
390 ; CHECK-GI-NEXT: cmp w0, #0
391 ; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
392 ; CHECK-GI-NEXT: fcsel d0, d8, d9, gt
393 ; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
396 %c = fcmp ugt fp128 %a, %b
397 %s = select i1 %c, double %d, double %e
401 define double @uge(fp128 %a, fp128 %b, double %d, double %e) {
402 ; CHECK-SD-LABEL: uge:
403 ; CHECK-SD: // %bb.0: // %entry
404 ; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
405 ; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
406 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
407 ; CHECK-SD-NEXT: .cfi_offset w30, -16
408 ; CHECK-SD-NEXT: .cfi_offset b8, -24
409 ; CHECK-SD-NEXT: .cfi_offset b9, -32
410 ; CHECK-SD-NEXT: fmov d8, d3
411 ; CHECK-SD-NEXT: fmov d9, d2
412 ; CHECK-SD-NEXT: bl __lttf2
413 ; CHECK-SD-NEXT: cmp w0, #0
414 ; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
415 ; CHECK-SD-NEXT: fcsel d0, d9, d8, ge
416 ; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
419 ; CHECK-GI-LABEL: uge:
420 ; CHECK-GI: // %bb.0: // %entry
421 ; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
422 ; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
423 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
424 ; CHECK-GI-NEXT: .cfi_offset w30, -16
425 ; CHECK-GI-NEXT: .cfi_offset b8, -24
426 ; CHECK-GI-NEXT: .cfi_offset b9, -32
427 ; CHECK-GI-NEXT: fmov d8, d2
428 ; CHECK-GI-NEXT: fmov d9, d3
429 ; CHECK-GI-NEXT: bl __lttf2
430 ; CHECK-GI-NEXT: cmp w0, #0
431 ; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
432 ; CHECK-GI-NEXT: fcsel d0, d8, d9, ge
433 ; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
436 %c = fcmp uge fp128 %a, %b
437 %s = select i1 %c, double %d, double %e
441 define double @ult(fp128 %a, fp128 %b, double %d, double %e) {
442 ; CHECK-SD-LABEL: ult:
443 ; CHECK-SD: // %bb.0: // %entry
444 ; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
445 ; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
446 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
447 ; CHECK-SD-NEXT: .cfi_offset w30, -16
448 ; CHECK-SD-NEXT: .cfi_offset b8, -24
449 ; CHECK-SD-NEXT: .cfi_offset b9, -32
450 ; CHECK-SD-NEXT: fmov d8, d3
451 ; CHECK-SD-NEXT: fmov d9, d2
452 ; CHECK-SD-NEXT: bl __getf2
453 ; CHECK-SD-NEXT: cmp w0, #0
454 ; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
455 ; CHECK-SD-NEXT: fcsel d0, d9, d8, lt
456 ; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
459 ; CHECK-GI-LABEL: ult:
460 ; CHECK-GI: // %bb.0: // %entry
461 ; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
462 ; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
463 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
464 ; CHECK-GI-NEXT: .cfi_offset w30, -16
465 ; CHECK-GI-NEXT: .cfi_offset b8, -24
466 ; CHECK-GI-NEXT: .cfi_offset b9, -32
467 ; CHECK-GI-NEXT: fmov d8, d2
468 ; CHECK-GI-NEXT: fmov d9, d3
469 ; CHECK-GI-NEXT: bl __getf2
470 ; CHECK-GI-NEXT: cmp w0, #0
471 ; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
472 ; CHECK-GI-NEXT: fcsel d0, d8, d9, lt
473 ; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
476 %c = fcmp ult fp128 %a, %b
477 %s = select i1 %c, double %d, double %e
481 define double @ule(fp128 %a, fp128 %b, double %d, double %e) {
482 ; CHECK-SD-LABEL: ule:
483 ; CHECK-SD: // %bb.0: // %entry
484 ; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
485 ; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
486 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
487 ; CHECK-SD-NEXT: .cfi_offset w30, -16
488 ; CHECK-SD-NEXT: .cfi_offset b8, -24
489 ; CHECK-SD-NEXT: .cfi_offset b9, -32
490 ; CHECK-SD-NEXT: fmov d8, d3
491 ; CHECK-SD-NEXT: fmov d9, d2
492 ; CHECK-SD-NEXT: bl __gttf2
493 ; CHECK-SD-NEXT: cmp w0, #0
494 ; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
495 ; CHECK-SD-NEXT: fcsel d0, d9, d8, le
496 ; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
499 ; CHECK-GI-LABEL: ule:
500 ; CHECK-GI: // %bb.0: // %entry
501 ; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
502 ; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
503 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
504 ; CHECK-GI-NEXT: .cfi_offset w30, -16
505 ; CHECK-GI-NEXT: .cfi_offset b8, -24
506 ; CHECK-GI-NEXT: .cfi_offset b9, -32
507 ; CHECK-GI-NEXT: fmov d8, d2
508 ; CHECK-GI-NEXT: fmov d9, d3
509 ; CHECK-GI-NEXT: bl __gttf2
510 ; CHECK-GI-NEXT: cmp w0, #0
511 ; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
512 ; CHECK-GI-NEXT: fcsel d0, d8, d9, le
513 ; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
516 %c = fcmp ule fp128 %a, %b
517 %s = select i1 %c, double %d, double %e
521 define double @une(fp128 %a, fp128 %b, double %d, double %e) {
522 ; CHECK-SD-LABEL: une:
523 ; CHECK-SD: // %bb.0: // %entry
524 ; CHECK-SD-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
525 ; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
526 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 32
527 ; CHECK-SD-NEXT: .cfi_offset w30, -16
528 ; CHECK-SD-NEXT: .cfi_offset b8, -24
529 ; CHECK-SD-NEXT: .cfi_offset b9, -32
530 ; CHECK-SD-NEXT: fmov d8, d3
531 ; CHECK-SD-NEXT: fmov d9, d2
532 ; CHECK-SD-NEXT: bl __netf2
533 ; CHECK-SD-NEXT: cmp w0, #0
534 ; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
535 ; CHECK-SD-NEXT: fcsel d0, d9, d8, ne
536 ; CHECK-SD-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
539 ; CHECK-GI-LABEL: une:
540 ; CHECK-GI: // %bb.0: // %entry
541 ; CHECK-GI-NEXT: stp d9, d8, [sp, #-32]! // 16-byte Folded Spill
542 ; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
543 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 32
544 ; CHECK-GI-NEXT: .cfi_offset w30, -16
545 ; CHECK-GI-NEXT: .cfi_offset b8, -24
546 ; CHECK-GI-NEXT: .cfi_offset b9, -32
547 ; CHECK-GI-NEXT: fmov d8, d2
548 ; CHECK-GI-NEXT: fmov d9, d3
549 ; CHECK-GI-NEXT: bl __netf2
550 ; CHECK-GI-NEXT: cmp w0, #0
551 ; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
552 ; CHECK-GI-NEXT: fcsel d0, d8, d9, ne
553 ; CHECK-GI-NEXT: ldp d9, d8, [sp], #32 // 16-byte Folded Reload
556 %c = fcmp une fp128 %a, %b
557 %s = select i1 %c, double %d, double %e