[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / Thumb2 / mve-fptoui-sat-vector.ll
blob8ea12bd1fc0deb49a155277d02dca79a189cd44d
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve,+fullfp16 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-MVE
3 ; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve.fp -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-MVEFP
6 ; Float to signed 32-bit -- Vector size variation
9 declare <1 x i32> @llvm.fptoui.sat.v1f32.v1i32 (<1 x float>)
10 declare <2 x i32> @llvm.fptoui.sat.v2f32.v2i32 (<2 x float>)
11 declare <3 x i32> @llvm.fptoui.sat.v3f32.v3i32 (<3 x float>)
12 declare <4 x i32> @llvm.fptoui.sat.v4f32.v4i32 (<4 x float>)
13 declare <5 x i32> @llvm.fptoui.sat.v5f32.v5i32 (<5 x float>)
14 declare <6 x i32> @llvm.fptoui.sat.v6f32.v6i32 (<6 x float>)
15 declare <7 x i32> @llvm.fptoui.sat.v7f32.v7i32 (<7 x float>)
16 declare <8 x i32> @llvm.fptoui.sat.v8f32.v8i32 (<8 x float>)
18 define arm_aapcs_vfpcc <1 x i32> @test_unsigned_v1f32_v1i32(<1 x float> %f) {
19 ; CHECK-LABEL: test_unsigned_v1f32_v1i32:
20 ; CHECK:       @ %bb.0:
21 ; CHECK-NEXT:    vcvt.u32.f32 s0, s0
22 ; CHECK-NEXT:    vmov r0, s0
23 ; CHECK-NEXT:    bx lr
24     %x = call <1 x i32> @llvm.fptoui.sat.v1f32.v1i32(<1 x float> %f)
25     ret <1 x i32> %x
28 define arm_aapcs_vfpcc <2 x i32> @test_unsigned_v2f32_v2i32(<2 x float> %f) {
29 ; CHECK-LABEL: test_unsigned_v2f32_v2i32:
30 ; CHECK:       @ %bb.0:
31 ; CHECK-NEXT:    .save {r4, r5, r7, lr}
32 ; CHECK-NEXT:    push {r4, r5, r7, lr}
33 ; CHECK-NEXT:    .vsave {d8, d9}
34 ; CHECK-NEXT:    vpush {d8, d9}
35 ; CHECK-NEXT:    vmov q4, q0
36 ; CHECK-NEXT:    vmov r0, s17
37 ; CHECK-NEXT:    bl __aeabi_f2ulz
38 ; CHECK-NEXT:    mov r5, r0
39 ; CHECK-NEXT:    vmov r0, s16
40 ; CHECK-NEXT:    vldr s18, .LCPI1_0
41 ; CHECK-NEXT:    vcmp.f32 s17, #0
42 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
43 ; CHECK-NEXT:    it lt
44 ; CHECK-NEXT:    movlt r5, #0
45 ; CHECK-NEXT:    vcmp.f32 s17, s18
46 ; CHECK-NEXT:    mov r4, r1
47 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
48 ; CHECK-NEXT:    it gt
49 ; CHECK-NEXT:    movgt.w r5, #-1
50 ; CHECK-NEXT:    bl __aeabi_f2ulz
51 ; CHECK-NEXT:    vcmp.f32 s16, #0
52 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
53 ; CHECK-NEXT:    vcmp.f32 s16, s18
54 ; CHECK-NEXT:    it lt
55 ; CHECK-NEXT:    movlt r0, #0
56 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
57 ; CHECK-NEXT:    vcmp.f32 s17, #0
58 ; CHECK-NEXT:    it gt
59 ; CHECK-NEXT:    movgt.w r0, #-1
60 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
61 ; CHECK-NEXT:    vcmp.f32 s17, s18
62 ; CHECK-NEXT:    it lt
63 ; CHECK-NEXT:    movlt r4, #0
64 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
65 ; CHECK-NEXT:    vcmp.f32 s16, #0
66 ; CHECK-NEXT:    it gt
67 ; CHECK-NEXT:    movgt r4, #0
68 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
69 ; CHECK-NEXT:    it lt
70 ; CHECK-NEXT:    movlt r1, #0
71 ; CHECK-NEXT:    vcmp.f32 s16, s18
72 ; CHECK-NEXT:    vmov q0[2], q0[0], r0, r5
73 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
74 ; CHECK-NEXT:    it gt
75 ; CHECK-NEXT:    movgt r1, #0
76 ; CHECK-NEXT:    vmov q0[3], q0[1], r1, r4
77 ; CHECK-NEXT:    vpop {d8, d9}
78 ; CHECK-NEXT:    pop {r4, r5, r7, pc}
79 ; CHECK-NEXT:    .p2align 2
80 ; CHECK-NEXT:  @ %bb.1:
81 ; CHECK-NEXT:  .LCPI1_0:
82 ; CHECK-NEXT:    .long 0x4f7fffff @ float 4.29496704E+9
83     %x = call <2 x i32> @llvm.fptoui.sat.v2f32.v2i32(<2 x float> %f)
84     ret <2 x i32> %x
87 define arm_aapcs_vfpcc <3 x i32> @test_unsigned_v3f32_v3i32(<3 x float> %f) {
88 ; CHECK-MVE-LABEL: test_unsigned_v3f32_v3i32:
89 ; CHECK-MVE:       @ %bb.0:
90 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s2, s2
91 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s0, s0
92 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s4, s3
93 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s6, s1
94 ; CHECK-MVE-NEXT:    vmov r0, s2
95 ; CHECK-MVE-NEXT:    vmov r1, s0
96 ; CHECK-MVE-NEXT:    vmov q0[2], q0[0], r1, r0
97 ; CHECK-MVE-NEXT:    vmov r0, s4
98 ; CHECK-MVE-NEXT:    vmov r1, s6
99 ; CHECK-MVE-NEXT:    vmov q0[3], q0[1], r1, r0
100 ; CHECK-MVE-NEXT:    bx lr
102 ; CHECK-MVEFP-LABEL: test_unsigned_v3f32_v3i32:
103 ; CHECK-MVEFP:       @ %bb.0:
104 ; CHECK-MVEFP-NEXT:    vcvt.u32.f32 q0, q0
105 ; CHECK-MVEFP-NEXT:    bx lr
106     %x = call <3 x i32> @llvm.fptoui.sat.v3f32.v3i32(<3 x float> %f)
107     ret <3 x i32> %x
110 define arm_aapcs_vfpcc <4 x i32> @test_unsigned_v4f32_v4i32(<4 x float> %f) {
111 ; CHECK-MVE-LABEL: test_unsigned_v4f32_v4i32:
112 ; CHECK-MVE:       @ %bb.0:
113 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s2, s2
114 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s0, s0
115 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s4, s3
116 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s6, s1
117 ; CHECK-MVE-NEXT:    vmov r0, s2
118 ; CHECK-MVE-NEXT:    vmov r1, s0
119 ; CHECK-MVE-NEXT:    vmov q0[2], q0[0], r1, r0
120 ; CHECK-MVE-NEXT:    vmov r0, s4
121 ; CHECK-MVE-NEXT:    vmov r1, s6
122 ; CHECK-MVE-NEXT:    vmov q0[3], q0[1], r1, r0
123 ; CHECK-MVE-NEXT:    bx lr
125 ; CHECK-MVEFP-LABEL: test_unsigned_v4f32_v4i32:
126 ; CHECK-MVEFP:       @ %bb.0:
127 ; CHECK-MVEFP-NEXT:    vcvt.u32.f32 q0, q0
128 ; CHECK-MVEFP-NEXT:    bx lr
129     %x = call <4 x i32> @llvm.fptoui.sat.v4f32.v4i32(<4 x float> %f)
130     ret <4 x i32> %x
133 define arm_aapcs_vfpcc <5 x i32> @test_unsigned_v5f32_v5i32(<5 x float> %f) {
134 ; CHECK-MVE-LABEL: test_unsigned_v5f32_v5i32:
135 ; CHECK-MVE:       @ %bb.0:
136 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s2, s2
137 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s0, s0
138 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s6, s3
139 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s8, s1
140 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s4, s4
141 ; CHECK-MVE-NEXT:    vmov r1, s2
142 ; CHECK-MVE-NEXT:    vmov r2, s0
143 ; CHECK-MVE-NEXT:    vmov q0[2], q0[0], r2, r1
144 ; CHECK-MVE-NEXT:    vmov r1, s6
145 ; CHECK-MVE-NEXT:    vmov r2, s8
146 ; CHECK-MVE-NEXT:    vmov q0[3], q0[1], r2, r1
147 ; CHECK-MVE-NEXT:    vstrw.32 q0, [r0]
148 ; CHECK-MVE-NEXT:    vstr s4, [r0, #16]
149 ; CHECK-MVE-NEXT:    bx lr
151 ; CHECK-MVEFP-LABEL: test_unsigned_v5f32_v5i32:
152 ; CHECK-MVEFP:       @ %bb.0:
153 ; CHECK-MVEFP-NEXT:    vcvt.u32.f32 q1, q1
154 ; CHECK-MVEFP-NEXT:    vcvt.u32.f32 q0, q0
155 ; CHECK-MVEFP-NEXT:    vmov r1, s4
156 ; CHECK-MVEFP-NEXT:    str r1, [r0, #16]
157 ; CHECK-MVEFP-NEXT:    vstrw.32 q0, [r0]
158 ; CHECK-MVEFP-NEXT:    bx lr
159     %x = call <5 x i32> @llvm.fptoui.sat.v5f32.v5i32(<5 x float> %f)
160     ret <5 x i32> %x
163 define arm_aapcs_vfpcc <6 x i32> @test_unsigned_v6f32_v6i32(<6 x float> %f) {
164 ; CHECK-MVE-LABEL: test_unsigned_v6f32_v6i32:
165 ; CHECK-MVE:       @ %bb.0:
166 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s2, s2
167 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s0, s0
168 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s8, s3
169 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s10, s1
170 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s6, s5
171 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s4, s4
172 ; CHECK-MVE-NEXT:    vmov r1, s2
173 ; CHECK-MVE-NEXT:    vmov r2, s0
174 ; CHECK-MVE-NEXT:    vmov q0[2], q0[0], r2, r1
175 ; CHECK-MVE-NEXT:    vmov r1, s8
176 ; CHECK-MVE-NEXT:    vmov r2, s10
177 ; CHECK-MVE-NEXT:    vmov q0[3], q0[1], r2, r1
178 ; CHECK-MVE-NEXT:    vstr s6, [r0, #20]
179 ; CHECK-MVE-NEXT:    vstrw.32 q0, [r0]
180 ; CHECK-MVE-NEXT:    vstr s4, [r0, #16]
181 ; CHECK-MVE-NEXT:    bx lr
183 ; CHECK-MVEFP-LABEL: test_unsigned_v6f32_v6i32:
184 ; CHECK-MVEFP:       @ %bb.0:
185 ; CHECK-MVEFP-NEXT:    vcvt.u32.f32 q1, q1
186 ; CHECK-MVEFP-NEXT:    vcvt.u32.f32 q0, q0
187 ; CHECK-MVEFP-NEXT:    vmov.f32 s6, s5
188 ; CHECK-MVEFP-NEXT:    vmov r2, s4
189 ; CHECK-MVEFP-NEXT:    vmov r1, s6
190 ; CHECK-MVEFP-NEXT:    strd r2, r1, [r0, #16]
191 ; CHECK-MVEFP-NEXT:    vstrw.32 q0, [r0]
192 ; CHECK-MVEFP-NEXT:    bx lr
193     %x = call <6 x i32> @llvm.fptoui.sat.v6f32.v6i32(<6 x float> %f)
194     ret <6 x i32> %x
197 define arm_aapcs_vfpcc <7 x i32> @test_unsigned_v7f32_v7i32(<7 x float> %f) {
198 ; CHECK-MVE-LABEL: test_unsigned_v7f32_v7i32:
199 ; CHECK-MVE:       @ %bb.0:
200 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s2, s2
201 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s0, s0
202 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s10, s3
203 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s12, s1
204 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s8, s5
205 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s4, s4
206 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s6, s6
207 ; CHECK-MVE-NEXT:    vmov r1, s2
208 ; CHECK-MVE-NEXT:    vmov r2, s0
209 ; CHECK-MVE-NEXT:    vmov q0[2], q0[0], r2, r1
210 ; CHECK-MVE-NEXT:    vmov r1, s10
211 ; CHECK-MVE-NEXT:    vmov r2, s12
212 ; CHECK-MVE-NEXT:    vmov q0[3], q0[1], r2, r1
213 ; CHECK-MVE-NEXT:    vstr s8, [r0, #20]
214 ; CHECK-MVE-NEXT:    vstr s4, [r0, #16]
215 ; CHECK-MVE-NEXT:    vstrw.32 q0, [r0]
216 ; CHECK-MVE-NEXT:    vstr s6, [r0, #24]
217 ; CHECK-MVE-NEXT:    bx lr
219 ; CHECK-MVEFP-LABEL: test_unsigned_v7f32_v7i32:
220 ; CHECK-MVEFP:       @ %bb.0:
221 ; CHECK-MVEFP-NEXT:    vcvt.u32.f32 q1, q1
222 ; CHECK-MVEFP-NEXT:    vcvt.u32.f32 q0, q0
223 ; CHECK-MVEFP-NEXT:    vmov.f32 s10, s5
224 ; CHECK-MVEFP-NEXT:    vmov r2, s4
225 ; CHECK-MVEFP-NEXT:    vmov r3, s6
226 ; CHECK-MVEFP-NEXT:    vmov r1, s10
227 ; CHECK-MVEFP-NEXT:    strd r2, r1, [r0, #16]
228 ; CHECK-MVEFP-NEXT:    str r3, [r0, #24]
229 ; CHECK-MVEFP-NEXT:    vstrw.32 q0, [r0]
230 ; CHECK-MVEFP-NEXT:    bx lr
231     %x = call <7 x i32> @llvm.fptoui.sat.v7f32.v7i32(<7 x float> %f)
232     ret <7 x i32> %x
235 define arm_aapcs_vfpcc <8 x i32> @test_unsigned_v8f32_v8i32(<8 x float> %f) {
236 ; CHECK-MVE-LABEL: test_unsigned_v8f32_v8i32:
237 ; CHECK-MVE:       @ %bb.0:
238 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s2, s2
239 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s0, s0
240 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s8, s3
241 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s10, s1
242 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s6, s6
243 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s4, s4
244 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s12, s7
245 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s14, s5
246 ; CHECK-MVE-NEXT:    vmov r0, s2
247 ; CHECK-MVE-NEXT:    vmov r1, s0
248 ; CHECK-MVE-NEXT:    vmov q0[2], q0[0], r1, r0
249 ; CHECK-MVE-NEXT:    vmov r0, s8
250 ; CHECK-MVE-NEXT:    vmov r1, s10
251 ; CHECK-MVE-NEXT:    vmov q0[3], q0[1], r1, r0
252 ; CHECK-MVE-NEXT:    vmov r0, s6
253 ; CHECK-MVE-NEXT:    vmov r1, s4
254 ; CHECK-MVE-NEXT:    vmov q1[2], q1[0], r1, r0
255 ; CHECK-MVE-NEXT:    vmov r0, s12
256 ; CHECK-MVE-NEXT:    vmov r1, s14
257 ; CHECK-MVE-NEXT:    vmov q1[3], q1[1], r1, r0
258 ; CHECK-MVE-NEXT:    bx lr
260 ; CHECK-MVEFP-LABEL: test_unsigned_v8f32_v8i32:
261 ; CHECK-MVEFP:       @ %bb.0:
262 ; CHECK-MVEFP-NEXT:    vcvt.u32.f32 q0, q0
263 ; CHECK-MVEFP-NEXT:    vcvt.u32.f32 q1, q1
264 ; CHECK-MVEFP-NEXT:    bx lr
265     %x = call <8 x i32> @llvm.fptoui.sat.v8f32.v8i32(<8 x float> %f)
266     ret <8 x i32> %x
270 ; Double to signed 32-bit -- Vector size variation
273 declare <1 x i32> @llvm.fptoui.sat.v1f64.v1i32 (<1 x double>)
274 declare <2 x i32> @llvm.fptoui.sat.v2f64.v2i32 (<2 x double>)
275 declare <3 x i32> @llvm.fptoui.sat.v3f64.v3i32 (<3 x double>)
276 declare <4 x i32> @llvm.fptoui.sat.v4f64.v4i32 (<4 x double>)
277 declare <5 x i32> @llvm.fptoui.sat.v5f64.v5i32 (<5 x double>)
278 declare <6 x i32> @llvm.fptoui.sat.v6f64.v6i32 (<6 x double>)
280 define arm_aapcs_vfpcc <1 x i32> @test_unsigned_v1f64_v1i32(<1 x double> %f) {
281 ; CHECK-LABEL: test_unsigned_v1f64_v1i32:
282 ; CHECK:       @ %bb.0:
283 ; CHECK-NEXT:    .save {r4, r5, r6, r7, lr}
284 ; CHECK-NEXT:    push {r4, r5, r6, r7, lr}
285 ; CHECK-NEXT:    .pad #4
286 ; CHECK-NEXT:    sub sp, #4
287 ; CHECK-NEXT:    vldr d1, .LCPI8_0
288 ; CHECK-NEXT:    vmov r4, r5, d0
289 ; CHECK-NEXT:    vmov r2, r3, d1
290 ; CHECK-NEXT:    mov r0, r4
291 ; CHECK-NEXT:    mov r1, r5
292 ; CHECK-NEXT:    bl __aeabi_dcmpgt
293 ; CHECK-NEXT:    vldr d0, .LCPI8_1
294 ; CHECK-NEXT:    mov r6, r0
295 ; CHECK-NEXT:    mov r0, r4
296 ; CHECK-NEXT:    mov r1, r5
297 ; CHECK-NEXT:    vmov r2, r3, d0
298 ; CHECK-NEXT:    bl __aeabi_dcmpge
299 ; CHECK-NEXT:    mov r7, r0
300 ; CHECK-NEXT:    mov r0, r4
301 ; CHECK-NEXT:    mov r1, r5
302 ; CHECK-NEXT:    bl __aeabi_d2uiz
303 ; CHECK-NEXT:    cmp r7, #0
304 ; CHECK-NEXT:    csel r0, r0, r7, ne
305 ; CHECK-NEXT:    cmp r6, #0
306 ; CHECK-NEXT:    it ne
307 ; CHECK-NEXT:    movne.w r0, #-1
308 ; CHECK-NEXT:    add sp, #4
309 ; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}
310 ; CHECK-NEXT:    .p2align 3
311 ; CHECK-NEXT:  @ %bb.1:
312 ; CHECK-NEXT:  .LCPI8_0:
313 ; CHECK-NEXT:    .long 4292870144 @ double 4294967295
314 ; CHECK-NEXT:    .long 1106247679
315 ; CHECK-NEXT:  .LCPI8_1:
316 ; CHECK-NEXT:    .long 0 @ double 0
317 ; CHECK-NEXT:    .long 0
318     %x = call <1 x i32> @llvm.fptoui.sat.v1f64.v1i32(<1 x double> %f)
319     ret <1 x i32> %x
322 define arm_aapcs_vfpcc <2 x i32> @test_unsigned_v2f64_v2i32(<2 x double> %f) {
323 ; CHECK-LABEL: test_unsigned_v2f64_v2i32:
324 ; CHECK:       @ %bb.0:
325 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
326 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
327 ; CHECK-NEXT:    .pad #4
328 ; CHECK-NEXT:    sub sp, #4
329 ; CHECK-NEXT:    .vsave {d8, d9}
330 ; CHECK-NEXT:    vpush {d8, d9}
331 ; CHECK-NEXT:    .pad #16
332 ; CHECK-NEXT:    sub sp, #16
333 ; CHECK-NEXT:    vmov q4, q0
334 ; CHECK-NEXT:    vldr d0, .LCPI9_0
335 ; CHECK-NEXT:    vmov r6, r7, d9
336 ; CHECK-NEXT:    vmov r2, r3, d0
337 ; CHECK-NEXT:    mov r0, r6
338 ; CHECK-NEXT:    mov r1, r7
339 ; CHECK-NEXT:    strd r3, r2, [sp, #4] @ 8-byte Folded Spill
340 ; CHECK-NEXT:    bl __aeabi_dcmpge
341 ; CHECK-NEXT:    str r0, [sp, #12] @ 4-byte Spill
342 ; CHECK-NEXT:    mov r0, r6
343 ; CHECK-NEXT:    mov r1, r7
344 ; CHECK-NEXT:    bl __aeabi_d2ulz
345 ; CHECK-NEXT:    vldr d0, .LCPI9_1
346 ; CHECK-NEXT:    mov r5, r0
347 ; CHECK-NEXT:    ldr r0, [sp, #12] @ 4-byte Reload
348 ; CHECK-NEXT:    mov r10, r1
349 ; CHECK-NEXT:    vmov r9, r8, d0
350 ; CHECK-NEXT:    mov r1, r7
351 ; CHECK-NEXT:    clz r0, r0
352 ; CHECK-NEXT:    vmov r11, r4, d8
353 ; CHECK-NEXT:    lsrs r0, r0, #5
354 ; CHECK-NEXT:    str r0, [sp, #12] @ 4-byte Spill
355 ; CHECK-NEXT:    mov r0, r6
356 ; CHECK-NEXT:    it ne
357 ; CHECK-NEXT:    movne r5, #0
358 ; CHECK-NEXT:    mov r2, r9
359 ; CHECK-NEXT:    mov r3, r8
360 ; CHECK-NEXT:    bl __aeabi_dcmpgt
361 ; CHECK-NEXT:    mov r6, r0
362 ; CHECK-NEXT:    cmp r0, #0
363 ; CHECK-NEXT:    mov r0, r11
364 ; CHECK-NEXT:    mov r1, r4
365 ; CHECK-NEXT:    mov r2, r9
366 ; CHECK-NEXT:    mov r3, r8
367 ; CHECK-NEXT:    it ne
368 ; CHECK-NEXT:    movne r6, #1
369 ; CHECK-NEXT:    cmp r6, #0
370 ; CHECK-NEXT:    it ne
371 ; CHECK-NEXT:    movne.w r5, #-1
372 ; CHECK-NEXT:    bl __aeabi_dcmpgt
373 ; CHECK-NEXT:    mov r7, r0
374 ; CHECK-NEXT:    cmp r0, #0
375 ; CHECK-NEXT:    it ne
376 ; CHECK-NEXT:    movne r7, #1
377 ; CHECK-NEXT:    ldrd r3, r2, [sp, #4] @ 8-byte Folded Reload
378 ; CHECK-NEXT:    mov r0, r11
379 ; CHECK-NEXT:    mov r1, r4
380 ; CHECK-NEXT:    mov r8, r4
381 ; CHECK-NEXT:    bl __aeabi_dcmpge
382 ; CHECK-NEXT:    clz r0, r0
383 ; CHECK-NEXT:    mov r1, r8
384 ; CHECK-NEXT:    lsrs r4, r0, #5
385 ; CHECK-NEXT:    mov r0, r11
386 ; CHECK-NEXT:    bl __aeabi_d2ulz
387 ; CHECK-NEXT:    cmp r4, #0
388 ; CHECK-NEXT:    it ne
389 ; CHECK-NEXT:    movne r0, #0
390 ; CHECK-NEXT:    cmp r7, #0
391 ; CHECK-NEXT:    it ne
392 ; CHECK-NEXT:    movne.w r0, #-1
393 ; CHECK-NEXT:    ldr r2, [sp, #12] @ 4-byte Reload
394 ; CHECK-NEXT:    vmov q0[2], q0[0], r0, r5
395 ; CHECK-NEXT:    cmp r2, #0
396 ; CHECK-NEXT:    it ne
397 ; CHECK-NEXT:    movne.w r10, #0
398 ; CHECK-NEXT:    cmp r6, #0
399 ; CHECK-NEXT:    it ne
400 ; CHECK-NEXT:    movne.w r10, #0
401 ; CHECK-NEXT:    cmp r4, #0
402 ; CHECK-NEXT:    it ne
403 ; CHECK-NEXT:    movne r1, #0
404 ; CHECK-NEXT:    cmp r7, #0
405 ; CHECK-NEXT:    it ne
406 ; CHECK-NEXT:    movne r1, #0
407 ; CHECK-NEXT:    vmov q0[3], q0[1], r1, r10
408 ; CHECK-NEXT:    add sp, #16
409 ; CHECK-NEXT:    vpop {d8, d9}
410 ; CHECK-NEXT:    add sp, #4
411 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
412 ; CHECK-NEXT:    .p2align 3
413 ; CHECK-NEXT:  @ %bb.1:
414 ; CHECK-NEXT:  .LCPI9_0:
415 ; CHECK-NEXT:    .long 0 @ double 0
416 ; CHECK-NEXT:    .long 0
417 ; CHECK-NEXT:  .LCPI9_1:
418 ; CHECK-NEXT:    .long 4292870144 @ double 4294967295
419 ; CHECK-NEXT:    .long 1106247679
420     %x = call <2 x i32> @llvm.fptoui.sat.v2f64.v2i32(<2 x double> %f)
421     ret <2 x i32> %x
424 define arm_aapcs_vfpcc <3 x i32> @test_unsigned_v3f64_v3i32(<3 x double> %f) {
425 ; CHECK-LABEL: test_unsigned_v3f64_v3i32:
426 ; CHECK:       @ %bb.0:
427 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
428 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
429 ; CHECK-NEXT:    .pad #4
430 ; CHECK-NEXT:    sub sp, #4
431 ; CHECK-NEXT:    .vsave {d8, d9}
432 ; CHECK-NEXT:    vpush {d8, d9}
433 ; CHECK-NEXT:    .pad #24
434 ; CHECK-NEXT:    sub sp, #24
435 ; CHECK-NEXT:    vmov.f32 s18, s0
436 ; CHECK-NEXT:    vmov.f32 s19, s1
437 ; CHECK-NEXT:    vldr d0, .LCPI10_0
438 ; CHECK-NEXT:    vmov r4, r5, d1
439 ; CHECK-NEXT:    vmov r9, r7, d0
440 ; CHECK-NEXT:    vmov.f32 s16, s4
441 ; CHECK-NEXT:    vmov.f32 s17, s5
442 ; CHECK-NEXT:    str.w r9, [sp, #8] @ 4-byte Spill
443 ; CHECK-NEXT:    mov r0, r4
444 ; CHECK-NEXT:    mov r1, r5
445 ; CHECK-NEXT:    mov r2, r9
446 ; CHECK-NEXT:    mov r3, r7
447 ; CHECK-NEXT:    str r7, [sp, #12] @ 4-byte Spill
448 ; CHECK-NEXT:    bl __aeabi_dcmpgt
449 ; CHECK-NEXT:    vldr d0, .LCPI10_1
450 ; CHECK-NEXT:    mov r1, r5
451 ; CHECK-NEXT:    str r0, [sp, #20] @ 4-byte Spill
452 ; CHECK-NEXT:    mov r0, r4
453 ; CHECK-NEXT:    vmov r11, r3, d0
454 ; CHECK-NEXT:    str r3, [sp, #16] @ 4-byte Spill
455 ; CHECK-NEXT:    mov r2, r11
456 ; CHECK-NEXT:    bl __aeabi_dcmpge
457 ; CHECK-NEXT:    mov r6, r0
458 ; CHECK-NEXT:    mov r0, r4
459 ; CHECK-NEXT:    mov r1, r5
460 ; CHECK-NEXT:    bl __aeabi_d2ulz
461 ; CHECK-NEXT:    vmov r10, r8, d8
462 ; CHECK-NEXT:    cmp r6, #0
463 ; CHECK-NEXT:    ldr r1, [sp, #20] @ 4-byte Reload
464 ; CHECK-NEXT:    csel r0, r0, r6, ne
465 ; CHECK-NEXT:    mov r2, r9
466 ; CHECK-NEXT:    mov r3, r7
467 ; CHECK-NEXT:    cmp r1, #0
468 ; CHECK-NEXT:    it ne
469 ; CHECK-NEXT:    movne.w r0, #-1
470 ; CHECK-NEXT:    str r0, [sp, #20] @ 4-byte Spill
471 ; CHECK-NEXT:    vmov r5, r4, d9
472 ; CHECK-NEXT:    mov r0, r10
473 ; CHECK-NEXT:    mov r1, r8
474 ; CHECK-NEXT:    bl __aeabi_dcmpgt
475 ; CHECK-NEXT:    ldr r7, [sp, #16] @ 4-byte Reload
476 ; CHECK-NEXT:    mov r1, r8
477 ; CHECK-NEXT:    str r0, [sp, #4] @ 4-byte Spill
478 ; CHECK-NEXT:    mov r0, r10
479 ; CHECK-NEXT:    mov r2, r11
480 ; CHECK-NEXT:    mov r3, r7
481 ; CHECK-NEXT:    bl __aeabi_dcmpge
482 ; CHECK-NEXT:    mov r9, r0
483 ; CHECK-NEXT:    mov r0, r10
484 ; CHECK-NEXT:    mov r1, r8
485 ; CHECK-NEXT:    bl __aeabi_d2ulz
486 ; CHECK-NEXT:    cmp.w r9, #0
487 ; CHECK-NEXT:    mov r1, r4
488 ; CHECK-NEXT:    csel r6, r0, r9, ne
489 ; CHECK-NEXT:    ldr r0, [sp, #4] @ 4-byte Reload
490 ; CHECK-NEXT:    cmp r0, #0
491 ; CHECK-NEXT:    it ne
492 ; CHECK-NEXT:    movne.w r6, #-1
493 ; CHECK-NEXT:    ldrd r2, r3, [sp, #8] @ 8-byte Folded Reload
494 ; CHECK-NEXT:    mov r0, r5
495 ; CHECK-NEXT:    bl __aeabi_dcmpgt
496 ; CHECK-NEXT:    mov r8, r0
497 ; CHECK-NEXT:    mov r0, r5
498 ; CHECK-NEXT:    mov r1, r4
499 ; CHECK-NEXT:    mov r2, r11
500 ; CHECK-NEXT:    mov r3, r7
501 ; CHECK-NEXT:    bl __aeabi_dcmpge
502 ; CHECK-NEXT:    mov r7, r0
503 ; CHECK-NEXT:    mov r0, r5
504 ; CHECK-NEXT:    mov r1, r4
505 ; CHECK-NEXT:    bl __aeabi_d2ulz
506 ; CHECK-NEXT:    cmp r7, #0
507 ; CHECK-NEXT:    csel r0, r0, r7, ne
508 ; CHECK-NEXT:    cmp.w r8, #0
509 ; CHECK-NEXT:    it ne
510 ; CHECK-NEXT:    movne.w r0, #-1
511 ; CHECK-NEXT:    ldr r1, [sp, #20] @ 4-byte Reload
512 ; CHECK-NEXT:    vmov.32 q0[1], r1
513 ; CHECK-NEXT:    vmov q0[2], q0[0], r0, r6
514 ; CHECK-NEXT:    add sp, #24
515 ; CHECK-NEXT:    vpop {d8, d9}
516 ; CHECK-NEXT:    add sp, #4
517 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
518 ; CHECK-NEXT:    .p2align 3
519 ; CHECK-NEXT:  @ %bb.1:
520 ; CHECK-NEXT:  .LCPI10_0:
521 ; CHECK-NEXT:    .long 4292870144 @ double 4294967295
522 ; CHECK-NEXT:    .long 1106247679
523 ; CHECK-NEXT:  .LCPI10_1:
524 ; CHECK-NEXT:    .long 0 @ double 0
525 ; CHECK-NEXT:    .long 0
526     %x = call <3 x i32> @llvm.fptoui.sat.v3f64.v3i32(<3 x double> %f)
527     ret <3 x i32> %x
530 define arm_aapcs_vfpcc <4 x i32> @test_unsigned_v4f64_v4i32(<4 x double> %f) {
531 ; CHECK-LABEL: test_unsigned_v4f64_v4i32:
532 ; CHECK:       @ %bb.0:
533 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
534 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
535 ; CHECK-NEXT:    .pad #4
536 ; CHECK-NEXT:    sub sp, #4
537 ; CHECK-NEXT:    .vsave {d8, d9, d10, d11}
538 ; CHECK-NEXT:    vpush {d8, d9, d10, d11}
539 ; CHECK-NEXT:    .pad #24
540 ; CHECK-NEXT:    sub sp, #24
541 ; CHECK-NEXT:    vmov q4, q0
542 ; CHECK-NEXT:    vldr d0, .LCPI11_0
543 ; CHECK-NEXT:    vmov q5, q1
544 ; CHECK-NEXT:    vmov r7, r9, d0
545 ; CHECK-NEXT:    vmov r4, r5, d10
546 ; CHECK-NEXT:    str.w r9, [sp, #4] @ 4-byte Spill
547 ; CHECK-NEXT:    mov r2, r7
548 ; CHECK-NEXT:    mov r3, r9
549 ; CHECK-NEXT:    mov r0, r4
550 ; CHECK-NEXT:    mov r1, r5
551 ; CHECK-NEXT:    bl __aeabi_dcmpgt
552 ; CHECK-NEXT:    vldr d0, .LCPI11_1
553 ; CHECK-NEXT:    mov r1, r5
554 ; CHECK-NEXT:    str r0, [sp, #12] @ 4-byte Spill
555 ; CHECK-NEXT:    mov r0, r4
556 ; CHECK-NEXT:    vmov r2, r3, d0
557 ; CHECK-NEXT:    strd r2, r3, [sp, #16] @ 8-byte Folded Spill
558 ; CHECK-NEXT:    bl __aeabi_dcmpge
559 ; CHECK-NEXT:    mov r6, r0
560 ; CHECK-NEXT:    mov r0, r4
561 ; CHECK-NEXT:    mov r1, r5
562 ; CHECK-NEXT:    bl __aeabi_d2ulz
563 ; CHECK-NEXT:    vmov r10, r8, d8
564 ; CHECK-NEXT:    cmp r6, #0
565 ; CHECK-NEXT:    ldr r1, [sp, #12] @ 4-byte Reload
566 ; CHECK-NEXT:    csel r0, r0, r6, ne
567 ; CHECK-NEXT:    mov r2, r7
568 ; CHECK-NEXT:    mov r3, r9
569 ; CHECK-NEXT:    cmp r1, #0
570 ; CHECK-NEXT:    it ne
571 ; CHECK-NEXT:    movne.w r0, #-1
572 ; CHECK-NEXT:    str r0, [sp, #12] @ 4-byte Spill
573 ; CHECK-NEXT:    vmov r11, r5, d11
574 ; CHECK-NEXT:    mov r4, r7
575 ; CHECK-NEXT:    str r7, [sp, #8] @ 4-byte Spill
576 ; CHECK-NEXT:    mov r0, r10
577 ; CHECK-NEXT:    mov r1, r8
578 ; CHECK-NEXT:    bl __aeabi_dcmpgt
579 ; CHECK-NEXT:    ldr r6, [sp, #16] @ 4-byte Reload
580 ; CHECK-NEXT:    mov r1, r8
581 ; CHECK-NEXT:    ldr r7, [sp, #20] @ 4-byte Reload
582 ; CHECK-NEXT:    str r0, [sp] @ 4-byte Spill
583 ; CHECK-NEXT:    mov r0, r10
584 ; CHECK-NEXT:    mov r2, r6
585 ; CHECK-NEXT:    mov r3, r7
586 ; CHECK-NEXT:    bl __aeabi_dcmpge
587 ; CHECK-NEXT:    mov r9, r0
588 ; CHECK-NEXT:    mov r0, r10
589 ; CHECK-NEXT:    mov r1, r8
590 ; CHECK-NEXT:    bl __aeabi_d2ulz
591 ; CHECK-NEXT:    cmp.w r9, #0
592 ; CHECK-NEXT:    mov r1, r5
593 ; CHECK-NEXT:    csel r8, r0, r9, ne
594 ; CHECK-NEXT:    ldr r0, [sp] @ 4-byte Reload
595 ; CHECK-NEXT:    mov r2, r4
596 ; CHECK-NEXT:    cmp r0, #0
597 ; CHECK-NEXT:    it ne
598 ; CHECK-NEXT:    movne.w r8, #-1
599 ; CHECK-NEXT:    ldr.w r10, [sp, #4] @ 4-byte Reload
600 ; CHECK-NEXT:    mov r0, r11
601 ; CHECK-NEXT:    mov r3, r10
602 ; CHECK-NEXT:    bl __aeabi_dcmpgt
603 ; CHECK-NEXT:    mov r9, r0
604 ; CHECK-NEXT:    mov r0, r11
605 ; CHECK-NEXT:    mov r1, r5
606 ; CHECK-NEXT:    mov r2, r6
607 ; CHECK-NEXT:    mov r3, r7
608 ; CHECK-NEXT:    bl __aeabi_dcmpge
609 ; CHECK-NEXT:    mov r7, r0
610 ; CHECK-NEXT:    mov r0, r11
611 ; CHECK-NEXT:    mov r1, r5
612 ; CHECK-NEXT:    bl __aeabi_d2ulz
613 ; CHECK-NEXT:    vmov r4, r5, d9
614 ; CHECK-NEXT:    cmp r7, #0
615 ; CHECK-NEXT:    csel r6, r0, r7, ne
616 ; CHECK-NEXT:    cmp.w r9, #0
617 ; CHECK-NEXT:    it ne
618 ; CHECK-NEXT:    movne.w r6, #-1
619 ; CHECK-NEXT:    ldr r2, [sp, #8] @ 4-byte Reload
620 ; CHECK-NEXT:    mov r3, r10
621 ; CHECK-NEXT:    mov r0, r4
622 ; CHECK-NEXT:    mov r1, r5
623 ; CHECK-NEXT:    bl __aeabi_dcmpgt
624 ; CHECK-NEXT:    ldrd r2, r3, [sp, #16] @ 8-byte Folded Reload
625 ; CHECK-NEXT:    mov r9, r0
626 ; CHECK-NEXT:    mov r0, r4
627 ; CHECK-NEXT:    mov r1, r5
628 ; CHECK-NEXT:    bl __aeabi_dcmpge
629 ; CHECK-NEXT:    mov r7, r0
630 ; CHECK-NEXT:    mov r0, r4
631 ; CHECK-NEXT:    mov r1, r5
632 ; CHECK-NEXT:    bl __aeabi_d2ulz
633 ; CHECK-NEXT:    cmp r7, #0
634 ; CHECK-NEXT:    csel r0, r0, r7, ne
635 ; CHECK-NEXT:    cmp.w r9, #0
636 ; CHECK-NEXT:    it ne
637 ; CHECK-NEXT:    movne.w r0, #-1
638 ; CHECK-NEXT:    ldr r1, [sp, #12] @ 4-byte Reload
639 ; CHECK-NEXT:    vmov q0[2], q0[0], r8, r1
640 ; CHECK-NEXT:    vmov q0[3], q0[1], r0, r6
641 ; CHECK-NEXT:    add sp, #24
642 ; CHECK-NEXT:    vpop {d8, d9, d10, d11}
643 ; CHECK-NEXT:    add sp, #4
644 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
645 ; CHECK-NEXT:    .p2align 3
646 ; CHECK-NEXT:  @ %bb.1:
647 ; CHECK-NEXT:  .LCPI11_0:
648 ; CHECK-NEXT:    .long 4292870144 @ double 4294967295
649 ; CHECK-NEXT:    .long 1106247679
650 ; CHECK-NEXT:  .LCPI11_1:
651 ; CHECK-NEXT:    .long 0 @ double 0
652 ; CHECK-NEXT:    .long 0
653     %x = call <4 x i32> @llvm.fptoui.sat.v4f64.v4i32(<4 x double> %f)
654     ret <4 x i32> %x
657 define arm_aapcs_vfpcc <5 x i32> @test_unsigned_v5f64_v5i32(<5 x double> %f) {
658 ; CHECK-LABEL: test_unsigned_v5f64_v5i32:
659 ; CHECK:       @ %bb.0:
660 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
661 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
662 ; CHECK-NEXT:    .pad #4
663 ; CHECK-NEXT:    sub sp, #4
664 ; CHECK-NEXT:    .vsave {d8, d9, d10, d11}
665 ; CHECK-NEXT:    vpush {d8, d9, d10, d11}
666 ; CHECK-NEXT:    .pad #40
667 ; CHECK-NEXT:    sub sp, #40
668 ; CHECK-NEXT:    vmov.f32 s16, s0
669 ; CHECK-NEXT:    mov r4, r0
670 ; CHECK-NEXT:    vmov.f32 s17, s1
671 ; CHECK-NEXT:    vldr d0, .LCPI12_0
672 ; CHECK-NEXT:    vmov r5, r6, d4
673 ; CHECK-NEXT:    str r0, [sp, #28] @ 4-byte Spill
674 ; CHECK-NEXT:    vmov r2, r3, d0
675 ; CHECK-NEXT:    vmov.f32 s20, s6
676 ; CHECK-NEXT:    vmov.f32 s18, s4
677 ; CHECK-NEXT:    vmov.f32 s22, s2
678 ; CHECK-NEXT:    vmov.f32 s21, s7
679 ; CHECK-NEXT:    vmov.f32 s19, s5
680 ; CHECK-NEXT:    vmov.f32 s23, s3
681 ; CHECK-NEXT:    mov r0, r5
682 ; CHECK-NEXT:    mov r1, r6
683 ; CHECK-NEXT:    strd r2, r3, [sp, #32] @ 8-byte Folded Spill
684 ; CHECK-NEXT:    bl __aeabi_dcmpgt
685 ; CHECK-NEXT:    vldr d0, .LCPI12_1
686 ; CHECK-NEXT:    mov r10, r0
687 ; CHECK-NEXT:    mov r0, r5
688 ; CHECK-NEXT:    mov r1, r6
689 ; CHECK-NEXT:    vmov r7, r3, d0
690 ; CHECK-NEXT:    str r3, [sp, #8] @ 4-byte Spill
691 ; CHECK-NEXT:    str r7, [sp, #4] @ 4-byte Spill
692 ; CHECK-NEXT:    mov r2, r7
693 ; CHECK-NEXT:    bl __aeabi_dcmpge
694 ; CHECK-NEXT:    mov r11, r0
695 ; CHECK-NEXT:    mov r0, r5
696 ; CHECK-NEXT:    mov r1, r6
697 ; CHECK-NEXT:    bl __aeabi_d2ulz
698 ; CHECK-NEXT:    vmov r8, r1, d11
699 ; CHECK-NEXT:    cmp.w r11, #0
700 ; CHECK-NEXT:    vmov r6, r9, d10
701 ; CHECK-NEXT:    csel r0, r0, r11, ne
702 ; CHECK-NEXT:    cmp.w r10, #0
703 ; CHECK-NEXT:    str r1, [sp, #12] @ 4-byte Spill
704 ; CHECK-NEXT:    vmov r2, r1, d9
705 ; CHECK-NEXT:    strd r2, r1, [sp, #16] @ 8-byte Folded Spill
706 ; CHECK-NEXT:    it ne
707 ; CHECK-NEXT:    movne.w r0, #-1
708 ; CHECK-NEXT:    str r0, [r4, #16]
709 ; CHECK-NEXT:    mov r0, r6
710 ; CHECK-NEXT:    ldr r5, [sp, #32] @ 4-byte Reload
711 ; CHECK-NEXT:    mov r1, r9
712 ; CHECK-NEXT:    ldr.w r10, [sp, #36] @ 4-byte Reload
713 ; CHECK-NEXT:    mov r2, r5
714 ; CHECK-NEXT:    mov r3, r10
715 ; CHECK-NEXT:    bl __aeabi_dcmpgt
716 ; CHECK-NEXT:    mov r2, r7
717 ; CHECK-NEXT:    ldr r7, [sp, #8] @ 4-byte Reload
718 ; CHECK-NEXT:    mov r11, r0
719 ; CHECK-NEXT:    mov r0, r6
720 ; CHECK-NEXT:    mov r1, r9
721 ; CHECK-NEXT:    mov r3, r7
722 ; CHECK-NEXT:    bl __aeabi_dcmpge
723 ; CHECK-NEXT:    mov r4, r0
724 ; CHECK-NEXT:    mov r0, r6
725 ; CHECK-NEXT:    mov r1, r9
726 ; CHECK-NEXT:    bl __aeabi_d2ulz
727 ; CHECK-NEXT:    cmp r4, #0
728 ; CHECK-NEXT:    mov r2, r5
729 ; CHECK-NEXT:    csel r0, r0, r4, ne
730 ; CHECK-NEXT:    cmp.w r11, #0
731 ; CHECK-NEXT:    it ne
732 ; CHECK-NEXT:    movne.w r0, #-1
733 ; CHECK-NEXT:    ldr r6, [sp, #12] @ 4-byte Reload
734 ; CHECK-NEXT:    str r0, [sp, #24] @ 4-byte Spill
735 ; CHECK-NEXT:    mov r0, r8
736 ; CHECK-NEXT:    mov r3, r10
737 ; CHECK-NEXT:    mov r11, r10
738 ; CHECK-NEXT:    mov r1, r6
739 ; CHECK-NEXT:    bl __aeabi_dcmpgt
740 ; CHECK-NEXT:    ldr.w r10, [sp, #4] @ 4-byte Reload
741 ; CHECK-NEXT:    mov r4, r0
742 ; CHECK-NEXT:    mov r0, r8
743 ; CHECK-NEXT:    mov r1, r6
744 ; CHECK-NEXT:    mov r3, r7
745 ; CHECK-NEXT:    mov r5, r6
746 ; CHECK-NEXT:    mov r2, r10
747 ; CHECK-NEXT:    mov r9, r7
748 ; CHECK-NEXT:    bl __aeabi_dcmpge
749 ; CHECK-NEXT:    mov r6, r0
750 ; CHECK-NEXT:    mov r0, r8
751 ; CHECK-NEXT:    mov r1, r5
752 ; CHECK-NEXT:    bl __aeabi_d2ulz
753 ; CHECK-NEXT:    cmp r6, #0
754 ; CHECK-NEXT:    mov r3, r11
755 ; CHECK-NEXT:    csel r0, r0, r6, ne
756 ; CHECK-NEXT:    cmp r4, #0
757 ; CHECK-NEXT:    it ne
758 ; CHECK-NEXT:    movne.w r0, #-1
759 ; CHECK-NEXT:    ldr r4, [sp, #20] @ 4-byte Reload
760 ; CHECK-NEXT:    ldr.w r8, [sp, #32] @ 4-byte Reload
761 ; CHECK-NEXT:    ldr r6, [sp, #16] @ 4-byte Reload
762 ; CHECK-NEXT:    str r0, [sp, #12] @ 4-byte Spill
763 ; CHECK-NEXT:    mov r1, r4
764 ; CHECK-NEXT:    mov r2, r8
765 ; CHECK-NEXT:    mov r0, r6
766 ; CHECK-NEXT:    bl __aeabi_dcmpgt
767 ; CHECK-NEXT:    mov r7, r0
768 ; CHECK-NEXT:    mov r0, r6
769 ; CHECK-NEXT:    mov r1, r4
770 ; CHECK-NEXT:    mov r2, r10
771 ; CHECK-NEXT:    mov r3, r9
772 ; CHECK-NEXT:    mov r11, r10
773 ; CHECK-NEXT:    bl __aeabi_dcmpge
774 ; CHECK-NEXT:    mov r5, r0
775 ; CHECK-NEXT:    mov r0, r6
776 ; CHECK-NEXT:    mov r1, r4
777 ; CHECK-NEXT:    bl __aeabi_d2ulz
778 ; CHECK-NEXT:    cmp r5, #0
779 ; CHECK-NEXT:    mov r2, r8
780 ; CHECK-NEXT:    csel r4, r0, r5, ne
781 ; CHECK-NEXT:    vmov r5, r6, d8
782 ; CHECK-NEXT:    cmp r7, #0
783 ; CHECK-NEXT:    it ne
784 ; CHECK-NEXT:    movne.w r4, #-1
785 ; CHECK-NEXT:    ldr r3, [sp, #36] @ 4-byte Reload
786 ; CHECK-NEXT:    mov r0, r5
787 ; CHECK-NEXT:    mov r1, r6
788 ; CHECK-NEXT:    bl __aeabi_dcmpgt
789 ; CHECK-NEXT:    mov r10, r0
790 ; CHECK-NEXT:    mov r0, r5
791 ; CHECK-NEXT:    mov r1, r6
792 ; CHECK-NEXT:    mov r2, r11
793 ; CHECK-NEXT:    mov r3, r9
794 ; CHECK-NEXT:    bl __aeabi_dcmpge
795 ; CHECK-NEXT:    mov r7, r0
796 ; CHECK-NEXT:    mov r0, r5
797 ; CHECK-NEXT:    mov r1, r6
798 ; CHECK-NEXT:    bl __aeabi_d2ulz
799 ; CHECK-NEXT:    cmp r7, #0
800 ; CHECK-NEXT:    csel r0, r0, r7, ne
801 ; CHECK-NEXT:    cmp.w r10, #0
802 ; CHECK-NEXT:    it ne
803 ; CHECK-NEXT:    movne.w r0, #-1
804 ; CHECK-NEXT:    vmov q0[2], q0[0], r0, r4
805 ; CHECK-NEXT:    ldr r0, [sp, #24] @ 4-byte Reload
806 ; CHECK-NEXT:    ldr r1, [sp, #12] @ 4-byte Reload
807 ; CHECK-NEXT:    vmov q0[3], q0[1], r1, r0
808 ; CHECK-NEXT:    ldr r0, [sp, #28] @ 4-byte Reload
809 ; CHECK-NEXT:    vstrw.32 q0, [r0]
810 ; CHECK-NEXT:    add sp, #40
811 ; CHECK-NEXT:    vpop {d8, d9, d10, d11}
812 ; CHECK-NEXT:    add sp, #4
813 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
814 ; CHECK-NEXT:    .p2align 3
815 ; CHECK-NEXT:  @ %bb.1:
816 ; CHECK-NEXT:  .LCPI12_0:
817 ; CHECK-NEXT:    .long 4292870144 @ double 4294967295
818 ; CHECK-NEXT:    .long 1106247679
819 ; CHECK-NEXT:  .LCPI12_1:
820 ; CHECK-NEXT:    .long 0 @ double 0
821 ; CHECK-NEXT:    .long 0
822     %x = call <5 x i32> @llvm.fptoui.sat.v5f64.v5i32(<5 x double> %f)
823     ret <5 x i32> %x
826 define arm_aapcs_vfpcc <6 x i32> @test_unsigned_v6f64_v6i32(<6 x double> %f) {
827 ; CHECK-LABEL: test_unsigned_v6f64_v6i32:
828 ; CHECK:       @ %bb.0:
829 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
830 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
831 ; CHECK-NEXT:    .pad #4
832 ; CHECK-NEXT:    sub sp, #4
833 ; CHECK-NEXT:    .vsave {d8, d9, d10, d11, d12}
834 ; CHECK-NEXT:    vpush {d8, d9, d10, d11, d12}
835 ; CHECK-NEXT:    .pad #40
836 ; CHECK-NEXT:    sub sp, #40
837 ; CHECK-NEXT:    vmov.f32 s16, s0
838 ; CHECK-NEXT:    str r0, [sp, #32] @ 4-byte Spill
839 ; CHECK-NEXT:    vmov.f32 s17, s1
840 ; CHECK-NEXT:    vldr d0, .LCPI13_0
841 ; CHECK-NEXT:    vmov r5, r6, d5
842 ; CHECK-NEXT:    vmov r11, r3, d0
843 ; CHECK-NEXT:    vmov.f32 s22, s8
844 ; CHECK-NEXT:    vmov.f32 s20, s6
845 ; CHECK-NEXT:    vmov.f32 s18, s4
846 ; CHECK-NEXT:    vmov.f32 s24, s2
847 ; CHECK-NEXT:    vmov.f32 s23, s9
848 ; CHECK-NEXT:    vmov.f32 s21, s7
849 ; CHECK-NEXT:    vmov.f32 s19, s5
850 ; CHECK-NEXT:    vmov.f32 s25, s3
851 ; CHECK-NEXT:    str r3, [sp, #36] @ 4-byte Spill
852 ; CHECK-NEXT:    mov r0, r5
853 ; CHECK-NEXT:    mov r1, r6
854 ; CHECK-NEXT:    mov r2, r11
855 ; CHECK-NEXT:    str.w r11, [sp, #28] @ 4-byte Spill
856 ; CHECK-NEXT:    bl __aeabi_dcmpgt
857 ; CHECK-NEXT:    vldr d0, .LCPI13_1
858 ; CHECK-NEXT:    mov r7, r0
859 ; CHECK-NEXT:    mov r0, r5
860 ; CHECK-NEXT:    mov r1, r6
861 ; CHECK-NEXT:    vmov r4, r9, d0
862 ; CHECK-NEXT:    str r4, [sp, #24] @ 4-byte Spill
863 ; CHECK-NEXT:    mov r2, r4
864 ; CHECK-NEXT:    mov r3, r9
865 ; CHECK-NEXT:    bl __aeabi_dcmpge
866 ; CHECK-NEXT:    mov r8, r0
867 ; CHECK-NEXT:    mov r0, r5
868 ; CHECK-NEXT:    mov r1, r6
869 ; CHECK-NEXT:    bl __aeabi_d2ulz
870 ; CHECK-NEXT:    vmov r10, r1, d10
871 ; CHECK-NEXT:    cmp.w r8, #0
872 ; CHECK-NEXT:    vmov r5, r6, d11
873 ; CHECK-NEXT:    csel r0, r0, r8, ne
874 ; CHECK-NEXT:    cmp r7, #0
875 ; CHECK-NEXT:    str r1, [sp, #20] @ 4-byte Spill
876 ; CHECK-NEXT:    vmov r2, r1, d12
877 ; CHECK-NEXT:    strd r2, r1, [sp, #12] @ 8-byte Folded Spill
878 ; CHECK-NEXT:    it ne
879 ; CHECK-NEXT:    movne.w r0, #-1
880 ; CHECK-NEXT:    ldr r7, [sp, #32] @ 4-byte Reload
881 ; CHECK-NEXT:    mov r1, r6
882 ; CHECK-NEXT:    mov r2, r11
883 ; CHECK-NEXT:    str r0, [r7, #20]
884 ; CHECK-NEXT:    mov r0, r5
885 ; CHECK-NEXT:    ldr.w r8, [sp, #36] @ 4-byte Reload
886 ; CHECK-NEXT:    mov r3, r8
887 ; CHECK-NEXT:    bl __aeabi_dcmpgt
888 ; CHECK-NEXT:    mov r11, r0
889 ; CHECK-NEXT:    mov r0, r5
890 ; CHECK-NEXT:    mov r1, r6
891 ; CHECK-NEXT:    mov r2, r4
892 ; CHECK-NEXT:    mov r3, r9
893 ; CHECK-NEXT:    bl __aeabi_dcmpge
894 ; CHECK-NEXT:    mov r4, r0
895 ; CHECK-NEXT:    mov r0, r5
896 ; CHECK-NEXT:    mov r1, r6
897 ; CHECK-NEXT:    bl __aeabi_d2ulz
898 ; CHECK-NEXT:    vmov r2, r1, d9
899 ; CHECK-NEXT:    cmp r4, #0
900 ; CHECK-NEXT:    csel r0, r0, r4, ne
901 ; CHECK-NEXT:    cmp.w r11, #0
902 ; CHECK-NEXT:    mov r3, r8
903 ; CHECK-NEXT:    strd r2, r1, [sp, #4] @ 8-byte Folded Spill
904 ; CHECK-NEXT:    it ne
905 ; CHECK-NEXT:    movne.w r0, #-1
906 ; CHECK-NEXT:    str r0, [r7, #16]
907 ; CHECK-NEXT:    mov r0, r10
908 ; CHECK-NEXT:    ldr r6, [sp, #20] @ 4-byte Reload
909 ; CHECK-NEXT:    ldr.w r11, [sp, #28] @ 4-byte Reload
910 ; CHECK-NEXT:    mov r1, r6
911 ; CHECK-NEXT:    mov r2, r11
912 ; CHECK-NEXT:    bl __aeabi_dcmpgt
913 ; CHECK-NEXT:    ldr r5, [sp, #24] @ 4-byte Reload
914 ; CHECK-NEXT:    mov r4, r0
915 ; CHECK-NEXT:    mov r0, r10
916 ; CHECK-NEXT:    mov r1, r6
917 ; CHECK-NEXT:    mov r3, r9
918 ; CHECK-NEXT:    mov r8, r9
919 ; CHECK-NEXT:    mov r2, r5
920 ; CHECK-NEXT:    bl __aeabi_dcmpge
921 ; CHECK-NEXT:    mov r7, r0
922 ; CHECK-NEXT:    mov r0, r10
923 ; CHECK-NEXT:    mov r1, r6
924 ; CHECK-NEXT:    bl __aeabi_d2ulz
925 ; CHECK-NEXT:    cmp r7, #0
926 ; CHECK-NEXT:    mov r2, r11
927 ; CHECK-NEXT:    csel r0, r0, r7, ne
928 ; CHECK-NEXT:    cmp r4, #0
929 ; CHECK-NEXT:    it ne
930 ; CHECK-NEXT:    movne.w r0, #-1
931 ; CHECK-NEXT:    ldr r7, [sp, #16] @ 4-byte Reload
932 ; CHECK-NEXT:    ldr r4, [sp, #36] @ 4-byte Reload
933 ; CHECK-NEXT:    ldr.w r9, [sp, #12] @ 4-byte Reload
934 ; CHECK-NEXT:    str r0, [sp, #20] @ 4-byte Spill
935 ; CHECK-NEXT:    mov r1, r7
936 ; CHECK-NEXT:    mov r3, r4
937 ; CHECK-NEXT:    mov r0, r9
938 ; CHECK-NEXT:    bl __aeabi_dcmpgt
939 ; CHECK-NEXT:    str r0, [sp] @ 4-byte Spill
940 ; CHECK-NEXT:    mov r0, r9
941 ; CHECK-NEXT:    mov r1, r7
942 ; CHECK-NEXT:    mov r2, r5
943 ; CHECK-NEXT:    mov r3, r8
944 ; CHECK-NEXT:    mov r6, r7
945 ; CHECK-NEXT:    mov r10, r5
946 ; CHECK-NEXT:    bl __aeabi_dcmpge
947 ; CHECK-NEXT:    mov r7, r0
948 ; CHECK-NEXT:    mov r0, r9
949 ; CHECK-NEXT:    mov r1, r6
950 ; CHECK-NEXT:    bl __aeabi_d2ulz
951 ; CHECK-NEXT:    cmp r7, #0
952 ; CHECK-NEXT:    mov r2, r11
953 ; CHECK-NEXT:    csel r9, r0, r7, ne
954 ; CHECK-NEXT:    ldr r0, [sp] @ 4-byte Reload
955 ; CHECK-NEXT:    mov r3, r4
956 ; CHECK-NEXT:    cmp r0, #0
957 ; CHECK-NEXT:    it ne
958 ; CHECK-NEXT:    movne.w r9, #-1
959 ; CHECK-NEXT:    ldr r6, [sp, #4] @ 4-byte Reload
960 ; CHECK-NEXT:    ldr r5, [sp, #8] @ 4-byte Reload
961 ; CHECK-NEXT:    mov r0, r6
962 ; CHECK-NEXT:    mov r1, r5
963 ; CHECK-NEXT:    bl __aeabi_dcmpgt
964 ; CHECK-NEXT:    mov r11, r0
965 ; CHECK-NEXT:    mov r0, r6
966 ; CHECK-NEXT:    mov r1, r5
967 ; CHECK-NEXT:    mov r2, r10
968 ; CHECK-NEXT:    mov r3, r8
969 ; CHECK-NEXT:    bl __aeabi_dcmpge
970 ; CHECK-NEXT:    mov r7, r0
971 ; CHECK-NEXT:    mov r0, r6
972 ; CHECK-NEXT:    mov r1, r5
973 ; CHECK-NEXT:    bl __aeabi_d2ulz
974 ; CHECK-NEXT:    vmov r5, r6, d8
975 ; CHECK-NEXT:    cmp r7, #0
976 ; CHECK-NEXT:    csel r4, r0, r7, ne
977 ; CHECK-NEXT:    cmp.w r11, #0
978 ; CHECK-NEXT:    it ne
979 ; CHECK-NEXT:    movne.w r4, #-1
980 ; CHECK-NEXT:    ldr r2, [sp, #28] @ 4-byte Reload
981 ; CHECK-NEXT:    ldr r3, [sp, #36] @ 4-byte Reload
982 ; CHECK-NEXT:    mov r0, r5
983 ; CHECK-NEXT:    mov r1, r6
984 ; CHECK-NEXT:    bl __aeabi_dcmpgt
985 ; CHECK-NEXT:    ldr r2, [sp, #24] @ 4-byte Reload
986 ; CHECK-NEXT:    mov r10, r0
987 ; CHECK-NEXT:    mov r0, r5
988 ; CHECK-NEXT:    mov r1, r6
989 ; CHECK-NEXT:    mov r3, r8
990 ; CHECK-NEXT:    bl __aeabi_dcmpge
991 ; CHECK-NEXT:    mov r7, r0
992 ; CHECK-NEXT:    mov r0, r5
993 ; CHECK-NEXT:    mov r1, r6
994 ; CHECK-NEXT:    bl __aeabi_d2ulz
995 ; CHECK-NEXT:    cmp r7, #0
996 ; CHECK-NEXT:    csel r0, r0, r7, ne
997 ; CHECK-NEXT:    cmp.w r10, #0
998 ; CHECK-NEXT:    it ne
999 ; CHECK-NEXT:    movne.w r0, #-1
1000 ; CHECK-NEXT:    vmov q0[2], q0[0], r0, r4
1001 ; CHECK-NEXT:    ldr r0, [sp, #20] @ 4-byte Reload
1002 ; CHECK-NEXT:    vmov q0[3], q0[1], r9, r0
1003 ; CHECK-NEXT:    ldr r0, [sp, #32] @ 4-byte Reload
1004 ; CHECK-NEXT:    vstrw.32 q0, [r0]
1005 ; CHECK-NEXT:    add sp, #40
1006 ; CHECK-NEXT:    vpop {d8, d9, d10, d11, d12}
1007 ; CHECK-NEXT:    add sp, #4
1008 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
1009 ; CHECK-NEXT:    .p2align 3
1010 ; CHECK-NEXT:  @ %bb.1:
1011 ; CHECK-NEXT:  .LCPI13_0:
1012 ; CHECK-NEXT:    .long 4292870144 @ double 4294967295
1013 ; CHECK-NEXT:    .long 1106247679
1014 ; CHECK-NEXT:  .LCPI13_1:
1015 ; CHECK-NEXT:    .long 0 @ double 0
1016 ; CHECK-NEXT:    .long 0
1017     %x = call <6 x i32> @llvm.fptoui.sat.v6f64.v6i32(<6 x double> %f)
1018     ret <6 x i32> %x
1022 ; FP16 to signed 32-bit -- Vector size variation
1025 declare <1 x i32> @llvm.fptoui.sat.v1f16.v1i32 (<1 x half>)
1026 declare <2 x i32> @llvm.fptoui.sat.v2f16.v2i32 (<2 x half>)
1027 declare <3 x i32> @llvm.fptoui.sat.v3f16.v3i32 (<3 x half>)
1028 declare <4 x i32> @llvm.fptoui.sat.v4f16.v4i32 (<4 x half>)
1029 declare <5 x i32> @llvm.fptoui.sat.v5f16.v5i32 (<5 x half>)
1030 declare <6 x i32> @llvm.fptoui.sat.v6f16.v6i32 (<6 x half>)
1031 declare <7 x i32> @llvm.fptoui.sat.v7f16.v7i32 (<7 x half>)
1032 declare <8 x i32> @llvm.fptoui.sat.v8f16.v8i32 (<8 x half>)
1034 define arm_aapcs_vfpcc <1 x i32> @test_unsigned_v1f16_v1i32(<1 x half> %f) {
1035 ; CHECK-LABEL: test_unsigned_v1f16_v1i32:
1036 ; CHECK:       @ %bb.0:
1037 ; CHECK-NEXT:    vcvt.u32.f16 s0, s0
1038 ; CHECK-NEXT:    vmov r0, s0
1039 ; CHECK-NEXT:    bx lr
1040     %x = call <1 x i32> @llvm.fptoui.sat.v1f16.v1i32(<1 x half> %f)
1041     ret <1 x i32> %x
1044 define arm_aapcs_vfpcc <2 x i32> @test_unsigned_v2f16_v2i32(<2 x half> %f) {
1045 ; CHECK-LABEL: test_unsigned_v2f16_v2i32:
1046 ; CHECK:       @ %bb.0:
1047 ; CHECK-NEXT:    .save {r4, r5, r7, lr}
1048 ; CHECK-NEXT:    push {r4, r5, r7, lr}
1049 ; CHECK-NEXT:    .vsave {d8, d9, d10}
1050 ; CHECK-NEXT:    vpush {d8, d9, d10}
1051 ; CHECK-NEXT:    vmov q4, q0
1052 ; CHECK-NEXT:    vcvtt.f32.f16 s18, s16
1053 ; CHECK-NEXT:    vmov r0, s18
1054 ; CHECK-NEXT:    bl __aeabi_f2ulz
1055 ; CHECK-NEXT:    vcvtb.f32.f16 s16, s16
1056 ; CHECK-NEXT:    mov r5, r0
1057 ; CHECK-NEXT:    vmov r0, s16
1058 ; CHECK-NEXT:    vldr s20, .LCPI15_0
1059 ; CHECK-NEXT:    vcmp.f32 s18, #0
1060 ; CHECK-NEXT:    mov r4, r1
1061 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1062 ; CHECK-NEXT:    it lt
1063 ; CHECK-NEXT:    movlt r5, #0
1064 ; CHECK-NEXT:    vcmp.f32 s18, s20
1065 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1066 ; CHECK-NEXT:    it gt
1067 ; CHECK-NEXT:    movgt.w r5, #-1
1068 ; CHECK-NEXT:    bl __aeabi_f2ulz
1069 ; CHECK-NEXT:    vcmp.f32 s16, #0
1070 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1071 ; CHECK-NEXT:    vcmp.f32 s16, s20
1072 ; CHECK-NEXT:    it lt
1073 ; CHECK-NEXT:    movlt r0, #0
1074 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1075 ; CHECK-NEXT:    vcmp.f32 s18, #0
1076 ; CHECK-NEXT:    it gt
1077 ; CHECK-NEXT:    movgt.w r0, #-1
1078 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1079 ; CHECK-NEXT:    vcmp.f32 s18, s20
1080 ; CHECK-NEXT:    it lt
1081 ; CHECK-NEXT:    movlt r4, #0
1082 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1083 ; CHECK-NEXT:    vcmp.f32 s16, #0
1084 ; CHECK-NEXT:    it gt
1085 ; CHECK-NEXT:    movgt r4, #0
1086 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1087 ; CHECK-NEXT:    it lt
1088 ; CHECK-NEXT:    movlt r1, #0
1089 ; CHECK-NEXT:    vcmp.f32 s16, s20
1090 ; CHECK-NEXT:    vmov q0[2], q0[0], r0, r5
1091 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1092 ; CHECK-NEXT:    it gt
1093 ; CHECK-NEXT:    movgt r1, #0
1094 ; CHECK-NEXT:    vmov q0[3], q0[1], r1, r4
1095 ; CHECK-NEXT:    vpop {d8, d9, d10}
1096 ; CHECK-NEXT:    pop {r4, r5, r7, pc}
1097 ; CHECK-NEXT:    .p2align 2
1098 ; CHECK-NEXT:  @ %bb.1:
1099 ; CHECK-NEXT:  .LCPI15_0:
1100 ; CHECK-NEXT:    .long 0x4f7fffff @ float 4.29496704E+9
1101     %x = call <2 x i32> @llvm.fptoui.sat.v2f16.v2i32(<2 x half> %f)
1102     ret <2 x i32> %x
1105 define arm_aapcs_vfpcc <3 x i32> @test_unsigned_v3f16_v3i32(<3 x half> %f) {
1106 ; CHECK-LABEL: test_unsigned_v3f16_v3i32:
1107 ; CHECK:       @ %bb.0:
1108 ; CHECK-NEXT:    vcvt.u32.f16 s6, s0
1109 ; CHECK-NEXT:    vcvt.u32.f16 s0, s1
1110 ; CHECK-NEXT:    vcvt.u32.f16 s4, s2
1111 ; CHECK-NEXT:    vmov r0, s0
1112 ; CHECK-NEXT:    vmov.32 q0[1], r0
1113 ; CHECK-NEXT:    vmov r0, s4
1114 ; CHECK-NEXT:    vmov r1, s6
1115 ; CHECK-NEXT:    vmov q0[2], q0[0], r1, r0
1116 ; CHECK-NEXT:    bx lr
1117     %x = call <3 x i32> @llvm.fptoui.sat.v3f16.v3i32(<3 x half> %f)
1118     ret <3 x i32> %x
1121 define arm_aapcs_vfpcc <4 x i32> @test_unsigned_v4f16_v4i32(<4 x half> %f) {
1122 ; CHECK-LABEL: test_unsigned_v4f16_v4i32:
1123 ; CHECK:       @ %bb.0:
1124 ; CHECK-NEXT:    vmovx.f16 s2, s1
1125 ; CHECK-NEXT:    vcvt.u32.f16 s4, s2
1126 ; CHECK-NEXT:    vmovx.f16 s2, s0
1127 ; CHECK-NEXT:    vcvt.u32.f16 s6, s2
1128 ; CHECK-NEXT:    vcvt.u32.f16 s2, s1
1129 ; CHECK-NEXT:    vcvt.u32.f16 s0, s0
1130 ; CHECK-NEXT:    vmov r0, s2
1131 ; CHECK-NEXT:    vmov r1, s0
1132 ; CHECK-NEXT:    vmov q0[2], q0[0], r1, r0
1133 ; CHECK-NEXT:    vmov r0, s4
1134 ; CHECK-NEXT:    vmov r1, s6
1135 ; CHECK-NEXT:    vmov q0[3], q0[1], r1, r0
1136 ; CHECK-NEXT:    bx lr
1137     %x = call <4 x i32> @llvm.fptoui.sat.v4f16.v4i32(<4 x half> %f)
1138     ret <4 x i32> %x
1141 define arm_aapcs_vfpcc <5 x i32> @test_unsigned_v5f16_v5i32(<5 x half> %f) {
1142 ; CHECK-LABEL: test_unsigned_v5f16_v5i32:
1143 ; CHECK:       @ %bb.0:
1144 ; CHECK-NEXT:    vmovx.f16 s6, s0
1145 ; CHECK-NEXT:    vmovx.f16 s4, s1
1146 ; CHECK-NEXT:    vcvt.u32.f16 s8, s1
1147 ; CHECK-NEXT:    vcvt.u32.f16 s0, s0
1148 ; CHECK-NEXT:    vcvt.u32.f16 s4, s4
1149 ; CHECK-NEXT:    vcvt.u32.f16 s6, s6
1150 ; CHECK-NEXT:    vmov r1, s8
1151 ; CHECK-NEXT:    vcvt.u32.f16 s2, s2
1152 ; CHECK-NEXT:    vmov r2, s0
1153 ; CHECK-NEXT:    vmov q2[2], q2[0], r2, r1
1154 ; CHECK-NEXT:    vmov r1, s4
1155 ; CHECK-NEXT:    vmov r2, s6
1156 ; CHECK-NEXT:    vmov q2[3], q2[1], r2, r1
1157 ; CHECK-NEXT:    vmov r1, s2
1158 ; CHECK-NEXT:    str r1, [r0, #16]
1159 ; CHECK-NEXT:    vstrw.32 q2, [r0]
1160 ; CHECK-NEXT:    bx lr
1161     %x = call <5 x i32> @llvm.fptoui.sat.v5f16.v5i32(<5 x half> %f)
1162     ret <5 x i32> %x
1165 define arm_aapcs_vfpcc <6 x i32> @test_unsigned_v6f16_v6i32(<6 x half> %f) {
1166 ; CHECK-LABEL: test_unsigned_v6f16_v6i32:
1167 ; CHECK:       @ %bb.0:
1168 ; CHECK-NEXT:    vmovx.f16 s8, s0
1169 ; CHECK-NEXT:    vmovx.f16 s6, s1
1170 ; CHECK-NEXT:    vcvt.u32.f16 s10, s1
1171 ; CHECK-NEXT:    vcvt.u32.f16 s0, s0
1172 ; CHECK-NEXT:    vcvt.u32.f16 s4, s2
1173 ; CHECK-NEXT:    vmovx.f16 s2, s2
1174 ; CHECK-NEXT:    vcvt.u32.f16 s6, s6
1175 ; CHECK-NEXT:    vcvt.u32.f16 s8, s8
1176 ; CHECK-NEXT:    vmov r1, s10
1177 ; CHECK-NEXT:    vcvt.u32.f16 s2, s2
1178 ; CHECK-NEXT:    vmov r2, s0
1179 ; CHECK-NEXT:    vmov q3[2], q3[0], r2, r1
1180 ; CHECK-NEXT:    vmov r1, s6
1181 ; CHECK-NEXT:    vmov r2, s8
1182 ; CHECK-NEXT:    vmov q3[3], q3[1], r2, r1
1183 ; CHECK-NEXT:    vmov r1, s2
1184 ; CHECK-NEXT:    vmov r2, s4
1185 ; CHECK-NEXT:    strd r2, r1, [r0, #16]
1186 ; CHECK-NEXT:    vstrw.32 q3, [r0]
1187 ; CHECK-NEXT:    bx lr
1188     %x = call <6 x i32> @llvm.fptoui.sat.v6f16.v6i32(<6 x half> %f)
1189     ret <6 x i32> %x
1192 define arm_aapcs_vfpcc <7 x i32> @test_unsigned_v7f16_v7i32(<7 x half> %f) {
1193 ; CHECK-LABEL: test_unsigned_v7f16_v7i32:
1194 ; CHECK:       @ %bb.0:
1195 ; CHECK-NEXT:    vmovx.f16 s10, s0
1196 ; CHECK-NEXT:    vmovx.f16 s8, s1
1197 ; CHECK-NEXT:    vcvt.u32.f16 s12, s1
1198 ; CHECK-NEXT:    vcvt.u32.f16 s0, s0
1199 ; CHECK-NEXT:    vcvt.u32.f16 s4, s2
1200 ; CHECK-NEXT:    vmovx.f16 s2, s2
1201 ; CHECK-NEXT:    vcvt.u32.f16 s8, s8
1202 ; CHECK-NEXT:    vcvt.u32.f16 s10, s10
1203 ; CHECK-NEXT:    vmov r1, s12
1204 ; CHECK-NEXT:    vcvt.u32.f16 s2, s2
1205 ; CHECK-NEXT:    vmov r2, s0
1206 ; CHECK-NEXT:    vcvt.u32.f16 s6, s3
1207 ; CHECK-NEXT:    vmov q3[2], q3[0], r2, r1
1208 ; CHECK-NEXT:    vmov r1, s8
1209 ; CHECK-NEXT:    vmov r2, s10
1210 ; CHECK-NEXT:    vmov q3[3], q3[1], r2, r1
1211 ; CHECK-NEXT:    vmov r1, s2
1212 ; CHECK-NEXT:    vmov r2, s4
1213 ; CHECK-NEXT:    vmov r3, s6
1214 ; CHECK-NEXT:    strd r2, r1, [r0, #16]
1215 ; CHECK-NEXT:    str r3, [r0, #24]
1216 ; CHECK-NEXT:    vstrw.32 q3, [r0]
1217 ; CHECK-NEXT:    bx lr
1218     %x = call <7 x i32> @llvm.fptoui.sat.v7f16.v7i32(<7 x half> %f)
1219     ret <7 x i32> %x
1222 define arm_aapcs_vfpcc <8 x i32> @test_unsigned_v8f16_v8i32(<8 x half> %f) {
1223 ; CHECK-LABEL: test_unsigned_v8f16_v8i32:
1224 ; CHECK:       @ %bb.0:
1225 ; CHECK-NEXT:    vmovx.f16 s4, s3
1226 ; CHECK-NEXT:    vmovx.f16 s6, s0
1227 ; CHECK-NEXT:    vcvt.u32.f16 s8, s4
1228 ; CHECK-NEXT:    vmovx.f16 s4, s2
1229 ; CHECK-NEXT:    vcvt.u32.f16 s10, s4
1230 ; CHECK-NEXT:    vmovx.f16 s4, s1
1231 ; CHECK-NEXT:    vcvt.u32.f16 s14, s2
1232 ; CHECK-NEXT:    vcvt.u32.f16 s2, s1
1233 ; CHECK-NEXT:    vcvt.u32.f16 s0, s0
1234 ; CHECK-NEXT:    vcvt.u32.f16 s4, s4
1235 ; CHECK-NEXT:    vcvt.u32.f16 s6, s6
1236 ; CHECK-NEXT:    vmov r0, s2
1237 ; CHECK-NEXT:    vmov r1, s0
1238 ; CHECK-NEXT:    vcvt.u32.f16 s12, s3
1239 ; CHECK-NEXT:    vmov q0[2], q0[0], r1, r0
1240 ; CHECK-NEXT:    vmov r0, s4
1241 ; CHECK-NEXT:    vmov r1, s6
1242 ; CHECK-NEXT:    vmov q0[3], q0[1], r1, r0
1243 ; CHECK-NEXT:    vmov r0, s12
1244 ; CHECK-NEXT:    vmov r1, s14
1245 ; CHECK-NEXT:    vmov q1[2], q1[0], r1, r0
1246 ; CHECK-NEXT:    vmov r0, s8
1247 ; CHECK-NEXT:    vmov r1, s10
1248 ; CHECK-NEXT:    vmov q1[3], q1[1], r1, r0
1249 ; CHECK-NEXT:    bx lr
1250     %x = call <8 x i32> @llvm.fptoui.sat.v8f16.v8i32(<8 x half> %f)
1251     ret <8 x i32> %x
1255 ; 2-Vector float to signed integer -- result size variation
1258 declare <4 x   i1> @llvm.fptoui.sat.v4f32.v4i1  (<4 x float>)
1259 declare <4 x   i8> @llvm.fptoui.sat.v4f32.v4i8  (<4 x float>)
1260 declare <4 x  i13> @llvm.fptoui.sat.v4f32.v4i13 (<4 x float>)
1261 declare <4 x  i16> @llvm.fptoui.sat.v4f32.v4i16 (<4 x float>)
1262 declare <4 x  i19> @llvm.fptoui.sat.v4f32.v4i19 (<4 x float>)
1263 declare <4 x  i50> @llvm.fptoui.sat.v4f32.v4i50 (<4 x float>)
1264 declare <4 x  i64> @llvm.fptoui.sat.v4f32.v4i64 (<4 x float>)
1265 declare <4 x i100> @llvm.fptoui.sat.v4f32.v4i100(<4 x float>)
1266 declare <4 x i128> @llvm.fptoui.sat.v4f32.v4i128(<4 x float>)
1268 define arm_aapcs_vfpcc <4 x i1> @test_unsigned_v4f32_v4i1(<4 x float> %f) {
1269 ; CHECK-LABEL: test_unsigned_v4f32_v4i1:
1270 ; CHECK:       @ %bb.0:
1271 ; CHECK-NEXT:    vldr s4, .LCPI22_0
1272 ; CHECK-NEXT:    vmov.f32 s6, #1.000000e+00
1273 ; CHECK-NEXT:    movs r1, #0
1274 ; CHECK-NEXT:    vmaxnm.f32 s0, s0, s4
1275 ; CHECK-NEXT:    vmaxnm.f32 s8, s3, s4
1276 ; CHECK-NEXT:    vminnm.f32 s0, s0, s6
1277 ; CHECK-NEXT:    vmaxnm.f32 s2, s2, s4
1278 ; CHECK-NEXT:    vcvt.u32.f32 s0, s0
1279 ; CHECK-NEXT:    vmaxnm.f32 s4, s1, s4
1280 ; CHECK-NEXT:    vminnm.f32 s4, s4, s6
1281 ; CHECK-NEXT:    vminnm.f32 s2, s2, s6
1282 ; CHECK-NEXT:    vcvt.u32.f32 s4, s4
1283 ; CHECK-NEXT:    vminnm.f32 s8, s8, s6
1284 ; CHECK-NEXT:    vcvt.u32.f32 s2, s2
1285 ; CHECK-NEXT:    vcvt.u32.f32 s8, s8
1286 ; CHECK-NEXT:    vmov r2, s0
1287 ; CHECK-NEXT:    and r2, r2, #1
1288 ; CHECK-NEXT:    rsbs r2, r2, #0
1289 ; CHECK-NEXT:    bfi r1, r2, #0, #1
1290 ; CHECK-NEXT:    vmov r2, s4
1291 ; CHECK-NEXT:    and r2, r2, #1
1292 ; CHECK-NEXT:    rsbs r2, r2, #0
1293 ; CHECK-NEXT:    bfi r1, r2, #1, #1
1294 ; CHECK-NEXT:    vmov r2, s2
1295 ; CHECK-NEXT:    and r2, r2, #1
1296 ; CHECK-NEXT:    rsbs r2, r2, #0
1297 ; CHECK-NEXT:    bfi r1, r2, #2, #1
1298 ; CHECK-NEXT:    vmov r2, s8
1299 ; CHECK-NEXT:    and r2, r2, #1
1300 ; CHECK-NEXT:    rsbs r2, r2, #0
1301 ; CHECK-NEXT:    bfi r1, r2, #3, #1
1302 ; CHECK-NEXT:    strb r1, [r0]
1303 ; CHECK-NEXT:    bx lr
1304 ; CHECK-NEXT:    .p2align 2
1305 ; CHECK-NEXT:  @ %bb.1:
1306 ; CHECK-NEXT:  .LCPI22_0:
1307 ; CHECK-NEXT:    .long 0x00000000 @ float 0
1308     %x = call <4 x i1> @llvm.fptoui.sat.v4f32.v4i1(<4 x float> %f)
1309     ret <4 x i1> %x
1312 define arm_aapcs_vfpcc <4 x i8> @test_unsigned_v4f32_v4i8(<4 x float> %f) {
1313 ; CHECK-MVE-LABEL: test_unsigned_v4f32_v4i8:
1314 ; CHECK-MVE:       @ %bb.0:
1315 ; CHECK-MVE-NEXT:    vldr s4, .LCPI23_0
1316 ; CHECK-MVE-NEXT:    vldr s6, .LCPI23_1
1317 ; CHECK-MVE-NEXT:    vmaxnm.f32 s2, s2, s4
1318 ; CHECK-MVE-NEXT:    vmaxnm.f32 s0, s0, s4
1319 ; CHECK-MVE-NEXT:    vmaxnm.f32 s8, s3, s4
1320 ; CHECK-MVE-NEXT:    vminnm.f32 s2, s2, s6
1321 ; CHECK-MVE-NEXT:    vminnm.f32 s0, s0, s6
1322 ; CHECK-MVE-NEXT:    vmaxnm.f32 s4, s1, s4
1323 ; CHECK-MVE-NEXT:    vminnm.f32 s8, s8, s6
1324 ; CHECK-MVE-NEXT:    vminnm.f32 s4, s4, s6
1325 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s2, s2
1326 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s0, s0
1327 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s8, s8
1328 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s4, s4
1329 ; CHECK-MVE-NEXT:    vmov r0, s2
1330 ; CHECK-MVE-NEXT:    vmov r1, s0
1331 ; CHECK-MVE-NEXT:    vmov q0[2], q0[0], r1, r0
1332 ; CHECK-MVE-NEXT:    vmov r0, s8
1333 ; CHECK-MVE-NEXT:    vmov r1, s4
1334 ; CHECK-MVE-NEXT:    vmov q0[3], q0[1], r1, r0
1335 ; CHECK-MVE-NEXT:    bx lr
1336 ; CHECK-MVE-NEXT:    .p2align 2
1337 ; CHECK-MVE-NEXT:  @ %bb.1:
1338 ; CHECK-MVE-NEXT:  .LCPI23_0:
1339 ; CHECK-MVE-NEXT:    .long 0x00000000 @ float 0
1340 ; CHECK-MVE-NEXT:  .LCPI23_1:
1341 ; CHECK-MVE-NEXT:    .long 0x437f0000 @ float 255
1343 ; CHECK-MVEFP-LABEL: test_unsigned_v4f32_v4i8:
1344 ; CHECK-MVEFP:       @ %bb.0:
1345 ; CHECK-MVEFP-NEXT:    vmov.i32 q1, #0xff
1346 ; CHECK-MVEFP-NEXT:    vcvt.u32.f32 q0, q0
1347 ; CHECK-MVEFP-NEXT:    vmin.u32 q0, q0, q1
1348 ; CHECK-MVEFP-NEXT:    bx lr
1349     %x = call <4 x i8> @llvm.fptoui.sat.v4f32.v4i8(<4 x float> %f)
1350     ret <4 x i8> %x
1353 define arm_aapcs_vfpcc <4 x i13> @test_unsigned_v4f32_v4i13(<4 x float> %f) {
1354 ; CHECK-MVE-LABEL: test_unsigned_v4f32_v4i13:
1355 ; CHECK-MVE:       @ %bb.0:
1356 ; CHECK-MVE-NEXT:    vldr s4, .LCPI24_0
1357 ; CHECK-MVE-NEXT:    vldr s6, .LCPI24_1
1358 ; CHECK-MVE-NEXT:    vmaxnm.f32 s2, s2, s4
1359 ; CHECK-MVE-NEXT:    vmaxnm.f32 s0, s0, s4
1360 ; CHECK-MVE-NEXT:    vmaxnm.f32 s8, s3, s4
1361 ; CHECK-MVE-NEXT:    vminnm.f32 s2, s2, s6
1362 ; CHECK-MVE-NEXT:    vminnm.f32 s0, s0, s6
1363 ; CHECK-MVE-NEXT:    vmaxnm.f32 s4, s1, s4
1364 ; CHECK-MVE-NEXT:    vminnm.f32 s8, s8, s6
1365 ; CHECK-MVE-NEXT:    vminnm.f32 s4, s4, s6
1366 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s2, s2
1367 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s0, s0
1368 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s8, s8
1369 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s4, s4
1370 ; CHECK-MVE-NEXT:    vmov r0, s2
1371 ; CHECK-MVE-NEXT:    vmov r1, s0
1372 ; CHECK-MVE-NEXT:    vmov q0[2], q0[0], r1, r0
1373 ; CHECK-MVE-NEXT:    vmov r0, s8
1374 ; CHECK-MVE-NEXT:    vmov r1, s4
1375 ; CHECK-MVE-NEXT:    vmov q0[3], q0[1], r1, r0
1376 ; CHECK-MVE-NEXT:    bx lr
1377 ; CHECK-MVE-NEXT:    .p2align 2
1378 ; CHECK-MVE-NEXT:  @ %bb.1:
1379 ; CHECK-MVE-NEXT:  .LCPI24_0:
1380 ; CHECK-MVE-NEXT:    .long 0x00000000 @ float 0
1381 ; CHECK-MVE-NEXT:  .LCPI24_1:
1382 ; CHECK-MVE-NEXT:    .long 0x45fff800 @ float 8191
1384 ; CHECK-MVEFP-LABEL: test_unsigned_v4f32_v4i13:
1385 ; CHECK-MVEFP:       @ %bb.0:
1386 ; CHECK-MVEFP-NEXT:    vmov.i32 q1, #0x1fff
1387 ; CHECK-MVEFP-NEXT:    vcvt.u32.f32 q0, q0
1388 ; CHECK-MVEFP-NEXT:    vmin.u32 q0, q0, q1
1389 ; CHECK-MVEFP-NEXT:    bx lr
1390     %x = call <4 x i13> @llvm.fptoui.sat.v4f32.v4i13(<4 x float> %f)
1391     ret <4 x i13> %x
1394 define arm_aapcs_vfpcc <4 x i16> @test_unsigned_v4f32_v4i16(<4 x float> %f) {
1395 ; CHECK-MVE-LABEL: test_unsigned_v4f32_v4i16:
1396 ; CHECK-MVE:       @ %bb.0:
1397 ; CHECK-MVE-NEXT:    vldr s4, .LCPI25_0
1398 ; CHECK-MVE-NEXT:    vldr s6, .LCPI25_1
1399 ; CHECK-MVE-NEXT:    vmaxnm.f32 s2, s2, s4
1400 ; CHECK-MVE-NEXT:    vmaxnm.f32 s0, s0, s4
1401 ; CHECK-MVE-NEXT:    vmaxnm.f32 s8, s3, s4
1402 ; CHECK-MVE-NEXT:    vminnm.f32 s2, s2, s6
1403 ; CHECK-MVE-NEXT:    vminnm.f32 s0, s0, s6
1404 ; CHECK-MVE-NEXT:    vmaxnm.f32 s4, s1, s4
1405 ; CHECK-MVE-NEXT:    vminnm.f32 s8, s8, s6
1406 ; CHECK-MVE-NEXT:    vminnm.f32 s4, s4, s6
1407 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s2, s2
1408 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s0, s0
1409 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s8, s8
1410 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s4, s4
1411 ; CHECK-MVE-NEXT:    vmov r0, s2
1412 ; CHECK-MVE-NEXT:    vmov r1, s0
1413 ; CHECK-MVE-NEXT:    vmov q0[2], q0[0], r1, r0
1414 ; CHECK-MVE-NEXT:    vmov r0, s8
1415 ; CHECK-MVE-NEXT:    vmov r1, s4
1416 ; CHECK-MVE-NEXT:    vmov q0[3], q0[1], r1, r0
1417 ; CHECK-MVE-NEXT:    bx lr
1418 ; CHECK-MVE-NEXT:    .p2align 2
1419 ; CHECK-MVE-NEXT:  @ %bb.1:
1420 ; CHECK-MVE-NEXT:  .LCPI25_0:
1421 ; CHECK-MVE-NEXT:    .long 0x00000000 @ float 0
1422 ; CHECK-MVE-NEXT:  .LCPI25_1:
1423 ; CHECK-MVE-NEXT:    .long 0x477fff00 @ float 65535
1425 ; CHECK-MVEFP-LABEL: test_unsigned_v4f32_v4i16:
1426 ; CHECK-MVEFP:       @ %bb.0:
1427 ; CHECK-MVEFP-NEXT:    vcvt.u32.f32 q0, q0
1428 ; CHECK-MVEFP-NEXT:    vqmovnb.u32 q0, q0
1429 ; CHECK-MVEFP-NEXT:    vmovlb.u16 q0, q0
1430 ; CHECK-MVEFP-NEXT:    bx lr
1431     %x = call <4 x i16> @llvm.fptoui.sat.v4f32.v4i16(<4 x float> %f)
1432     ret <4 x i16> %x
1435 define arm_aapcs_vfpcc <4 x i19> @test_unsigned_v4f32_v4i19(<4 x float> %f) {
1436 ; CHECK-MVE-LABEL: test_unsigned_v4f32_v4i19:
1437 ; CHECK-MVE:       @ %bb.0:
1438 ; CHECK-MVE-NEXT:    vldr s4, .LCPI26_0
1439 ; CHECK-MVE-NEXT:    vldr s6, .LCPI26_1
1440 ; CHECK-MVE-NEXT:    vmaxnm.f32 s2, s2, s4
1441 ; CHECK-MVE-NEXT:    vmaxnm.f32 s0, s0, s4
1442 ; CHECK-MVE-NEXT:    vmaxnm.f32 s8, s3, s4
1443 ; CHECK-MVE-NEXT:    vminnm.f32 s2, s2, s6
1444 ; CHECK-MVE-NEXT:    vminnm.f32 s0, s0, s6
1445 ; CHECK-MVE-NEXT:    vmaxnm.f32 s4, s1, s4
1446 ; CHECK-MVE-NEXT:    vminnm.f32 s8, s8, s6
1447 ; CHECK-MVE-NEXT:    vminnm.f32 s4, s4, s6
1448 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s2, s2
1449 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s0, s0
1450 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s8, s8
1451 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s4, s4
1452 ; CHECK-MVE-NEXT:    vmov r0, s2
1453 ; CHECK-MVE-NEXT:    vmov r1, s0
1454 ; CHECK-MVE-NEXT:    vmov q0[2], q0[0], r1, r0
1455 ; CHECK-MVE-NEXT:    vmov r0, s8
1456 ; CHECK-MVE-NEXT:    vmov r1, s4
1457 ; CHECK-MVE-NEXT:    vmov q0[3], q0[1], r1, r0
1458 ; CHECK-MVE-NEXT:    bx lr
1459 ; CHECK-MVE-NEXT:    .p2align 2
1460 ; CHECK-MVE-NEXT:  @ %bb.1:
1461 ; CHECK-MVE-NEXT:  .LCPI26_0:
1462 ; CHECK-MVE-NEXT:    .long 0x00000000 @ float 0
1463 ; CHECK-MVE-NEXT:  .LCPI26_1:
1464 ; CHECK-MVE-NEXT:    .long 0x48ffffe0 @ float 524287
1466 ; CHECK-MVEFP-LABEL: test_unsigned_v4f32_v4i19:
1467 ; CHECK-MVEFP:       @ %bb.0:
1468 ; CHECK-MVEFP-NEXT:    vmov.i32 q1, #0x7ffff
1469 ; CHECK-MVEFP-NEXT:    vcvt.u32.f32 q0, q0
1470 ; CHECK-MVEFP-NEXT:    vmin.u32 q0, q0, q1
1471 ; CHECK-MVEFP-NEXT:    bx lr
1472     %x = call <4 x i19> @llvm.fptoui.sat.v4f32.v4i19(<4 x float> %f)
1473     ret <4 x i19> %x
1476 define arm_aapcs_vfpcc <4 x i32> @test_unsigned_v4f32_v4i32_duplicate(<4 x float> %f) {
1477 ; CHECK-MVE-LABEL: test_unsigned_v4f32_v4i32_duplicate:
1478 ; CHECK-MVE:       @ %bb.0:
1479 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s2, s2
1480 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s0, s0
1481 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s4, s3
1482 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s6, s1
1483 ; CHECK-MVE-NEXT:    vmov r0, s2
1484 ; CHECK-MVE-NEXT:    vmov r1, s0
1485 ; CHECK-MVE-NEXT:    vmov q0[2], q0[0], r1, r0
1486 ; CHECK-MVE-NEXT:    vmov r0, s4
1487 ; CHECK-MVE-NEXT:    vmov r1, s6
1488 ; CHECK-MVE-NEXT:    vmov q0[3], q0[1], r1, r0
1489 ; CHECK-MVE-NEXT:    bx lr
1491 ; CHECK-MVEFP-LABEL: test_unsigned_v4f32_v4i32_duplicate:
1492 ; CHECK-MVEFP:       @ %bb.0:
1493 ; CHECK-MVEFP-NEXT:    vcvt.u32.f32 q0, q0
1494 ; CHECK-MVEFP-NEXT:    bx lr
1495     %x = call <4 x i32> @llvm.fptoui.sat.v4f32.v4i32(<4 x float> %f)
1496     ret <4 x i32> %x
1499 define arm_aapcs_vfpcc <4 x i50> @test_unsigned_v4f32_v4i50(<4 x float> %f) {
1500 ; CHECK-LABEL: test_unsigned_v4f32_v4i50:
1501 ; CHECK:       @ %bb.0:
1502 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, lr}
1503 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, lr}
1504 ; CHECK-NEXT:    .vsave {d8, d9, d10}
1505 ; CHECK-NEXT:    vpush {d8, d9, d10}
1506 ; CHECK-NEXT:    vmov q4, q0
1507 ; CHECK-NEXT:    mov r8, r0
1508 ; CHECK-NEXT:    vmov r0, s16
1509 ; CHECK-NEXT:    vldr s20, .LCPI28_0
1510 ; CHECK-NEXT:    vmov r4, s17
1511 ; CHECK-NEXT:    vmov r6, s19
1512 ; CHECK-NEXT:    bl __aeabi_f2ulz
1513 ; CHECK-NEXT:    mov r7, r0
1514 ; CHECK-NEXT:    vcmp.f32 s16, #0
1515 ; CHECK-NEXT:    mov r0, r4
1516 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1517 ; CHECK-NEXT:    mov r5, r1
1518 ; CHECK-NEXT:    it lt
1519 ; CHECK-NEXT:    movlt r7, #0
1520 ; CHECK-NEXT:    bl __aeabi_f2ulz
1521 ; CHECK-NEXT:    vcmp.f32 s17, #0
1522 ; CHECK-NEXT:    mov r10, r1
1523 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1524 ; CHECK-NEXT:    mov r9, r0
1525 ; CHECK-NEXT:    mov r0, r6
1526 ; CHECK-NEXT:    it lt
1527 ; CHECK-NEXT:    movlt.w r10, #0
1528 ; CHECK-NEXT:    vcmp.f32 s17, s20
1529 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1530 ; CHECK-NEXT:    itt gt
1531 ; CHECK-NEXT:    movwgt r10, #65535
1532 ; CHECK-NEXT:    movtgt r10, #3
1533 ; CHECK-NEXT:    bl __aeabi_f2ulz
1534 ; CHECK-NEXT:    vcmp.f32 s19, #0
1535 ; CHECK-NEXT:    mov r6, r1
1536 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1537 ; CHECK-NEXT:    vcmp.f32 s19, s20
1538 ; CHECK-NEXT:    it lt
1539 ; CHECK-NEXT:    movlt r6, #0
1540 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1541 ; CHECK-NEXT:    vcmp.f32 s16, s20
1542 ; CHECK-NEXT:    itt gt
1543 ; CHECK-NEXT:    movwgt r6, #65535
1544 ; CHECK-NEXT:    movtgt r6, #3
1545 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1546 ; CHECK-NEXT:    vcmp.f32 s19, #0
1547 ; CHECK-NEXT:    it gt
1548 ; CHECK-NEXT:    movgt.w r7, #-1
1549 ; CHECK-NEXT:    mov r4, r0
1550 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1551 ; CHECK-NEXT:    vcmp.f32 s19, s20
1552 ; CHECK-NEXT:    str.w r7, [r8]
1553 ; CHECK-NEXT:    it lt
1554 ; CHECK-NEXT:    movlt r4, #0
1555 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1556 ; CHECK-NEXT:    lsl.w r0, r6, #22
1557 ; CHECK-NEXT:    vcmp.f32 s17, #0
1558 ; CHECK-NEXT:    it gt
1559 ; CHECK-NEXT:    movgt.w r4, #-1
1560 ; CHECK-NEXT:    orr.w r0, r0, r4, lsr #10
1561 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1562 ; CHECK-NEXT:    str.w r0, [r8, #20]
1563 ; CHECK-NEXT:    it lt
1564 ; CHECK-NEXT:    movlt.w r9, #0
1565 ; CHECK-NEXT:    vcmp.f32 s17, s20
1566 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1567 ; CHECK-NEXT:    it gt
1568 ; CHECK-NEXT:    movgt.w r9, #-1
1569 ; CHECK-NEXT:    lsr.w r0, r9, #14
1570 ; CHECK-NEXT:    orr.w r1, r0, r10, lsl #18
1571 ; CHECK-NEXT:    vmov r0, s18
1572 ; CHECK-NEXT:    str.w r1, [r8, #8]
1573 ; CHECK-NEXT:    bl __aeabi_f2ulz
1574 ; CHECK-NEXT:    vcmp.f32 s18, #0
1575 ; CHECK-NEXT:    lsrs r2, r6, #10
1576 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1577 ; CHECK-NEXT:    vcmp.f32 s18, s20
1578 ; CHECK-NEXT:    it lt
1579 ; CHECK-NEXT:    movlt r1, #0
1580 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1581 ; CHECK-NEXT:    vcmp.f32 s16, #0
1582 ; CHECK-NEXT:    itt gt
1583 ; CHECK-NEXT:    movwgt r1, #65535
1584 ; CHECK-NEXT:    movtgt r1, #3
1585 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1586 ; CHECK-NEXT:    vcmp.f32 s16, s20
1587 ; CHECK-NEXT:    it lt
1588 ; CHECK-NEXT:    movlt r5, #0
1589 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1590 ; CHECK-NEXT:    vcmp.f32 s18, #0
1591 ; CHECK-NEXT:    itt gt
1592 ; CHECK-NEXT:    movwgt r5, #65535
1593 ; CHECK-NEXT:    movtgt r5, #3
1594 ; CHECK-NEXT:    strb.w r2, [r8, #24]
1595 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1596 ; CHECK-NEXT:    it lt
1597 ; CHECK-NEXT:    movlt r0, #0
1598 ; CHECK-NEXT:    vcmp.f32 s18, s20
1599 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1600 ; CHECK-NEXT:    it gt
1601 ; CHECK-NEXT:    movgt.w r0, #-1
1602 ; CHECK-NEXT:    ubfx r2, r10, #14, #4
1603 ; CHECK-NEXT:    bfc r1, #18, #14
1604 ; CHECK-NEXT:    orr.w r2, r2, r0, lsl #4
1605 ; CHECK-NEXT:    lsrs r0, r0, #28
1606 ; CHECK-NEXT:    orr.w r0, r0, r1, lsl #4
1607 ; CHECK-NEXT:    bfc r5, #18, #14
1608 ; CHECK-NEXT:    str.w r2, [r8, #12]
1609 ; CHECK-NEXT:    orr.w r2, r5, r9, lsl #18
1610 ; CHECK-NEXT:    str.w r2, [r8, #4]
1611 ; CHECK-NEXT:    orr.w r0, r0, r4, lsl #22
1612 ; CHECK-NEXT:    str.w r0, [r8, #16]
1613 ; CHECK-NEXT:    vpop {d8, d9, d10}
1614 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, pc}
1615 ; CHECK-NEXT:    .p2align 2
1616 ; CHECK-NEXT:  @ %bb.1:
1617 ; CHECK-NEXT:  .LCPI28_0:
1618 ; CHECK-NEXT:    .long 0x587fffff @ float 1.12589984E+15
1619     %x = call <4 x i50> @llvm.fptoui.sat.v4f32.v4i50(<4 x float> %f)
1620     ret <4 x i50> %x
1623 define arm_aapcs_vfpcc <4 x i64> @test_unsigned_v4f32_v4i64(<4 x float> %f) {
1624 ; CHECK-LABEL: test_unsigned_v4f32_v4i64:
1625 ; CHECK:       @ %bb.0:
1626 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
1627 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
1628 ; CHECK-NEXT:    .pad #4
1629 ; CHECK-NEXT:    sub sp, #4
1630 ; CHECK-NEXT:    .vsave {d8, d9, d10}
1631 ; CHECK-NEXT:    vpush {d8, d9, d10}
1632 ; CHECK-NEXT:    vmov q4, q0
1633 ; CHECK-NEXT:    vmov r0, s19
1634 ; CHECK-NEXT:    bl __aeabi_f2ulz
1635 ; CHECK-NEXT:    mov r11, r0
1636 ; CHECK-NEXT:    vmov r0, s18
1637 ; CHECK-NEXT:    vldr s20, .LCPI29_0
1638 ; CHECK-NEXT:    vcmp.f32 s19, #0
1639 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1640 ; CHECK-NEXT:    it lt
1641 ; CHECK-NEXT:    movlt.w r11, #0
1642 ; CHECK-NEXT:    vcmp.f32 s19, s20
1643 ; CHECK-NEXT:    mov r10, r1
1644 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1645 ; CHECK-NEXT:    vmov r9, s17
1646 ; CHECK-NEXT:    vmov r8, s16
1647 ; CHECK-NEXT:    it gt
1648 ; CHECK-NEXT:    movgt.w r11, #-1
1649 ; CHECK-NEXT:    bl __aeabi_f2ulz
1650 ; CHECK-NEXT:    vcmp.f32 s18, #0
1651 ; CHECK-NEXT:    mov r7, r0
1652 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1653 ; CHECK-NEXT:    vcmp.f32 s18, s20
1654 ; CHECK-NEXT:    it lt
1655 ; CHECK-NEXT:    movlt r7, #0
1656 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1657 ; CHECK-NEXT:    vcmp.f32 s19, #0
1658 ; CHECK-NEXT:    it gt
1659 ; CHECK-NEXT:    movgt.w r7, #-1
1660 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1661 ; CHECK-NEXT:    vcmp.f32 s19, s20
1662 ; CHECK-NEXT:    it lt
1663 ; CHECK-NEXT:    movlt.w r10, #0
1664 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1665 ; CHECK-NEXT:    mov r6, r1
1666 ; CHECK-NEXT:    vcmp.f32 s18, #0
1667 ; CHECK-NEXT:    it gt
1668 ; CHECK-NEXT:    movgt.w r10, #-1
1669 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1670 ; CHECK-NEXT:    mov r0, r9
1671 ; CHECK-NEXT:    it lt
1672 ; CHECK-NEXT:    movlt r6, #0
1673 ; CHECK-NEXT:    vcmp.f32 s18, s20
1674 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1675 ; CHECK-NEXT:    it gt
1676 ; CHECK-NEXT:    movgt.w r6, #-1
1677 ; CHECK-NEXT:    bl __aeabi_f2ulz
1678 ; CHECK-NEXT:    mov r5, r0
1679 ; CHECK-NEXT:    vcmp.f32 s17, #0
1680 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1681 ; CHECK-NEXT:    mov r0, r8
1682 ; CHECK-NEXT:    it lt
1683 ; CHECK-NEXT:    movlt r5, #0
1684 ; CHECK-NEXT:    vcmp.f32 s17, s20
1685 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1686 ; CHECK-NEXT:    mov r4, r1
1687 ; CHECK-NEXT:    it gt
1688 ; CHECK-NEXT:    movgt.w r5, #-1
1689 ; CHECK-NEXT:    bl __aeabi_f2ulz
1690 ; CHECK-NEXT:    vcmp.f32 s16, #0
1691 ; CHECK-NEXT:    vmov q1[2], q1[0], r7, r11
1692 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1693 ; CHECK-NEXT:    vcmp.f32 s16, s20
1694 ; CHECK-NEXT:    it lt
1695 ; CHECK-NEXT:    movlt r0, #0
1696 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1697 ; CHECK-NEXT:    vcmp.f32 s17, #0
1698 ; CHECK-NEXT:    it gt
1699 ; CHECK-NEXT:    movgt.w r0, #-1
1700 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1701 ; CHECK-NEXT:    vcmp.f32 s17, s20
1702 ; CHECK-NEXT:    it lt
1703 ; CHECK-NEXT:    movlt r4, #0
1704 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1705 ; CHECK-NEXT:    vcmp.f32 s16, #0
1706 ; CHECK-NEXT:    it gt
1707 ; CHECK-NEXT:    movgt.w r4, #-1
1708 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1709 ; CHECK-NEXT:    it lt
1710 ; CHECK-NEXT:    movlt r1, #0
1711 ; CHECK-NEXT:    vcmp.f32 s16, s20
1712 ; CHECK-NEXT:    vmov q0[2], q0[0], r0, r5
1713 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1714 ; CHECK-NEXT:    it gt
1715 ; CHECK-NEXT:    movgt.w r1, #-1
1716 ; CHECK-NEXT:    vmov q0[3], q0[1], r1, r4
1717 ; CHECK-NEXT:    vmov q1[3], q1[1], r6, r10
1718 ; CHECK-NEXT:    vpop {d8, d9, d10}
1719 ; CHECK-NEXT:    add sp, #4
1720 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
1721 ; CHECK-NEXT:    .p2align 2
1722 ; CHECK-NEXT:  @ %bb.1:
1723 ; CHECK-NEXT:  .LCPI29_0:
1724 ; CHECK-NEXT:    .long 0x5f7fffff @ float 1.8446743E+19
1725     %x = call <4 x i64> @llvm.fptoui.sat.v4f32.v4i64(<4 x float> %f)
1726     ret <4 x i64> %x
1729 define arm_aapcs_vfpcc <4 x i100> @test_unsigned_v4f32_v4i100(<4 x float> %f) {
1730 ; CHECK-LABEL: test_unsigned_v4f32_v4i100:
1731 ; CHECK:       @ %bb.0:
1732 ; CHECK-NEXT:    .save {r4, r5, r6, r7, lr}
1733 ; CHECK-NEXT:    push {r4, r5, r6, r7, lr}
1734 ; CHECK-NEXT:    .pad #4
1735 ; CHECK-NEXT:    sub sp, #4
1736 ; CHECK-NEXT:    .vsave {d8, d9, d10}
1737 ; CHECK-NEXT:    vpush {d8, d9, d10}
1738 ; CHECK-NEXT:    vmov q4, q0
1739 ; CHECK-NEXT:    mov r4, r0
1740 ; CHECK-NEXT:    vmov r0, s18
1741 ; CHECK-NEXT:    vldr s20, .LCPI30_0
1742 ; CHECK-NEXT:    vmov r5, s16
1743 ; CHECK-NEXT:    vmov r7, s19
1744 ; CHECK-NEXT:    bl __fixunssfti
1745 ; CHECK-NEXT:    vcmp.f32 s18, #0
1746 ; CHECK-NEXT:    mov r6, r3
1747 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1748 ; CHECK-NEXT:    vcmp.f32 s18, s20
1749 ; CHECK-NEXT:    it lt
1750 ; CHECK-NEXT:    movlt r2, #0
1751 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1752 ; CHECK-NEXT:    vcmp.f32 s18, #0
1753 ; CHECK-NEXT:    it gt
1754 ; CHECK-NEXT:    movgt.w r2, #-1
1755 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1756 ; CHECK-NEXT:    vcmp.f32 s18, s20
1757 ; CHECK-NEXT:    str.w r2, [r4, #33]
1758 ; CHECK-NEXT:    it lt
1759 ; CHECK-NEXT:    movlt r1, #0
1760 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1761 ; CHECK-NEXT:    vcmp.f32 s18, #0
1762 ; CHECK-NEXT:    it gt
1763 ; CHECK-NEXT:    movgt.w r1, #-1
1764 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1765 ; CHECK-NEXT:    str.w r1, [r4, #29]
1766 ; CHECK-NEXT:    it lt
1767 ; CHECK-NEXT:    movlt r0, #0
1768 ; CHECK-NEXT:    vcmp.f32 s18, s20
1769 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1770 ; CHECK-NEXT:    it gt
1771 ; CHECK-NEXT:    movgt.w r0, #-1
1772 ; CHECK-NEXT:    str.w r0, [r4, #25]
1773 ; CHECK-NEXT:    mov r0, r5
1774 ; CHECK-NEXT:    bl __fixunssfti
1775 ; CHECK-NEXT:    vcmp.f32 s16, #0
1776 ; CHECK-NEXT:    mov r5, r3
1777 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1778 ; CHECK-NEXT:    vcmp.f32 s16, s20
1779 ; CHECK-NEXT:    it lt
1780 ; CHECK-NEXT:    movlt r2, #0
1781 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1782 ; CHECK-NEXT:    vcmp.f32 s16, #0
1783 ; CHECK-NEXT:    it gt
1784 ; CHECK-NEXT:    movgt.w r2, #-1
1785 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1786 ; CHECK-NEXT:    vcmp.f32 s16, s20
1787 ; CHECK-NEXT:    str r2, [r4, #8]
1788 ; CHECK-NEXT:    it lt
1789 ; CHECK-NEXT:    movlt r1, #0
1790 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1791 ; CHECK-NEXT:    vcmp.f32 s16, #0
1792 ; CHECK-NEXT:    it gt
1793 ; CHECK-NEXT:    movgt.w r1, #-1
1794 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1795 ; CHECK-NEXT:    str r1, [r4, #4]
1796 ; CHECK-NEXT:    it lt
1797 ; CHECK-NEXT:    movlt r0, #0
1798 ; CHECK-NEXT:    vcmp.f32 s16, s20
1799 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1800 ; CHECK-NEXT:    it gt
1801 ; CHECK-NEXT:    movgt.w r0, #-1
1802 ; CHECK-NEXT:    str r0, [r4]
1803 ; CHECK-NEXT:    mov r0, r7
1804 ; CHECK-NEXT:    bl __fixunssfti
1805 ; CHECK-NEXT:    vcmp.f32 s19, #0
1806 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1807 ; CHECK-NEXT:    vcmp.f32 s19, s20
1808 ; CHECK-NEXT:    it lt
1809 ; CHECK-NEXT:    movlt r1, #0
1810 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1811 ; CHECK-NEXT:    vcmp.f32 s19, #0
1812 ; CHECK-NEXT:    it gt
1813 ; CHECK-NEXT:    movgt.w r1, #-1
1814 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1815 ; CHECK-NEXT:    vcmp.f32 s19, s20
1816 ; CHECK-NEXT:    it lt
1817 ; CHECK-NEXT:    movlt r2, #0
1818 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1819 ; CHECK-NEXT:    lsr.w r7, r1, #28
1820 ; CHECK-NEXT:    vcmp.f32 s19, #0
1821 ; CHECK-NEXT:    it gt
1822 ; CHECK-NEXT:    movgt.w r2, #-1
1823 ; CHECK-NEXT:    orr.w r7, r7, r2, lsl #4
1824 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1825 ; CHECK-NEXT:    str.w r7, [r4, #45]
1826 ; CHECK-NEXT:    it lt
1827 ; CHECK-NEXT:    movlt r0, #0
1828 ; CHECK-NEXT:    vcmp.f32 s19, s20
1829 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1830 ; CHECK-NEXT:    it gt
1831 ; CHECK-NEXT:    movgt.w r0, #-1
1832 ; CHECK-NEXT:    lsrs r7, r0, #28
1833 ; CHECK-NEXT:    vcmp.f32 s19, #0
1834 ; CHECK-NEXT:    orr.w r7, r7, r1, lsl #4
1835 ; CHECK-NEXT:    vmov r1, s17
1836 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1837 ; CHECK-NEXT:    vcmp.f32 s19, s20
1838 ; CHECK-NEXT:    str.w r7, [r4, #41]
1839 ; CHECK-NEXT:    it lt
1840 ; CHECK-NEXT:    movlt r3, #0
1841 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1842 ; CHECK-NEXT:    lsr.w r2, r2, #28
1843 ; CHECK-NEXT:    vcmp.f32 s18, #0
1844 ; CHECK-NEXT:    it gt
1845 ; CHECK-NEXT:    movgt r3, #15
1846 ; CHECK-NEXT:    orr.w r2, r2, r3, lsl #4
1847 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1848 ; CHECK-NEXT:    strb.w r2, [r4, #49]
1849 ; CHECK-NEXT:    it lt
1850 ; CHECK-NEXT:    movlt r6, #0
1851 ; CHECK-NEXT:    vcmp.f32 s18, s20
1852 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1853 ; CHECK-NEXT:    it gt
1854 ; CHECK-NEXT:    movgt r6, #15
1855 ; CHECK-NEXT:    and r2, r6, #15
1856 ; CHECK-NEXT:    orr.w r0, r2, r0, lsl #4
1857 ; CHECK-NEXT:    str.w r0, [r4, #37]
1858 ; CHECK-NEXT:    mov r0, r1
1859 ; CHECK-NEXT:    bl __fixunssfti
1860 ; CHECK-NEXT:    vcmp.f32 s17, #0
1861 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1862 ; CHECK-NEXT:    vcmp.f32 s17, s20
1863 ; CHECK-NEXT:    it lt
1864 ; CHECK-NEXT:    movlt r1, #0
1865 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1866 ; CHECK-NEXT:    vcmp.f32 s17, #0
1867 ; CHECK-NEXT:    it gt
1868 ; CHECK-NEXT:    movgt.w r1, #-1
1869 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1870 ; CHECK-NEXT:    vcmp.f32 s17, s20
1871 ; CHECK-NEXT:    it lt
1872 ; CHECK-NEXT:    movlt r2, #0
1873 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1874 ; CHECK-NEXT:    vcmp.f32 s17, #0
1875 ; CHECK-NEXT:    it gt
1876 ; CHECK-NEXT:    movgt.w r2, #-1
1877 ; CHECK-NEXT:    lsrs r7, r1, #28
1878 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1879 ; CHECK-NEXT:    vcmp.f32 s17, s20
1880 ; CHECK-NEXT:    orr.w r7, r7, r2, lsl #4
1881 ; CHECK-NEXT:    str r7, [r4, #20]
1882 ; CHECK-NEXT:    it lt
1883 ; CHECK-NEXT:    movlt r0, #0
1884 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1885 ; CHECK-NEXT:    vcmp.f32 s17, #0
1886 ; CHECK-NEXT:    it gt
1887 ; CHECK-NEXT:    movgt.w r0, #-1
1888 ; CHECK-NEXT:    lsrs r7, r0, #28
1889 ; CHECK-NEXT:    orr.w r1, r7, r1, lsl #4
1890 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1891 ; CHECK-NEXT:    vcmp.f32 s17, s20
1892 ; CHECK-NEXT:    str r1, [r4, #16]
1893 ; CHECK-NEXT:    it lt
1894 ; CHECK-NEXT:    movlt r3, #0
1895 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1896 ; CHECK-NEXT:    lsr.w r1, r2, #28
1897 ; CHECK-NEXT:    vcmp.f32 s16, #0
1898 ; CHECK-NEXT:    it gt
1899 ; CHECK-NEXT:    movgt r3, #15
1900 ; CHECK-NEXT:    orr.w r1, r1, r3, lsl #4
1901 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1902 ; CHECK-NEXT:    strb r1, [r4, #24]
1903 ; CHECK-NEXT:    it lt
1904 ; CHECK-NEXT:    movlt r5, #0
1905 ; CHECK-NEXT:    vcmp.f32 s16, s20
1906 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1907 ; CHECK-NEXT:    it gt
1908 ; CHECK-NEXT:    movgt r5, #15
1909 ; CHECK-NEXT:    and r1, r5, #15
1910 ; CHECK-NEXT:    orr.w r0, r1, r0, lsl #4
1911 ; CHECK-NEXT:    str r0, [r4, #12]
1912 ; CHECK-NEXT:    vpop {d8, d9, d10}
1913 ; CHECK-NEXT:    add sp, #4
1914 ; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}
1915 ; CHECK-NEXT:    .p2align 2
1916 ; CHECK-NEXT:  @ %bb.1:
1917 ; CHECK-NEXT:  .LCPI30_0:
1918 ; CHECK-NEXT:    .long 0x717fffff @ float 1.26765052E+30
1919     %x = call <4 x i100> @llvm.fptoui.sat.v4f32.v4i100(<4 x float> %f)
1920     ret <4 x i100> %x
1923 define arm_aapcs_vfpcc <4 x i128> @test_unsigned_v4f32_v4i128(<4 x float> %f) {
1924 ; CHECK-LABEL: test_unsigned_v4f32_v4i128:
1925 ; CHECK:       @ %bb.0:
1926 ; CHECK-NEXT:    .save {r4, r5, r6, r7, lr}
1927 ; CHECK-NEXT:    push {r4, r5, r6, r7, lr}
1928 ; CHECK-NEXT:    .pad #4
1929 ; CHECK-NEXT:    sub sp, #4
1930 ; CHECK-NEXT:    .vsave {d8, d9, d10}
1931 ; CHECK-NEXT:    vpush {d8, d9, d10}
1932 ; CHECK-NEXT:    vmov q4, q0
1933 ; CHECK-NEXT:    mov r4, r0
1934 ; CHECK-NEXT:    vmov r0, s19
1935 ; CHECK-NEXT:    bl __fixunssfti
1936 ; CHECK-NEXT:    vmov r5, s18
1937 ; CHECK-NEXT:    vldr s20, .LCPI31_0
1938 ; CHECK-NEXT:    vcmp.f32 s19, #0
1939 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1940 ; CHECK-NEXT:    vcmp.f32 s19, s20
1941 ; CHECK-NEXT:    it lt
1942 ; CHECK-NEXT:    movlt r3, #0
1943 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1944 ; CHECK-NEXT:    vcmp.f32 s19, #0
1945 ; CHECK-NEXT:    it gt
1946 ; CHECK-NEXT:    movgt.w r3, #-1
1947 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1948 ; CHECK-NEXT:    vcmp.f32 s19, s20
1949 ; CHECK-NEXT:    str r3, [r4, #60]
1950 ; CHECK-NEXT:    it lt
1951 ; CHECK-NEXT:    movlt r2, #0
1952 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1953 ; CHECK-NEXT:    vcmp.f32 s19, #0
1954 ; CHECK-NEXT:    it gt
1955 ; CHECK-NEXT:    movgt.w r2, #-1
1956 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1957 ; CHECK-NEXT:    vcmp.f32 s19, s20
1958 ; CHECK-NEXT:    str r2, [r4, #56]
1959 ; CHECK-NEXT:    it lt
1960 ; CHECK-NEXT:    movlt r1, #0
1961 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1962 ; CHECK-NEXT:    vcmp.f32 s19, #0
1963 ; CHECK-NEXT:    it gt
1964 ; CHECK-NEXT:    movgt.w r1, #-1
1965 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1966 ; CHECK-NEXT:    str r1, [r4, #52]
1967 ; CHECK-NEXT:    it lt
1968 ; CHECK-NEXT:    movlt r0, #0
1969 ; CHECK-NEXT:    vcmp.f32 s19, s20
1970 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1971 ; CHECK-NEXT:    it gt
1972 ; CHECK-NEXT:    movgt.w r0, #-1
1973 ; CHECK-NEXT:    str r0, [r4, #48]
1974 ; CHECK-NEXT:    vmov r7, s16
1975 ; CHECK-NEXT:    vmov r6, s17
1976 ; CHECK-NEXT:    mov r0, r5
1977 ; CHECK-NEXT:    bl __fixunssfti
1978 ; CHECK-NEXT:    vcmp.f32 s18, #0
1979 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1980 ; CHECK-NEXT:    vcmp.f32 s18, s20
1981 ; CHECK-NEXT:    it lt
1982 ; CHECK-NEXT:    movlt r3, #0
1983 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1984 ; CHECK-NEXT:    vcmp.f32 s18, #0
1985 ; CHECK-NEXT:    it gt
1986 ; CHECK-NEXT:    movgt.w r3, #-1
1987 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1988 ; CHECK-NEXT:    vcmp.f32 s18, s20
1989 ; CHECK-NEXT:    str r3, [r4, #44]
1990 ; CHECK-NEXT:    it lt
1991 ; CHECK-NEXT:    movlt r2, #0
1992 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1993 ; CHECK-NEXT:    vcmp.f32 s18, #0
1994 ; CHECK-NEXT:    it gt
1995 ; CHECK-NEXT:    movgt.w r2, #-1
1996 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
1997 ; CHECK-NEXT:    vcmp.f32 s18, s20
1998 ; CHECK-NEXT:    str r2, [r4, #40]
1999 ; CHECK-NEXT:    it lt
2000 ; CHECK-NEXT:    movlt r1, #0
2001 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2002 ; CHECK-NEXT:    vcmp.f32 s18, #0
2003 ; CHECK-NEXT:    it gt
2004 ; CHECK-NEXT:    movgt.w r1, #-1
2005 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2006 ; CHECK-NEXT:    str r1, [r4, #36]
2007 ; CHECK-NEXT:    it lt
2008 ; CHECK-NEXT:    movlt r0, #0
2009 ; CHECK-NEXT:    vcmp.f32 s18, s20
2010 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2011 ; CHECK-NEXT:    it gt
2012 ; CHECK-NEXT:    movgt.w r0, #-1
2013 ; CHECK-NEXT:    str r0, [r4, #32]
2014 ; CHECK-NEXT:    mov r0, r6
2015 ; CHECK-NEXT:    bl __fixunssfti
2016 ; CHECK-NEXT:    vcmp.f32 s17, #0
2017 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2018 ; CHECK-NEXT:    vcmp.f32 s17, s20
2019 ; CHECK-NEXT:    it lt
2020 ; CHECK-NEXT:    movlt r3, #0
2021 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2022 ; CHECK-NEXT:    vcmp.f32 s17, #0
2023 ; CHECK-NEXT:    it gt
2024 ; CHECK-NEXT:    movgt.w r3, #-1
2025 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2026 ; CHECK-NEXT:    vcmp.f32 s17, s20
2027 ; CHECK-NEXT:    str r3, [r4, #28]
2028 ; CHECK-NEXT:    it lt
2029 ; CHECK-NEXT:    movlt r2, #0
2030 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2031 ; CHECK-NEXT:    vcmp.f32 s17, #0
2032 ; CHECK-NEXT:    it gt
2033 ; CHECK-NEXT:    movgt.w r2, #-1
2034 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2035 ; CHECK-NEXT:    vcmp.f32 s17, s20
2036 ; CHECK-NEXT:    str r2, [r4, #24]
2037 ; CHECK-NEXT:    it lt
2038 ; CHECK-NEXT:    movlt r1, #0
2039 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2040 ; CHECK-NEXT:    vcmp.f32 s17, #0
2041 ; CHECK-NEXT:    it gt
2042 ; CHECK-NEXT:    movgt.w r1, #-1
2043 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2044 ; CHECK-NEXT:    str r1, [r4, #20]
2045 ; CHECK-NEXT:    it lt
2046 ; CHECK-NEXT:    movlt r0, #0
2047 ; CHECK-NEXT:    vcmp.f32 s17, s20
2048 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2049 ; CHECK-NEXT:    it gt
2050 ; CHECK-NEXT:    movgt.w r0, #-1
2051 ; CHECK-NEXT:    str r0, [r4, #16]
2052 ; CHECK-NEXT:    mov r0, r7
2053 ; CHECK-NEXT:    bl __fixunssfti
2054 ; CHECK-NEXT:    vcmp.f32 s16, #0
2055 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2056 ; CHECK-NEXT:    vcmp.f32 s16, s20
2057 ; CHECK-NEXT:    it lt
2058 ; CHECK-NEXT:    movlt r3, #0
2059 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2060 ; CHECK-NEXT:    vcmp.f32 s16, #0
2061 ; CHECK-NEXT:    it gt
2062 ; CHECK-NEXT:    movgt.w r3, #-1
2063 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2064 ; CHECK-NEXT:    vcmp.f32 s16, s20
2065 ; CHECK-NEXT:    str r3, [r4, #12]
2066 ; CHECK-NEXT:    it lt
2067 ; CHECK-NEXT:    movlt r2, #0
2068 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2069 ; CHECK-NEXT:    vcmp.f32 s16, #0
2070 ; CHECK-NEXT:    it gt
2071 ; CHECK-NEXT:    movgt.w r2, #-1
2072 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2073 ; CHECK-NEXT:    vcmp.f32 s16, s20
2074 ; CHECK-NEXT:    str r2, [r4, #8]
2075 ; CHECK-NEXT:    it lt
2076 ; CHECK-NEXT:    movlt r1, #0
2077 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2078 ; CHECK-NEXT:    vcmp.f32 s16, #0
2079 ; CHECK-NEXT:    it gt
2080 ; CHECK-NEXT:    movgt.w r1, #-1
2081 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2082 ; CHECK-NEXT:    str r1, [r4, #4]
2083 ; CHECK-NEXT:    it lt
2084 ; CHECK-NEXT:    movlt r0, #0
2085 ; CHECK-NEXT:    vcmp.f32 s16, s20
2086 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
2087 ; CHECK-NEXT:    it gt
2088 ; CHECK-NEXT:    movgt.w r0, #-1
2089 ; CHECK-NEXT:    str r0, [r4]
2090 ; CHECK-NEXT:    vpop {d8, d9, d10}
2091 ; CHECK-NEXT:    add sp, #4
2092 ; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}
2093 ; CHECK-NEXT:    .p2align 2
2094 ; CHECK-NEXT:  @ %bb.1:
2095 ; CHECK-NEXT:  .LCPI31_0:
2096 ; CHECK-NEXT:    .long 0x7f7fffff @ float 3.40282347E+38
2097     %x = call <4 x i128> @llvm.fptoui.sat.v4f32.v4i128(<4 x float> %f)
2098     ret <4 x i128> %x
2102 ; 2-Vector double to signed integer -- result size variation
2105 declare <2 x   i1> @llvm.fptoui.sat.v2f64.v2i1  (<2 x double>)
2106 declare <2 x   i8> @llvm.fptoui.sat.v2f64.v2i8  (<2 x double>)
2107 declare <2 x  i13> @llvm.fptoui.sat.v2f64.v2i13 (<2 x double>)
2108 declare <2 x  i16> @llvm.fptoui.sat.v2f64.v2i16 (<2 x double>)
2109 declare <2 x  i19> @llvm.fptoui.sat.v2f64.v2i19 (<2 x double>)
2110 declare <2 x  i50> @llvm.fptoui.sat.v2f64.v2i50 (<2 x double>)
2111 declare <2 x  i64> @llvm.fptoui.sat.v2f64.v2i64 (<2 x double>)
2112 declare <2 x i100> @llvm.fptoui.sat.v2f64.v2i100(<2 x double>)
2113 declare <2 x i128> @llvm.fptoui.sat.v2f64.v2i128(<2 x double>)
2115 define arm_aapcs_vfpcc <2 x i1> @test_unsigned_v2f64_v2i1(<2 x double> %f) {
2116 ; CHECK-LABEL: test_unsigned_v2f64_v2i1:
2117 ; CHECK:       @ %bb.0:
2118 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2119 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2120 ; CHECK-NEXT:    .pad #4
2121 ; CHECK-NEXT:    sub sp, #4
2122 ; CHECK-NEXT:    .vsave {d8, d9}
2123 ; CHECK-NEXT:    vpush {d8, d9}
2124 ; CHECK-NEXT:    .pad #8
2125 ; CHECK-NEXT:    sub sp, #8
2126 ; CHECK-NEXT:    vmov q4, q0
2127 ; CHECK-NEXT:    vldr d0, .LCPI32_0
2128 ; CHECK-NEXT:    vmov r5, r6, d8
2129 ; CHECK-NEXT:    str r0, [sp, #4] @ 4-byte Spill
2130 ; CHECK-NEXT:    vmov r10, r9, d0
2131 ; CHECK-NEXT:    mov r0, r5
2132 ; CHECK-NEXT:    mov r1, r6
2133 ; CHECK-NEXT:    mov r2, r10
2134 ; CHECK-NEXT:    mov r3, r9
2135 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2136 ; CHECK-NEXT:    vldr d0, .LCPI32_1
2137 ; CHECK-NEXT:    mov r7, r0
2138 ; CHECK-NEXT:    mov r0, r5
2139 ; CHECK-NEXT:    mov r1, r6
2140 ; CHECK-NEXT:    vmov r4, r11, d0
2141 ; CHECK-NEXT:    mov r2, r4
2142 ; CHECK-NEXT:    mov r3, r11
2143 ; CHECK-NEXT:    bl __aeabi_dcmpge
2144 ; CHECK-NEXT:    mov r8, r0
2145 ; CHECK-NEXT:    mov r0, r5
2146 ; CHECK-NEXT:    mov r1, r6
2147 ; CHECK-NEXT:    bl __aeabi_d2uiz
2148 ; CHECK-NEXT:    vmov r6, r5, d9
2149 ; CHECK-NEXT:    cmp.w r8, #0
2150 ; CHECK-NEXT:    csel r0, r0, r8, ne
2151 ; CHECK-NEXT:    cmp r7, #0
2152 ; CHECK-NEXT:    it ne
2153 ; CHECK-NEXT:    movne r0, #1
2154 ; CHECK-NEXT:    movs r7, #0
2155 ; CHECK-NEXT:    and r0, r0, #1
2156 ; CHECK-NEXT:    mov r2, r10
2157 ; CHECK-NEXT:    rsbs r0, r0, #0
2158 ; CHECK-NEXT:    mov r3, r9
2159 ; CHECK-NEXT:    bfi r7, r0, #0, #1
2160 ; CHECK-NEXT:    mov r0, r6
2161 ; CHECK-NEXT:    mov r1, r5
2162 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2163 ; CHECK-NEXT:    mov r8, r0
2164 ; CHECK-NEXT:    mov r0, r6
2165 ; CHECK-NEXT:    mov r1, r5
2166 ; CHECK-NEXT:    mov r2, r4
2167 ; CHECK-NEXT:    mov r3, r11
2168 ; CHECK-NEXT:    bl __aeabi_dcmpge
2169 ; CHECK-NEXT:    mov r4, r0
2170 ; CHECK-NEXT:    mov r0, r6
2171 ; CHECK-NEXT:    mov r1, r5
2172 ; CHECK-NEXT:    bl __aeabi_d2uiz
2173 ; CHECK-NEXT:    cmp r4, #0
2174 ; CHECK-NEXT:    csel r0, r0, r4, ne
2175 ; CHECK-NEXT:    cmp.w r8, #0
2176 ; CHECK-NEXT:    it ne
2177 ; CHECK-NEXT:    movne r0, #1
2178 ; CHECK-NEXT:    and r0, r0, #1
2179 ; CHECK-NEXT:    rsbs r0, r0, #0
2180 ; CHECK-NEXT:    bfi r7, r0, #1, #1
2181 ; CHECK-NEXT:    ldr r0, [sp, #4] @ 4-byte Reload
2182 ; CHECK-NEXT:    strb r7, [r0]
2183 ; CHECK-NEXT:    add sp, #8
2184 ; CHECK-NEXT:    vpop {d8, d9}
2185 ; CHECK-NEXT:    add sp, #4
2186 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
2187 ; CHECK-NEXT:    .p2align 3
2188 ; CHECK-NEXT:  @ %bb.1:
2189 ; CHECK-NEXT:  .LCPI32_0:
2190 ; CHECK-NEXT:    .long 0 @ double 1
2191 ; CHECK-NEXT:    .long 1072693248
2192 ; CHECK-NEXT:  .LCPI32_1:
2193 ; CHECK-NEXT:    .long 0 @ double 0
2194 ; CHECK-NEXT:    .long 0
2195     %x = call <2 x i1> @llvm.fptoui.sat.v2f64.v2i1(<2 x double> %f)
2196     ret <2 x i1> %x
2199 define arm_aapcs_vfpcc <2 x i8> @test_unsigned_v2f64_v2i8(<2 x double> %f) {
2200 ; CHECK-LABEL: test_unsigned_v2f64_v2i8:
2201 ; CHECK:       @ %bb.0:
2202 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2203 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2204 ; CHECK-NEXT:    .pad #4
2205 ; CHECK-NEXT:    sub sp, #4
2206 ; CHECK-NEXT:    .vsave {d8, d9}
2207 ; CHECK-NEXT:    vpush {d8, d9}
2208 ; CHECK-NEXT:    .pad #16
2209 ; CHECK-NEXT:    sub sp, #16
2210 ; CHECK-NEXT:    vmov q4, q0
2211 ; CHECK-NEXT:    vldr d0, .LCPI33_0
2212 ; CHECK-NEXT:    vmov r6, r7, d9
2213 ; CHECK-NEXT:    vmov r2, r3, d0
2214 ; CHECK-NEXT:    mov r0, r6
2215 ; CHECK-NEXT:    mov r1, r7
2216 ; CHECK-NEXT:    strd r3, r2, [sp, #4] @ 8-byte Folded Spill
2217 ; CHECK-NEXT:    bl __aeabi_dcmpge
2218 ; CHECK-NEXT:    str r0, [sp, #12] @ 4-byte Spill
2219 ; CHECK-NEXT:    mov r0, r6
2220 ; CHECK-NEXT:    mov r1, r7
2221 ; CHECK-NEXT:    bl __aeabi_d2ulz
2222 ; CHECK-NEXT:    vldr d0, .LCPI33_1
2223 ; CHECK-NEXT:    mov r5, r0
2224 ; CHECK-NEXT:    ldr r0, [sp, #12] @ 4-byte Reload
2225 ; CHECK-NEXT:    mov r10, r1
2226 ; CHECK-NEXT:    vmov r9, r8, d0
2227 ; CHECK-NEXT:    mov r1, r7
2228 ; CHECK-NEXT:    clz r0, r0
2229 ; CHECK-NEXT:    vmov r11, r4, d8
2230 ; CHECK-NEXT:    lsrs r0, r0, #5
2231 ; CHECK-NEXT:    str r0, [sp, #12] @ 4-byte Spill
2232 ; CHECK-NEXT:    mov r0, r6
2233 ; CHECK-NEXT:    it ne
2234 ; CHECK-NEXT:    movne r5, #0
2235 ; CHECK-NEXT:    mov r2, r9
2236 ; CHECK-NEXT:    mov r3, r8
2237 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2238 ; CHECK-NEXT:    mov r6, r0
2239 ; CHECK-NEXT:    cmp r0, #0
2240 ; CHECK-NEXT:    mov r0, r11
2241 ; CHECK-NEXT:    mov r1, r4
2242 ; CHECK-NEXT:    mov r2, r9
2243 ; CHECK-NEXT:    mov r3, r8
2244 ; CHECK-NEXT:    it ne
2245 ; CHECK-NEXT:    movne r6, #1
2246 ; CHECK-NEXT:    cmp r6, #0
2247 ; CHECK-NEXT:    it ne
2248 ; CHECK-NEXT:    movne r5, #255
2249 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2250 ; CHECK-NEXT:    mov r7, r0
2251 ; CHECK-NEXT:    cmp r0, #0
2252 ; CHECK-NEXT:    it ne
2253 ; CHECK-NEXT:    movne r7, #1
2254 ; CHECK-NEXT:    ldrd r3, r2, [sp, #4] @ 8-byte Folded Reload
2255 ; CHECK-NEXT:    mov r0, r11
2256 ; CHECK-NEXT:    mov r1, r4
2257 ; CHECK-NEXT:    mov r8, r4
2258 ; CHECK-NEXT:    bl __aeabi_dcmpge
2259 ; CHECK-NEXT:    clz r0, r0
2260 ; CHECK-NEXT:    mov r1, r8
2261 ; CHECK-NEXT:    lsrs r4, r0, #5
2262 ; CHECK-NEXT:    mov r0, r11
2263 ; CHECK-NEXT:    bl __aeabi_d2ulz
2264 ; CHECK-NEXT:    cmp r4, #0
2265 ; CHECK-NEXT:    it ne
2266 ; CHECK-NEXT:    movne r0, #0
2267 ; CHECK-NEXT:    cmp r7, #0
2268 ; CHECK-NEXT:    it ne
2269 ; CHECK-NEXT:    movne r0, #255
2270 ; CHECK-NEXT:    ldr r2, [sp, #12] @ 4-byte Reload
2271 ; CHECK-NEXT:    vmov q0[2], q0[0], r0, r5
2272 ; CHECK-NEXT:    cmp r2, #0
2273 ; CHECK-NEXT:    it ne
2274 ; CHECK-NEXT:    movne.w r10, #0
2275 ; CHECK-NEXT:    cmp r6, #0
2276 ; CHECK-NEXT:    it ne
2277 ; CHECK-NEXT:    movne.w r10, #0
2278 ; CHECK-NEXT:    cmp r4, #0
2279 ; CHECK-NEXT:    it ne
2280 ; CHECK-NEXT:    movne r1, #0
2281 ; CHECK-NEXT:    cmp r7, #0
2282 ; CHECK-NEXT:    it ne
2283 ; CHECK-NEXT:    movne r1, #0
2284 ; CHECK-NEXT:    vmov q0[3], q0[1], r1, r10
2285 ; CHECK-NEXT:    add sp, #16
2286 ; CHECK-NEXT:    vpop {d8, d9}
2287 ; CHECK-NEXT:    add sp, #4
2288 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
2289 ; CHECK-NEXT:    .p2align 3
2290 ; CHECK-NEXT:  @ %bb.1:
2291 ; CHECK-NEXT:  .LCPI33_0:
2292 ; CHECK-NEXT:    .long 0 @ double 0
2293 ; CHECK-NEXT:    .long 0
2294 ; CHECK-NEXT:  .LCPI33_1:
2295 ; CHECK-NEXT:    .long 0 @ double 255
2296 ; CHECK-NEXT:    .long 1081073664
2297     %x = call <2 x i8> @llvm.fptoui.sat.v2f64.v2i8(<2 x double> %f)
2298     ret <2 x i8> %x
2301 define arm_aapcs_vfpcc <2 x i13> @test_unsigned_v2f64_v2i13(<2 x double> %f) {
2302 ; CHECK-LABEL: test_unsigned_v2f64_v2i13:
2303 ; CHECK:       @ %bb.0:
2304 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2305 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2306 ; CHECK-NEXT:    .pad #4
2307 ; CHECK-NEXT:    sub sp, #4
2308 ; CHECK-NEXT:    .vsave {d8, d9}
2309 ; CHECK-NEXT:    vpush {d8, d9}
2310 ; CHECK-NEXT:    .pad #16
2311 ; CHECK-NEXT:    sub sp, #16
2312 ; CHECK-NEXT:    vmov q4, q0
2313 ; CHECK-NEXT:    vldr d0, .LCPI34_0
2314 ; CHECK-NEXT:    vmov r6, r7, d9
2315 ; CHECK-NEXT:    vmov r2, r3, d0
2316 ; CHECK-NEXT:    mov r0, r6
2317 ; CHECK-NEXT:    mov r1, r7
2318 ; CHECK-NEXT:    strd r3, r2, [sp, #4] @ 8-byte Folded Spill
2319 ; CHECK-NEXT:    bl __aeabi_dcmpge
2320 ; CHECK-NEXT:    str r0, [sp, #12] @ 4-byte Spill
2321 ; CHECK-NEXT:    mov r0, r6
2322 ; CHECK-NEXT:    mov r1, r7
2323 ; CHECK-NEXT:    bl __aeabi_d2ulz
2324 ; CHECK-NEXT:    vldr d0, .LCPI34_1
2325 ; CHECK-NEXT:    mov r5, r0
2326 ; CHECK-NEXT:    ldr r0, [sp, #12] @ 4-byte Reload
2327 ; CHECK-NEXT:    mov r10, r1
2328 ; CHECK-NEXT:    vmov r9, r8, d0
2329 ; CHECK-NEXT:    mov r1, r7
2330 ; CHECK-NEXT:    clz r0, r0
2331 ; CHECK-NEXT:    vmov r11, r4, d8
2332 ; CHECK-NEXT:    lsrs r0, r0, #5
2333 ; CHECK-NEXT:    str r0, [sp, #12] @ 4-byte Spill
2334 ; CHECK-NEXT:    mov r0, r6
2335 ; CHECK-NEXT:    it ne
2336 ; CHECK-NEXT:    movne r5, #0
2337 ; CHECK-NEXT:    mov r2, r9
2338 ; CHECK-NEXT:    mov r3, r8
2339 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2340 ; CHECK-NEXT:    mov r6, r0
2341 ; CHECK-NEXT:    cmp r0, #0
2342 ; CHECK-NEXT:    mov r0, r11
2343 ; CHECK-NEXT:    mov r1, r4
2344 ; CHECK-NEXT:    mov r2, r9
2345 ; CHECK-NEXT:    mov r3, r8
2346 ; CHECK-NEXT:    it ne
2347 ; CHECK-NEXT:    movne r6, #1
2348 ; CHECK-NEXT:    cmp r6, #0
2349 ; CHECK-NEXT:    it ne
2350 ; CHECK-NEXT:    movwne r5, #8191
2351 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2352 ; CHECK-NEXT:    mov r7, r0
2353 ; CHECK-NEXT:    cmp r0, #0
2354 ; CHECK-NEXT:    it ne
2355 ; CHECK-NEXT:    movne r7, #1
2356 ; CHECK-NEXT:    ldrd r3, r2, [sp, #4] @ 8-byte Folded Reload
2357 ; CHECK-NEXT:    mov r0, r11
2358 ; CHECK-NEXT:    mov r1, r4
2359 ; CHECK-NEXT:    mov r8, r4
2360 ; CHECK-NEXT:    bl __aeabi_dcmpge
2361 ; CHECK-NEXT:    clz r0, r0
2362 ; CHECK-NEXT:    mov r1, r8
2363 ; CHECK-NEXT:    lsrs r4, r0, #5
2364 ; CHECK-NEXT:    mov r0, r11
2365 ; CHECK-NEXT:    bl __aeabi_d2ulz
2366 ; CHECK-NEXT:    cmp r4, #0
2367 ; CHECK-NEXT:    it ne
2368 ; CHECK-NEXT:    movne r0, #0
2369 ; CHECK-NEXT:    cmp r7, #0
2370 ; CHECK-NEXT:    it ne
2371 ; CHECK-NEXT:    movwne r0, #8191
2372 ; CHECK-NEXT:    ldr r2, [sp, #12] @ 4-byte Reload
2373 ; CHECK-NEXT:    vmov q0[2], q0[0], r0, r5
2374 ; CHECK-NEXT:    cmp r2, #0
2375 ; CHECK-NEXT:    it ne
2376 ; CHECK-NEXT:    movne.w r10, #0
2377 ; CHECK-NEXT:    cmp r6, #0
2378 ; CHECK-NEXT:    it ne
2379 ; CHECK-NEXT:    movne.w r10, #0
2380 ; CHECK-NEXT:    cmp r4, #0
2381 ; CHECK-NEXT:    it ne
2382 ; CHECK-NEXT:    movne r1, #0
2383 ; CHECK-NEXT:    cmp r7, #0
2384 ; CHECK-NEXT:    it ne
2385 ; CHECK-NEXT:    movne r1, #0
2386 ; CHECK-NEXT:    vmov q0[3], q0[1], r1, r10
2387 ; CHECK-NEXT:    add sp, #16
2388 ; CHECK-NEXT:    vpop {d8, d9}
2389 ; CHECK-NEXT:    add sp, #4
2390 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
2391 ; CHECK-NEXT:    .p2align 3
2392 ; CHECK-NEXT:  @ %bb.1:
2393 ; CHECK-NEXT:  .LCPI34_0:
2394 ; CHECK-NEXT:    .long 0 @ double 0
2395 ; CHECK-NEXT:    .long 0
2396 ; CHECK-NEXT:  .LCPI34_1:
2397 ; CHECK-NEXT:    .long 0 @ double 8191
2398 ; CHECK-NEXT:    .long 1086324480
2399     %x = call <2 x i13> @llvm.fptoui.sat.v2f64.v2i13(<2 x double> %f)
2400     ret <2 x i13> %x
2403 define arm_aapcs_vfpcc <2 x i16> @test_unsigned_v2f64_v2i16(<2 x double> %f) {
2404 ; CHECK-LABEL: test_unsigned_v2f64_v2i16:
2405 ; CHECK:       @ %bb.0:
2406 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2407 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2408 ; CHECK-NEXT:    .pad #4
2409 ; CHECK-NEXT:    sub sp, #4
2410 ; CHECK-NEXT:    .vsave {d8, d9}
2411 ; CHECK-NEXT:    vpush {d8, d9}
2412 ; CHECK-NEXT:    .pad #16
2413 ; CHECK-NEXT:    sub sp, #16
2414 ; CHECK-NEXT:    vmov q4, q0
2415 ; CHECK-NEXT:    vldr d0, .LCPI35_0
2416 ; CHECK-NEXT:    vmov r6, r7, d9
2417 ; CHECK-NEXT:    vmov r2, r3, d0
2418 ; CHECK-NEXT:    mov r0, r6
2419 ; CHECK-NEXT:    mov r1, r7
2420 ; CHECK-NEXT:    strd r3, r2, [sp, #4] @ 8-byte Folded Spill
2421 ; CHECK-NEXT:    bl __aeabi_dcmpge
2422 ; CHECK-NEXT:    str r0, [sp, #12] @ 4-byte Spill
2423 ; CHECK-NEXT:    mov r0, r6
2424 ; CHECK-NEXT:    mov r1, r7
2425 ; CHECK-NEXT:    bl __aeabi_d2ulz
2426 ; CHECK-NEXT:    vldr d0, .LCPI35_1
2427 ; CHECK-NEXT:    mov r5, r0
2428 ; CHECK-NEXT:    ldr r0, [sp, #12] @ 4-byte Reload
2429 ; CHECK-NEXT:    mov r10, r1
2430 ; CHECK-NEXT:    vmov r9, r8, d0
2431 ; CHECK-NEXT:    mov r1, r7
2432 ; CHECK-NEXT:    clz r0, r0
2433 ; CHECK-NEXT:    vmov r11, r4, d8
2434 ; CHECK-NEXT:    lsrs r0, r0, #5
2435 ; CHECK-NEXT:    str r0, [sp, #12] @ 4-byte Spill
2436 ; CHECK-NEXT:    mov r0, r6
2437 ; CHECK-NEXT:    it ne
2438 ; CHECK-NEXT:    movne r5, #0
2439 ; CHECK-NEXT:    mov r2, r9
2440 ; CHECK-NEXT:    mov r3, r8
2441 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2442 ; CHECK-NEXT:    mov r6, r0
2443 ; CHECK-NEXT:    cmp r0, #0
2444 ; CHECK-NEXT:    mov r0, r11
2445 ; CHECK-NEXT:    mov r1, r4
2446 ; CHECK-NEXT:    mov r2, r9
2447 ; CHECK-NEXT:    mov r3, r8
2448 ; CHECK-NEXT:    it ne
2449 ; CHECK-NEXT:    movne r6, #1
2450 ; CHECK-NEXT:    cmp r6, #0
2451 ; CHECK-NEXT:    it ne
2452 ; CHECK-NEXT:    movwne r5, #65535
2453 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2454 ; CHECK-NEXT:    mov r7, r0
2455 ; CHECK-NEXT:    cmp r0, #0
2456 ; CHECK-NEXT:    it ne
2457 ; CHECK-NEXT:    movne r7, #1
2458 ; CHECK-NEXT:    ldrd r3, r2, [sp, #4] @ 8-byte Folded Reload
2459 ; CHECK-NEXT:    mov r0, r11
2460 ; CHECK-NEXT:    mov r1, r4
2461 ; CHECK-NEXT:    mov r8, r4
2462 ; CHECK-NEXT:    bl __aeabi_dcmpge
2463 ; CHECK-NEXT:    clz r0, r0
2464 ; CHECK-NEXT:    mov r1, r8
2465 ; CHECK-NEXT:    lsrs r4, r0, #5
2466 ; CHECK-NEXT:    mov r0, r11
2467 ; CHECK-NEXT:    bl __aeabi_d2ulz
2468 ; CHECK-NEXT:    cmp r4, #0
2469 ; CHECK-NEXT:    it ne
2470 ; CHECK-NEXT:    movne r0, #0
2471 ; CHECK-NEXT:    cmp r7, #0
2472 ; CHECK-NEXT:    it ne
2473 ; CHECK-NEXT:    movwne r0, #65535
2474 ; CHECK-NEXT:    ldr r2, [sp, #12] @ 4-byte Reload
2475 ; CHECK-NEXT:    vmov q0[2], q0[0], r0, r5
2476 ; CHECK-NEXT:    cmp r2, #0
2477 ; CHECK-NEXT:    it ne
2478 ; CHECK-NEXT:    movne.w r10, #0
2479 ; CHECK-NEXT:    cmp r6, #0
2480 ; CHECK-NEXT:    it ne
2481 ; CHECK-NEXT:    movne.w r10, #0
2482 ; CHECK-NEXT:    cmp r4, #0
2483 ; CHECK-NEXT:    it ne
2484 ; CHECK-NEXT:    movne r1, #0
2485 ; CHECK-NEXT:    cmp r7, #0
2486 ; CHECK-NEXT:    it ne
2487 ; CHECK-NEXT:    movne r1, #0
2488 ; CHECK-NEXT:    vmov q0[3], q0[1], r1, r10
2489 ; CHECK-NEXT:    add sp, #16
2490 ; CHECK-NEXT:    vpop {d8, d9}
2491 ; CHECK-NEXT:    add sp, #4
2492 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
2493 ; CHECK-NEXT:    .p2align 3
2494 ; CHECK-NEXT:  @ %bb.1:
2495 ; CHECK-NEXT:  .LCPI35_0:
2496 ; CHECK-NEXT:    .long 0 @ double 0
2497 ; CHECK-NEXT:    .long 0
2498 ; CHECK-NEXT:  .LCPI35_1:
2499 ; CHECK-NEXT:    .long 0 @ double 65535
2500 ; CHECK-NEXT:    .long 1089470432
2501     %x = call <2 x i16> @llvm.fptoui.sat.v2f64.v2i16(<2 x double> %f)
2502     ret <2 x i16> %x
2505 define arm_aapcs_vfpcc <2 x i19> @test_unsigned_v2f64_v2i19(<2 x double> %f) {
2506 ; CHECK-LABEL: test_unsigned_v2f64_v2i19:
2507 ; CHECK:       @ %bb.0:
2508 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2509 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2510 ; CHECK-NEXT:    .pad #4
2511 ; CHECK-NEXT:    sub sp, #4
2512 ; CHECK-NEXT:    .vsave {d8, d9}
2513 ; CHECK-NEXT:    vpush {d8, d9}
2514 ; CHECK-NEXT:    .pad #16
2515 ; CHECK-NEXT:    sub sp, #16
2516 ; CHECK-NEXT:    vmov q4, q0
2517 ; CHECK-NEXT:    vldr d0, .LCPI36_0
2518 ; CHECK-NEXT:    vmov r11, r10, d8
2519 ; CHECK-NEXT:    vmov r2, r3, d0
2520 ; CHECK-NEXT:    mov r0, r11
2521 ; CHECK-NEXT:    mov r1, r10
2522 ; CHECK-NEXT:    strd r2, r3, [sp, #8] @ 8-byte Folded Spill
2523 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2524 ; CHECK-NEXT:    vldr d0, .LCPI36_1
2525 ; CHECK-NEXT:    mov r4, r0
2526 ; CHECK-NEXT:    cmp r0, #0
2527 ; CHECK-NEXT:    mov r0, r11
2528 ; CHECK-NEXT:    vmov r5, r7, d0
2529 ; CHECK-NEXT:    mov r1, r10
2530 ; CHECK-NEXT:    vmov r8, r6, d9
2531 ; CHECK-NEXT:    it ne
2532 ; CHECK-NEXT:    movne r4, #1
2533 ; CHECK-NEXT:    mov r2, r5
2534 ; CHECK-NEXT:    mov r3, r7
2535 ; CHECK-NEXT:    bl __aeabi_dcmpge
2536 ; CHECK-NEXT:    clz r0, r0
2537 ; CHECK-NEXT:    mov r1, r6
2538 ; CHECK-NEXT:    mov r2, r5
2539 ; CHECK-NEXT:    mov r3, r7
2540 ; CHECK-NEXT:    lsrs r0, r0, #5
2541 ; CHECK-NEXT:    str r0, [sp, #4] @ 4-byte Spill
2542 ; CHECK-NEXT:    mov r0, r8
2543 ; CHECK-NEXT:    bl __aeabi_dcmpge
2544 ; CHECK-NEXT:    clz r0, r0
2545 ; CHECK-NEXT:    mov r1, r6
2546 ; CHECK-NEXT:    lsr.w r9, r0, #5
2547 ; CHECK-NEXT:    mov r0, r8
2548 ; CHECK-NEXT:    bl __aeabi_d2ulz
2549 ; CHECK-NEXT:    mov r5, r0
2550 ; CHECK-NEXT:    cmp.w r9, #0
2551 ; CHECK-NEXT:    it ne
2552 ; CHECK-NEXT:    movne r5, #0
2553 ; CHECK-NEXT:    ldrd r2, r3, [sp, #8] @ 8-byte Folded Reload
2554 ; CHECK-NEXT:    mov r7, r1
2555 ; CHECK-NEXT:    mov r0, r8
2556 ; CHECK-NEXT:    mov r1, r6
2557 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2558 ; CHECK-NEXT:    mov r6, r0
2559 ; CHECK-NEXT:    cmp r0, #0
2560 ; CHECK-NEXT:    mov r0, r11
2561 ; CHECK-NEXT:    mov r1, r10
2562 ; CHECK-NEXT:    it ne
2563 ; CHECK-NEXT:    movne r6, #1
2564 ; CHECK-NEXT:    cmp r6, #0
2565 ; CHECK-NEXT:    itt ne
2566 ; CHECK-NEXT:    movwne r5, #65535
2567 ; CHECK-NEXT:    movtne r5, #7
2568 ; CHECK-NEXT:    bl __aeabi_d2ulz
2569 ; CHECK-NEXT:    ldr r2, [sp, #4] @ 4-byte Reload
2570 ; CHECK-NEXT:    cmp r2, #0
2571 ; CHECK-NEXT:    it ne
2572 ; CHECK-NEXT:    movne r0, #0
2573 ; CHECK-NEXT:    cmp r4, #0
2574 ; CHECK-NEXT:    itt ne
2575 ; CHECK-NEXT:    movwne r0, #65535
2576 ; CHECK-NEXT:    movtne r0, #7
2577 ; CHECK-NEXT:    cmp.w r9, #0
2578 ; CHECK-NEXT:    it ne
2579 ; CHECK-NEXT:    movne r7, #0
2580 ; CHECK-NEXT:    cmp r6, #0
2581 ; CHECK-NEXT:    it ne
2582 ; CHECK-NEXT:    movne r7, #0
2583 ; CHECK-NEXT:    cmp r2, #0
2584 ; CHECK-NEXT:    it ne
2585 ; CHECK-NEXT:    movne r1, #0
2586 ; CHECK-NEXT:    vmov q0[2], q0[0], r0, r5
2587 ; CHECK-NEXT:    cmp r4, #0
2588 ; CHECK-NEXT:    it ne
2589 ; CHECK-NEXT:    movne r1, #0
2590 ; CHECK-NEXT:    vmov q0[3], q0[1], r1, r7
2591 ; CHECK-NEXT:    add sp, #16
2592 ; CHECK-NEXT:    vpop {d8, d9}
2593 ; CHECK-NEXT:    add sp, #4
2594 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
2595 ; CHECK-NEXT:    .p2align 3
2596 ; CHECK-NEXT:  @ %bb.1:
2597 ; CHECK-NEXT:  .LCPI36_0:
2598 ; CHECK-NEXT:    .long 0 @ double 524287
2599 ; CHECK-NEXT:    .long 1092616188
2600 ; CHECK-NEXT:  .LCPI36_1:
2601 ; CHECK-NEXT:    .long 0 @ double 0
2602 ; CHECK-NEXT:    .long 0
2603     %x = call <2 x i19> @llvm.fptoui.sat.v2f64.v2i19(<2 x double> %f)
2604     ret <2 x i19> %x
2607 define arm_aapcs_vfpcc <2 x i32> @test_unsigned_v2f64_v2i32_duplicate(<2 x double> %f) {
2608 ; CHECK-LABEL: test_unsigned_v2f64_v2i32_duplicate:
2609 ; CHECK:       @ %bb.0:
2610 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2611 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2612 ; CHECK-NEXT:    .pad #4
2613 ; CHECK-NEXT:    sub sp, #4
2614 ; CHECK-NEXT:    .vsave {d8, d9}
2615 ; CHECK-NEXT:    vpush {d8, d9}
2616 ; CHECK-NEXT:    .pad #16
2617 ; CHECK-NEXT:    sub sp, #16
2618 ; CHECK-NEXT:    vmov q4, q0
2619 ; CHECK-NEXT:    vldr d0, .LCPI37_0
2620 ; CHECK-NEXT:    vmov r6, r7, d9
2621 ; CHECK-NEXT:    vmov r2, r3, d0
2622 ; CHECK-NEXT:    mov r0, r6
2623 ; CHECK-NEXT:    mov r1, r7
2624 ; CHECK-NEXT:    strd r3, r2, [sp, #4] @ 8-byte Folded Spill
2625 ; CHECK-NEXT:    bl __aeabi_dcmpge
2626 ; CHECK-NEXT:    str r0, [sp, #12] @ 4-byte Spill
2627 ; CHECK-NEXT:    mov r0, r6
2628 ; CHECK-NEXT:    mov r1, r7
2629 ; CHECK-NEXT:    bl __aeabi_d2ulz
2630 ; CHECK-NEXT:    vldr d0, .LCPI37_1
2631 ; CHECK-NEXT:    mov r5, r0
2632 ; CHECK-NEXT:    ldr r0, [sp, #12] @ 4-byte Reload
2633 ; CHECK-NEXT:    mov r10, r1
2634 ; CHECK-NEXT:    vmov r9, r8, d0
2635 ; CHECK-NEXT:    mov r1, r7
2636 ; CHECK-NEXT:    clz r0, r0
2637 ; CHECK-NEXT:    vmov r11, r4, d8
2638 ; CHECK-NEXT:    lsrs r0, r0, #5
2639 ; CHECK-NEXT:    str r0, [sp, #12] @ 4-byte Spill
2640 ; CHECK-NEXT:    mov r0, r6
2641 ; CHECK-NEXT:    it ne
2642 ; CHECK-NEXT:    movne r5, #0
2643 ; CHECK-NEXT:    mov r2, r9
2644 ; CHECK-NEXT:    mov r3, r8
2645 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2646 ; CHECK-NEXT:    mov r6, r0
2647 ; CHECK-NEXT:    cmp r0, #0
2648 ; CHECK-NEXT:    mov r0, r11
2649 ; CHECK-NEXT:    mov r1, r4
2650 ; CHECK-NEXT:    mov r2, r9
2651 ; CHECK-NEXT:    mov r3, r8
2652 ; CHECK-NEXT:    it ne
2653 ; CHECK-NEXT:    movne r6, #1
2654 ; CHECK-NEXT:    cmp r6, #0
2655 ; CHECK-NEXT:    it ne
2656 ; CHECK-NEXT:    movne.w r5, #-1
2657 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2658 ; CHECK-NEXT:    mov r7, r0
2659 ; CHECK-NEXT:    cmp r0, #0
2660 ; CHECK-NEXT:    it ne
2661 ; CHECK-NEXT:    movne r7, #1
2662 ; CHECK-NEXT:    ldrd r3, r2, [sp, #4] @ 8-byte Folded Reload
2663 ; CHECK-NEXT:    mov r0, r11
2664 ; CHECK-NEXT:    mov r1, r4
2665 ; CHECK-NEXT:    mov r8, r4
2666 ; CHECK-NEXT:    bl __aeabi_dcmpge
2667 ; CHECK-NEXT:    clz r0, r0
2668 ; CHECK-NEXT:    mov r1, r8
2669 ; CHECK-NEXT:    lsrs r4, r0, #5
2670 ; CHECK-NEXT:    mov r0, r11
2671 ; CHECK-NEXT:    bl __aeabi_d2ulz
2672 ; CHECK-NEXT:    cmp r4, #0
2673 ; CHECK-NEXT:    it ne
2674 ; CHECK-NEXT:    movne r0, #0
2675 ; CHECK-NEXT:    cmp r7, #0
2676 ; CHECK-NEXT:    it ne
2677 ; CHECK-NEXT:    movne.w r0, #-1
2678 ; CHECK-NEXT:    ldr r2, [sp, #12] @ 4-byte Reload
2679 ; CHECK-NEXT:    vmov q0[2], q0[0], r0, r5
2680 ; CHECK-NEXT:    cmp r2, #0
2681 ; CHECK-NEXT:    it ne
2682 ; CHECK-NEXT:    movne.w r10, #0
2683 ; CHECK-NEXT:    cmp r6, #0
2684 ; CHECK-NEXT:    it ne
2685 ; CHECK-NEXT:    movne.w r10, #0
2686 ; CHECK-NEXT:    cmp r4, #0
2687 ; CHECK-NEXT:    it ne
2688 ; CHECK-NEXT:    movne r1, #0
2689 ; CHECK-NEXT:    cmp r7, #0
2690 ; CHECK-NEXT:    it ne
2691 ; CHECK-NEXT:    movne r1, #0
2692 ; CHECK-NEXT:    vmov q0[3], q0[1], r1, r10
2693 ; CHECK-NEXT:    add sp, #16
2694 ; CHECK-NEXT:    vpop {d8, d9}
2695 ; CHECK-NEXT:    add sp, #4
2696 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
2697 ; CHECK-NEXT:    .p2align 3
2698 ; CHECK-NEXT:  @ %bb.1:
2699 ; CHECK-NEXT:  .LCPI37_0:
2700 ; CHECK-NEXT:    .long 0 @ double 0
2701 ; CHECK-NEXT:    .long 0
2702 ; CHECK-NEXT:  .LCPI37_1:
2703 ; CHECK-NEXT:    .long 4292870144 @ double 4294967295
2704 ; CHECK-NEXT:    .long 1106247679
2705     %x = call <2 x i32> @llvm.fptoui.sat.v2f64.v2i32(<2 x double> %f)
2706     ret <2 x i32> %x
2709 define arm_aapcs_vfpcc <2 x i50> @test_unsigned_v2f64_v2i50(<2 x double> %f) {
2710 ; CHECK-LABEL: test_unsigned_v2f64_v2i50:
2711 ; CHECK:       @ %bb.0:
2712 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2713 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2714 ; CHECK-NEXT:    .pad #4
2715 ; CHECK-NEXT:    sub sp, #4
2716 ; CHECK-NEXT:    .vsave {d8, d9}
2717 ; CHECK-NEXT:    vpush {d8, d9}
2718 ; CHECK-NEXT:    .pad #16
2719 ; CHECK-NEXT:    sub sp, #16
2720 ; CHECK-NEXT:    vmov q4, q0
2721 ; CHECK-NEXT:    vldr d0, .LCPI38_0
2722 ; CHECK-NEXT:    vmov r11, r10, d8
2723 ; CHECK-NEXT:    vmov r2, r3, d0
2724 ; CHECK-NEXT:    mov r0, r11
2725 ; CHECK-NEXT:    mov r1, r10
2726 ; CHECK-NEXT:    strd r2, r3, [sp, #8] @ 8-byte Folded Spill
2727 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2728 ; CHECK-NEXT:    vldr d0, .LCPI38_1
2729 ; CHECK-NEXT:    mov r4, r0
2730 ; CHECK-NEXT:    cmp r0, #0
2731 ; CHECK-NEXT:    mov r0, r11
2732 ; CHECK-NEXT:    vmov r5, r7, d0
2733 ; CHECK-NEXT:    mov r1, r10
2734 ; CHECK-NEXT:    vmov r8, r6, d9
2735 ; CHECK-NEXT:    it ne
2736 ; CHECK-NEXT:    movne r4, #1
2737 ; CHECK-NEXT:    mov r2, r5
2738 ; CHECK-NEXT:    mov r3, r7
2739 ; CHECK-NEXT:    bl __aeabi_dcmpge
2740 ; CHECK-NEXT:    clz r0, r0
2741 ; CHECK-NEXT:    mov r1, r6
2742 ; CHECK-NEXT:    mov r2, r5
2743 ; CHECK-NEXT:    mov r3, r7
2744 ; CHECK-NEXT:    lsrs r0, r0, #5
2745 ; CHECK-NEXT:    str r0, [sp, #4] @ 4-byte Spill
2746 ; CHECK-NEXT:    mov r0, r8
2747 ; CHECK-NEXT:    bl __aeabi_dcmpge
2748 ; CHECK-NEXT:    clz r0, r0
2749 ; CHECK-NEXT:    mov r1, r6
2750 ; CHECK-NEXT:    lsr.w r9, r0, #5
2751 ; CHECK-NEXT:    mov r0, r8
2752 ; CHECK-NEXT:    bl __aeabi_d2ulz
2753 ; CHECK-NEXT:    mov r7, r1
2754 ; CHECK-NEXT:    cmp.w r9, #0
2755 ; CHECK-NEXT:    it ne
2756 ; CHECK-NEXT:    movne r7, #0
2757 ; CHECK-NEXT:    ldrd r2, r3, [sp, #8] @ 8-byte Folded Reload
2758 ; CHECK-NEXT:    mov r5, r0
2759 ; CHECK-NEXT:    mov r0, r8
2760 ; CHECK-NEXT:    mov r1, r6
2761 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2762 ; CHECK-NEXT:    mov r6, r0
2763 ; CHECK-NEXT:    cmp r0, #0
2764 ; CHECK-NEXT:    mov r0, r11
2765 ; CHECK-NEXT:    mov r1, r10
2766 ; CHECK-NEXT:    it ne
2767 ; CHECK-NEXT:    movne r6, #1
2768 ; CHECK-NEXT:    cmp r6, #0
2769 ; CHECK-NEXT:    itt ne
2770 ; CHECK-NEXT:    movwne r7, #65535
2771 ; CHECK-NEXT:    movtne r7, #3
2772 ; CHECK-NEXT:    bl __aeabi_d2ulz
2773 ; CHECK-NEXT:    ldr r2, [sp, #4] @ 4-byte Reload
2774 ; CHECK-NEXT:    cmp r2, #0
2775 ; CHECK-NEXT:    it ne
2776 ; CHECK-NEXT:    movne r1, #0
2777 ; CHECK-NEXT:    cmp r4, #0
2778 ; CHECK-NEXT:    itt ne
2779 ; CHECK-NEXT:    movwne r1, #65535
2780 ; CHECK-NEXT:    movtne r1, #3
2781 ; CHECK-NEXT:    cmp.w r9, #0
2782 ; CHECK-NEXT:    it ne
2783 ; CHECK-NEXT:    movne r5, #0
2784 ; CHECK-NEXT:    cmp r6, #0
2785 ; CHECK-NEXT:    it ne
2786 ; CHECK-NEXT:    movne.w r5, #-1
2787 ; CHECK-NEXT:    cmp r2, #0
2788 ; CHECK-NEXT:    it ne
2789 ; CHECK-NEXT:    movne r0, #0
2790 ; CHECK-NEXT:    cmp r4, #0
2791 ; CHECK-NEXT:    it ne
2792 ; CHECK-NEXT:    movne.w r0, #-1
2793 ; CHECK-NEXT:    vmov q0[2], q0[0], r0, r5
2794 ; CHECK-NEXT:    vmov q0[3], q0[1], r1, r7
2795 ; CHECK-NEXT:    add sp, #16
2796 ; CHECK-NEXT:    vpop {d8, d9}
2797 ; CHECK-NEXT:    add sp, #4
2798 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
2799 ; CHECK-NEXT:    .p2align 3
2800 ; CHECK-NEXT:  @ %bb.1:
2801 ; CHECK-NEXT:  .LCPI38_0:
2802 ; CHECK-NEXT:    .long 4294967288 @ double 1125899906842623
2803 ; CHECK-NEXT:    .long 1125122047
2804 ; CHECK-NEXT:  .LCPI38_1:
2805 ; CHECK-NEXT:    .long 0 @ double 0
2806 ; CHECK-NEXT:    .long 0
2807     %x = call <2 x i50> @llvm.fptoui.sat.v2f64.v2i50(<2 x double> %f)
2808     ret <2 x i50> %x
2811 define arm_aapcs_vfpcc <2 x i64> @test_unsigned_v2f64_v2i64(<2 x double> %f) {
2812 ; CHECK-LABEL: test_unsigned_v2f64_v2i64:
2813 ; CHECK:       @ %bb.0:
2814 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2815 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2816 ; CHECK-NEXT:    .pad #4
2817 ; CHECK-NEXT:    sub sp, #4
2818 ; CHECK-NEXT:    .vsave {d8, d9}
2819 ; CHECK-NEXT:    vpush {d8, d9}
2820 ; CHECK-NEXT:    .pad #16
2821 ; CHECK-NEXT:    sub sp, #16
2822 ; CHECK-NEXT:    vmov q4, q0
2823 ; CHECK-NEXT:    vldr d0, .LCPI39_0
2824 ; CHECK-NEXT:    vmov r6, r7, d9
2825 ; CHECK-NEXT:    vmov r2, r3, d0
2826 ; CHECK-NEXT:    mov r0, r6
2827 ; CHECK-NEXT:    mov r1, r7
2828 ; CHECK-NEXT:    strd r3, r2, [sp, #4] @ 8-byte Folded Spill
2829 ; CHECK-NEXT:    bl __aeabi_dcmpge
2830 ; CHECK-NEXT:    str r0, [sp, #12] @ 4-byte Spill
2831 ; CHECK-NEXT:    mov r0, r6
2832 ; CHECK-NEXT:    mov r1, r7
2833 ; CHECK-NEXT:    bl __aeabi_d2ulz
2834 ; CHECK-NEXT:    vldr d0, .LCPI39_1
2835 ; CHECK-NEXT:    mov r5, r0
2836 ; CHECK-NEXT:    ldr r0, [sp, #12] @ 4-byte Reload
2837 ; CHECK-NEXT:    mov r10, r1
2838 ; CHECK-NEXT:    vmov r9, r8, d0
2839 ; CHECK-NEXT:    mov r1, r7
2840 ; CHECK-NEXT:    clz r0, r0
2841 ; CHECK-NEXT:    vmov r11, r4, d8
2842 ; CHECK-NEXT:    lsrs r0, r0, #5
2843 ; CHECK-NEXT:    str r0, [sp, #12] @ 4-byte Spill
2844 ; CHECK-NEXT:    mov r0, r6
2845 ; CHECK-NEXT:    it ne
2846 ; CHECK-NEXT:    movne r5, #0
2847 ; CHECK-NEXT:    mov r2, r9
2848 ; CHECK-NEXT:    mov r3, r8
2849 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2850 ; CHECK-NEXT:    mov r6, r0
2851 ; CHECK-NEXT:    cmp r0, #0
2852 ; CHECK-NEXT:    mov r0, r11
2853 ; CHECK-NEXT:    mov r1, r4
2854 ; CHECK-NEXT:    mov r2, r9
2855 ; CHECK-NEXT:    mov r3, r8
2856 ; CHECK-NEXT:    it ne
2857 ; CHECK-NEXT:    movne r6, #1
2858 ; CHECK-NEXT:    cmp r6, #0
2859 ; CHECK-NEXT:    it ne
2860 ; CHECK-NEXT:    movne.w r5, #-1
2861 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2862 ; CHECK-NEXT:    mov r7, r0
2863 ; CHECK-NEXT:    cmp r0, #0
2864 ; CHECK-NEXT:    it ne
2865 ; CHECK-NEXT:    movne r7, #1
2866 ; CHECK-NEXT:    ldrd r3, r2, [sp, #4] @ 8-byte Folded Reload
2867 ; CHECK-NEXT:    mov r0, r11
2868 ; CHECK-NEXT:    mov r1, r4
2869 ; CHECK-NEXT:    mov r8, r4
2870 ; CHECK-NEXT:    bl __aeabi_dcmpge
2871 ; CHECK-NEXT:    clz r0, r0
2872 ; CHECK-NEXT:    mov r1, r8
2873 ; CHECK-NEXT:    lsrs r4, r0, #5
2874 ; CHECK-NEXT:    mov r0, r11
2875 ; CHECK-NEXT:    bl __aeabi_d2ulz
2876 ; CHECK-NEXT:    cmp r4, #0
2877 ; CHECK-NEXT:    it ne
2878 ; CHECK-NEXT:    movne r0, #0
2879 ; CHECK-NEXT:    cmp r7, #0
2880 ; CHECK-NEXT:    it ne
2881 ; CHECK-NEXT:    movne.w r0, #-1
2882 ; CHECK-NEXT:    ldr r2, [sp, #12] @ 4-byte Reload
2883 ; CHECK-NEXT:    vmov q0[2], q0[0], r0, r5
2884 ; CHECK-NEXT:    cmp r2, #0
2885 ; CHECK-NEXT:    it ne
2886 ; CHECK-NEXT:    movne.w r10, #0
2887 ; CHECK-NEXT:    cmp r6, #0
2888 ; CHECK-NEXT:    it ne
2889 ; CHECK-NEXT:    movne.w r10, #-1
2890 ; CHECK-NEXT:    cmp r4, #0
2891 ; CHECK-NEXT:    it ne
2892 ; CHECK-NEXT:    movne r1, #0
2893 ; CHECK-NEXT:    cmp r7, #0
2894 ; CHECK-NEXT:    it ne
2895 ; CHECK-NEXT:    movne.w r1, #-1
2896 ; CHECK-NEXT:    vmov q0[3], q0[1], r1, r10
2897 ; CHECK-NEXT:    add sp, #16
2898 ; CHECK-NEXT:    vpop {d8, d9}
2899 ; CHECK-NEXT:    add sp, #4
2900 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
2901 ; CHECK-NEXT:    .p2align 3
2902 ; CHECK-NEXT:  @ %bb.1:
2903 ; CHECK-NEXT:  .LCPI39_0:
2904 ; CHECK-NEXT:    .long 0 @ double 0
2905 ; CHECK-NEXT:    .long 0
2906 ; CHECK-NEXT:  .LCPI39_1:
2907 ; CHECK-NEXT:    .long 4294967295 @ double 1.844674407370955E+19
2908 ; CHECK-NEXT:    .long 1139802111
2909     %x = call <2 x i64> @llvm.fptoui.sat.v2f64.v2i64(<2 x double> %f)
2910     ret <2 x i64> %x
2913 define arm_aapcs_vfpcc <2 x i100> @test_unsigned_v2f64_v2i100(<2 x double> %f) {
2914 ; CHECK-LABEL: test_unsigned_v2f64_v2i100:
2915 ; CHECK:       @ %bb.0:
2916 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2917 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
2918 ; CHECK-NEXT:    .pad #4
2919 ; CHECK-NEXT:    sub sp, #4
2920 ; CHECK-NEXT:    .vsave {d8, d9}
2921 ; CHECK-NEXT:    vpush {d8, d9}
2922 ; CHECK-NEXT:    .pad #48
2923 ; CHECK-NEXT:    sub sp, #48
2924 ; CHECK-NEXT:    vmov q4, q0
2925 ; CHECK-NEXT:    vldr d0, .LCPI40_0
2926 ; CHECK-NEXT:    vmov r9, r5, d8
2927 ; CHECK-NEXT:    str r0, [sp, #44] @ 4-byte Spill
2928 ; CHECK-NEXT:    vmov r2, r3, d0
2929 ; CHECK-NEXT:    mov r0, r9
2930 ; CHECK-NEXT:    mov r1, r5
2931 ; CHECK-NEXT:    mov r7, r2
2932 ; CHECK-NEXT:    mov r6, r3
2933 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2934 ; CHECK-NEXT:    vldr d0, .LCPI40_1
2935 ; CHECK-NEXT:    mov r11, r0
2936 ; CHECK-NEXT:    mov r0, r9
2937 ; CHECK-NEXT:    mov r1, r5
2938 ; CHECK-NEXT:    vmov r2, r3, d0
2939 ; CHECK-NEXT:    str r2, [sp, #40] @ 4-byte Spill
2940 ; CHECK-NEXT:    mov r10, r3
2941 ; CHECK-NEXT:    bl __aeabi_dcmpge
2942 ; CHECK-NEXT:    mov r8, r0
2943 ; CHECK-NEXT:    mov r0, r9
2944 ; CHECK-NEXT:    mov r1, r5
2945 ; CHECK-NEXT:    bl __fixunsdfti
2946 ; CHECK-NEXT:    cmp.w r8, #0
2947 ; CHECK-NEXT:    strd r1, r0, [sp, #8] @ 8-byte Folded Spill
2948 ; CHECK-NEXT:    csel r0, r2, r8, ne
2949 ; CHECK-NEXT:    str r3, [sp, #24] @ 4-byte Spill
2950 ; CHECK-NEXT:    cmp.w r11, #0
2951 ; CHECK-NEXT:    it ne
2952 ; CHECK-NEXT:    movne.w r0, #-1
2953 ; CHECK-NEXT:    ldr r4, [sp, #44] @ 4-byte Reload
2954 ; CHECK-NEXT:    mov r1, r5
2955 ; CHECK-NEXT:    mov r2, r7
2956 ; CHECK-NEXT:    mov r3, r6
2957 ; CHECK-NEXT:    mov r11, r7
2958 ; CHECK-NEXT:    str r0, [r4, #8]
2959 ; CHECK-NEXT:    mov r0, r9
2960 ; CHECK-NEXT:    str r5, [sp, #20] @ 4-byte Spill
2961 ; CHECK-NEXT:    str r7, [sp, #28] @ 4-byte Spill
2962 ; CHECK-NEXT:    str r6, [sp, #32] @ 4-byte Spill
2963 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2964 ; CHECK-NEXT:    ldr r7, [sp, #40] @ 4-byte Reload
2965 ; CHECK-NEXT:    mov r8, r0
2966 ; CHECK-NEXT:    mov r0, r9
2967 ; CHECK-NEXT:    mov r1, r5
2968 ; CHECK-NEXT:    mov r3, r10
2969 ; CHECK-NEXT:    str.w r9, [sp, #16] @ 4-byte Spill
2970 ; CHECK-NEXT:    mov r2, r7
2971 ; CHECK-NEXT:    bl __aeabi_dcmpge
2972 ; CHECK-NEXT:    ldr r1, [sp, #8] @ 4-byte Reload
2973 ; CHECK-NEXT:    cmp r0, #0
2974 ; CHECK-NEXT:    mov r2, r11
2975 ; CHECK-NEXT:    mov r3, r6
2976 ; CHECK-NEXT:    csel r0, r1, r0, ne
2977 ; CHECK-NEXT:    cmp.w r8, #0
2978 ; CHECK-NEXT:    it ne
2979 ; CHECK-NEXT:    movne.w r0, #-1
2980 ; CHECK-NEXT:    str r0, [r4, #4]
2981 ; CHECK-NEXT:    mov r0, r9
2982 ; CHECK-NEXT:    mov r1, r5
2983 ; CHECK-NEXT:    bl __aeabi_dcmpgt
2984 ; CHECK-NEXT:    mov r6, r0
2985 ; CHECK-NEXT:    mov r0, r9
2986 ; CHECK-NEXT:    mov r1, r5
2987 ; CHECK-NEXT:    mov r2, r7
2988 ; CHECK-NEXT:    mov r3, r10
2989 ; CHECK-NEXT:    mov r9, r7
2990 ; CHECK-NEXT:    str.w r10, [sp, #36] @ 4-byte Spill
2991 ; CHECK-NEXT:    bl __aeabi_dcmpge
2992 ; CHECK-NEXT:    vmov r8, r11, d9
2993 ; CHECK-NEXT:    ldr r1, [sp, #12] @ 4-byte Reload
2994 ; CHECK-NEXT:    cmp r0, #0
2995 ; CHECK-NEXT:    csel r0, r1, r0, ne
2996 ; CHECK-NEXT:    cmp r6, #0
2997 ; CHECK-NEXT:    it ne
2998 ; CHECK-NEXT:    movne.w r0, #-1
2999 ; CHECK-NEXT:    str r0, [r4]
3000 ; CHECK-NEXT:    ldr r5, [sp, #28] @ 4-byte Reload
3001 ; CHECK-NEXT:    ldr r6, [sp, #32] @ 4-byte Reload
3002 ; CHECK-NEXT:    mov r2, r5
3003 ; CHECK-NEXT:    mov r3, r6
3004 ; CHECK-NEXT:    mov r0, r8
3005 ; CHECK-NEXT:    mov r1, r11
3006 ; CHECK-NEXT:    bl __aeabi_dcmpgt
3007 ; CHECK-NEXT:    mov r4, r0
3008 ; CHECK-NEXT:    mov r0, r8
3009 ; CHECK-NEXT:    mov r1, r11
3010 ; CHECK-NEXT:    mov r2, r7
3011 ; CHECK-NEXT:    mov r3, r10
3012 ; CHECK-NEXT:    bl __aeabi_dcmpge
3013 ; CHECK-NEXT:    mov r10, r0
3014 ; CHECK-NEXT:    mov r0, r8
3015 ; CHECK-NEXT:    mov r1, r11
3016 ; CHECK-NEXT:    bl __fixunsdfti
3017 ; CHECK-NEXT:    cmp.w r10, #0
3018 ; CHECK-NEXT:    strd r2, r0, [sp, #4] @ 8-byte Folded Spill
3019 ; CHECK-NEXT:    csel r7, r1, r10, ne
3020 ; CHECK-NEXT:    str r3, [sp, #12] @ 4-byte Spill
3021 ; CHECK-NEXT:    mov r0, r8
3022 ; CHECK-NEXT:    mov r1, r11
3023 ; CHECK-NEXT:    mov r2, r5
3024 ; CHECK-NEXT:    mov r3, r6
3025 ; CHECK-NEXT:    cmp r4, #0
3026 ; CHECK-NEXT:    it ne
3027 ; CHECK-NEXT:    movne.w r7, #-1
3028 ; CHECK-NEXT:    mov r4, r6
3029 ; CHECK-NEXT:    bl __aeabi_dcmpgt
3030 ; CHECK-NEXT:    ldr.w r10, [sp, #36] @ 4-byte Reload
3031 ; CHECK-NEXT:    mov r6, r0
3032 ; CHECK-NEXT:    mov r0, r8
3033 ; CHECK-NEXT:    mov r1, r11
3034 ; CHECK-NEXT:    mov r2, r9
3035 ; CHECK-NEXT:    mov r3, r10
3036 ; CHECK-NEXT:    bl __aeabi_dcmpge
3037 ; CHECK-NEXT:    ldr r1, [sp, #4] @ 4-byte Reload
3038 ; CHECK-NEXT:    cmp r0, #0
3039 ; CHECK-NEXT:    mov r2, r5
3040 ; CHECK-NEXT:    mov r3, r4
3041 ; CHECK-NEXT:    csel r9, r1, r0, ne
3042 ; CHECK-NEXT:    cmp r6, #0
3043 ; CHECK-NEXT:    it ne
3044 ; CHECK-NEXT:    movne.w r9, #-1
3045 ; CHECK-NEXT:    ldr r6, [sp, #44] @ 4-byte Reload
3046 ; CHECK-NEXT:    lsrs r0, r7, #28
3047 ; CHECK-NEXT:    mov r1, r11
3048 ; CHECK-NEXT:    orr.w r0, r0, r9, lsl #4
3049 ; CHECK-NEXT:    str r0, [r6, #20]
3050 ; CHECK-NEXT:    mov r0, r8
3051 ; CHECK-NEXT:    bl __aeabi_dcmpgt
3052 ; CHECK-NEXT:    ldr r2, [sp, #40] @ 4-byte Reload
3053 ; CHECK-NEXT:    mov r1, r11
3054 ; CHECK-NEXT:    str r0, [sp, #4] @ 4-byte Spill
3055 ; CHECK-NEXT:    mov r0, r8
3056 ; CHECK-NEXT:    mov r3, r10
3057 ; CHECK-NEXT:    mov r5, r10
3058 ; CHECK-NEXT:    bl __aeabi_dcmpge
3059 ; CHECK-NEXT:    ldr r1, [sp, #8] @ 4-byte Reload
3060 ; CHECK-NEXT:    cmp r0, #0
3061 ; CHECK-NEXT:    csel r4, r1, r0, ne
3062 ; CHECK-NEXT:    ldr r0, [sp, #4] @ 4-byte Reload
3063 ; CHECK-NEXT:    mov r1, r11
3064 ; CHECK-NEXT:    cmp r0, #0
3065 ; CHECK-NEXT:    it ne
3066 ; CHECK-NEXT:    movne.w r4, #-1
3067 ; CHECK-NEXT:    lsrs r0, r4, #28
3068 ; CHECK-NEXT:    orr.w r0, r0, r7, lsl #4
3069 ; CHECK-NEXT:    str r0, [r6, #16]
3070 ; CHECK-NEXT:    ldr r6, [sp, #28] @ 4-byte Reload
3071 ; CHECK-NEXT:    mov r0, r8
3072 ; CHECK-NEXT:    ldr.w r10, [sp, #32] @ 4-byte Reload
3073 ; CHECK-NEXT:    mov r2, r6
3074 ; CHECK-NEXT:    mov r3, r10
3075 ; CHECK-NEXT:    bl __aeabi_dcmpgt
3076 ; CHECK-NEXT:    mov r1, r11
3077 ; CHECK-NEXT:    ldr.w r11, [sp, #40] @ 4-byte Reload
3078 ; CHECK-NEXT:    mov r7, r0
3079 ; CHECK-NEXT:    mov r0, r8
3080 ; CHECK-NEXT:    mov r3, r5
3081 ; CHECK-NEXT:    mov r2, r11
3082 ; CHECK-NEXT:    bl __aeabi_dcmpge
3083 ; CHECK-NEXT:    ldr r1, [sp, #12] @ 4-byte Reload
3084 ; CHECK-NEXT:    cmp r0, #0
3085 ; CHECK-NEXT:    mov r2, r6
3086 ; CHECK-NEXT:    mov r3, r10
3087 ; CHECK-NEXT:    csel r0, r1, r0, ne
3088 ; CHECK-NEXT:    cmp r7, #0
3089 ; CHECK-NEXT:    it ne
3090 ; CHECK-NEXT:    movne r0, #15
3091 ; CHECK-NEXT:    lsr.w r1, r9, #28
3092 ; CHECK-NEXT:    ldr.w r9, [sp, #44] @ 4-byte Reload
3093 ; CHECK-NEXT:    orr.w r0, r1, r0, lsl #4
3094 ; CHECK-NEXT:    strb.w r0, [r9, #24]
3095 ; CHECK-NEXT:    ldr r7, [sp, #16] @ 4-byte Reload
3096 ; CHECK-NEXT:    ldr r5, [sp, #20] @ 4-byte Reload
3097 ; CHECK-NEXT:    mov r0, r7
3098 ; CHECK-NEXT:    mov r1, r5
3099 ; CHECK-NEXT:    bl __aeabi_dcmpgt
3100 ; CHECK-NEXT:    ldr r3, [sp, #36] @ 4-byte Reload
3101 ; CHECK-NEXT:    mov r8, r0
3102 ; CHECK-NEXT:    mov r0, r7
3103 ; CHECK-NEXT:    mov r1, r5
3104 ; CHECK-NEXT:    mov r2, r11
3105 ; CHECK-NEXT:    bl __aeabi_dcmpge
3106 ; CHECK-NEXT:    ldr r1, [sp, #24] @ 4-byte Reload
3107 ; CHECK-NEXT:    cmp r0, #0
3108 ; CHECK-NEXT:    csel r0, r1, r0, ne
3109 ; CHECK-NEXT:    cmp.w r8, #0
3110 ; CHECK-NEXT:    it ne
3111 ; CHECK-NEXT:    movne r0, #15
3112 ; CHECK-NEXT:    and r0, r0, #15
3113 ; CHECK-NEXT:    orr.w r0, r0, r4, lsl #4
3114 ; CHECK-NEXT:    str.w r0, [r9, #12]
3115 ; CHECK-NEXT:    add sp, #48
3116 ; CHECK-NEXT:    vpop {d8, d9}
3117 ; CHECK-NEXT:    add sp, #4
3118 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
3119 ; CHECK-NEXT:    .p2align 3
3120 ; CHECK-NEXT:  @ %bb.1:
3121 ; CHECK-NEXT:  .LCPI40_0:
3122 ; CHECK-NEXT:    .long 4294967295 @ double 1.2676506002282293E+30
3123 ; CHECK-NEXT:    .long 1177550847
3124 ; CHECK-NEXT:  .LCPI40_1:
3125 ; CHECK-NEXT:    .long 0 @ double 0
3126 ; CHECK-NEXT:    .long 0
3127     %x = call <2 x i100> @llvm.fptoui.sat.v2f64.v2i100(<2 x double> %f)
3128     ret <2 x i100> %x
3131 define arm_aapcs_vfpcc <2 x i128> @test_unsigned_v2f64_v2i128(<2 x double> %f) {
3132 ; CHECK-LABEL: test_unsigned_v2f64_v2i128:
3133 ; CHECK:       @ %bb.0:
3134 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
3135 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
3136 ; CHECK-NEXT:    .pad #4
3137 ; CHECK-NEXT:    sub sp, #4
3138 ; CHECK-NEXT:    .vsave {d8, d9}
3139 ; CHECK-NEXT:    vpush {d8, d9}
3140 ; CHECK-NEXT:    .pad #32
3141 ; CHECK-NEXT:    sub sp, #32
3142 ; CHECK-NEXT:    vmov q4, q0
3143 ; CHECK-NEXT:    vldr d0, .LCPI41_0
3144 ; CHECK-NEXT:    vmov r8, r7, d9
3145 ; CHECK-NEXT:    str r0, [sp, #24] @ 4-byte Spill
3146 ; CHECK-NEXT:    vmov r6, r4, d0
3147 ; CHECK-NEXT:    mov r0, r8
3148 ; CHECK-NEXT:    mov r1, r7
3149 ; CHECK-NEXT:    mov r2, r6
3150 ; CHECK-NEXT:    mov r3, r4
3151 ; CHECK-NEXT:    bl __aeabi_dcmpgt
3152 ; CHECK-NEXT:    vldr d0, .LCPI41_1
3153 ; CHECK-NEXT:    mov r9, r0
3154 ; CHECK-NEXT:    mov r0, r8
3155 ; CHECK-NEXT:    mov r1, r7
3156 ; CHECK-NEXT:    vmov r10, r11, d0
3157 ; CHECK-NEXT:    mov r2, r10
3158 ; CHECK-NEXT:    mov r3, r11
3159 ; CHECK-NEXT:    bl __aeabi_dcmpge
3160 ; CHECK-NEXT:    mov r5, r0
3161 ; CHECK-NEXT:    mov r0, r8
3162 ; CHECK-NEXT:    mov r1, r7
3163 ; CHECK-NEXT:    bl __fixunsdfti
3164 ; CHECK-NEXT:    cmp r5, #0
3165 ; CHECK-NEXT:    strd r1, r0, [sp, #16] @ 8-byte Folded Spill
3166 ; CHECK-NEXT:    csel r0, r3, r5, ne
3167 ; CHECK-NEXT:    str r2, [sp, #8] @ 4-byte Spill
3168 ; CHECK-NEXT:    cmp.w r9, #0
3169 ; CHECK-NEXT:    it ne
3170 ; CHECK-NEXT:    movne.w r0, #-1
3171 ; CHECK-NEXT:    ldr r5, [sp, #24] @ 4-byte Reload
3172 ; CHECK-NEXT:    mov r1, r7
3173 ; CHECK-NEXT:    mov r2, r6
3174 ; CHECK-NEXT:    mov r3, r4
3175 ; CHECK-NEXT:    str r0, [r5, #28]
3176 ; CHECK-NEXT:    mov r0, r8
3177 ; CHECK-NEXT:    str r6, [sp, #28] @ 4-byte Spill
3178 ; CHECK-NEXT:    bl __aeabi_dcmpgt
3179 ; CHECK-NEXT:    mov r9, r0
3180 ; CHECK-NEXT:    mov r0, r8
3181 ; CHECK-NEXT:    mov r1, r7
3182 ; CHECK-NEXT:    mov r2, r10
3183 ; CHECK-NEXT:    mov r3, r11
3184 ; CHECK-NEXT:    str.w r10, [sp, #4] @ 4-byte Spill
3185 ; CHECK-NEXT:    bl __aeabi_dcmpge
3186 ; CHECK-NEXT:    ldr r1, [sp, #8] @ 4-byte Reload
3187 ; CHECK-NEXT:    cmp r0, #0
3188 ; CHECK-NEXT:    mov r2, r6
3189 ; CHECK-NEXT:    mov r3, r4
3190 ; CHECK-NEXT:    csel r0, r1, r0, ne
3191 ; CHECK-NEXT:    cmp.w r9, #0
3192 ; CHECK-NEXT:    it ne
3193 ; CHECK-NEXT:    movne.w r0, #-1
3194 ; CHECK-NEXT:    str r0, [r5, #24]
3195 ; CHECK-NEXT:    mov r0, r8
3196 ; CHECK-NEXT:    mov r1, r7
3197 ; CHECK-NEXT:    str r4, [sp] @ 4-byte Spill
3198 ; CHECK-NEXT:    bl __aeabi_dcmpgt
3199 ; CHECK-NEXT:    mov r9, r0
3200 ; CHECK-NEXT:    mov r0, r8
3201 ; CHECK-NEXT:    mov r1, r7
3202 ; CHECK-NEXT:    mov r2, r10
3203 ; CHECK-NEXT:    mov r3, r11
3204 ; CHECK-NEXT:    bl __aeabi_dcmpge
3205 ; CHECK-NEXT:    ldr r1, [sp, #16] @ 4-byte Reload
3206 ; CHECK-NEXT:    cmp r0, #0
3207 ; CHECK-NEXT:    mov r3, r4
3208 ; CHECK-NEXT:    vmov r6, r5, d8
3209 ; CHECK-NEXT:    csel r0, r1, r0, ne
3210 ; CHECK-NEXT:    cmp.w r9, #0
3211 ; CHECK-NEXT:    it ne
3212 ; CHECK-NEXT:    movne.w r0, #-1
3213 ; CHECK-NEXT:    ldr.w r9, [sp, #24] @ 4-byte Reload
3214 ; CHECK-NEXT:    mov r1, r7
3215 ; CHECK-NEXT:    str.w r0, [r9, #20]
3216 ; CHECK-NEXT:    mov r0, r8
3217 ; CHECK-NEXT:    ldr r2, [sp, #28] @ 4-byte Reload
3218 ; CHECK-NEXT:    bl __aeabi_dcmpgt
3219 ; CHECK-NEXT:    ldr r4, [sp, #4] @ 4-byte Reload
3220 ; CHECK-NEXT:    mov r10, r0
3221 ; CHECK-NEXT:    mov r1, r7
3222 ; CHECK-NEXT:    mov r0, r8
3223 ; CHECK-NEXT:    mov r3, r11
3224 ; CHECK-NEXT:    mov r7, r11
3225 ; CHECK-NEXT:    mov r2, r4
3226 ; CHECK-NEXT:    str.w r11, [sp, #12] @ 4-byte Spill
3227 ; CHECK-NEXT:    bl __aeabi_dcmpge
3228 ; CHECK-NEXT:    ldr r1, [sp, #20] @ 4-byte Reload
3229 ; CHECK-NEXT:    cmp r0, #0
3230 ; CHECK-NEXT:    mov r11, r9
3231 ; CHECK-NEXT:    csel r0, r1, r0, ne
3232 ; CHECK-NEXT:    cmp.w r10, #0
3233 ; CHECK-NEXT:    it ne
3234 ; CHECK-NEXT:    movne.w r0, #-1
3235 ; CHECK-NEXT:    str.w r0, [r9, #16]
3236 ; CHECK-NEXT:    ldr.w r8, [sp, #28] @ 4-byte Reload
3237 ; CHECK-NEXT:    mov r0, r6
3238 ; CHECK-NEXT:    ldr.w r9, [sp] @ 4-byte Reload
3239 ; CHECK-NEXT:    mov r1, r5
3240 ; CHECK-NEXT:    mov r2, r8
3241 ; CHECK-NEXT:    mov r3, r9
3242 ; CHECK-NEXT:    bl __aeabi_dcmpgt
3243 ; CHECK-NEXT:    mov r10, r0
3244 ; CHECK-NEXT:    mov r0, r6
3245 ; CHECK-NEXT:    mov r1, r5
3246 ; CHECK-NEXT:    mov r2, r4
3247 ; CHECK-NEXT:    mov r3, r7
3248 ; CHECK-NEXT:    bl __aeabi_dcmpge
3249 ; CHECK-NEXT:    mov r7, r0
3250 ; CHECK-NEXT:    mov r0, r6
3251 ; CHECK-NEXT:    mov r1, r5
3252 ; CHECK-NEXT:    bl __fixunsdfti
3253 ; CHECK-NEXT:    cmp r7, #0
3254 ; CHECK-NEXT:    strd r1, r0, [sp, #16] @ 8-byte Folded Spill
3255 ; CHECK-NEXT:    csel r0, r3, r7, ne
3256 ; CHECK-NEXT:    str r2, [sp, #8] @ 4-byte Spill
3257 ; CHECK-NEXT:    cmp.w r10, #0
3258 ; CHECK-NEXT:    it ne
3259 ; CHECK-NEXT:    movne.w r0, #-1
3260 ; CHECK-NEXT:    str.w r0, [r11, #12]
3261 ; CHECK-NEXT:    mov r0, r6
3262 ; CHECK-NEXT:    mov r1, r5
3263 ; CHECK-NEXT:    mov r2, r8
3264 ; CHECK-NEXT:    mov r3, r9
3265 ; CHECK-NEXT:    mov r7, r11
3266 ; CHECK-NEXT:    bl __aeabi_dcmpgt
3267 ; CHECK-NEXT:    mov r2, r4
3268 ; CHECK-NEXT:    mov r10, r4
3269 ; CHECK-NEXT:    ldr r4, [sp, #12] @ 4-byte Reload
3270 ; CHECK-NEXT:    mov r11, r0
3271 ; CHECK-NEXT:    mov r0, r6
3272 ; CHECK-NEXT:    mov r1, r5
3273 ; CHECK-NEXT:    mov r3, r4
3274 ; CHECK-NEXT:    bl __aeabi_dcmpge
3275 ; CHECK-NEXT:    ldr r1, [sp, #8] @ 4-byte Reload
3276 ; CHECK-NEXT:    cmp r0, #0
3277 ; CHECK-NEXT:    mov r2, r8
3278 ; CHECK-NEXT:    mov r3, r9
3279 ; CHECK-NEXT:    csel r0, r1, r0, ne
3280 ; CHECK-NEXT:    cmp.w r11, #0
3281 ; CHECK-NEXT:    it ne
3282 ; CHECK-NEXT:    movne.w r0, #-1
3283 ; CHECK-NEXT:    str r0, [r7, #8]
3284 ; CHECK-NEXT:    mov r0, r6
3285 ; CHECK-NEXT:    mov r1, r5
3286 ; CHECK-NEXT:    bl __aeabi_dcmpgt
3287 ; CHECK-NEXT:    mov r11, r0
3288 ; CHECK-NEXT:    mov r0, r6
3289 ; CHECK-NEXT:    mov r1, r5
3290 ; CHECK-NEXT:    mov r2, r10
3291 ; CHECK-NEXT:    mov r3, r4
3292 ; CHECK-NEXT:    bl __aeabi_dcmpge
3293 ; CHECK-NEXT:    ldr r1, [sp, #16] @ 4-byte Reload
3294 ; CHECK-NEXT:    cmp r0, #0
3295 ; CHECK-NEXT:    mov r2, r8
3296 ; CHECK-NEXT:    mov r3, r9
3297 ; CHECK-NEXT:    csel r0, r1, r0, ne
3298 ; CHECK-NEXT:    cmp.w r11, #0
3299 ; CHECK-NEXT:    it ne
3300 ; CHECK-NEXT:    movne.w r0, #-1
3301 ; CHECK-NEXT:    str r0, [r7, #4]
3302 ; CHECK-NEXT:    mov r0, r6
3303 ; CHECK-NEXT:    mov r1, r5
3304 ; CHECK-NEXT:    bl __aeabi_dcmpgt
3305 ; CHECK-NEXT:    mov r8, r0
3306 ; CHECK-NEXT:    mov r0, r6
3307 ; CHECK-NEXT:    mov r1, r5
3308 ; CHECK-NEXT:    mov r2, r10
3309 ; CHECK-NEXT:    mov r3, r4
3310 ; CHECK-NEXT:    bl __aeabi_dcmpge
3311 ; CHECK-NEXT:    ldr r1, [sp, #20] @ 4-byte Reload
3312 ; CHECK-NEXT:    cmp r0, #0
3313 ; CHECK-NEXT:    csel r0, r1, r0, ne
3314 ; CHECK-NEXT:    cmp.w r8, #0
3315 ; CHECK-NEXT:    it ne
3316 ; CHECK-NEXT:    movne.w r0, #-1
3317 ; CHECK-NEXT:    str r0, [r7]
3318 ; CHECK-NEXT:    add sp, #32
3319 ; CHECK-NEXT:    vpop {d8, d9}
3320 ; CHECK-NEXT:    add sp, #4
3321 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
3322 ; CHECK-NEXT:    .p2align 3
3323 ; CHECK-NEXT:  @ %bb.1:
3324 ; CHECK-NEXT:  .LCPI41_0:
3325 ; CHECK-NEXT:    .long 4294967295 @ double 3.4028236692093843E+38
3326 ; CHECK-NEXT:    .long 1206910975
3327 ; CHECK-NEXT:  .LCPI41_1:
3328 ; CHECK-NEXT:    .long 0 @ double 0
3329 ; CHECK-NEXT:    .long 0
3330     %x = call <2 x i128> @llvm.fptoui.sat.v2f64.v2i128(<2 x double> %f)
3331     ret <2 x i128> %x
3335 ; 4-Vector half to signed integer -- result size variation
3338 declare <8 x   i1> @llvm.fptoui.sat.v8f16.v8i1  (<8 x half>)
3339 declare <8 x   i8> @llvm.fptoui.sat.v8f16.v8i8  (<8 x half>)
3340 declare <8 x  i13> @llvm.fptoui.sat.v8f16.v8i13 (<8 x half>)
3341 declare <8 x  i16> @llvm.fptoui.sat.v8f16.v8i16 (<8 x half>)
3342 declare <8 x  i19> @llvm.fptoui.sat.v8f16.v8i19 (<8 x half>)
3343 declare <8 x  i50> @llvm.fptoui.sat.v8f16.v8i50 (<8 x half>)
3344 declare <8 x  i64> @llvm.fptoui.sat.v8f16.v8i64 (<8 x half>)
3345 declare <8 x i100> @llvm.fptoui.sat.v8f16.v8i100(<8 x half>)
3346 declare <8 x i128> @llvm.fptoui.sat.v8f16.v8i128(<8 x half>)
3348 define arm_aapcs_vfpcc <8 x i1> @test_unsigned_v8f16_v8i1(<8 x half> %f) {
3349 ; CHECK-LABEL: test_unsigned_v8f16_v8i1:
3350 ; CHECK:       @ %bb.0:
3351 ; CHECK-NEXT:    vldr s4, .LCPI42_0
3352 ; CHECK-NEXT:    vcvtt.f32.f16 s8, s3
3353 ; CHECK-NEXT:    vcvtb.f32.f16 s10, s3
3354 ; CHECK-NEXT:    vcvtb.f32.f16 s3, s0
3355 ; CHECK-NEXT:    vmov.f32 s6, #1.000000e+00
3356 ; CHECK-NEXT:    vmaxnm.f32 s3, s3, s4
3357 ; CHECK-NEXT:    vminnm.f32 s3, s3, s6
3358 ; CHECK-NEXT:    vcvtt.f32.f16 s0, s0
3359 ; CHECK-NEXT:    vcvt.u32.f32 s3, s3
3360 ; CHECK-NEXT:    vmaxnm.f32 s0, s0, s4
3361 ; CHECK-NEXT:    vminnm.f32 s0, s0, s6
3362 ; CHECK-NEXT:    movs r1, #0
3363 ; CHECK-NEXT:    vcvt.u32.f32 s0, s0
3364 ; CHECK-NEXT:    vcvtt.f32.f16 s14, s1
3365 ; CHECK-NEXT:    vcvtb.f32.f16 s1, s1
3366 ; CHECK-NEXT:    vmaxnm.f32 s14, s14, s4
3367 ; CHECK-NEXT:    vmaxnm.f32 s1, s1, s4
3368 ; CHECK-NEXT:    vminnm.f32 s14, s14, s6
3369 ; CHECK-NEXT:    vminnm.f32 s1, s1, s6
3370 ; CHECK-NEXT:    vcvt.u32.f32 s14, s14
3371 ; CHECK-NEXT:    vcvt.u32.f32 s1, s1
3372 ; CHECK-NEXT:    vcvtt.f32.f16 s12, s2
3373 ; CHECK-NEXT:    vmov r2, s3
3374 ; CHECK-NEXT:    vcvtb.f32.f16 s2, s2
3375 ; CHECK-NEXT:    vmaxnm.f32 s2, s2, s4
3376 ; CHECK-NEXT:    vmaxnm.f32 s12, s12, s4
3377 ; CHECK-NEXT:    vminnm.f32 s2, s2, s6
3378 ; CHECK-NEXT:    vminnm.f32 s12, s12, s6
3379 ; CHECK-NEXT:    vcvt.u32.f32 s2, s2
3380 ; CHECK-NEXT:    vmaxnm.f32 s10, s10, s4
3381 ; CHECK-NEXT:    vcvt.u32.f32 s12, s12
3382 ; CHECK-NEXT:    vminnm.f32 s10, s10, s6
3383 ; CHECK-NEXT:    vcvt.u32.f32 s10, s10
3384 ; CHECK-NEXT:    vmaxnm.f32 s8, s8, s4
3385 ; CHECK-NEXT:    vminnm.f32 s8, s8, s6
3386 ; CHECK-NEXT:    vcvt.u32.f32 s8, s8
3387 ; CHECK-NEXT:    and r2, r2, #1
3388 ; CHECK-NEXT:    rsbs r2, r2, #0
3389 ; CHECK-NEXT:    bfi r1, r2, #0, #1
3390 ; CHECK-NEXT:    vmov r2, s0
3391 ; CHECK-NEXT:    and r2, r2, #1
3392 ; CHECK-NEXT:    rsbs r2, r2, #0
3393 ; CHECK-NEXT:    bfi r1, r2, #1, #1
3394 ; CHECK-NEXT:    vmov r2, s1
3395 ; CHECK-NEXT:    and r2, r2, #1
3396 ; CHECK-NEXT:    rsbs r2, r2, #0
3397 ; CHECK-NEXT:    bfi r1, r2, #2, #1
3398 ; CHECK-NEXT:    vmov r2, s14
3399 ; CHECK-NEXT:    and r2, r2, #1
3400 ; CHECK-NEXT:    rsbs r2, r2, #0
3401 ; CHECK-NEXT:    bfi r1, r2, #3, #1
3402 ; CHECK-NEXT:    vmov r2, s2
3403 ; CHECK-NEXT:    and r2, r2, #1
3404 ; CHECK-NEXT:    rsbs r2, r2, #0
3405 ; CHECK-NEXT:    bfi r1, r2, #4, #1
3406 ; CHECK-NEXT:    vmov r2, s12
3407 ; CHECK-NEXT:    and r2, r2, #1
3408 ; CHECK-NEXT:    rsbs r2, r2, #0
3409 ; CHECK-NEXT:    bfi r1, r2, #5, #1
3410 ; CHECK-NEXT:    vmov r2, s10
3411 ; CHECK-NEXT:    and r2, r2, #1
3412 ; CHECK-NEXT:    rsbs r2, r2, #0
3413 ; CHECK-NEXT:    bfi r1, r2, #6, #1
3414 ; CHECK-NEXT:    vmov r2, s8
3415 ; CHECK-NEXT:    and r2, r2, #1
3416 ; CHECK-NEXT:    rsbs r2, r2, #0
3417 ; CHECK-NEXT:    bfi r1, r2, #7, #1
3418 ; CHECK-NEXT:    strb r1, [r0]
3419 ; CHECK-NEXT:    bx lr
3420 ; CHECK-NEXT:    .p2align 2
3421 ; CHECK-NEXT:  @ %bb.1:
3422 ; CHECK-NEXT:  .LCPI42_0:
3423 ; CHECK-NEXT:    .long 0x00000000 @ float 0
3424     %x = call <8 x i1> @llvm.fptoui.sat.v8f16.v8i1(<8 x half> %f)
3425     ret <8 x i1> %x
3428 define arm_aapcs_vfpcc <8 x i8> @test_unsigned_v8f16_v8i8(<8 x half> %f) {
3429 ; CHECK-MVE-LABEL: test_unsigned_v8f16_v8i8:
3430 ; CHECK-MVE:       @ %bb.0:
3431 ; CHECK-MVE-NEXT:    vldr s6, .LCPI43_1
3432 ; CHECK-MVE-NEXT:    vcvtt.f32.f16 s10, s2
3433 ; CHECK-MVE-NEXT:    vcvtb.f32.f16 s2, s2
3434 ; CHECK-MVE-NEXT:    vldr s4, .LCPI43_0
3435 ; CHECK-MVE-NEXT:    vmaxnm.f32 s2, s2, s6
3436 ; CHECK-MVE-NEXT:    vcvtt.f32.f16 s8, s3
3437 ; CHECK-MVE-NEXT:    vminnm.f32 s2, s2, s4
3438 ; CHECK-MVE-NEXT:    vcvtb.f32.f16 s12, s3
3439 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s5, s2
3440 ; CHECK-MVE-NEXT:    vcvtt.f32.f16 s2, s0
3441 ; CHECK-MVE-NEXT:    vmaxnm.f32 s2, s2, s6
3442 ; CHECK-MVE-NEXT:    vcvtb.f32.f16 s0, s0
3443 ; CHECK-MVE-NEXT:    vmaxnm.f32 s0, s0, s6
3444 ; CHECK-MVE-NEXT:    vminnm.f32 s2, s2, s4
3445 ; CHECK-MVE-NEXT:    vminnm.f32 s0, s0, s4
3446 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s7, s2
3447 ; CHECK-MVE-NEXT:    vcvtb.f32.f16 s2, s1
3448 ; CHECK-MVE-NEXT:    vcvtt.f32.f16 s14, s1
3449 ; CHECK-MVE-NEXT:    vmaxnm.f32 s2, s2, s6
3450 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s0, s0
3451 ; CHECK-MVE-NEXT:    vmaxnm.f32 s8, s8, s6
3452 ; CHECK-MVE-NEXT:    vmaxnm.f32 s10, s10, s6
3453 ; CHECK-MVE-NEXT:    vmaxnm.f32 s12, s12, s6
3454 ; CHECK-MVE-NEXT:    vmaxnm.f32 s14, s14, s6
3455 ; CHECK-MVE-NEXT:    vminnm.f32 s2, s2, s4
3456 ; CHECK-MVE-NEXT:    vminnm.f32 s8, s8, s4
3457 ; CHECK-MVE-NEXT:    vminnm.f32 s10, s10, s4
3458 ; CHECK-MVE-NEXT:    vminnm.f32 s12, s12, s4
3459 ; CHECK-MVE-NEXT:    vminnm.f32 s14, s14, s4
3460 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s4, s2
3461 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s14, s14
3462 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s10, s10
3463 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s12, s12
3464 ; CHECK-MVE-NEXT:    vmov r0, s0
3465 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s8, s8
3466 ; CHECK-MVE-NEXT:    vmov.16 q0[0], r0
3467 ; CHECK-MVE-NEXT:    vmov r0, s7
3468 ; CHECK-MVE-NEXT:    vmov.16 q0[1], r0
3469 ; CHECK-MVE-NEXT:    vmov r0, s4
3470 ; CHECK-MVE-NEXT:    vmov.16 q0[2], r0
3471 ; CHECK-MVE-NEXT:    vmov r0, s14
3472 ; CHECK-MVE-NEXT:    vmov.16 q0[3], r0
3473 ; CHECK-MVE-NEXT:    vmov r0, s5
3474 ; CHECK-MVE-NEXT:    vmov.16 q0[4], r0
3475 ; CHECK-MVE-NEXT:    vmov r0, s10
3476 ; CHECK-MVE-NEXT:    vmov.16 q0[5], r0
3477 ; CHECK-MVE-NEXT:    vmov r0, s12
3478 ; CHECK-MVE-NEXT:    vmov.16 q0[6], r0
3479 ; CHECK-MVE-NEXT:    vmov r0, s8
3480 ; CHECK-MVE-NEXT:    vmov.16 q0[7], r0
3481 ; CHECK-MVE-NEXT:    bx lr
3482 ; CHECK-MVE-NEXT:    .p2align 2
3483 ; CHECK-MVE-NEXT:  @ %bb.1:
3484 ; CHECK-MVE-NEXT:  .LCPI43_0:
3485 ; CHECK-MVE-NEXT:    .long 0x437f0000 @ float 255
3486 ; CHECK-MVE-NEXT:  .LCPI43_1:
3487 ; CHECK-MVE-NEXT:    .long 0x00000000 @ float 0
3489 ; CHECK-MVEFP-LABEL: test_unsigned_v8f16_v8i8:
3490 ; CHECK-MVEFP:       @ %bb.0:
3491 ; CHECK-MVEFP-NEXT:    vcvt.u16.f16 q0, q0
3492 ; CHECK-MVEFP-NEXT:    vqmovnb.u16 q0, q0
3493 ; CHECK-MVEFP-NEXT:    vmovlb.u8 q0, q0
3494 ; CHECK-MVEFP-NEXT:    bx lr
3495     %x = call <8 x i8> @llvm.fptoui.sat.v8f16.v8i8(<8 x half> %f)
3496     ret <8 x i8> %x
3499 define arm_aapcs_vfpcc <8 x i13> @test_unsigned_v8f16_v8i13(<8 x half> %f) {
3500 ; CHECK-MVE-LABEL: test_unsigned_v8f16_v8i13:
3501 ; CHECK-MVE:       @ %bb.0:
3502 ; CHECK-MVE-NEXT:    vldr s6, .LCPI44_1
3503 ; CHECK-MVE-NEXT:    vcvtt.f32.f16 s10, s2
3504 ; CHECK-MVE-NEXT:    vcvtb.f32.f16 s2, s2
3505 ; CHECK-MVE-NEXT:    vldr s4, .LCPI44_0
3506 ; CHECK-MVE-NEXT:    vmaxnm.f32 s2, s2, s6
3507 ; CHECK-MVE-NEXT:    vcvtt.f32.f16 s8, s3
3508 ; CHECK-MVE-NEXT:    vminnm.f32 s2, s2, s4
3509 ; CHECK-MVE-NEXT:    vcvtb.f32.f16 s12, s3
3510 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s5, s2
3511 ; CHECK-MVE-NEXT:    vcvtt.f32.f16 s2, s0
3512 ; CHECK-MVE-NEXT:    vmaxnm.f32 s2, s2, s6
3513 ; CHECK-MVE-NEXT:    vcvtb.f32.f16 s0, s0
3514 ; CHECK-MVE-NEXT:    vmaxnm.f32 s0, s0, s6
3515 ; CHECK-MVE-NEXT:    vminnm.f32 s2, s2, s4
3516 ; CHECK-MVE-NEXT:    vminnm.f32 s0, s0, s4
3517 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s7, s2
3518 ; CHECK-MVE-NEXT:    vcvtb.f32.f16 s2, s1
3519 ; CHECK-MVE-NEXT:    vcvtt.f32.f16 s14, s1
3520 ; CHECK-MVE-NEXT:    vmaxnm.f32 s2, s2, s6
3521 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s0, s0
3522 ; CHECK-MVE-NEXT:    vmaxnm.f32 s8, s8, s6
3523 ; CHECK-MVE-NEXT:    vmaxnm.f32 s10, s10, s6
3524 ; CHECK-MVE-NEXT:    vmaxnm.f32 s12, s12, s6
3525 ; CHECK-MVE-NEXT:    vmaxnm.f32 s14, s14, s6
3526 ; CHECK-MVE-NEXT:    vminnm.f32 s2, s2, s4
3527 ; CHECK-MVE-NEXT:    vminnm.f32 s8, s8, s4
3528 ; CHECK-MVE-NEXT:    vminnm.f32 s10, s10, s4
3529 ; CHECK-MVE-NEXT:    vminnm.f32 s12, s12, s4
3530 ; CHECK-MVE-NEXT:    vminnm.f32 s14, s14, s4
3531 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s4, s2
3532 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s14, s14
3533 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s10, s10
3534 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s12, s12
3535 ; CHECK-MVE-NEXT:    vmov r0, s0
3536 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s8, s8
3537 ; CHECK-MVE-NEXT:    vmov.16 q0[0], r0
3538 ; CHECK-MVE-NEXT:    vmov r0, s7
3539 ; CHECK-MVE-NEXT:    vmov.16 q0[1], r0
3540 ; CHECK-MVE-NEXT:    vmov r0, s4
3541 ; CHECK-MVE-NEXT:    vmov.16 q0[2], r0
3542 ; CHECK-MVE-NEXT:    vmov r0, s14
3543 ; CHECK-MVE-NEXT:    vmov.16 q0[3], r0
3544 ; CHECK-MVE-NEXT:    vmov r0, s5
3545 ; CHECK-MVE-NEXT:    vmov.16 q0[4], r0
3546 ; CHECK-MVE-NEXT:    vmov r0, s10
3547 ; CHECK-MVE-NEXT:    vmov.16 q0[5], r0
3548 ; CHECK-MVE-NEXT:    vmov r0, s12
3549 ; CHECK-MVE-NEXT:    vmov.16 q0[6], r0
3550 ; CHECK-MVE-NEXT:    vmov r0, s8
3551 ; CHECK-MVE-NEXT:    vmov.16 q0[7], r0
3552 ; CHECK-MVE-NEXT:    bx lr
3553 ; CHECK-MVE-NEXT:    .p2align 2
3554 ; CHECK-MVE-NEXT:  @ %bb.1:
3555 ; CHECK-MVE-NEXT:  .LCPI44_0:
3556 ; CHECK-MVE-NEXT:    .long 0x45fff800 @ float 8191
3557 ; CHECK-MVE-NEXT:  .LCPI44_1:
3558 ; CHECK-MVE-NEXT:    .long 0x00000000 @ float 0
3560 ; CHECK-MVEFP-LABEL: test_unsigned_v8f16_v8i13:
3561 ; CHECK-MVEFP:       @ %bb.0:
3562 ; CHECK-MVEFP-NEXT:    vmvn.i16 q1, #0xe000
3563 ; CHECK-MVEFP-NEXT:    vcvt.u16.f16 q0, q0
3564 ; CHECK-MVEFP-NEXT:    vmin.u16 q0, q0, q1
3565 ; CHECK-MVEFP-NEXT:    bx lr
3566     %x = call <8 x i13> @llvm.fptoui.sat.v8f16.v8i13(<8 x half> %f)
3567     ret <8 x i13> %x
3570 define arm_aapcs_vfpcc <8 x i16> @test_unsigned_v8f16_v8i16(<8 x half> %f) {
3571 ; CHECK-MVE-LABEL: test_unsigned_v8f16_v8i16:
3572 ; CHECK-MVE:       @ %bb.0:
3573 ; CHECK-MVE-NEXT:    vldr s6, .LCPI45_1
3574 ; CHECK-MVE-NEXT:    vcvtt.f32.f16 s10, s2
3575 ; CHECK-MVE-NEXT:    vcvtb.f32.f16 s2, s2
3576 ; CHECK-MVE-NEXT:    vldr s4, .LCPI45_0
3577 ; CHECK-MVE-NEXT:    vmaxnm.f32 s2, s2, s6
3578 ; CHECK-MVE-NEXT:    vcvtt.f32.f16 s8, s3
3579 ; CHECK-MVE-NEXT:    vminnm.f32 s2, s2, s4
3580 ; CHECK-MVE-NEXT:    vcvtb.f32.f16 s12, s3
3581 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s5, s2
3582 ; CHECK-MVE-NEXT:    vcvtt.f32.f16 s2, s0
3583 ; CHECK-MVE-NEXT:    vmaxnm.f32 s2, s2, s6
3584 ; CHECK-MVE-NEXT:    vcvtb.f32.f16 s0, s0
3585 ; CHECK-MVE-NEXT:    vmaxnm.f32 s0, s0, s6
3586 ; CHECK-MVE-NEXT:    vminnm.f32 s2, s2, s4
3587 ; CHECK-MVE-NEXT:    vminnm.f32 s0, s0, s4
3588 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s7, s2
3589 ; CHECK-MVE-NEXT:    vcvtb.f32.f16 s2, s1
3590 ; CHECK-MVE-NEXT:    vcvtt.f32.f16 s14, s1
3591 ; CHECK-MVE-NEXT:    vmaxnm.f32 s2, s2, s6
3592 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s0, s0
3593 ; CHECK-MVE-NEXT:    vmaxnm.f32 s8, s8, s6
3594 ; CHECK-MVE-NEXT:    vmaxnm.f32 s10, s10, s6
3595 ; CHECK-MVE-NEXT:    vmaxnm.f32 s12, s12, s6
3596 ; CHECK-MVE-NEXT:    vmaxnm.f32 s14, s14, s6
3597 ; CHECK-MVE-NEXT:    vminnm.f32 s2, s2, s4
3598 ; CHECK-MVE-NEXT:    vminnm.f32 s8, s8, s4
3599 ; CHECK-MVE-NEXT:    vminnm.f32 s10, s10, s4
3600 ; CHECK-MVE-NEXT:    vminnm.f32 s12, s12, s4
3601 ; CHECK-MVE-NEXT:    vminnm.f32 s14, s14, s4
3602 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s4, s2
3603 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s14, s14
3604 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s10, s10
3605 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s12, s12
3606 ; CHECK-MVE-NEXT:    vmov r0, s0
3607 ; CHECK-MVE-NEXT:    vcvt.u32.f32 s8, s8
3608 ; CHECK-MVE-NEXT:    vmov.16 q0[0], r0
3609 ; CHECK-MVE-NEXT:    vmov r0, s7
3610 ; CHECK-MVE-NEXT:    vmov.16 q0[1], r0
3611 ; CHECK-MVE-NEXT:    vmov r0, s4
3612 ; CHECK-MVE-NEXT:    vmov.16 q0[2], r0
3613 ; CHECK-MVE-NEXT:    vmov r0, s14
3614 ; CHECK-MVE-NEXT:    vmov.16 q0[3], r0
3615 ; CHECK-MVE-NEXT:    vmov r0, s5
3616 ; CHECK-MVE-NEXT:    vmov.16 q0[4], r0
3617 ; CHECK-MVE-NEXT:    vmov r0, s10
3618 ; CHECK-MVE-NEXT:    vmov.16 q0[5], r0
3619 ; CHECK-MVE-NEXT:    vmov r0, s12
3620 ; CHECK-MVE-NEXT:    vmov.16 q0[6], r0
3621 ; CHECK-MVE-NEXT:    vmov r0, s8
3622 ; CHECK-MVE-NEXT:    vmov.16 q0[7], r0
3623 ; CHECK-MVE-NEXT:    bx lr
3624 ; CHECK-MVE-NEXT:    .p2align 2
3625 ; CHECK-MVE-NEXT:  @ %bb.1:
3626 ; CHECK-MVE-NEXT:  .LCPI45_0:
3627 ; CHECK-MVE-NEXT:    .long 0x477fff00 @ float 65535
3628 ; CHECK-MVE-NEXT:  .LCPI45_1:
3629 ; CHECK-MVE-NEXT:    .long 0x00000000 @ float 0
3631 ; CHECK-MVEFP-LABEL: test_unsigned_v8f16_v8i16:
3632 ; CHECK-MVEFP:       @ %bb.0:
3633 ; CHECK-MVEFP-NEXT:    vcvt.u16.f16 q0, q0
3634 ; CHECK-MVEFP-NEXT:    bx lr
3635     %x = call <8 x i16> @llvm.fptoui.sat.v8f16.v8i16(<8 x half> %f)
3636     ret <8 x i16> %x
3639 define arm_aapcs_vfpcc <8 x i19> @test_unsigned_v8f16_v8i19(<8 x half> %f) {
3640 ; CHECK-LABEL: test_unsigned_v8f16_v8i19:
3641 ; CHECK:       @ %bb.0:
3642 ; CHECK-NEXT:    .save {r4, r5, r7, lr}
3643 ; CHECK-NEXT:    push {r4, r5, r7, lr}
3644 ; CHECK-NEXT:    vldr s6, .LCPI46_1
3645 ; CHECK-NEXT:    vcvtb.f32.f16 s8, s0
3646 ; CHECK-NEXT:    vcvtb.f32.f16 s12, s2
3647 ; CHECK-NEXT:    vcvtb.f32.f16 s10, s1
3648 ; CHECK-NEXT:    vcvtt.f32.f16 s14, s1
3649 ; CHECK-NEXT:    vcvtb.f32.f16 s1, s3
3650 ; CHECK-NEXT:    vcvtt.f32.f16 s0, s0
3651 ; CHECK-NEXT:    vcvtt.f32.f16 s2, s2
3652 ; CHECK-NEXT:    vldr s4, .LCPI46_0
3653 ; CHECK-NEXT:    vcvtt.f32.f16 s3, s3
3654 ; CHECK-NEXT:    vmaxnm.f32 s8, s8, s6
3655 ; CHECK-NEXT:    vmaxnm.f32 s10, s10, s6
3656 ; CHECK-NEXT:    vmaxnm.f32 s0, s0, s6
3657 ; CHECK-NEXT:    vmaxnm.f32 s12, s12, s6
3658 ; CHECK-NEXT:    vmaxnm.f32 s14, s14, s6
3659 ; CHECK-NEXT:    vmaxnm.f32 s2, s2, s6
3660 ; CHECK-NEXT:    vmaxnm.f32 s1, s1, s6
3661 ; CHECK-NEXT:    vmaxnm.f32 s6, s3, s6
3662 ; CHECK-NEXT:    vminnm.f32 s8, s8, s4
3663 ; CHECK-NEXT:    vminnm.f32 s10, s10, s4
3664 ; CHECK-NEXT:    vminnm.f32 s0, s0, s4
3665 ; CHECK-NEXT:    vminnm.f32 s12, s12, s4
3666 ; CHECK-NEXT:    vminnm.f32 s14, s14, s4
3667 ; CHECK-NEXT:    vminnm.f32 s2, s2, s4
3668 ; CHECK-NEXT:    vminnm.f32 s1, s1, s4
3669 ; CHECK-NEXT:    vminnm.f32 s4, s6, s4
3670 ; CHECK-NEXT:    vcvt.u32.f32 s1, s1
3671 ; CHECK-NEXT:    vcvt.u32.f32 s4, s4
3672 ; CHECK-NEXT:    vcvt.u32.f32 s2, s2
3673 ; CHECK-NEXT:    vcvt.u32.f32 s14, s14
3674 ; CHECK-NEXT:    vcvt.u32.f32 s12, s12
3675 ; CHECK-NEXT:    vcvt.u32.f32 s0, s0
3676 ; CHECK-NEXT:    vcvt.u32.f32 s10, s10
3677 ; CHECK-NEXT:    vmov r1, s1
3678 ; CHECK-NEXT:    vmov r3, s4
3679 ; CHECK-NEXT:    vcvt.u32.f32 s8, s8
3680 ; CHECK-NEXT:    vmov r4, s12
3681 ; CHECK-NEXT:    vmov r5, s10
3682 ; CHECK-NEXT:    lsrs r2, r1, #14
3683 ; CHECK-NEXT:    orr.w r12, r2, r3, lsl #5
3684 ; CHECK-NEXT:    vmov r3, s2
3685 ; CHECK-NEXT:    strh.w r12, [r0, #16]
3686 ; CHECK-NEXT:    lsrs r2, r3, #1
3687 ; CHECK-NEXT:    orr.w lr, r2, r1, lsl #18
3688 ; CHECK-NEXT:    vmov r2, s14
3689 ; CHECK-NEXT:    lsrs r1, r2, #7
3690 ; CHECK-NEXT:    orr.w r1, r1, r4, lsl #12
3691 ; CHECK-NEXT:    orr.w r1, r1, r3, lsl #31
3692 ; CHECK-NEXT:    vmov r3, s0
3693 ; CHECK-NEXT:    lsrs r4, r3, #13
3694 ; CHECK-NEXT:    orr.w r4, r4, r5, lsl #6
3695 ; CHECK-NEXT:    orr.w r2, r4, r2, lsl #25
3696 ; CHECK-NEXT:    vmov r4, s8
3697 ; CHECK-NEXT:    orr.w r3, r4, r3, lsl #19
3698 ; CHECK-NEXT:    strd r3, r2, [r0]
3699 ; CHECK-NEXT:    strd r1, lr, [r0, #8]
3700 ; CHECK-NEXT:    lsr.w r1, r12, #16
3701 ; CHECK-NEXT:    strb r1, [r0, #18]
3702 ; CHECK-NEXT:    pop {r4, r5, r7, pc}
3703 ; CHECK-NEXT:    .p2align 2
3704 ; CHECK-NEXT:  @ %bb.1:
3705 ; CHECK-NEXT:  .LCPI46_0:
3706 ; CHECK-NEXT:    .long 0x48ffffe0 @ float 524287
3707 ; CHECK-NEXT:  .LCPI46_1:
3708 ; CHECK-NEXT:    .long 0x00000000 @ float 0
3709     %x = call <8 x i19> @llvm.fptoui.sat.v8f16.v8i19(<8 x half> %f)
3710     ret <8 x i19> %x
3713 define arm_aapcs_vfpcc <8 x i32> @test_unsigned_v8f16_v8i32_duplicate(<8 x half> %f) {
3714 ; CHECK-LABEL: test_unsigned_v8f16_v8i32_duplicate:
3715 ; CHECK:       @ %bb.0:
3716 ; CHECK-NEXT:    vmovx.f16 s4, s3
3717 ; CHECK-NEXT:    vmovx.f16 s6, s0
3718 ; CHECK-NEXT:    vcvt.u32.f16 s8, s4
3719 ; CHECK-NEXT:    vmovx.f16 s4, s2
3720 ; CHECK-NEXT:    vcvt.u32.f16 s10, s4
3721 ; CHECK-NEXT:    vmovx.f16 s4, s1
3722 ; CHECK-NEXT:    vcvt.u32.f16 s14, s2
3723 ; CHECK-NEXT:    vcvt.u32.f16 s2, s1
3724 ; CHECK-NEXT:    vcvt.u32.f16 s0, s0
3725 ; CHECK-NEXT:    vcvt.u32.f16 s4, s4
3726 ; CHECK-NEXT:    vcvt.u32.f16 s6, s6
3727 ; CHECK-NEXT:    vmov r0, s2
3728 ; CHECK-NEXT:    vmov r1, s0
3729 ; CHECK-NEXT:    vcvt.u32.f16 s12, s3
3730 ; CHECK-NEXT:    vmov q0[2], q0[0], r1, r0
3731 ; CHECK-NEXT:    vmov r0, s4
3732 ; CHECK-NEXT:    vmov r1, s6
3733 ; CHECK-NEXT:    vmov q0[3], q0[1], r1, r0
3734 ; CHECK-NEXT:    vmov r0, s12
3735 ; CHECK-NEXT:    vmov r1, s14
3736 ; CHECK-NEXT:    vmov q1[2], q1[0], r1, r0
3737 ; CHECK-NEXT:    vmov r0, s8
3738 ; CHECK-NEXT:    vmov r1, s10
3739 ; CHECK-NEXT:    vmov q1[3], q1[1], r1, r0
3740 ; CHECK-NEXT:    bx lr
3741     %x = call <8 x i32> @llvm.fptoui.sat.v8f16.v8i32(<8 x half> %f)
3742     ret <8 x i32> %x
3745 define arm_aapcs_vfpcc <8 x i50> @test_unsigned_v8f16_v8i50(<8 x half> %f) {
3746 ; CHECK-LABEL: test_unsigned_v8f16_v8i50:
3747 ; CHECK:       @ %bb.0:
3748 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
3749 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
3750 ; CHECK-NEXT:    .pad #4
3751 ; CHECK-NEXT:    sub sp, #4
3752 ; CHECK-NEXT:    .vsave {d8, d9, d10, d11, d12, d13}
3753 ; CHECK-NEXT:    vpush {d8, d9, d10, d11, d12, d13}
3754 ; CHECK-NEXT:    .pad #16
3755 ; CHECK-NEXT:    sub sp, #16
3756 ; CHECK-NEXT:    vmov q4, q0
3757 ; CHECK-NEXT:    mov r4, r0
3758 ; CHECK-NEXT:    vcvtb.f32.f16 s24, s18
3759 ; CHECK-NEXT:    vmov r0, s24
3760 ; CHECK-NEXT:    bl __aeabi_f2ulz
3761 ; CHECK-NEXT:    vcvtt.f32.f16 s26, s19
3762 ; CHECK-NEXT:    mov r7, r0
3763 ; CHECK-NEXT:    vmov r0, s26
3764 ; CHECK-NEXT:    vcvtb.f32.f16 s22, s16
3765 ; CHECK-NEXT:    vcvtt.f32.f16 s18, s18
3766 ; CHECK-NEXT:    vcmp.f32 s24, #0
3767 ; CHECK-NEXT:    str r1, [sp, #8] @ 4-byte Spill
3768 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3769 ; CHECK-NEXT:    vmov r5, s22
3770 ; CHECK-NEXT:    vldr s20, .LCPI48_0
3771 ; CHECK-NEXT:    vmov r8, s18
3772 ; CHECK-NEXT:    it lt
3773 ; CHECK-NEXT:    movlt r7, #0
3774 ; CHECK-NEXT:    bl __aeabi_f2ulz
3775 ; CHECK-NEXT:    vcmp.f32 s26, #0
3776 ; CHECK-NEXT:    mov r10, r1
3777 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3778 ; CHECK-NEXT:    vcmp.f32 s26, s20
3779 ; CHECK-NEXT:    mov r6, r0
3780 ; CHECK-NEXT:    it lt
3781 ; CHECK-NEXT:    movlt.w r10, #0
3782 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3783 ; CHECK-NEXT:    mov r0, r5
3784 ; CHECK-NEXT:    vcmp.f32 s24, s20
3785 ; CHECK-NEXT:    itt gt
3786 ; CHECK-NEXT:    movwgt r10, #65535
3787 ; CHECK-NEXT:    movtgt r10, #3
3788 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3789 ; CHECK-NEXT:    it gt
3790 ; CHECK-NEXT:    movgt.w r7, #-1
3791 ; CHECK-NEXT:    str.w r7, [r4, #25]
3792 ; CHECK-NEXT:    bl __aeabi_f2ulz
3793 ; CHECK-NEXT:    vcmp.f32 s22, #0
3794 ; CHECK-NEXT:    str r1, [sp, #4] @ 4-byte Spill
3795 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3796 ; CHECK-NEXT:    vcmp.f32 s22, s20
3797 ; CHECK-NEXT:    it lt
3798 ; CHECK-NEXT:    movlt r0, #0
3799 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3800 ; CHECK-NEXT:    vcmp.f32 s26, #0
3801 ; CHECK-NEXT:    it gt
3802 ; CHECK-NEXT:    movgt.w r0, #-1
3803 ; CHECK-NEXT:    str r0, [r4]
3804 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3805 ; CHECK-NEXT:    it lt
3806 ; CHECK-NEXT:    movlt r6, #0
3807 ; CHECK-NEXT:    vcmp.f32 s26, s20
3808 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3809 ; CHECK-NEXT:    it gt
3810 ; CHECK-NEXT:    movgt.w r6, #-1
3811 ; CHECK-NEXT:    lsl.w r0, r10, #22
3812 ; CHECK-NEXT:    str r6, [sp, #12] @ 4-byte Spill
3813 ; CHECK-NEXT:    orr.w r6, r0, r6, lsr #10
3814 ; CHECK-NEXT:    mov r0, r8
3815 ; CHECK-NEXT:    bl __aeabi_f2ulz
3816 ; CHECK-NEXT:    vcmp.f32 s18, #0
3817 ; CHECK-NEXT:    mov r5, r1
3818 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3819 ; CHECK-NEXT:    vcmp.f32 s18, s20
3820 ; CHECK-NEXT:    it lt
3821 ; CHECK-NEXT:    movlt r5, #0
3822 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3823 ; CHECK-NEXT:    mov r7, r0
3824 ; CHECK-NEXT:    vcmp.f32 s18, #0
3825 ; CHECK-NEXT:    itt gt
3826 ; CHECK-NEXT:    movwgt r5, #65535
3827 ; CHECK-NEXT:    movtgt r5, #3
3828 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3829 ; CHECK-NEXT:    str.w r6, [r4, #45]
3830 ; CHECK-NEXT:    vcmp.f32 s18, s20
3831 ; CHECK-NEXT:    it lt
3832 ; CHECK-NEXT:    movlt r7, #0
3833 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3834 ; CHECK-NEXT:    it gt
3835 ; CHECK-NEXT:    movgt.w r7, #-1
3836 ; CHECK-NEXT:    lsrs r0, r7, #14
3837 ; CHECK-NEXT:    orr.w r0, r0, r5, lsl #18
3838 ; CHECK-NEXT:    vcvtt.f32.f16 s18, s17
3839 ; CHECK-NEXT:    str.w r0, [r4, #33]
3840 ; CHECK-NEXT:    vmov r0, s18
3841 ; CHECK-NEXT:    bl __aeabi_f2ulz
3842 ; CHECK-NEXT:    vcmp.f32 s18, #0
3843 ; CHECK-NEXT:    mov r9, r1
3844 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3845 ; CHECK-NEXT:    vcmp.f32 s18, s20
3846 ; CHECK-NEXT:    it lt
3847 ; CHECK-NEXT:    movlt r0, #0
3848 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3849 ; CHECK-NEXT:    vcmp.f32 s18, #0
3850 ; CHECK-NEXT:    it gt
3851 ; CHECK-NEXT:    movgt.w r0, #-1
3852 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3853 ; CHECK-NEXT:    str r0, [sp] @ 4-byte Spill
3854 ; CHECK-NEXT:    it lt
3855 ; CHECK-NEXT:    movlt.w r9, #0
3856 ; CHECK-NEXT:    vcmp.f32 s18, s20
3857 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3858 ; CHECK-NEXT:    mov r1, r0
3859 ; CHECK-NEXT:    itt gt
3860 ; CHECK-NEXT:    movwgt r9, #65535
3861 ; CHECK-NEXT:    movtgt r9, #3
3862 ; CHECK-NEXT:    lsl.w r0, r9, #22
3863 ; CHECK-NEXT:    orr.w r0, r0, r1, lsr #10
3864 ; CHECK-NEXT:    vcvtt.f32.f16 s16, s16
3865 ; CHECK-NEXT:    str r0, [r4, #20]
3866 ; CHECK-NEXT:    vmov r0, s16
3867 ; CHECK-NEXT:    bl __aeabi_f2ulz
3868 ; CHECK-NEXT:    vcmp.f32 s16, #0
3869 ; CHECK-NEXT:    mov r11, r1
3870 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3871 ; CHECK-NEXT:    vcmp.f32 s16, s20
3872 ; CHECK-NEXT:    it lt
3873 ; CHECK-NEXT:    movlt.w r11, #0
3874 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3875 ; CHECK-NEXT:    mov r8, r0
3876 ; CHECK-NEXT:    vcmp.f32 s16, #0
3877 ; CHECK-NEXT:    itt gt
3878 ; CHECK-NEXT:    movwgt r11, #65535
3879 ; CHECK-NEXT:    movtgt r11, #3
3880 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3881 ; CHECK-NEXT:    vcmp.f32 s16, s20
3882 ; CHECK-NEXT:    it lt
3883 ; CHECK-NEXT:    movlt.w r8, #0
3884 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3885 ; CHECK-NEXT:    it gt
3886 ; CHECK-NEXT:    movgt.w r8, #-1
3887 ; CHECK-NEXT:    lsr.w r0, r8, #14
3888 ; CHECK-NEXT:    vcvtb.f32.f16 s16, s19
3889 ; CHECK-NEXT:    orr.w r0, r0, r11, lsl #18
3890 ; CHECK-NEXT:    str r0, [r4, #8]
3891 ; CHECK-NEXT:    lsr.w r0, r10, #10
3892 ; CHECK-NEXT:    strb.w r0, [r4, #49]
3893 ; CHECK-NEXT:    vmov r0, s16
3894 ; CHECK-NEXT:    bl __aeabi_f2ulz
3895 ; CHECK-NEXT:    mov r6, r0
3896 ; CHECK-NEXT:    vcmp.f32 s16, #0
3897 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3898 ; CHECK-NEXT:    it lt
3899 ; CHECK-NEXT:    movlt r6, #0
3900 ; CHECK-NEXT:    vcmp.f32 s16, s20
3901 ; CHECK-NEXT:    ubfx r0, r5, #14, #4
3902 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3903 ; CHECK-NEXT:    it gt
3904 ; CHECK-NEXT:    movgt.w r6, #-1
3905 ; CHECK-NEXT:    orr.w r0, r0, r6, lsl #4
3906 ; CHECK-NEXT:    str.w r0, [r4, #37]
3907 ; CHECK-NEXT:    vcmp.f32 s24, #0
3908 ; CHECK-NEXT:    ldr r0, [sp, #8] @ 4-byte Reload
3909 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3910 ; CHECK-NEXT:    it lt
3911 ; CHECK-NEXT:    movlt r0, #0
3912 ; CHECK-NEXT:    vcmp.f32 s24, s20
3913 ; CHECK-NEXT:    vcvtb.f32.f16 s18, s17
3914 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3915 ; CHECK-NEXT:    itt gt
3916 ; CHECK-NEXT:    movwgt r0, #65535
3917 ; CHECK-NEXT:    movtgt r0, #3
3918 ; CHECK-NEXT:    bfc r0, #18, #14
3919 ; CHECK-NEXT:    mov r10, r1
3920 ; CHECK-NEXT:    orr.w r0, r0, r7, lsl #18
3921 ; CHECK-NEXT:    str.w r0, [r4, #29]
3922 ; CHECK-NEXT:    lsr.w r0, r9, #10
3923 ; CHECK-NEXT:    strb r0, [r4, #24]
3924 ; CHECK-NEXT:    vmov r0, s18
3925 ; CHECK-NEXT:    bl __aeabi_f2ulz
3926 ; CHECK-NEXT:    vcmp.f32 s18, #0
3927 ; CHECK-NEXT:    ubfx r2, r11, #14, #4
3928 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3929 ; CHECK-NEXT:    it lt
3930 ; CHECK-NEXT:    movlt r0, #0
3931 ; CHECK-NEXT:    vcmp.f32 s18, s20
3932 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3933 ; CHECK-NEXT:    it gt
3934 ; CHECK-NEXT:    movgt.w r0, #-1
3935 ; CHECK-NEXT:    orr.w r2, r2, r0, lsl #4
3936 ; CHECK-NEXT:    str r2, [r4, #12]
3937 ; CHECK-NEXT:    vcmp.f32 s22, #0
3938 ; CHECK-NEXT:    ldr r2, [sp, #4] @ 4-byte Reload
3939 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3940 ; CHECK-NEXT:    vcmp.f32 s22, s20
3941 ; CHECK-NEXT:    it lt
3942 ; CHECK-NEXT:    movlt r2, #0
3943 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3944 ; CHECK-NEXT:    vcmp.f32 s18, #0
3945 ; CHECK-NEXT:    itt gt
3946 ; CHECK-NEXT:    movwgt r2, #65535
3947 ; CHECK-NEXT:    movtgt r2, #3
3948 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3949 ; CHECK-NEXT:    vcmp.f32 s18, s20
3950 ; CHECK-NEXT:    it lt
3951 ; CHECK-NEXT:    movlt r1, #0
3952 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3953 ; CHECK-NEXT:    vcmp.f32 s16, #0
3954 ; CHECK-NEXT:    itt gt
3955 ; CHECK-NEXT:    movwgt r1, #65535
3956 ; CHECK-NEXT:    movtgt r1, #3
3957 ; CHECK-NEXT:    bfc r2, #18, #14
3958 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3959 ; CHECK-NEXT:    it lt
3960 ; CHECK-NEXT:    movlt.w r10, #0
3961 ; CHECK-NEXT:    vcmp.f32 s16, s20
3962 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
3963 ; CHECK-NEXT:    itt gt
3964 ; CHECK-NEXT:    movwgt r10, #65535
3965 ; CHECK-NEXT:    movtgt r10, #3
3966 ; CHECK-NEXT:    orr.w r2, r2, r8, lsl #18
3967 ; CHECK-NEXT:    str r2, [r4, #4]
3968 ; CHECK-NEXT:    bfc r10, #18, #14
3969 ; CHECK-NEXT:    ldr r3, [sp, #12] @ 4-byte Reload
3970 ; CHECK-NEXT:    lsrs r2, r6, #28
3971 ; CHECK-NEXT:    bfc r1, #18, #14
3972 ; CHECK-NEXT:    orr.w r2, r2, r10, lsl #4
3973 ; CHECK-NEXT:    lsrs r0, r0, #28
3974 ; CHECK-NEXT:    orr.w r2, r2, r3, lsl #22
3975 ; CHECK-NEXT:    str.w r2, [r4, #41]
3976 ; CHECK-NEXT:    orr.w r0, r0, r1, lsl #4
3977 ; CHECK-NEXT:    ldr r1, [sp] @ 4-byte Reload
3978 ; CHECK-NEXT:    orr.w r0, r0, r1, lsl #22
3979 ; CHECK-NEXT:    str r0, [r4, #16]
3980 ; CHECK-NEXT:    add sp, #16
3981 ; CHECK-NEXT:    vpop {d8, d9, d10, d11, d12, d13}
3982 ; CHECK-NEXT:    add sp, #4
3983 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
3984 ; CHECK-NEXT:    .p2align 2
3985 ; CHECK-NEXT:  @ %bb.1:
3986 ; CHECK-NEXT:  .LCPI48_0:
3987 ; CHECK-NEXT:    .long 0x587fffff @ float 1.12589984E+15
3988     %x = call <8 x i50> @llvm.fptoui.sat.v8f16.v8i50(<8 x half> %f)
3989     ret <8 x i50> %x
3992 define arm_aapcs_vfpcc <8 x i64> @test_unsigned_v8f16_v8i64(<8 x half> %f) {
3993 ; CHECK-LABEL: test_unsigned_v8f16_v8i64:
3994 ; CHECK:       @ %bb.0:
3995 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
3996 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
3997 ; CHECK-NEXT:    .pad #4
3998 ; CHECK-NEXT:    sub sp, #4
3999 ; CHECK-NEXT:    .vsave {d8, d9, d10, d11, d12, d13, d14, d15}
4000 ; CHECK-NEXT:    vpush {d8, d9, d10, d11, d12, d13, d14, d15}
4001 ; CHECK-NEXT:    vmov q4, q0
4002 ; CHECK-NEXT:    vcvtt.f32.f16 s20, s19
4003 ; CHECK-NEXT:    vmov r0, s20
4004 ; CHECK-NEXT:    bl __aeabi_f2ulz
4005 ; CHECK-NEXT:    vcvtb.f32.f16 s22, s19
4006 ; CHECK-NEXT:    mov r9, r0
4007 ; CHECK-NEXT:    vmov r0, s22
4008 ; CHECK-NEXT:    vldr s28, .LCPI49_0
4009 ; CHECK-NEXT:    vcmp.f32 s20, #0
4010 ; CHECK-NEXT:    vcvtt.f32.f16 s24, s16
4011 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4012 ; CHECK-NEXT:    vcvtb.f32.f16 s16, s16
4013 ; CHECK-NEXT:    it lt
4014 ; CHECK-NEXT:    movlt.w r9, #0
4015 ; CHECK-NEXT:    vcmp.f32 s20, s28
4016 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4017 ; CHECK-NEXT:    mov r8, r1
4018 ; CHECK-NEXT:    vmov r5, s24
4019 ; CHECK-NEXT:    it gt
4020 ; CHECK-NEXT:    movgt.w r9, #-1
4021 ; CHECK-NEXT:    vmov r4, s16
4022 ; CHECK-NEXT:    bl __aeabi_f2ulz
4023 ; CHECK-NEXT:    vcmp.f32 s22, #0
4024 ; CHECK-NEXT:    mov r11, r0
4025 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4026 ; CHECK-NEXT:    vcmp.f32 s22, s28
4027 ; CHECK-NEXT:    it lt
4028 ; CHECK-NEXT:    movlt.w r11, #0
4029 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4030 ; CHECK-NEXT:    vcmp.f32 s20, #0
4031 ; CHECK-NEXT:    it gt
4032 ; CHECK-NEXT:    movgt.w r11, #-1
4033 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4034 ; CHECK-NEXT:    vcmp.f32 s20, s28
4035 ; CHECK-NEXT:    it lt
4036 ; CHECK-NEXT:    movlt.w r8, #0
4037 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4038 ; CHECK-NEXT:    mov r10, r1
4039 ; CHECK-NEXT:    vcmp.f32 s22, #0
4040 ; CHECK-NEXT:    it gt
4041 ; CHECK-NEXT:    movgt.w r8, #-1
4042 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4043 ; CHECK-NEXT:    mov r0, r5
4044 ; CHECK-NEXT:    it lt
4045 ; CHECK-NEXT:    movlt.w r10, #0
4046 ; CHECK-NEXT:    vcmp.f32 s22, s28
4047 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4048 ; CHECK-NEXT:    it gt
4049 ; CHECK-NEXT:    movgt.w r10, #-1
4050 ; CHECK-NEXT:    bl __aeabi_f2ulz
4051 ; CHECK-NEXT:    mov r6, r0
4052 ; CHECK-NEXT:    vcmp.f32 s24, #0
4053 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4054 ; CHECK-NEXT:    mov r0, r4
4055 ; CHECK-NEXT:    it lt
4056 ; CHECK-NEXT:    movlt r6, #0
4057 ; CHECK-NEXT:    vcmp.f32 s24, s28
4058 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4059 ; CHECK-NEXT:    mov r5, r1
4060 ; CHECK-NEXT:    it gt
4061 ; CHECK-NEXT:    movgt.w r6, #-1
4062 ; CHECK-NEXT:    bl __aeabi_f2ulz
4063 ; CHECK-NEXT:    vcvtt.f32.f16 s30, s17
4064 ; CHECK-NEXT:    mov r7, r1
4065 ; CHECK-NEXT:    vmov r1, s30
4066 ; CHECK-NEXT:    vcmp.f32 s16, #0
4067 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4068 ; CHECK-NEXT:    it lt
4069 ; CHECK-NEXT:    movlt r0, #0
4070 ; CHECK-NEXT:    vcmp.f32 s16, s28
4071 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4072 ; CHECK-NEXT:    it gt
4073 ; CHECK-NEXT:    movgt.w r0, #-1
4074 ; CHECK-NEXT:    vmov q5[2], q5[0], r0, r6
4075 ; CHECK-NEXT:    mov r0, r1
4076 ; CHECK-NEXT:    bl __aeabi_f2ulz
4077 ; CHECK-NEXT:    vcmp.f32 s30, #0
4078 ; CHECK-NEXT:    mov r6, r0
4079 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4080 ; CHECK-NEXT:    vcmp.f32 s30, s28
4081 ; CHECK-NEXT:    it lt
4082 ; CHECK-NEXT:    movlt r6, #0
4083 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4084 ; CHECK-NEXT:    vcmp.f32 s24, #0
4085 ; CHECK-NEXT:    it gt
4086 ; CHECK-NEXT:    movgt.w r6, #-1
4087 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4088 ; CHECK-NEXT:    vcmp.f32 s24, s28
4089 ; CHECK-NEXT:    it lt
4090 ; CHECK-NEXT:    movlt r5, #0
4091 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4092 ; CHECK-NEXT:    vcmp.f32 s16, #0
4093 ; CHECK-NEXT:    it gt
4094 ; CHECK-NEXT:    movgt.w r5, #-1
4095 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4096 ; CHECK-NEXT:    vcmp.f32 s16, s28
4097 ; CHECK-NEXT:    vcvtb.f32.f16 s16, s17
4098 ; CHECK-NEXT:    it lt
4099 ; CHECK-NEXT:    movlt r7, #0
4100 ; CHECK-NEXT:    vmov r0, s16
4101 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4102 ; CHECK-NEXT:    it gt
4103 ; CHECK-NEXT:    movgt.w r7, #-1
4104 ; CHECK-NEXT:    mov r4, r1
4105 ; CHECK-NEXT:    vmov q5[3], q5[1], r7, r5
4106 ; CHECK-NEXT:    bl __aeabi_f2ulz
4107 ; CHECK-NEXT:    vcvtt.f32.f16 s17, s18
4108 ; CHECK-NEXT:    mov r7, r1
4109 ; CHECK-NEXT:    vmov r1, s17
4110 ; CHECK-NEXT:    vcmp.f32 s16, #0
4111 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4112 ; CHECK-NEXT:    it lt
4113 ; CHECK-NEXT:    movlt r0, #0
4114 ; CHECK-NEXT:    vcmp.f32 s16, s28
4115 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4116 ; CHECK-NEXT:    it gt
4117 ; CHECK-NEXT:    movgt.w r0, #-1
4118 ; CHECK-NEXT:    vmov q6[2], q6[0], r0, r6
4119 ; CHECK-NEXT:    mov r0, r1
4120 ; CHECK-NEXT:    bl __aeabi_f2ulz
4121 ; CHECK-NEXT:    vcmp.f32 s17, #0
4122 ; CHECK-NEXT:    mov r6, r0
4123 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4124 ; CHECK-NEXT:    vcmp.f32 s17, s28
4125 ; CHECK-NEXT:    it lt
4126 ; CHECK-NEXT:    movlt r6, #0
4127 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4128 ; CHECK-NEXT:    vcmp.f32 s30, #0
4129 ; CHECK-NEXT:    it gt
4130 ; CHECK-NEXT:    movgt.w r6, #-1
4131 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4132 ; CHECK-NEXT:    vcmp.f32 s30, s28
4133 ; CHECK-NEXT:    it lt
4134 ; CHECK-NEXT:    movlt r4, #0
4135 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4136 ; CHECK-NEXT:    vcmp.f32 s16, #0
4137 ; CHECK-NEXT:    it gt
4138 ; CHECK-NEXT:    movgt.w r4, #-1
4139 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4140 ; CHECK-NEXT:    vcmp.f32 s16, s28
4141 ; CHECK-NEXT:    vcvtb.f32.f16 s16, s18
4142 ; CHECK-NEXT:    it lt
4143 ; CHECK-NEXT:    movlt r7, #0
4144 ; CHECK-NEXT:    vmov r0, s16
4145 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4146 ; CHECK-NEXT:    it gt
4147 ; CHECK-NEXT:    movgt.w r7, #-1
4148 ; CHECK-NEXT:    mov r5, r1
4149 ; CHECK-NEXT:    vmov q6[3], q6[1], r7, r4
4150 ; CHECK-NEXT:    bl __aeabi_f2ulz
4151 ; CHECK-NEXT:    vcmp.f32 s16, #0
4152 ; CHECK-NEXT:    vmov q3[2], q3[0], r11, r9
4153 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4154 ; CHECK-NEXT:    vcmp.f32 s16, s28
4155 ; CHECK-NEXT:    it lt
4156 ; CHECK-NEXT:    movlt r0, #0
4157 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4158 ; CHECK-NEXT:    vcmp.f32 s17, #0
4159 ; CHECK-NEXT:    it gt
4160 ; CHECK-NEXT:    movgt.w r0, #-1
4161 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4162 ; CHECK-NEXT:    vcmp.f32 s17, s28
4163 ; CHECK-NEXT:    it lt
4164 ; CHECK-NEXT:    movlt r5, #0
4165 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4166 ; CHECK-NEXT:    vcmp.f32 s16, #0
4167 ; CHECK-NEXT:    it gt
4168 ; CHECK-NEXT:    movgt.w r5, #-1
4169 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4170 ; CHECK-NEXT:    it lt
4171 ; CHECK-NEXT:    movlt r1, #0
4172 ; CHECK-NEXT:    vcmp.f32 s16, s28
4173 ; CHECK-NEXT:    vmov q2[2], q2[0], r0, r6
4174 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4175 ; CHECK-NEXT:    it gt
4176 ; CHECK-NEXT:    movgt.w r1, #-1
4177 ; CHECK-NEXT:    vmov q2[3], q2[1], r1, r5
4178 ; CHECK-NEXT:    vmov q3[3], q3[1], r10, r8
4179 ; CHECK-NEXT:    vmov q0, q5
4180 ; CHECK-NEXT:    vmov q1, q6
4181 ; CHECK-NEXT:    vpop {d8, d9, d10, d11, d12, d13, d14, d15}
4182 ; CHECK-NEXT:    add sp, #4
4183 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
4184 ; CHECK-NEXT:    .p2align 2
4185 ; CHECK-NEXT:  @ %bb.1:
4186 ; CHECK-NEXT:  .LCPI49_0:
4187 ; CHECK-NEXT:    .long 0x5f7fffff @ float 1.8446743E+19
4188     %x = call <8 x i64> @llvm.fptoui.sat.v8f16.v8i64(<8 x half> %f)
4189     ret <8 x i64> %x
4192 define arm_aapcs_vfpcc <8 x i100> @test_unsigned_v8f16_v8i100(<8 x half> %f) {
4193 ; CHECK-LABEL: test_unsigned_v8f16_v8i100:
4194 ; CHECK:       @ %bb.0:
4195 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, lr}
4196 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, lr}
4197 ; CHECK-NEXT:    .vsave {d8, d9, d10, d11, d12, d13, d14, d15}
4198 ; CHECK-NEXT:    vpush {d8, d9, d10, d11, d12, d13, d14, d15}
4199 ; CHECK-NEXT:    vmov q4, q0
4200 ; CHECK-NEXT:    mov r4, r0
4201 ; CHECK-NEXT:    vcvtb.f32.f16 s28, s19
4202 ; CHECK-NEXT:    vmov r0, s28
4203 ; CHECK-NEXT:    bl __fixunssfti
4204 ; CHECK-NEXT:    vcvtb.f32.f16 s26, s18
4205 ; CHECK-NEXT:    mov r5, r3
4206 ; CHECK-NEXT:    vmov r3, s26
4207 ; CHECK-NEXT:    vldr s20, .LCPI50_1
4208 ; CHECK-NEXT:    vcmp.f32 s28, #0
4209 ; CHECK-NEXT:    vcvtt.f32.f16 s30, s19
4210 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4211 ; CHECK-NEXT:    vcmp.f32 s28, s20
4212 ; CHECK-NEXT:    it lt
4213 ; CHECK-NEXT:    movlt r2, #0
4214 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4215 ; CHECK-NEXT:    vcmp.f32 s28, #0
4216 ; CHECK-NEXT:    it gt
4217 ; CHECK-NEXT:    movgt.w r2, #-1
4218 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4219 ; CHECK-NEXT:    vcmp.f32 s28, s20
4220 ; CHECK-NEXT:    str.w r2, [r4, #83]
4221 ; CHECK-NEXT:    it lt
4222 ; CHECK-NEXT:    movlt r1, #0
4223 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4224 ; CHECK-NEXT:    vcmp.f32 s28, #0
4225 ; CHECK-NEXT:    it gt
4226 ; CHECK-NEXT:    movgt.w r1, #-1
4227 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4228 ; CHECK-NEXT:    str.w r1, [r4, #79]
4229 ; CHECK-NEXT:    it lt
4230 ; CHECK-NEXT:    movlt r0, #0
4231 ; CHECK-NEXT:    vcmp.f32 s28, s20
4232 ; CHECK-NEXT:    vcvtb.f32.f16 s22, s16
4233 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4234 ; CHECK-NEXT:    it gt
4235 ; CHECK-NEXT:    movgt.w r0, #-1
4236 ; CHECK-NEXT:    vcvtb.f32.f16 s24, s17
4237 ; CHECK-NEXT:    str.w r0, [r4, #75]
4238 ; CHECK-NEXT:    vmov r9, s30
4239 ; CHECK-NEXT:    vmov r8, s22
4240 ; CHECK-NEXT:    vmov r6, s24
4241 ; CHECK-NEXT:    mov r0, r3
4242 ; CHECK-NEXT:    bl __fixunssfti
4243 ; CHECK-NEXT:    vcmp.f32 s26, #0
4244 ; CHECK-NEXT:    mov r7, r3
4245 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4246 ; CHECK-NEXT:    vcmp.f32 s26, s20
4247 ; CHECK-NEXT:    it lt
4248 ; CHECK-NEXT:    movlt r2, #0
4249 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4250 ; CHECK-NEXT:    vcmp.f32 s26, #0
4251 ; CHECK-NEXT:    it gt
4252 ; CHECK-NEXT:    movgt.w r2, #-1
4253 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4254 ; CHECK-NEXT:    vcmp.f32 s26, s20
4255 ; CHECK-NEXT:    str.w r2, [r4, #58]
4256 ; CHECK-NEXT:    it lt
4257 ; CHECK-NEXT:    movlt r1, #0
4258 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4259 ; CHECK-NEXT:    vcmp.f32 s26, #0
4260 ; CHECK-NEXT:    it gt
4261 ; CHECK-NEXT:    movgt.w r1, #-1
4262 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4263 ; CHECK-NEXT:    str.w r1, [r4, #54]
4264 ; CHECK-NEXT:    it lt
4265 ; CHECK-NEXT:    movlt r0, #0
4266 ; CHECK-NEXT:    vcmp.f32 s26, s20
4267 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4268 ; CHECK-NEXT:    it gt
4269 ; CHECK-NEXT:    movgt.w r0, #-1
4270 ; CHECK-NEXT:    str.w r0, [r4, #50]
4271 ; CHECK-NEXT:    mov r0, r6
4272 ; CHECK-NEXT:    bl __fixunssfti
4273 ; CHECK-NEXT:    vcmp.f32 s24, #0
4274 ; CHECK-NEXT:    mov r10, r3
4275 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4276 ; CHECK-NEXT:    vcmp.f32 s24, s20
4277 ; CHECK-NEXT:    it lt
4278 ; CHECK-NEXT:    movlt r2, #0
4279 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4280 ; CHECK-NEXT:    vcmp.f32 s24, #0
4281 ; CHECK-NEXT:    it gt
4282 ; CHECK-NEXT:    movgt.w r2, #-1
4283 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4284 ; CHECK-NEXT:    vcmp.f32 s24, s20
4285 ; CHECK-NEXT:    str.w r2, [r4, #33]
4286 ; CHECK-NEXT:    it lt
4287 ; CHECK-NEXT:    movlt r1, #0
4288 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4289 ; CHECK-NEXT:    vcmp.f32 s24, #0
4290 ; CHECK-NEXT:    it gt
4291 ; CHECK-NEXT:    movgt.w r1, #-1
4292 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4293 ; CHECK-NEXT:    str.w r1, [r4, #29]
4294 ; CHECK-NEXT:    it lt
4295 ; CHECK-NEXT:    movlt r0, #0
4296 ; CHECK-NEXT:    vcmp.f32 s24, s20
4297 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4298 ; CHECK-NEXT:    it gt
4299 ; CHECK-NEXT:    movgt.w r0, #-1
4300 ; CHECK-NEXT:    str.w r0, [r4, #25]
4301 ; CHECK-NEXT:    mov r0, r8
4302 ; CHECK-NEXT:    bl __fixunssfti
4303 ; CHECK-NEXT:    vcmp.f32 s22, #0
4304 ; CHECK-NEXT:    mov r8, r3
4305 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4306 ; CHECK-NEXT:    vcmp.f32 s22, s20
4307 ; CHECK-NEXT:    it lt
4308 ; CHECK-NEXT:    movlt r2, #0
4309 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4310 ; CHECK-NEXT:    vcmp.f32 s22, #0
4311 ; CHECK-NEXT:    it gt
4312 ; CHECK-NEXT:    movgt.w r2, #-1
4313 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4314 ; CHECK-NEXT:    vcmp.f32 s22, s20
4315 ; CHECK-NEXT:    str r2, [r4, #8]
4316 ; CHECK-NEXT:    it lt
4317 ; CHECK-NEXT:    movlt r1, #0
4318 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4319 ; CHECK-NEXT:    vcmp.f32 s22, #0
4320 ; CHECK-NEXT:    it gt
4321 ; CHECK-NEXT:    movgt.w r1, #-1
4322 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4323 ; CHECK-NEXT:    str r1, [r4, #4]
4324 ; CHECK-NEXT:    it lt
4325 ; CHECK-NEXT:    movlt r0, #0
4326 ; CHECK-NEXT:    vcmp.f32 s22, s20
4327 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4328 ; CHECK-NEXT:    it gt
4329 ; CHECK-NEXT:    movgt.w r0, #-1
4330 ; CHECK-NEXT:    str r0, [r4]
4331 ; CHECK-NEXT:    mov r0, r9
4332 ; CHECK-NEXT:    bl __fixunssfti
4333 ; CHECK-NEXT:    vcmp.f32 s30, #0
4334 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4335 ; CHECK-NEXT:    vcmp.f32 s30, s20
4336 ; CHECK-NEXT:    it lt
4337 ; CHECK-NEXT:    movlt r1, #0
4338 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4339 ; CHECK-NEXT:    vcmp.f32 s30, #0
4340 ; CHECK-NEXT:    it gt
4341 ; CHECK-NEXT:    movgt.w r1, #-1
4342 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4343 ; CHECK-NEXT:    vcmp.f32 s30, s20
4344 ; CHECK-NEXT:    it lt
4345 ; CHECK-NEXT:    movlt r2, #0
4346 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4347 ; CHECK-NEXT:    lsr.w r6, r1, #28
4348 ; CHECK-NEXT:    vcmp.f32 s30, #0
4349 ; CHECK-NEXT:    it gt
4350 ; CHECK-NEXT:    movgt.w r2, #-1
4351 ; CHECK-NEXT:    orr.w r6, r6, r2, lsl #4
4352 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4353 ; CHECK-NEXT:    str.w r6, [r4, #95]
4354 ; CHECK-NEXT:    it lt
4355 ; CHECK-NEXT:    movlt r0, #0
4356 ; CHECK-NEXT:    vcmp.f32 s30, s20
4357 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4358 ; CHECK-NEXT:    it gt
4359 ; CHECK-NEXT:    movgt.w r0, #-1
4360 ; CHECK-NEXT:    lsrs r6, r0, #28
4361 ; CHECK-NEXT:    orr.w r1, r6, r1, lsl #4
4362 ; CHECK-NEXT:    vcmp.f32 s30, #0
4363 ; CHECK-NEXT:    str.w r1, [r4, #91]
4364 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4365 ; CHECK-NEXT:    vcmp.f32 s30, s20
4366 ; CHECK-NEXT:    it lt
4367 ; CHECK-NEXT:    movlt r3, #0
4368 ; CHECK-NEXT:    lsrs r1, r2, #28
4369 ; CHECK-NEXT:    vcvtt.f32.f16 s30, s18
4370 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4371 ; CHECK-NEXT:    it gt
4372 ; CHECK-NEXT:    movgt r3, #15
4373 ; CHECK-NEXT:    orr.w r2, r1, r3, lsl #4
4374 ; CHECK-NEXT:    vmov r1, s30
4375 ; CHECK-NEXT:    strb.w r2, [r4, #99]
4376 ; CHECK-NEXT:    vcmp.f32 s28, #0
4377 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4378 ; CHECK-NEXT:    it lt
4379 ; CHECK-NEXT:    movlt r5, #0
4380 ; CHECK-NEXT:    vcmp.f32 s28, s20
4381 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4382 ; CHECK-NEXT:    it gt
4383 ; CHECK-NEXT:    movgt r5, #15
4384 ; CHECK-NEXT:    and r2, r5, #15
4385 ; CHECK-NEXT:    orr.w r0, r2, r0, lsl #4
4386 ; CHECK-NEXT:    str.w r0, [r4, #87]
4387 ; CHECK-NEXT:    mov r0, r1
4388 ; CHECK-NEXT:    bl __fixunssfti
4389 ; CHECK-NEXT:    vcmp.f32 s30, #0
4390 ; CHECK-NEXT:    vcvtt.f32.f16 s18, s17
4391 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4392 ; CHECK-NEXT:    vcmp.f32 s30, s20
4393 ; CHECK-NEXT:    it lt
4394 ; CHECK-NEXT:    movlt r1, #0
4395 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4396 ; CHECK-NEXT:    vcmp.f32 s30, #0
4397 ; CHECK-NEXT:    it gt
4398 ; CHECK-NEXT:    movgt.w r1, #-1
4399 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4400 ; CHECK-NEXT:    vcmp.f32 s30, s20
4401 ; CHECK-NEXT:    it lt
4402 ; CHECK-NEXT:    movlt r2, #0
4403 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4404 ; CHECK-NEXT:    lsr.w r6, r1, #28
4405 ; CHECK-NEXT:    vcmp.f32 s30, #0
4406 ; CHECK-NEXT:    it gt
4407 ; CHECK-NEXT:    movgt.w r2, #-1
4408 ; CHECK-NEXT:    orr.w r6, r6, r2, lsl #4
4409 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4410 ; CHECK-NEXT:    str.w r6, [r4, #70]
4411 ; CHECK-NEXT:    it lt
4412 ; CHECK-NEXT:    movlt r0, #0
4413 ; CHECK-NEXT:    vcmp.f32 s30, s20
4414 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4415 ; CHECK-NEXT:    it gt
4416 ; CHECK-NEXT:    movgt.w r0, #-1
4417 ; CHECK-NEXT:    lsrs r6, r0, #28
4418 ; CHECK-NEXT:    orr.w r1, r6, r1, lsl #4
4419 ; CHECK-NEXT:    str.w r1, [r4, #66]
4420 ; CHECK-NEXT:    vmov r1, s18
4421 ; CHECK-NEXT:    vcmp.f32 s30, #0
4422 ; CHECK-NEXT:    lsrs r2, r2, #28
4423 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4424 ; CHECK-NEXT:    vcmp.f32 s30, s20
4425 ; CHECK-NEXT:    it lt
4426 ; CHECK-NEXT:    movlt r3, #0
4427 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4428 ; CHECK-NEXT:    vcmp.f32 s26, #0
4429 ; CHECK-NEXT:    it gt
4430 ; CHECK-NEXT:    movgt r3, #15
4431 ; CHECK-NEXT:    orr.w r2, r2, r3, lsl #4
4432 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4433 ; CHECK-NEXT:    strb.w r2, [r4, #74]
4434 ; CHECK-NEXT:    it lt
4435 ; CHECK-NEXT:    movlt r7, #0
4436 ; CHECK-NEXT:    vcmp.f32 s26, s20
4437 ; CHECK-NEXT:    vcvtt.f32.f16 s16, s16
4438 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4439 ; CHECK-NEXT:    it gt
4440 ; CHECK-NEXT:    movgt r7, #15
4441 ; CHECK-NEXT:    and r2, r7, #15
4442 ; CHECK-NEXT:    orr.w r0, r2, r0, lsl #4
4443 ; CHECK-NEXT:    str.w r0, [r4, #62]
4444 ; CHECK-NEXT:    mov r0, r1
4445 ; CHECK-NEXT:    bl __fixunssfti
4446 ; CHECK-NEXT:    vcmp.f32 s18, #0
4447 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4448 ; CHECK-NEXT:    vcmp.f32 s18, s20
4449 ; CHECK-NEXT:    it lt
4450 ; CHECK-NEXT:    movlt r1, #0
4451 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4452 ; CHECK-NEXT:    vcmp.f32 s18, #0
4453 ; CHECK-NEXT:    it gt
4454 ; CHECK-NEXT:    movgt.w r1, #-1
4455 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4456 ; CHECK-NEXT:    vcmp.f32 s18, s20
4457 ; CHECK-NEXT:    it lt
4458 ; CHECK-NEXT:    movlt r2, #0
4459 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4460 ; CHECK-NEXT:    lsr.w r7, r1, #28
4461 ; CHECK-NEXT:    vcmp.f32 s18, #0
4462 ; CHECK-NEXT:    it gt
4463 ; CHECK-NEXT:    movgt.w r2, #-1
4464 ; CHECK-NEXT:    orr.w r7, r7, r2, lsl #4
4465 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4466 ; CHECK-NEXT:    str.w r7, [r4, #45]
4467 ; CHECK-NEXT:    it lt
4468 ; CHECK-NEXT:    movlt r0, #0
4469 ; CHECK-NEXT:    vcmp.f32 s18, s20
4470 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4471 ; CHECK-NEXT:    it gt
4472 ; CHECK-NEXT:    movgt.w r0, #-1
4473 ; CHECK-NEXT:    lsrs r7, r0, #28
4474 ; CHECK-NEXT:    vcmp.f32 s18, #0
4475 ; CHECK-NEXT:    orr.w r7, r7, r1, lsl #4
4476 ; CHECK-NEXT:    vmov r1, s16
4477 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4478 ; CHECK-NEXT:    vcmp.f32 s18, s20
4479 ; CHECK-NEXT:    str.w r7, [r4, #41]
4480 ; CHECK-NEXT:    it lt
4481 ; CHECK-NEXT:    movlt r3, #0
4482 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4483 ; CHECK-NEXT:    lsr.w r2, r2, #28
4484 ; CHECK-NEXT:    vcmp.f32 s24, #0
4485 ; CHECK-NEXT:    it gt
4486 ; CHECK-NEXT:    movgt r3, #15
4487 ; CHECK-NEXT:    orr.w r2, r2, r3, lsl #4
4488 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4489 ; CHECK-NEXT:    strb.w r2, [r4, #49]
4490 ; CHECK-NEXT:    it lt
4491 ; CHECK-NEXT:    movlt.w r10, #0
4492 ; CHECK-NEXT:    vcmp.f32 s24, s20
4493 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4494 ; CHECK-NEXT:    it gt
4495 ; CHECK-NEXT:    movgt.w r10, #15
4496 ; CHECK-NEXT:    and r2, r10, #15
4497 ; CHECK-NEXT:    orr.w r0, r2, r0, lsl #4
4498 ; CHECK-NEXT:    str.w r0, [r4, #37]
4499 ; CHECK-NEXT:    mov r0, r1
4500 ; CHECK-NEXT:    bl __fixunssfti
4501 ; CHECK-NEXT:    vcmp.f32 s16, #0
4502 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4503 ; CHECK-NEXT:    vcmp.f32 s16, s20
4504 ; CHECK-NEXT:    it lt
4505 ; CHECK-NEXT:    movlt r1, #0
4506 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4507 ; CHECK-NEXT:    vcmp.f32 s16, #0
4508 ; CHECK-NEXT:    it gt
4509 ; CHECK-NEXT:    movgt.w r1, #-1
4510 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4511 ; CHECK-NEXT:    vcmp.f32 s16, s20
4512 ; CHECK-NEXT:    it lt
4513 ; CHECK-NEXT:    movlt r2, #0
4514 ; CHECK-NEXT:    b.w .LBB50_2
4515 ; CHECK-NEXT:    .p2align 2
4516 ; CHECK-NEXT:  @ %bb.1:
4517 ; CHECK-NEXT:  .LCPI50_1:
4518 ; CHECK-NEXT:    .long 0x717fffff @ float 1.26765052E+30
4519 ; CHECK-NEXT:    .p2align 1
4520 ; CHECK-NEXT:  .LBB50_2:
4521 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4522 ; CHECK-NEXT:    vcmp.f32 s16, #0
4523 ; CHECK-NEXT:    it gt
4524 ; CHECK-NEXT:    movgt.w r2, #-1
4525 ; CHECK-NEXT:    lsrs r7, r1, #28
4526 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4527 ; CHECK-NEXT:    vcmp.f32 s16, s20
4528 ; CHECK-NEXT:    orr.w r7, r7, r2, lsl #4
4529 ; CHECK-NEXT:    str r7, [r4, #20]
4530 ; CHECK-NEXT:    it lt
4531 ; CHECK-NEXT:    movlt r0, #0
4532 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4533 ; CHECK-NEXT:    vcmp.f32 s16, #0
4534 ; CHECK-NEXT:    it gt
4535 ; CHECK-NEXT:    movgt.w r0, #-1
4536 ; CHECK-NEXT:    lsrs r7, r0, #28
4537 ; CHECK-NEXT:    orr.w r1, r7, r1, lsl #4
4538 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4539 ; CHECK-NEXT:    vcmp.f32 s16, s20
4540 ; CHECK-NEXT:    str r1, [r4, #16]
4541 ; CHECK-NEXT:    it lt
4542 ; CHECK-NEXT:    movlt r3, #0
4543 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4544 ; CHECK-NEXT:    lsr.w r1, r2, #28
4545 ; CHECK-NEXT:    vcmp.f32 s22, #0
4546 ; CHECK-NEXT:    it gt
4547 ; CHECK-NEXT:    movgt r3, #15
4548 ; CHECK-NEXT:    orr.w r1, r1, r3, lsl #4
4549 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4550 ; CHECK-NEXT:    strb r1, [r4, #24]
4551 ; CHECK-NEXT:    it lt
4552 ; CHECK-NEXT:    movlt.w r8, #0
4553 ; CHECK-NEXT:    vcmp.f32 s22, s20
4554 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4555 ; CHECK-NEXT:    it gt
4556 ; CHECK-NEXT:    movgt.w r8, #15
4557 ; CHECK-NEXT:    and r1, r8, #15
4558 ; CHECK-NEXT:    orr.w r0, r1, r0, lsl #4
4559 ; CHECK-NEXT:    str r0, [r4, #12]
4560 ; CHECK-NEXT:    vpop {d8, d9, d10, d11, d12, d13, d14, d15}
4561 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, pc}
4562 ; CHECK-NEXT:  @ %bb.3:
4563     %x = call <8 x i100> @llvm.fptoui.sat.v8f16.v8i100(<8 x half> %f)
4564     ret <8 x i100> %x
4567 define arm_aapcs_vfpcc <8 x i128> @test_unsigned_v8f16_v8i128(<8 x half> %f) {
4568 ; CHECK-LABEL: test_unsigned_v8f16_v8i128:
4569 ; CHECK:       @ %bb.0:
4570 ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, lr}
4571 ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, lr}
4572 ; CHECK-NEXT:    .pad #4
4573 ; CHECK-NEXT:    sub sp, #4
4574 ; CHECK-NEXT:    .vsave {d8, d9, d10, d11, d12, d13, d14, d15}
4575 ; CHECK-NEXT:    vpush {d8, d9, d10, d11, d12, d13, d14, d15}
4576 ; CHECK-NEXT:    vmov q4, q0
4577 ; CHECK-NEXT:    mov r4, r0
4578 ; CHECK-NEXT:    vcvtt.f32.f16 s26, s19
4579 ; CHECK-NEXT:    vcvtb.f32.f16 s22, s16
4580 ; CHECK-NEXT:    vmov r0, s26
4581 ; CHECK-NEXT:    vcvtt.f32.f16 s16, s16
4582 ; CHECK-NEXT:    vcvtb.f32.f16 s24, s17
4583 ; CHECK-NEXT:    vcvtb.f32.f16 s30, s19
4584 ; CHECK-NEXT:    vldr s20, .LCPI51_0
4585 ; CHECK-NEXT:    vmov r8, s22
4586 ; CHECK-NEXT:    vmov r9, s16
4587 ; CHECK-NEXT:    vcvtt.f32.f16 s28, s18
4588 ; CHECK-NEXT:    vmov r7, s24
4589 ; CHECK-NEXT:    vmov r6, s30
4590 ; CHECK-NEXT:    bl __fixunssfti
4591 ; CHECK-NEXT:    vcmp.f32 s26, #0
4592 ; CHECK-NEXT:    vcvtb.f32.f16 s18, s18
4593 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4594 ; CHECK-NEXT:    vcmp.f32 s26, s20
4595 ; CHECK-NEXT:    it lt
4596 ; CHECK-NEXT:    movlt r3, #0
4597 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4598 ; CHECK-NEXT:    vcmp.f32 s26, #0
4599 ; CHECK-NEXT:    it gt
4600 ; CHECK-NEXT:    movgt.w r3, #-1
4601 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4602 ; CHECK-NEXT:    vcmp.f32 s26, s20
4603 ; CHECK-NEXT:    str r3, [r4, #124]
4604 ; CHECK-NEXT:    it lt
4605 ; CHECK-NEXT:    movlt r2, #0
4606 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4607 ; CHECK-NEXT:    vcmp.f32 s26, #0
4608 ; CHECK-NEXT:    it gt
4609 ; CHECK-NEXT:    movgt.w r2, #-1
4610 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4611 ; CHECK-NEXT:    vcmp.f32 s26, s20
4612 ; CHECK-NEXT:    str r2, [r4, #120]
4613 ; CHECK-NEXT:    it lt
4614 ; CHECK-NEXT:    movlt r1, #0
4615 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4616 ; CHECK-NEXT:    vcmp.f32 s26, #0
4617 ; CHECK-NEXT:    it gt
4618 ; CHECK-NEXT:    movgt.w r1, #-1
4619 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4620 ; CHECK-NEXT:    str r1, [r4, #116]
4621 ; CHECK-NEXT:    it lt
4622 ; CHECK-NEXT:    movlt r0, #0
4623 ; CHECK-NEXT:    vcmp.f32 s26, s20
4624 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4625 ; CHECK-NEXT:    it gt
4626 ; CHECK-NEXT:    movgt.w r0, #-1
4627 ; CHECK-NEXT:    str r0, [r4, #112]
4628 ; CHECK-NEXT:    mov r0, r6
4629 ; CHECK-NEXT:    vmov r5, s28
4630 ; CHECK-NEXT:    bl __fixunssfti
4631 ; CHECK-NEXT:    vcmp.f32 s30, #0
4632 ; CHECK-NEXT:    vcvtt.f32.f16 s26, s17
4633 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4634 ; CHECK-NEXT:    vcmp.f32 s30, s20
4635 ; CHECK-NEXT:    it lt
4636 ; CHECK-NEXT:    movlt r3, #0
4637 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4638 ; CHECK-NEXT:    vcmp.f32 s30, #0
4639 ; CHECK-NEXT:    it gt
4640 ; CHECK-NEXT:    movgt.w r3, #-1
4641 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4642 ; CHECK-NEXT:    vcmp.f32 s30, s20
4643 ; CHECK-NEXT:    str r3, [r4, #108]
4644 ; CHECK-NEXT:    it lt
4645 ; CHECK-NEXT:    movlt r2, #0
4646 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4647 ; CHECK-NEXT:    vcmp.f32 s30, #0
4648 ; CHECK-NEXT:    it gt
4649 ; CHECK-NEXT:    movgt.w r2, #-1
4650 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4651 ; CHECK-NEXT:    vcmp.f32 s30, s20
4652 ; CHECK-NEXT:    str r2, [r4, #104]
4653 ; CHECK-NEXT:    it lt
4654 ; CHECK-NEXT:    movlt r1, #0
4655 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4656 ; CHECK-NEXT:    vcmp.f32 s30, #0
4657 ; CHECK-NEXT:    it gt
4658 ; CHECK-NEXT:    movgt.w r1, #-1
4659 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4660 ; CHECK-NEXT:    str r1, [r4, #100]
4661 ; CHECK-NEXT:    it lt
4662 ; CHECK-NEXT:    movlt r0, #0
4663 ; CHECK-NEXT:    vcmp.f32 s30, s20
4664 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4665 ; CHECK-NEXT:    it gt
4666 ; CHECK-NEXT:    movgt.w r0, #-1
4667 ; CHECK-NEXT:    str r0, [r4, #96]
4668 ; CHECK-NEXT:    mov r0, r5
4669 ; CHECK-NEXT:    vmov r6, s18
4670 ; CHECK-NEXT:    bl __fixunssfti
4671 ; CHECK-NEXT:    vcmp.f32 s28, #0
4672 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4673 ; CHECK-NEXT:    vcmp.f32 s28, s20
4674 ; CHECK-NEXT:    it lt
4675 ; CHECK-NEXT:    movlt r3, #0
4676 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4677 ; CHECK-NEXT:    vcmp.f32 s28, #0
4678 ; CHECK-NEXT:    it gt
4679 ; CHECK-NEXT:    movgt.w r3, #-1
4680 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4681 ; CHECK-NEXT:    vcmp.f32 s28, s20
4682 ; CHECK-NEXT:    str r3, [r4, #92]
4683 ; CHECK-NEXT:    it lt
4684 ; CHECK-NEXT:    movlt r2, #0
4685 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4686 ; CHECK-NEXT:    vcmp.f32 s28, #0
4687 ; CHECK-NEXT:    it gt
4688 ; CHECK-NEXT:    movgt.w r2, #-1
4689 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4690 ; CHECK-NEXT:    vcmp.f32 s28, s20
4691 ; CHECK-NEXT:    str r2, [r4, #88]
4692 ; CHECK-NEXT:    it lt
4693 ; CHECK-NEXT:    movlt r1, #0
4694 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4695 ; CHECK-NEXT:    vcmp.f32 s28, #0
4696 ; CHECK-NEXT:    it gt
4697 ; CHECK-NEXT:    movgt.w r1, #-1
4698 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4699 ; CHECK-NEXT:    str r1, [r4, #84]
4700 ; CHECK-NEXT:    it lt
4701 ; CHECK-NEXT:    movlt r0, #0
4702 ; CHECK-NEXT:    vcmp.f32 s28, s20
4703 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4704 ; CHECK-NEXT:    it gt
4705 ; CHECK-NEXT:    movgt.w r0, #-1
4706 ; CHECK-NEXT:    str r0, [r4, #80]
4707 ; CHECK-NEXT:    mov r0, r6
4708 ; CHECK-NEXT:    vmov r5, s26
4709 ; CHECK-NEXT:    bl __fixunssfti
4710 ; CHECK-NEXT:    vcmp.f32 s18, #0
4711 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4712 ; CHECK-NEXT:    vcmp.f32 s18, s20
4713 ; CHECK-NEXT:    it lt
4714 ; CHECK-NEXT:    movlt r3, #0
4715 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4716 ; CHECK-NEXT:    vcmp.f32 s18, #0
4717 ; CHECK-NEXT:    it gt
4718 ; CHECK-NEXT:    movgt.w r3, #-1
4719 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4720 ; CHECK-NEXT:    vcmp.f32 s18, s20
4721 ; CHECK-NEXT:    str r3, [r4, #76]
4722 ; CHECK-NEXT:    it lt
4723 ; CHECK-NEXT:    movlt r2, #0
4724 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4725 ; CHECK-NEXT:    vcmp.f32 s18, #0
4726 ; CHECK-NEXT:    it gt
4727 ; CHECK-NEXT:    movgt.w r2, #-1
4728 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4729 ; CHECK-NEXT:    vcmp.f32 s18, s20
4730 ; CHECK-NEXT:    str r2, [r4, #72]
4731 ; CHECK-NEXT:    it lt
4732 ; CHECK-NEXT:    movlt r1, #0
4733 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4734 ; CHECK-NEXT:    vcmp.f32 s18, #0
4735 ; CHECK-NEXT:    it gt
4736 ; CHECK-NEXT:    movgt.w r1, #-1
4737 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4738 ; CHECK-NEXT:    str r1, [r4, #68]
4739 ; CHECK-NEXT:    it lt
4740 ; CHECK-NEXT:    movlt r0, #0
4741 ; CHECK-NEXT:    vcmp.f32 s18, s20
4742 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4743 ; CHECK-NEXT:    it gt
4744 ; CHECK-NEXT:    movgt.w r0, #-1
4745 ; CHECK-NEXT:    str r0, [r4, #64]
4746 ; CHECK-NEXT:    mov r0, r5
4747 ; CHECK-NEXT:    bl __fixunssfti
4748 ; CHECK-NEXT:    vcmp.f32 s26, #0
4749 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4750 ; CHECK-NEXT:    vcmp.f32 s26, s20
4751 ; CHECK-NEXT:    it lt
4752 ; CHECK-NEXT:    movlt r3, #0
4753 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4754 ; CHECK-NEXT:    vcmp.f32 s26, #0
4755 ; CHECK-NEXT:    it gt
4756 ; CHECK-NEXT:    movgt.w r3, #-1
4757 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4758 ; CHECK-NEXT:    vcmp.f32 s26, s20
4759 ; CHECK-NEXT:    str r3, [r4, #60]
4760 ; CHECK-NEXT:    it lt
4761 ; CHECK-NEXT:    movlt r2, #0
4762 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4763 ; CHECK-NEXT:    vcmp.f32 s26, #0
4764 ; CHECK-NEXT:    it gt
4765 ; CHECK-NEXT:    movgt.w r2, #-1
4766 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4767 ; CHECK-NEXT:    vcmp.f32 s26, s20
4768 ; CHECK-NEXT:    str r2, [r4, #56]
4769 ; CHECK-NEXT:    it lt
4770 ; CHECK-NEXT:    movlt r1, #0
4771 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4772 ; CHECK-NEXT:    vcmp.f32 s26, #0
4773 ; CHECK-NEXT:    it gt
4774 ; CHECK-NEXT:    movgt.w r1, #-1
4775 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4776 ; CHECK-NEXT:    str r1, [r4, #52]
4777 ; CHECK-NEXT:    it lt
4778 ; CHECK-NEXT:    movlt r0, #0
4779 ; CHECK-NEXT:    vcmp.f32 s26, s20
4780 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4781 ; CHECK-NEXT:    it gt
4782 ; CHECK-NEXT:    movgt.w r0, #-1
4783 ; CHECK-NEXT:    str r0, [r4, #48]
4784 ; CHECK-NEXT:    mov r0, r7
4785 ; CHECK-NEXT:    bl __fixunssfti
4786 ; CHECK-NEXT:    vcmp.f32 s24, #0
4787 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4788 ; CHECK-NEXT:    vcmp.f32 s24, s20
4789 ; CHECK-NEXT:    it lt
4790 ; CHECK-NEXT:    movlt r3, #0
4791 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4792 ; CHECK-NEXT:    vcmp.f32 s24, #0
4793 ; CHECK-NEXT:    it gt
4794 ; CHECK-NEXT:    movgt.w r3, #-1
4795 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4796 ; CHECK-NEXT:    vcmp.f32 s24, s20
4797 ; CHECK-NEXT:    str r3, [r4, #44]
4798 ; CHECK-NEXT:    it lt
4799 ; CHECK-NEXT:    movlt r2, #0
4800 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4801 ; CHECK-NEXT:    vcmp.f32 s24, #0
4802 ; CHECK-NEXT:    it gt
4803 ; CHECK-NEXT:    movgt.w r2, #-1
4804 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4805 ; CHECK-NEXT:    vcmp.f32 s24, s20
4806 ; CHECK-NEXT:    str r2, [r4, #40]
4807 ; CHECK-NEXT:    it lt
4808 ; CHECK-NEXT:    movlt r1, #0
4809 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4810 ; CHECK-NEXT:    vcmp.f32 s24, #0
4811 ; CHECK-NEXT:    it gt
4812 ; CHECK-NEXT:    movgt.w r1, #-1
4813 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4814 ; CHECK-NEXT:    str r1, [r4, #36]
4815 ; CHECK-NEXT:    it lt
4816 ; CHECK-NEXT:    movlt r0, #0
4817 ; CHECK-NEXT:    vcmp.f32 s24, s20
4818 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4819 ; CHECK-NEXT:    it gt
4820 ; CHECK-NEXT:    movgt.w r0, #-1
4821 ; CHECK-NEXT:    str r0, [r4, #32]
4822 ; CHECK-NEXT:    mov r0, r9
4823 ; CHECK-NEXT:    bl __fixunssfti
4824 ; CHECK-NEXT:    vcmp.f32 s16, #0
4825 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4826 ; CHECK-NEXT:    vcmp.f32 s16, s20
4827 ; CHECK-NEXT:    it lt
4828 ; CHECK-NEXT:    movlt r3, #0
4829 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4830 ; CHECK-NEXT:    vcmp.f32 s16, #0
4831 ; CHECK-NEXT:    it gt
4832 ; CHECK-NEXT:    movgt.w r3, #-1
4833 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4834 ; CHECK-NEXT:    vcmp.f32 s16, s20
4835 ; CHECK-NEXT:    str r3, [r4, #28]
4836 ; CHECK-NEXT:    it lt
4837 ; CHECK-NEXT:    movlt r2, #0
4838 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4839 ; CHECK-NEXT:    vcmp.f32 s16, #0
4840 ; CHECK-NEXT:    it gt
4841 ; CHECK-NEXT:    movgt.w r2, #-1
4842 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4843 ; CHECK-NEXT:    vcmp.f32 s16, s20
4844 ; CHECK-NEXT:    str r2, [r4, #24]
4845 ; CHECK-NEXT:    it lt
4846 ; CHECK-NEXT:    movlt r1, #0
4847 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4848 ; CHECK-NEXT:    vcmp.f32 s16, #0
4849 ; CHECK-NEXT:    it gt
4850 ; CHECK-NEXT:    movgt.w r1, #-1
4851 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4852 ; CHECK-NEXT:    str r1, [r4, #20]
4853 ; CHECK-NEXT:    it lt
4854 ; CHECK-NEXT:    movlt r0, #0
4855 ; CHECK-NEXT:    vcmp.f32 s16, s20
4856 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4857 ; CHECK-NEXT:    it gt
4858 ; CHECK-NEXT:    movgt.w r0, #-1
4859 ; CHECK-NEXT:    str r0, [r4, #16]
4860 ; CHECK-NEXT:    mov r0, r8
4861 ; CHECK-NEXT:    bl __fixunssfti
4862 ; CHECK-NEXT:    vcmp.f32 s22, #0
4863 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4864 ; CHECK-NEXT:    vcmp.f32 s22, s20
4865 ; CHECK-NEXT:    it lt
4866 ; CHECK-NEXT:    movlt r3, #0
4867 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4868 ; CHECK-NEXT:    vcmp.f32 s22, #0
4869 ; CHECK-NEXT:    it gt
4870 ; CHECK-NEXT:    movgt.w r3, #-1
4871 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4872 ; CHECK-NEXT:    vcmp.f32 s22, s20
4873 ; CHECK-NEXT:    str r3, [r4, #12]
4874 ; CHECK-NEXT:    it lt
4875 ; CHECK-NEXT:    movlt r2, #0
4876 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4877 ; CHECK-NEXT:    vcmp.f32 s22, #0
4878 ; CHECK-NEXT:    it gt
4879 ; CHECK-NEXT:    movgt.w r2, #-1
4880 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4881 ; CHECK-NEXT:    vcmp.f32 s22, s20
4882 ; CHECK-NEXT:    str r2, [r4, #8]
4883 ; CHECK-NEXT:    it lt
4884 ; CHECK-NEXT:    movlt r1, #0
4885 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4886 ; CHECK-NEXT:    vcmp.f32 s22, #0
4887 ; CHECK-NEXT:    it gt
4888 ; CHECK-NEXT:    movgt.w r1, #-1
4889 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4890 ; CHECK-NEXT:    str r1, [r4, #4]
4891 ; CHECK-NEXT:    it lt
4892 ; CHECK-NEXT:    movlt r0, #0
4893 ; CHECK-NEXT:    vcmp.f32 s22, s20
4894 ; CHECK-NEXT:    vmrs APSR_nzcv, fpscr
4895 ; CHECK-NEXT:    it gt
4896 ; CHECK-NEXT:    movgt.w r0, #-1
4897 ; CHECK-NEXT:    str r0, [r4]
4898 ; CHECK-NEXT:    vpop {d8, d9, d10, d11, d12, d13, d14, d15}
4899 ; CHECK-NEXT:    add sp, #4
4900 ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, pc}
4901 ; CHECK-NEXT:    .p2align 2
4902 ; CHECK-NEXT:  @ %bb.1:
4903 ; CHECK-NEXT:  .LCPI51_0:
4904 ; CHECK-NEXT:    .long 0x7f7fffff @ float 3.40282347E+38
4905     %x = call <8 x i128> @llvm.fptoui.sat.v8f16.v8i128(<8 x half> %f)
4906     ret <8 x i128> %x