Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / Thumb2 / mve-frint.ll
blob1d7dcc8bf84407c549d3a6fbbe9932a74e742034
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-prefix=CHECK --check-prefix=CHECK-MVE
3 ; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve.fp -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-MVEFP
5 define arm_aapcs_vfpcc <4 x float> @fceil_float32_t(<4 x float> %src) {
6 ; CHECK-MVE-LABEL: fceil_float32_t:
7 ; CHECK-MVE:       @ %bb.0: @ %entry
8 ; CHECK-MVE-NEXT:    vrintp.f32 s3, s3
9 ; CHECK-MVE-NEXT:    vrintp.f32 s2, s2
10 ; CHECK-MVE-NEXT:    vrintp.f32 s1, s1
11 ; CHECK-MVE-NEXT:    vrintp.f32 s0, s0
12 ; CHECK-MVE-NEXT:    bx lr
14 ; CHECK-MVEFP-LABEL: fceil_float32_t:
15 ; CHECK-MVEFP:       @ %bb.0: @ %entry
16 ; CHECK-MVEFP-NEXT:    vrintp.f32 q0, q0
17 ; CHECK-MVEFP-NEXT:    bx lr
18 entry:
19   %0 = call fast <4 x float> @llvm.ceil.v4f32(<4 x float> %src)
20   ret <4 x float> %0
23 define arm_aapcs_vfpcc <8 x half> @fceil_float16_t(<8 x half> %src) {
24 ; CHECK-MVE-LABEL: fceil_float16_t:
25 ; CHECK-MVE:       @ %bb.0: @ %entry
26 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s0
27 ; CHECK-MVE-NEXT:    vrintp.f16 s0, s0
28 ; CHECK-MVE-NEXT:    vrintp.f16 s4, s4
29 ; CHECK-MVE-NEXT:    vins.f16 s0, s4
30 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s1
31 ; CHECK-MVE-NEXT:    vrintp.f16 s4, s4
32 ; CHECK-MVE-NEXT:    vrintp.f16 s1, s1
33 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
34 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s2
35 ; CHECK-MVE-NEXT:    vrintp.f16 s4, s4
36 ; CHECK-MVE-NEXT:    vrintp.f16 s2, s2
37 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
38 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s3
39 ; CHECK-MVE-NEXT:    vrintp.f16 s4, s4
40 ; CHECK-MVE-NEXT:    vrintp.f16 s3, s3
41 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
42 ; CHECK-MVE-NEXT:    bx lr
44 ; CHECK-MVEFP-LABEL: fceil_float16_t:
45 ; CHECK-MVEFP:       @ %bb.0: @ %entry
46 ; CHECK-MVEFP-NEXT:    vrintp.f16 q0, q0
47 ; CHECK-MVEFP-NEXT:    bx lr
48 entry:
49   %0 = call fast <8 x half> @llvm.ceil.v8f16(<8 x half> %src)
50   ret <8 x half> %0
53 define arm_aapcs_vfpcc <2 x double> @fceil_float64_t(<2 x double> %src) {
54 ; CHECK-LABEL: fceil_float64_t:
55 ; CHECK:       @ %bb.0: @ %entry
56 ; CHECK-NEXT:    .save {r7, lr}
57 ; CHECK-NEXT:    push {r7, lr}
58 ; CHECK-NEXT:    .vsave {d8, d9}
59 ; CHECK-NEXT:    vpush {d8, d9}
60 ; CHECK-NEXT:    vmov q4, q0
61 ; CHECK-NEXT:    vmov r0, r1, d9
62 ; CHECK-NEXT:    bl ceil
63 ; CHECK-NEXT:    vmov r2, r3, d8
64 ; CHECK-NEXT:    vmov d9, r0, r1
65 ; CHECK-NEXT:    mov r0, r2
66 ; CHECK-NEXT:    mov r1, r3
67 ; CHECK-NEXT:    bl ceil
68 ; CHECK-NEXT:    vmov d8, r0, r1
69 ; CHECK-NEXT:    vmov q0, q4
70 ; CHECK-NEXT:    vpop {d8, d9}
71 ; CHECK-NEXT:    pop {r7, pc}
72 entry:
73   %0 = call fast <2 x double> @llvm.ceil.v2f64(<2 x double> %src)
74   ret <2 x double> %0
77 define arm_aapcs_vfpcc <4 x float> @ftrunc_float32_t(<4 x float> %src) {
78 ; CHECK-MVE-LABEL: ftrunc_float32_t:
79 ; CHECK-MVE:       @ %bb.0: @ %entry
80 ; CHECK-MVE-NEXT:    vrintz.f32 s3, s3
81 ; CHECK-MVE-NEXT:    vrintz.f32 s2, s2
82 ; CHECK-MVE-NEXT:    vrintz.f32 s1, s1
83 ; CHECK-MVE-NEXT:    vrintz.f32 s0, s0
84 ; CHECK-MVE-NEXT:    bx lr
86 ; CHECK-MVEFP-LABEL: ftrunc_float32_t:
87 ; CHECK-MVEFP:       @ %bb.0: @ %entry
88 ; CHECK-MVEFP-NEXT:    vrintz.f32 q0, q0
89 ; CHECK-MVEFP-NEXT:    bx lr
90 entry:
91   %0 = call fast <4 x float> @llvm.trunc.v4f32(<4 x float> %src)
92   ret <4 x float> %0
95 define arm_aapcs_vfpcc <8 x half> @ftrunc_float16_t(<8 x half> %src) {
96 ; CHECK-MVE-LABEL: ftrunc_float16_t:
97 ; CHECK-MVE:       @ %bb.0: @ %entry
98 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s0
99 ; CHECK-MVE-NEXT:    vrintz.f16 s0, s0
100 ; CHECK-MVE-NEXT:    vrintz.f16 s4, s4
101 ; CHECK-MVE-NEXT:    vins.f16 s0, s4
102 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s1
103 ; CHECK-MVE-NEXT:    vrintz.f16 s4, s4
104 ; CHECK-MVE-NEXT:    vrintz.f16 s1, s1
105 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
106 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s2
107 ; CHECK-MVE-NEXT:    vrintz.f16 s4, s4
108 ; CHECK-MVE-NEXT:    vrintz.f16 s2, s2
109 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
110 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s3
111 ; CHECK-MVE-NEXT:    vrintz.f16 s4, s4
112 ; CHECK-MVE-NEXT:    vrintz.f16 s3, s3
113 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
114 ; CHECK-MVE-NEXT:    bx lr
116 ; CHECK-MVEFP-LABEL: ftrunc_float16_t:
117 ; CHECK-MVEFP:       @ %bb.0: @ %entry
118 ; CHECK-MVEFP-NEXT:    vrintz.f16 q0, q0
119 ; CHECK-MVEFP-NEXT:    bx lr
120 entry:
121   %0 = call fast <8 x half> @llvm.trunc.v8f16(<8 x half> %src)
122   ret <8 x half> %0
125 define arm_aapcs_vfpcc <2 x double> @ftrunc_float64_t(<2 x double> %src) {
126 ; CHECK-LABEL: ftrunc_float64_t:
127 ; CHECK:       @ %bb.0: @ %entry
128 ; CHECK-NEXT:    .save {r7, lr}
129 ; CHECK-NEXT:    push {r7, lr}
130 ; CHECK-NEXT:    .vsave {d8, d9}
131 ; CHECK-NEXT:    vpush {d8, d9}
132 ; CHECK-NEXT:    vmov q4, q0
133 ; CHECK-NEXT:    vmov r0, r1, d9
134 ; CHECK-NEXT:    bl trunc
135 ; CHECK-NEXT:    vmov r2, r3, d8
136 ; CHECK-NEXT:    vmov d9, r0, r1
137 ; CHECK-NEXT:    mov r0, r2
138 ; CHECK-NEXT:    mov r1, r3
139 ; CHECK-NEXT:    bl trunc
140 ; CHECK-NEXT:    vmov d8, r0, r1
141 ; CHECK-NEXT:    vmov q0, q4
142 ; CHECK-NEXT:    vpop {d8, d9}
143 ; CHECK-NEXT:    pop {r7, pc}
144 entry:
145   %0 = call fast <2 x double> @llvm.trunc.v2f64(<2 x double> %src)
146   ret <2 x double> %0
149 define arm_aapcs_vfpcc <4 x float> @frint_float32_t(<4 x float> %src) {
150 ; CHECK-MVE-LABEL: frint_float32_t:
151 ; CHECK-MVE:       @ %bb.0: @ %entry
152 ; CHECK-MVE-NEXT:    vrintx.f32 s3, s3
153 ; CHECK-MVE-NEXT:    vrintx.f32 s2, s2
154 ; CHECK-MVE-NEXT:    vrintx.f32 s1, s1
155 ; CHECK-MVE-NEXT:    vrintx.f32 s0, s0
156 ; CHECK-MVE-NEXT:    bx lr
158 ; CHECK-MVEFP-LABEL: frint_float32_t:
159 ; CHECK-MVEFP:       @ %bb.0: @ %entry
160 ; CHECK-MVEFP-NEXT:    vrintx.f32 q0, q0
161 ; CHECK-MVEFP-NEXT:    bx lr
162 entry:
163   %0 = call fast <4 x float> @llvm.rint.v4f32(<4 x float> %src)
164   ret <4 x float> %0
167 define arm_aapcs_vfpcc <8 x half> @frint_float16_t(<8 x half> %src) {
168 ; CHECK-MVE-LABEL: frint_float16_t:
169 ; CHECK-MVE:       @ %bb.0: @ %entry
170 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s0
171 ; CHECK-MVE-NEXT:    vrintx.f16 s0, s0
172 ; CHECK-MVE-NEXT:    vrintx.f16 s4, s4
173 ; CHECK-MVE-NEXT:    vins.f16 s0, s4
174 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s1
175 ; CHECK-MVE-NEXT:    vrintx.f16 s4, s4
176 ; CHECK-MVE-NEXT:    vrintx.f16 s1, s1
177 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
178 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s2
179 ; CHECK-MVE-NEXT:    vrintx.f16 s4, s4
180 ; CHECK-MVE-NEXT:    vrintx.f16 s2, s2
181 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
182 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s3
183 ; CHECK-MVE-NEXT:    vrintx.f16 s4, s4
184 ; CHECK-MVE-NEXT:    vrintx.f16 s3, s3
185 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
186 ; CHECK-MVE-NEXT:    bx lr
188 ; CHECK-MVEFP-LABEL: frint_float16_t:
189 ; CHECK-MVEFP:       @ %bb.0: @ %entry
190 ; CHECK-MVEFP-NEXT:    vrintx.f16 q0, q0
191 ; CHECK-MVEFP-NEXT:    bx lr
192 entry:
193   %0 = call fast <8 x half> @llvm.rint.v8f16(<8 x half> %src)
194   ret <8 x half> %0
197 define arm_aapcs_vfpcc <2 x double> @frint_float64_t(<2 x double> %src) {
198 ; CHECK-LABEL: frint_float64_t:
199 ; CHECK:       @ %bb.0: @ %entry
200 ; CHECK-NEXT:    .save {r7, lr}
201 ; CHECK-NEXT:    push {r7, lr}
202 ; CHECK-NEXT:    .vsave {d8, d9}
203 ; CHECK-NEXT:    vpush {d8, d9}
204 ; CHECK-NEXT:    vmov q4, q0
205 ; CHECK-NEXT:    vmov r0, r1, d9
206 ; CHECK-NEXT:    bl rint
207 ; CHECK-NEXT:    vmov r2, r3, d8
208 ; CHECK-NEXT:    vmov d9, r0, r1
209 ; CHECK-NEXT:    mov r0, r2
210 ; CHECK-NEXT:    mov r1, r3
211 ; CHECK-NEXT:    bl rint
212 ; CHECK-NEXT:    vmov d8, r0, r1
213 ; CHECK-NEXT:    vmov q0, q4
214 ; CHECK-NEXT:    vpop {d8, d9}
215 ; CHECK-NEXT:    pop {r7, pc}
216 entry:
217   %0 = call fast <2 x double> @llvm.rint.v2f64(<2 x double> %src)
218   ret <2 x double> %0
221 define arm_aapcs_vfpcc <4 x float> @fnearbyint_float32_t(<4 x float> %src) {
222 ; CHECK-LABEL: fnearbyint_float32_t:
223 ; CHECK:       @ %bb.0: @ %entry
224 ; CHECK-NEXT:    vrintr.f32 s3, s3
225 ; CHECK-NEXT:    vrintr.f32 s2, s2
226 ; CHECK-NEXT:    vrintr.f32 s1, s1
227 ; CHECK-NEXT:    vrintr.f32 s0, s0
228 ; CHECK-NEXT:    bx lr
229 entry:
230   %0 = call fast <4 x float> @llvm.nearbyint.v4f32(<4 x float> %src)
231   ret <4 x float> %0
234 define arm_aapcs_vfpcc <8 x half> @fnearbyint_float16_t(<8 x half> %src) {
235 ; CHECK-LABEL: fnearbyint_float16_t:
236 ; CHECK:       @ %bb.0: @ %entry
237 ; CHECK-NEXT:    vmovx.f16 s4, s0
238 ; CHECK-NEXT:    vrintr.f16 s0, s0
239 ; CHECK-NEXT:    vrintr.f16 s4, s4
240 ; CHECK-NEXT:    vins.f16 s0, s4
241 ; CHECK-NEXT:    vmovx.f16 s4, s1
242 ; CHECK-NEXT:    vrintr.f16 s4, s4
243 ; CHECK-NEXT:    vrintr.f16 s1, s1
244 ; CHECK-NEXT:    vins.f16 s1, s4
245 ; CHECK-NEXT:    vmovx.f16 s4, s2
246 ; CHECK-NEXT:    vrintr.f16 s4, s4
247 ; CHECK-NEXT:    vrintr.f16 s2, s2
248 ; CHECK-NEXT:    vins.f16 s2, s4
249 ; CHECK-NEXT:    vmovx.f16 s4, s3
250 ; CHECK-NEXT:    vrintr.f16 s4, s4
251 ; CHECK-NEXT:    vrintr.f16 s3, s3
252 ; CHECK-NEXT:    vins.f16 s3, s4
253 ; CHECK-NEXT:    bx lr
254 entry:
255   %0 = call fast <8 x half> @llvm.nearbyint.v8f16(<8 x half> %src)
256   ret <8 x half> %0
259 define arm_aapcs_vfpcc <2 x double> @fnearbyint_float64_t(<2 x double> %src) {
260 ; CHECK-LABEL: fnearbyint_float64_t:
261 ; CHECK:       @ %bb.0: @ %entry
262 ; CHECK-NEXT:    .save {r7, lr}
263 ; CHECK-NEXT:    push {r7, lr}
264 ; CHECK-NEXT:    .vsave {d8, d9}
265 ; CHECK-NEXT:    vpush {d8, d9}
266 ; CHECK-NEXT:    vmov q4, q0
267 ; CHECK-NEXT:    vmov r0, r1, d9
268 ; CHECK-NEXT:    bl nearbyint
269 ; CHECK-NEXT:    vmov r2, r3, d8
270 ; CHECK-NEXT:    vmov d9, r0, r1
271 ; CHECK-NEXT:    mov r0, r2
272 ; CHECK-NEXT:    mov r1, r3
273 ; CHECK-NEXT:    bl nearbyint
274 ; CHECK-NEXT:    vmov d8, r0, r1
275 ; CHECK-NEXT:    vmov q0, q4
276 ; CHECK-NEXT:    vpop {d8, d9}
277 ; CHECK-NEXT:    pop {r7, pc}
278 entry:
279   %0 = call fast <2 x double> @llvm.nearbyint.v2f64(<2 x double> %src)
280   ret <2 x double> %0
283 define arm_aapcs_vfpcc <4 x float> @ffloor_float32_t(<4 x float> %src) {
284 ; CHECK-MVE-LABEL: ffloor_float32_t:
285 ; CHECK-MVE:       @ %bb.0: @ %entry
286 ; CHECK-MVE-NEXT:    vrintm.f32 s3, s3
287 ; CHECK-MVE-NEXT:    vrintm.f32 s2, s2
288 ; CHECK-MVE-NEXT:    vrintm.f32 s1, s1
289 ; CHECK-MVE-NEXT:    vrintm.f32 s0, s0
290 ; CHECK-MVE-NEXT:    bx lr
292 ; CHECK-MVEFP-LABEL: ffloor_float32_t:
293 ; CHECK-MVEFP:       @ %bb.0: @ %entry
294 ; CHECK-MVEFP-NEXT:    vrintm.f32 q0, q0
295 ; CHECK-MVEFP-NEXT:    bx lr
296 entry:
297   %0 = call fast <4 x float> @llvm.floor.v4f32(<4 x float> %src)
298   ret <4 x float> %0
301 define arm_aapcs_vfpcc <8 x half> @ffloor_float16_t(<8 x half> %src) {
302 ; CHECK-MVE-LABEL: ffloor_float16_t:
303 ; CHECK-MVE:       @ %bb.0: @ %entry
304 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s0
305 ; CHECK-MVE-NEXT:    vrintm.f16 s0, s0
306 ; CHECK-MVE-NEXT:    vrintm.f16 s4, s4
307 ; CHECK-MVE-NEXT:    vins.f16 s0, s4
308 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s1
309 ; CHECK-MVE-NEXT:    vrintm.f16 s4, s4
310 ; CHECK-MVE-NEXT:    vrintm.f16 s1, s1
311 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
312 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s2
313 ; CHECK-MVE-NEXT:    vrintm.f16 s4, s4
314 ; CHECK-MVE-NEXT:    vrintm.f16 s2, s2
315 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
316 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s3
317 ; CHECK-MVE-NEXT:    vrintm.f16 s4, s4
318 ; CHECK-MVE-NEXT:    vrintm.f16 s3, s3
319 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
320 ; CHECK-MVE-NEXT:    bx lr
322 ; CHECK-MVEFP-LABEL: ffloor_float16_t:
323 ; CHECK-MVEFP:       @ %bb.0: @ %entry
324 ; CHECK-MVEFP-NEXT:    vrintm.f16 q0, q0
325 ; CHECK-MVEFP-NEXT:    bx lr
326 entry:
327   %0 = call fast <8 x half> @llvm.floor.v8f16(<8 x half> %src)
328   ret <8 x half> %0
331 define arm_aapcs_vfpcc <2 x double> @ffloor_float64_t(<2 x double> %src) {
332 ; CHECK-LABEL: ffloor_float64_t:
333 ; CHECK:       @ %bb.0: @ %entry
334 ; CHECK-NEXT:    .save {r7, lr}
335 ; CHECK-NEXT:    push {r7, lr}
336 ; CHECK-NEXT:    .vsave {d8, d9}
337 ; CHECK-NEXT:    vpush {d8, d9}
338 ; CHECK-NEXT:    vmov q4, q0
339 ; CHECK-NEXT:    vmov r0, r1, d9
340 ; CHECK-NEXT:    bl floor
341 ; CHECK-NEXT:    vmov r2, r3, d8
342 ; CHECK-NEXT:    vmov d9, r0, r1
343 ; CHECK-NEXT:    mov r0, r2
344 ; CHECK-NEXT:    mov r1, r3
345 ; CHECK-NEXT:    bl floor
346 ; CHECK-NEXT:    vmov d8, r0, r1
347 ; CHECK-NEXT:    vmov q0, q4
348 ; CHECK-NEXT:    vpop {d8, d9}
349 ; CHECK-NEXT:    pop {r7, pc}
350 entry:
351   %0 = call fast <2 x double> @llvm.floor.v2f64(<2 x double> %src)
352   ret <2 x double> %0
355 define arm_aapcs_vfpcc <4 x float> @fround_float32_t(<4 x float> %src) {
356 ; CHECK-MVE-LABEL: fround_float32_t:
357 ; CHECK-MVE:       @ %bb.0: @ %entry
358 ; CHECK-MVE-NEXT:    vrinta.f32 s3, s3
359 ; CHECK-MVE-NEXT:    vrinta.f32 s2, s2
360 ; CHECK-MVE-NEXT:    vrinta.f32 s1, s1
361 ; CHECK-MVE-NEXT:    vrinta.f32 s0, s0
362 ; CHECK-MVE-NEXT:    bx lr
364 ; CHECK-MVEFP-LABEL: fround_float32_t:
365 ; CHECK-MVEFP:       @ %bb.0: @ %entry
366 ; CHECK-MVEFP-NEXT:    vrinta.f32 q0, q0
367 ; CHECK-MVEFP-NEXT:    bx lr
368 entry:
369   %0 = call fast <4 x float> @llvm.round.v4f32(<4 x float> %src)
370   ret <4 x float> %0
373 define arm_aapcs_vfpcc <8 x half> @fround_float16_t(<8 x half> %src) {
374 ; CHECK-MVE-LABEL: fround_float16_t:
375 ; CHECK-MVE:       @ %bb.0: @ %entry
376 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s0
377 ; CHECK-MVE-NEXT:    vrinta.f16 s0, s0
378 ; CHECK-MVE-NEXT:    vrinta.f16 s4, s4
379 ; CHECK-MVE-NEXT:    vins.f16 s0, s4
380 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s1
381 ; CHECK-MVE-NEXT:    vrinta.f16 s4, s4
382 ; CHECK-MVE-NEXT:    vrinta.f16 s1, s1
383 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
384 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s2
385 ; CHECK-MVE-NEXT:    vrinta.f16 s4, s4
386 ; CHECK-MVE-NEXT:    vrinta.f16 s2, s2
387 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
388 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s3
389 ; CHECK-MVE-NEXT:    vrinta.f16 s4, s4
390 ; CHECK-MVE-NEXT:    vrinta.f16 s3, s3
391 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
392 ; CHECK-MVE-NEXT:    bx lr
394 ; CHECK-MVEFP-LABEL: fround_float16_t:
395 ; CHECK-MVEFP:       @ %bb.0: @ %entry
396 ; CHECK-MVEFP-NEXT:    vrinta.f16 q0, q0
397 ; CHECK-MVEFP-NEXT:    bx lr
398 entry:
399   %0 = call fast <8 x half> @llvm.round.v8f16(<8 x half> %src)
400   ret <8 x half> %0
403 define arm_aapcs_vfpcc <2 x double> @fround_float64_t(<2 x double> %src) {
404 ; CHECK-LABEL: fround_float64_t:
405 ; CHECK:       @ %bb.0: @ %entry
406 ; CHECK-NEXT:    .save {r7, lr}
407 ; CHECK-NEXT:    push {r7, lr}
408 ; CHECK-NEXT:    .vsave {d8, d9}
409 ; CHECK-NEXT:    vpush {d8, d9}
410 ; CHECK-NEXT:    vmov q4, q0
411 ; CHECK-NEXT:    vmov r0, r1, d9
412 ; CHECK-NEXT:    bl round
413 ; CHECK-NEXT:    vmov r2, r3, d8
414 ; CHECK-NEXT:    vmov d9, r0, r1
415 ; CHECK-NEXT:    mov r0, r2
416 ; CHECK-NEXT:    mov r1, r3
417 ; CHECK-NEXT:    bl round
418 ; CHECK-NEXT:    vmov d8, r0, r1
419 ; CHECK-NEXT:    vmov q0, q4
420 ; CHECK-NEXT:    vpop {d8, d9}
421 ; CHECK-NEXT:    pop {r7, pc}
422 entry:
423   %0 = call fast <2 x double> @llvm.round.v2f64(<2 x double> %src)
424   ret <2 x double> %0
427 declare <4 x float> @llvm.ceil.v4f32(<4 x float>)
428 declare <4 x float> @llvm.trunc.v4f32(<4 x float>)
429 declare <4 x float> @llvm.rint.v4f32(<4 x float>)
430 declare <4 x float> @llvm.nearbyint.v4f32(<4 x float>)
431 declare <4 x float> @llvm.floor.v4f32(<4 x float>)
432 declare <4 x float> @llvm.round.v4f32(<4 x float>)
433 declare <8 x half> @llvm.ceil.v8f16(<8 x half>)
434 declare <8 x half> @llvm.trunc.v8f16(<8 x half>)
435 declare <8 x half> @llvm.rint.v8f16(<8 x half>)
436 declare <8 x half> @llvm.nearbyint.v8f16(<8 x half>)
437 declare <8 x half> @llvm.floor.v8f16(<8 x half>)
438 declare <8 x half> @llvm.round.v8f16(<8 x half>)
439 declare <2 x double> @llvm.ceil.v2f64(<2 x double>)
440 declare <2 x double> @llvm.trunc.v2f64(<2 x double>)
441 declare <2 x double> @llvm.rint.v2f64(<2 x double>)
442 declare <2 x double> @llvm.nearbyint.v2f64(<2 x double>)
443 declare <2 x double> @llvm.floor.v2f64(<2 x double>)
444 declare <2 x double> @llvm.round.v2f64(<2 x double>)