1; RUN: llc < %s -mtriple=armv8-linux-gnueabihf -mattr=+fp-armv8 | FileCheck --check-prefix=CHECK --check-prefix=DP %s
2; RUN: llc < %s -mtriple=thumbv7em-linux-gnueabihf -mattr=+fp-armv8,+d16,+fp-only-sp | FileCheck --check-prefix=SP %s
3; RUN: llc < %s -mtriple=thumbv7em-linux-gnueabihf -mattr=+fp-armv8,+d16 | FileCheck --check-prefix=DP %s
4
5; CHECK-LABEL: test1
6; CHECK: vrintm.f32
7define float @test1(float %a) {
8entry:
9  %call = call float @floorf(float %a) nounwind readnone
10  ret float %call
11}
12
13; CHECK-LABEL: test2
14; SP: b floor
15; DP: vrintm.f64
16define double @test2(double %a) {
17entry:
18  %call = call double @floor(double %a) nounwind readnone
19  ret double %call
20}
21
22; CHECK-LABEL: test3
23; CHECK: vrintp.f32
24define float @test3(float %a) {
25entry:
26  %call = call float @ceilf(float %a) nounwind readnone
27  ret float %call
28}
29
30; CHECK-LABEL: test4
31; SP: b ceil
32; DP: vrintp.f64
33define double @test4(double %a) {
34entry:
35  %call = call double @ceil(double %a) nounwind readnone
36  ret double %call
37}
38
39; CHECK-LABEL: test5
40; CHECK: vrinta.f32
41define float @test5(float %a) {
42entry:
43  %call = call float @roundf(float %a) nounwind readnone
44  ret float %call
45}
46
47; CHECK-LABEL: test6
48; SP: b round
49; DP: vrinta.f64
50define double @test6(double %a) {
51entry:
52  %call = call double @round(double %a) nounwind readnone
53  ret double %call
54}
55
56; CHECK-LABEL: test7
57; CHECK: vrintz.f32
58define float @test7(float %a) {
59entry:
60  %call = call float @truncf(float %a) nounwind readnone
61  ret float %call
62}
63
64; CHECK-LABEL: test8
65; SP: b trunc
66; DP: vrintz.f64
67define double @test8(double %a) {
68entry:
69  %call = call double @trunc(double %a) nounwind readnone
70  ret double %call
71}
72
73; CHECK-LABEL: test9
74; CHECK: vrintr.f32
75define float @test9(float %a) {
76entry:
77  %call = call float @nearbyintf(float %a) nounwind readnone
78  ret float %call
79}
80
81; CHECK-LABEL: test10
82; SP: b nearbyint
83; DP: vrintr.f64
84define double @test10(double %a) {
85entry:
86  %call = call double @nearbyint(double %a) nounwind readnone
87  ret double %call
88}
89
90; CHECK-LABEL: test11
91; CHECK: vrintx.f32
92define float @test11(float %a) {
93entry:
94  %call = call float @rintf(float %a) nounwind readnone
95  ret float %call
96}
97
98; CHECK-LABEL: test12
99; SP: b rint
100; DP: vrintx.f64
101define double @test12(double %a) {
102entry:
103  %call = call double @rint(double %a) nounwind readnone
104  ret double %call
105}
106
107declare float @floorf(float) nounwind readnone
108declare double @floor(double) nounwind readnone
109declare float @ceilf(float) nounwind readnone
110declare double @ceil(double) nounwind readnone
111declare float @roundf(float) nounwind readnone
112declare double @round(double) nounwind readnone
113declare float @truncf(float) nounwind readnone
114declare double @trunc(double) nounwind readnone
115declare float @nearbyintf(float) nounwind readnone
116declare double @nearbyint(double) nounwind readnone
117declare float @rintf(float) nounwind readnone
118declare double @rint(double) nounwind readnone
119