[Xtensa] Implement Windowed Register Option. (#124656)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / fcmp-fp128.ll
blob503cb8c533bab042bc03e160ed2a0eab63ee1717
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) {
8 ; CHECK-SD-LABEL: oeq:
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
23 ; CHECK-SD-NEXT:    ret
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
40 ; CHECK-GI-NEXT:    ret
41 entry:
42   %c = fcmp oeq fp128 %a, %b
43   %s = select i1 %c, double %d, double %e
44   ret double %s
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
63 ; CHECK-SD-NEXT:    ret
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
80 ; CHECK-GI-NEXT:    ret
81 entry:
82   %c = fcmp ogt fp128 %a, %b
83   %s = select i1 %c, double %d, double %e
84   ret double %s
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
103 ; CHECK-SD-NEXT:    ret
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
120 ; CHECK-GI-NEXT:    ret
121 entry:
122   %c = fcmp olt fp128 %a, %b
123   %s = select i1 %c, double %d, double %e
124   ret double %s
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
143 ; CHECK-SD-NEXT:    ret
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
160 ; CHECK-GI-NEXT:    ret
161 entry:
162   %c = fcmp ole fp128 %a, %b
163   %s = select i1 %c, double %d, double %e
164   ret double %s
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
193 ; CHECK-SD-NEXT:    ret
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
218 ; CHECK-GI-NEXT:    ret
219 entry:
220   %c = fcmp one fp128 %a, %b
221   %s = select i1 %c, double %d, double %e
222   ret double %s
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
241 ; CHECK-SD-NEXT:    ret
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
258 ; CHECK-GI-NEXT:    ret
259 entry:
260   %c = fcmp ord fp128 %a, %b
261   %s = select i1 %c, double %d, double %e
262   ret double %s
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
281 ; CHECK-SD-NEXT:    ret
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
298 ; CHECK-GI-NEXT:    ret
299 entry:
300   %c = fcmp uno fp128 %a, %b
301   %s = select i1 %c, double %d, double %e
302   ret double %s
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
329 ; CHECK-SD-NEXT:    ret
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
354 ; CHECK-GI-NEXT:    ret
355 entry:
356   %c = fcmp ueq fp128 %a, %b
357   %s = select i1 %c, double %d, double %e
358   ret double %s
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
377 ; CHECK-SD-NEXT:    ret
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
394 ; CHECK-GI-NEXT:    ret
395 entry:
396   %c = fcmp ugt fp128 %a, %b
397   %s = select i1 %c, double %d, double %e
398   ret double %s
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
417 ; CHECK-SD-NEXT:    ret
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
434 ; CHECK-GI-NEXT:    ret
435 entry:
436   %c = fcmp uge fp128 %a, %b
437   %s = select i1 %c, double %d, double %e
438   ret double %s
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
457 ; CHECK-SD-NEXT:    ret
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
474 ; CHECK-GI-NEXT:    ret
475 entry:
476   %c = fcmp ult fp128 %a, %b
477   %s = select i1 %c, double %d, double %e
478   ret double %s
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
497 ; CHECK-SD-NEXT:    ret
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
514 ; CHECK-GI-NEXT:    ret
515 entry:
516   %c = fcmp ule fp128 %a, %b
517   %s = select i1 %c, double %d, double %e
518   ret double %s
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
537 ; CHECK-SD-NEXT:    ret
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
554 ; CHECK-GI-NEXT:    ret
555 entry:
556   %c = fcmp une fp128 %a, %b
557   %s = select i1 %c, double %d, double %e
558   ret double %s