xref: /llvm-project/llvm/test/CodeGen/ARM/fp.ll (revision 6dd3b9ad58c9b99d039c27127041725df6ee7917)
1; RUN: llc < %s -march=arm -mattr=+vfp2 | FileCheck %s
2
3define float @f(i32 %a) {
4;CHECK: f:
5;CHECK: fmsr
6;CHECK-NEXT: fsitos
7;CHECK-NEXT: fmrs
8entry:
9        %tmp = sitofp i32 %a to float           ; <float> [#uses=1]
10        ret float %tmp
11}
12
13define double @g(i32 %a) {
14;CHECK: g:
15;CHECK: fmsr
16;CHECK-NEXT: fsitod
17;CHECK-NEXT: fmrrd
18entry:
19        %tmp = sitofp i32 %a to double          ; <double> [#uses=1]
20        ret double %tmp
21}
22
23define double @uint_to_double(i32 %a) {
24;CHECK: uint_to_double:
25;CHECK: fmsr
26;CHECK-NEXT: fuitod
27;CHECK-NEXT: fmrrd
28entry:
29        %tmp = uitofp i32 %a to double          ; <double> [#uses=1]
30        ret double %tmp
31}
32
33define float @uint_to_float(i32 %a) {
34;CHECK: uint_to_float:
35;CHECK: fmsr
36;CHECK-NEXT: fuitos
37;CHECK-NEXT: fmrs
38entry:
39        %tmp = uitofp i32 %a to float           ; <float> [#uses=1]
40        ret float %tmp
41}
42
43define double @h(double* %v) {
44;CHECK: h:
45;CHECK: fldd
46;CHECK-NEXT: fmrrd
47entry:
48        %tmp = load double* %v          ; <double> [#uses=1]
49        ret double %tmp
50}
51
52define float @h2() {
53;CHECK: h2:
54;CHECK: 1065353216
55entry:
56        ret float 1.000000e+00
57}
58
59define double @f2(double %a) {
60;CHECK: f2:
61;CHECK-NOT: fmdrr
62        ret double %a
63}
64
65define void @f3() {
66;CHECK: f3:
67;CHECK-NOT: fmdrr
68;CHECK: f4
69entry:
70        %tmp = call double @f5( )               ; <double> [#uses=1]
71        call void @f4( double %tmp )
72        ret void
73}
74
75declare void @f4(double)
76
77declare double @f5()
78
79