1; RUN: llc < %s -march=arm -mattr=+vfp2 | FileCheck %s
2
3define float @f(i32 %a) {
4;CHECK: f:
5;CHECK: vmov
6;CHECK-NEXT: vcvt.f32.s32
7;CHECK-NEXT: vmov
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: vmov
16;CHECK-NEXT: vcvt.f64.s32
17;CHECK-NEXT: vmov
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: vmov
26;CHECK-NEXT: vcvt.f64.u32
27;CHECK-NEXT: vmov
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: vmov
36;CHECK-NEXT: vcvt.f32.u32
37;CHECK-NEXT: vmov
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: vldr.64
46;CHECK-NEXT: vmov
47entry:
48        %tmp = load double* %v          ; <double> [#uses=1]
49        ret double %tmp
50}
51
52define float @h2() {
53;CHECK: h2:
54;CHECK: mov r0, #1065353216
55entry:
56        ret float 1.000000e+00
57}
58
59define double @f2(double %a) {
60;CHECK: f2:
61;CHECK-NOT: vmov
62        ret double %a
63}
64
65define void @f3() {
66;CHECK: f3:
67;CHECK-NOT: vmov
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