xref: /llvm-project/llvm/test/CodeGen/AArch64/floatdp_1source.ll (revision 7ff67d5bf8d049b368625b6fe06c50aedc222939)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -o - %s -mtriple=arm64-apple-ios7.0 | FileCheck %s
3
4declare float @fabsf(float) readonly
5declare double @fabs(double) readonly
6
7declare float @llvm.sqrt.f32(float %Val)
8declare double @llvm.sqrt.f64(double %Val)
9
10declare float @ceilf(float) readonly
11declare double @ceil(double) readonly
12
13declare float @floorf(float) readonly
14declare double @floor(double) readonly
15
16declare float @truncf(float) readonly
17declare double @trunc(double) readonly
18
19declare float @rintf(float) readonly
20declare double @rint(double) readonly
21
22declare float @nearbyintf(float) readonly
23declare double @nearbyint(double) readonly
24
25define float @fabs_f(float %v) {
26; CHECK-LABEL: fabs_f:
27; CHECK:       ; %bb.0:
28; CHECK-NEXT:    fabs s0, s0
29; CHECK-NEXT:    ret
30  %r = call float @fabsf(float %v)
31  ret float %r
32}
33
34define float @fsub_f(float %v) {
35; CHECK-LABEL: fsub_f:
36; CHECK:       ; %bb.0:
37; CHECK-NEXT:    fneg s0, s0
38; CHECK-NEXT:    ret
39  %r = fsub float -0.0, %v
40  ret float %r
41}
42
43define float @sqrt_f(float %v) {
44; CHECK-LABEL: sqrt_f:
45; CHECK:       ; %bb.0:
46; CHECK-NEXT:    fsqrt s0, s0
47; CHECK-NEXT:    ret
48  %r = call float @llvm.sqrt.f32(float %v)
49  ret float %r
50}
51
52define float @ceil_f(float %v) {
53; CHECK-LABEL: ceil_f:
54; CHECK:       ; %bb.0:
55; CHECK-NEXT:    frintp s0, s0
56; CHECK-NEXT:    ret
57  %r = call float @ceilf(float %v)
58  ret float %r
59}
60
61define float @floor_f(float %v) {
62; CHECK-LABEL: floor_f:
63; CHECK:       ; %bb.0:
64; CHECK-NEXT:    frintm s0, s0
65; CHECK-NEXT:    ret
66  %r = call float @floorf(float %v)
67  ret float %r
68}
69
70define float @trunc_f(float %v) {
71; CHECK-LABEL: trunc_f:
72; CHECK:       ; %bb.0:
73; CHECK-NEXT:    frintz s0, s0
74; CHECK-NEXT:    ret
75  %r = call float @truncf(float %v)
76  ret float %r
77}
78
79define float @rint_f(float %v) {
80; CHECK-LABEL: rint_f:
81; CHECK:       ; %bb.0:
82; CHECK-NEXT:    frintx s0, s0
83; CHECK-NEXT:    ret
84  %r = call float @rintf(float %v)
85  ret float %r
86}
87
88define float @nearbyint_f(float %v) {
89; CHECK-LABEL: nearbyint_f:
90; CHECK:       ; %bb.0:
91; CHECK-NEXT:    frinti s0, s0
92; CHECK-NEXT:    ret
93  %r = call float @nearbyintf(float %v)
94  ret float %r
95}
96
97define double @fabs_d(double %v) {
98; CHECK-LABEL: fabs_d:
99; CHECK:       ; %bb.0:
100; CHECK-NEXT:    fabs d0, d0
101; CHECK-NEXT:    ret
102  %r = call double @fabs(double %v)
103  ret double %r
104}
105
106define double @fsub_d(double %v) {
107; CHECK-LABEL: fsub_d:
108; CHECK:       ; %bb.0:
109; CHECK-NEXT:    fneg d0, d0
110; CHECK-NEXT:    ret
111  %r = fsub double -0.0, %v
112  ret double %r
113}
114
115define double @sqrt_d(double %v) {
116; CHECK-LABEL: sqrt_d:
117; CHECK:       ; %bb.0:
118; CHECK-NEXT:    fsqrt d0, d0
119; CHECK-NEXT:    ret
120  %r = call double @llvm.sqrt.f64(double %v)
121  ret double %r
122}
123
124define double @ceil_d(double %v) {
125; CHECK-LABEL: ceil_d:
126; CHECK:       ; %bb.0:
127; CHECK-NEXT:    frintp d0, d0
128; CHECK-NEXT:    ret
129  %r = call double @ceil(double %v)
130  ret double %r
131}
132
133define double @floor_d(double %v) {
134; CHECK-LABEL: floor_d:
135; CHECK:       ; %bb.0:
136; CHECK-NEXT:    frintm d0, d0
137; CHECK-NEXT:    ret
138  %r = call double @floor(double %v)
139  ret double %r
140}
141
142define double @trunc_d(double %v) {
143; CHECK-LABEL: trunc_d:
144; CHECK:       ; %bb.0:
145; CHECK-NEXT:    frintz d0, d0
146; CHECK-NEXT:    ret
147  %r = call double @trunc(double %v)
148  ret double %r
149}
150
151define double @rint_d(double %v) {
152; CHECK-LABEL: rint_d:
153; CHECK:       ; %bb.0:
154; CHECK-NEXT:    frintx d0, d0
155; CHECK-NEXT:    ret
156  %r = call double @rint(double %v)
157  ret double %r
158}
159
160define double @nearbyint_d(double %v) {
161; CHECK-LABEL: nearbyint_d:
162; CHECK:       ; %bb.0:
163; CHECK-NEXT:    frinti d0, d0
164; CHECK-NEXT:    ret
165  %r = call double @nearbyint(double %v)
166  ret double %r
167}
168
169define float @conv_h_f(half %v) {
170; CHECK-LABEL: conv_h_f:
171; CHECK:       ; %bb.0:
172; CHECK-NEXT:    fcvt s0, h0
173; CHECK-NEXT:    ret
174  %r = fpext half %v to float
175  ret float %r
176}
177
178define double @conv_h_d(half %v) {
179; CHECK-LABEL: conv_h_d:
180; CHECK:       ; %bb.0:
181; CHECK-NEXT:    fcvt d0, h0
182; CHECK-NEXT:    ret
183  %r = fpext half %v to double
184  ret double %r
185}
186
187define half @conv_f_h(float %v) {
188; CHECK-LABEL: conv_f_h:
189; CHECK:       ; %bb.0:
190; CHECK-NEXT:    fcvt h0, s0
191; CHECK-NEXT:    ret
192  %r = fptrunc float %v to half
193  ret half %r
194}
195
196define double @conv_f_d(float %v) {
197; CHECK-LABEL: conv_f_d:
198; CHECK:       ; %bb.0:
199; CHECK-NEXT:    fcvt d0, s0
200; CHECK-NEXT:    ret
201  %r = fpext float %v to double
202  ret double %r
203}
204
205define half @conv_d_h(double %v) {
206; CHECK-LABEL: conv_d_h:
207; CHECK:       ; %bb.0:
208; CHECK-NEXT:    fcvt h0, d0
209; CHECK-NEXT:    ret
210  %r = fptrunc double %v to half
211  ret half %r
212}
213
214define float @conv_d_f(double %v) {
215; CHECK-LABEL: conv_d_f:
216; CHECK:       ; %bb.0:
217; CHECK-NEXT:    fcvt s0, d0
218; CHECK-NEXT:    ret
219  %r = fptrunc double %v to float
220  ret float %r
221}
222