1 ; RUN: llc -O3 < %s -mtriple=arm64-apple-ios7.0 | FileCheck %s --check-prefix=CHECK-INEXACT
2 ; RUN: llc -O3 < %s -mtriple=aarch64-linux-gnu | FileCheck %s --check-prefix=CHECK-FAST
4 ; CHECK-INEXACT-LABEL: test1:
5 ; CHECK-INEXACT-DAG: frintm
6 ; CHECK-INEXACT-DAG: frintx
8 ; CHECK-FAST-LABEL: test1:
10 ; CHECK-FAST-NOT: frintx
11 define float @test1(float %a) #0 {
13 %call = tail call float @floorf(float %a) nounwind readnone
17 declare float @floorf(float) nounwind readnone
19 ; CHECK-INEXACT-LABEL: test2:
20 ; CHECK-INEXACT: frintm
21 ; CHECK-INEXACT: frintx
23 ; CHECK-FAST-LABEL: test2:
25 ; CHECK-FAST-NOT: frintx
26 define double @test2(double %a) #0 {
28 %call = tail call double @floor(double %a) nounwind readnone
32 declare double @floor(double) nounwind readnone
34 ; CHECK-INEXACT-LABEL: test3:
35 ; CHECK-INEXACT: frinti
37 ; CHECK-FAST-LABEL: test3:
39 define float @test3(float %a) #0 {
41 %call = tail call float @nearbyintf(float %a) nounwind readnone
45 declare float @nearbyintf(float) nounwind readnone
47 ; CHECK-INEXACT-LABEL: test4:
48 ; CHECK-INEXACT: frinti
50 ; CHECK-FAST-LABEL: test4:
52 define double @test4(double %a) #0 {
54 %call = tail call double @nearbyint(double %a) nounwind readnone
58 declare double @nearbyint(double) nounwind readnone
60 ; CHECK-INEXACT-LABEL: test5:
61 ; CHECK-INEXACT: frintp
62 ; CHECK-INEXACT: frintx
64 ; CHECK-FAST-LABEL: test5:
66 ; CHECK-FAST-NOT: frintx
67 define float @test5(float %a) #0 {
69 %call = tail call float @ceilf(float %a) nounwind readnone
73 declare float @ceilf(float) nounwind readnone
75 ; CHECK-INEXACT-LABEL: test6:
76 ; CHECK-INEXACT: frintp
77 ; CHECK-INEXACT: frintx
79 ; CHECK-FAST-LABEL: test6:
81 ; CHECK-FAST-NOT: frintx
82 define double @test6(double %a) #0 {
84 %call = tail call double @ceil(double %a) nounwind readnone
88 declare double @ceil(double) nounwind readnone
90 ; CHECK-INEXACT-LABEL: test7:
91 ; CHECK-INEXACT: frintx
93 ; CHECK-FAST-LABEL: test7:
95 define float @test7(float %a) #0 {
97 %call = tail call float @rintf(float %a) nounwind readnone
101 declare float @rintf(float) nounwind readnone
103 ; CHECK-INEXACT-LABEL: test8:
104 ; CHECK-INEXACT: frintx
106 ; CHECK-FAST-LABEL: test8:
108 define double @test8(double %a) #0 {
110 %call = tail call double @rint(double %a) nounwind readnone
114 declare double @rint(double) nounwind readnone
116 ; CHECK-INEXACT-LABEL: test9:
117 ; CHECK-INEXACT: frintz
118 ; CHECK-INEXACT: frintx
120 ; CHECK-FAST-LABEL: test9:
122 ; CHECK-FAST-NOT: frintx
123 define float @test9(float %a) #0 {
125 %call = tail call float @truncf(float %a) nounwind readnone
129 declare float @truncf(float) nounwind readnone
131 ; CHECK-INEXACT-LABEL: test10:
132 ; CHECK-INEXACT: frintz
133 ; CHECK-INEXACT: frintx
135 ; CHECK-FAST-LABEL: test10:
137 ; CHECK-FAST-NOT: frintx
138 define double @test10(double %a) #0 {
140 %call = tail call double @trunc(double %a) nounwind readnone
144 declare double @trunc(double) nounwind readnone
146 ; CHECK-INEXACT-LABEL: test11:
147 ; CHECK-INEXACT: frinta
148 ; CHECK-INEXACT: frintx
150 ; CHECK-FAST-LABEL: test11:
152 ; CHECK-FAST-NOT: frintx
153 define float @test11(float %a) #0 {
155 %call = tail call float @roundf(float %a) nounwind readnone
159 declare float @roundf(float %a) nounwind readnone
161 ; CHECK-INEXACT-LABEL: test12:
162 ; CHECK-INEXACT: frinta
163 ; CHECK-INEXACT: frintx
165 ; CHECK-FAST-LABEL: test12:
167 ; CHECK-FAST-NOT: frintx
168 define double @test12(double %a) #0 {
170 %call = tail call double @round(double %a) nounwind readnone
174 declare double @round(double %a) nounwind readnone
176 ; CHECK-INEXACT-LABEL: test13:
177 ; CHECK-INEXACT-NOT: frintx
178 ; CHECK-INEXACT: frintm
180 ; CHECK-FAST-LABEL: test13:
181 ; CHECK-FAST-NOT: frintx
183 define float @test13(float %a) #1 {
185 %call = tail call float @floorf(float %a) nounwind readnone
189 ; CHECK-INEXACT-LABEL: test14:
190 ; CHECK-INEXACT-NOT: frintx
191 ; CHECK-INEXACT: frintm
193 ; CHECK-FAST-LABEL: test14:
194 ; CHECK-FAST-NOT: frintx
196 define double @test14(double %a) #1 {
198 %call = tail call double @floor(double %a) nounwind readnone
202 ; CHECK-INEXACT-LABEL: test15:
203 ; CHECK-INEXACT-NOT: frintx
204 ; CHECK-INEXACT: frintp
206 ; CHECK-FAST-LABEL: test15:
207 ; CHECK-FAST-NOT: frintx
209 define float @test15(float %a) #1 {
211 %call = tail call float @ceilf(float %a) nounwind readnone
215 ; CHECK-INEXACT-LABEL: test16:
216 ; CHECK-INEXACT-NOT: frintx
217 ; CHECK-INEXACT: frintp
219 ; CHECK-FAST-LABEL: test16:
220 ; CHECK-FAST-NOT: frintx
222 define double @test16(double %a) #1 {
224 %call = tail call double @ceil(double %a) nounwind readnone
228 ; CHECK-INEXACT-LABEL: test17:
229 ; CHECK-INEXACT-NOT: frintx
230 ; CHECK-INEXACT: frintz
232 ; CHECK-FAST-LABEL: test17:
233 ; CHECK-FAST-NOT: frintx
235 define float @test17(float %a) #1 {
237 %call = tail call float @truncf(float %a) nounwind readnone
241 ; CHECK-INEXACT-LABEL: test18:
242 ; CHECK-INEXACT-NOT: frintx
243 ; CHECK-INEXACT: frintz
245 ; CHECK-FAST-LABEL: test18:
246 ; CHECK-FAST-NOT: frintx
248 define double @test18(double %a) #1 {
250 %call = tail call double @trunc(double %a) nounwind readnone
254 ; CHECK-INEXACT-LABEL: test19:
255 ; CHECK-INEXACT-NOT: frintx
256 ; CHECK-INEXACT: frinta
258 ; CHECK-FAST-LABEL: test19:
259 ; CHECK-FAST-NOT: frintx
261 define float @test19(float %a) #1 {
263 %call = tail call float @roundf(float %a) nounwind readnone
267 ; CHECK-INEXACT-LABEL: test20:
268 ; CHECK-INEXACT-NOT: frintx
269 ; CHECK-INEXACT: frinta
271 ; CHECK-FAST-LABEL: test20:
272 ; CHECK-FAST-NOT: frintx
274 define double @test20(double %a) #1 {
276 %call = tail call double @round(double %a) nounwind readnone
282 attributes #0 = { nounwind }
283 attributes #1 = { nounwind "unsafe-fp-math"="true" }