1; RUN: llc -mtriple=armv7k-apple-watchos2.0 < %s | FileCheck %s
2
3define arm_aapcs_vfpcc float @t1(float %a, float %b) {
4entry:
5; CHECK: t1
6; CHECK-NOT: vmov
7; CHECK: vadd.f32
8  %a.addr = alloca float, align 4
9  %b.addr = alloca float, align 4
10  store float %a, float* %a.addr, align 4
11  store float %b, float* %b.addr, align 4
12  %0 = load float, float* %a.addr, align 4
13  %1 = load float, float* %b.addr, align 4
14  %add = fadd float %0, %1
15  ret float %add
16}
17
18define arm_aapcs_vfpcc double @t2(double %a, double %b) {
19entry:
20; CHECK: t2
21; CHECK-NOT: vmov
22; CHECK: vadd.f64
23  %a.addr = alloca double, align 8
24  %b.addr = alloca double, align 8
25  store double %a, double* %a.addr, align 8
26  store double %b, double* %b.addr, align 8
27  %0 = load double, double* %a.addr, align 8
28  %1 = load double, double* %b.addr, align 8
29  %add = fadd double %0, %1
30  ret double %add
31}
32
33define arm_aapcs_vfpcc i64 @t3(double %ti) {
34entry:
35; CHECK-LABEL: t3:
36; CHECK-NOT: vmov
37; CHECK: bl ___fixunsdfdi
38  %conv = fptoui double %ti to i64
39  ret i64 %conv
40}
41
42define arm_aapcs_vfpcc i64 @t4(double %ti) {
43entry:
44; CHECK-LABEL: t4:
45; CHECK-NOT: vmov
46; CHECK: bl ___fixdfdi
47  %conv = fptosi double %ti to i64
48  ret i64 %conv
49}
50
51define arm_aapcs_vfpcc double @t5(i64 %ti) {
52entry:
53; CHECK-LABEL: t5:
54; CHECK: bl ___floatundidf
55; CHECK-NOT: vmov
56; CHECK: pop
57  %conv = uitofp i64 %ti to double
58  ret double %conv
59}
60
61define arm_aapcs_vfpcc double @t6(i64 %ti) {
62entry:
63; CHECK-LABEL: t6:
64; CHECK: bl ___floatdidf
65; CHECK-NOT: vmov
66; CHECK: pop
67  %conv = sitofp i64 %ti to double
68  ret double %conv
69}
70
71define arm_aapcs_vfpcc float @t7(i64 %ti) {
72entry:
73; CHECK-LABEL: t7:
74; CHECK: bl ___floatundisf
75; CHECK-NOT: vmov
76; CHECK: pop
77  %conv = uitofp i64 %ti to float
78  ret float %conv
79}
80
81define arm_aapcs_vfpcc float @t8(i64 %ti) {
82entry:
83; CHECK-LABEL: t8:
84; CHECK: bl ___floatdisf
85; CHECK-NOT: vmov
86; CHECK: pop
87  %conv = sitofp i64 %ti to float
88  ret float %conv
89}
90
91define arm_aapcs_vfpcc double @t9(double %d0, double %d1, double %d2, double %d3, double %d4, double %d5, double %d6, double %d7, float %a, float %b) {
92entry:
93; CHECK-LABEL: t9:
94; CHECK-NOT: vmov
95; CHECK: vldr
96  %add = fadd float %a, %b
97  %conv = fpext float %add to double
98  ret double %conv
99}
100
101define arm_aapcs_vfpcc double @t10(double %d0, double %d1, double %d2, double %d3, double %d4, double %d5, double %a, float %b, double %c) {
102entry:
103; CHECK-LABEL: t10:
104; CHECK-NOT: vmov
105; CHECK: vldr
106  %add = fadd double %a, %c
107  ret double %add
108}
109
110define arm_aapcs_vfpcc float @t11(double %d0, double %d1, double %d2, double %d3, double %d4, double %d5, double %d6, float %a, double %b, float %c) {
111entry:
112; CHECK-LABEL: t11:
113; CHECK: vldr
114  %add = fadd float %a, %c
115  ret float %add
116}
117
118define arm_aapcs_vfpcc double @t12(double %a, double %b) {
119entry:
120; CHECK-LABEL: t12:
121; CHECK: vstr
122  %add = fadd double %a, %b
123  %sub = fsub double %a, %b
124  %call = tail call arm_aapcs_vfpcc double @x(double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double %add, float 0.000000e+00, double %sub)
125  ret double %call
126}
127
128define arm_aapcs_vfpcc double @t13(double %x) {
129entry:
130; CHECK-LABEL: t13:
131; CHECK-NOT: vmov
132; CHECK: bl ___sincos_stret
133  %call = tail call arm_aapcs_vfpcc double @cos(double %x)
134  %call1 = tail call arm_aapcs_vfpcc double @sin(double %x)
135  %mul = fmul double %call, %call1
136  ret double %mul
137}
138
139define arm_aapcs_vfpcc double @t14(double %x) {
140; CHECK-LABEL: t14:
141; CHECK-NOT: vmov
142; CHECK: b ___exp10
143  %__exp10 = tail call double @__exp10(double %x) #1
144  ret double %__exp10
145}
146
147declare arm_aapcs_vfpcc double @x(double, double, double, double, double, double, double, float, double)
148declare arm_aapcs_vfpcc double @cos(double) #0
149declare arm_aapcs_vfpcc double @sin(double) #0
150declare double @__exp10(double)
151
152attributes #0 = { readnone }
153attributes #1 = { readonly }
154