[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / ARM / arm32-rounding.ll
blobb0a9f54e4240413fe024b3ceb505c290db0ff8c9
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,-d32,-fp64 | FileCheck --check-prefix=SP %s
3 ; RUN: llc < %s -mtriple=thumbv7em-linux-gnueabihf -mattr=+fp-armv8,-d32 | FileCheck --check-prefix=DP %s
5 ; CHECK-LABEL: test1
6 ; CHECK: vrintm.f32
7 define float @test1(float %a) {
8 entry:
9   %call = call float @floorf(float %a) nounwind readnone
10   ret float %call
13 ; CHECK-LABEL: test2
14 ; SP: b floor
15 ; DP: vrintm.f64
16 define double @test2(double %a) {
17 entry:
18   %call = call double @floor(double %a) nounwind readnone
19   ret double %call
22 ; CHECK-LABEL: test3
23 ; CHECK: vrintp.f32
24 define float @test3(float %a) {
25 entry:
26   %call = call float @ceilf(float %a) nounwind readnone
27   ret float %call
30 ; CHECK-LABEL: test4
31 ; SP: b ceil
32 ; DP: vrintp.f64
33 define double @test4(double %a) {
34 entry:
35   %call = call double @ceil(double %a) nounwind readnone
36   ret double %call
39 ; CHECK-LABEL: test5
40 ; CHECK: vrinta.f32
41 define float @test5(float %a) {
42 entry:
43   %call = call float @roundf(float %a) nounwind readnone
44   ret float %call
47 ; CHECK-LABEL: test6
48 ; SP: b round
49 ; DP: vrinta.f64
50 define double @test6(double %a) {
51 entry:
52   %call = call double @round(double %a) nounwind readnone
53   ret double %call
56 ; CHECK-LABEL: test7
57 ; CHECK: vrintz.f32
58 define float @test7(float %a) {
59 entry:
60   %call = call float @truncf(float %a) nounwind readnone
61   ret float %call
64 ; CHECK-LABEL: test8
65 ; SP: b trunc
66 ; DP: vrintz.f64
67 define double @test8(double %a) {
68 entry:
69   %call = call double @trunc(double %a) nounwind readnone
70   ret double %call
73 ; CHECK-LABEL: test9
74 ; CHECK: vrintr.f32
75 define float @test9(float %a) {
76 entry:
77   %call = call float @nearbyintf(float %a) nounwind readnone
78   ret float %call
81 ; CHECK-LABEL: test10
82 ; SP: b nearbyint
83 ; DP: vrintr.f64
84 define double @test10(double %a) {
85 entry:
86   %call = call double @nearbyint(double %a) nounwind readnone
87   ret double %call
90 ; CHECK-LABEL: test11
91 ; CHECK: vrintx.f32
92 define float @test11(float %a) {
93 entry:
94   %call = call float @rintf(float %a) nounwind readnone
95   ret float %call
98 ; CHECK-LABEL: test12
99 ; SP: b rint
100 ; DP: vrintx.f64
101 define double @test12(double %a) {
102 entry:
103   %call = call double @rint(double %a) nounwind readnone
104   ret double %call
107 declare float @floorf(float) nounwind readnone
108 declare double @floor(double) nounwind readnone
109 declare float @ceilf(float) nounwind readnone
110 declare double @ceil(double) nounwind readnone
111 declare float @roundf(float) nounwind readnone
112 declare double @round(double) nounwind readnone
113 declare float @truncf(float) nounwind readnone
114 declare double @trunc(double) nounwind readnone
115 declare float @nearbyintf(float) nounwind readnone
116 declare double @nearbyint(double) nounwind readnone
117 declare float @rintf(float) nounwind readnone
118 declare double @rint(double) nounwind readnone