Don't fold negative offsets into cp / dp accesses to avoid relocation errors.
[oota-llvm.git] / test / CodeGen / XCore / float-intrinsics.ll
1 ; RUN: llc < %s -march=xcore | FileCheck %s
2 declare double @llvm.cos.f64(double)
3 declare double @llvm.exp.f64(double)
4 declare double @llvm.exp2.f64(double)
5 declare double @llvm.log.f64(double)
6 declare double @llvm.log10.f64(double)
7 declare double @llvm.log2.f64(double)
8 declare double @llvm.pow.f64(double, double)
9 declare double @llvm.powi.f64(double, i32)
10 declare double @llvm.sin.f64(double)
11 declare double @llvm.sqrt.f64(double)
12
13 define double @cos(double %F) {
14 ; CHECK: cos:
15 ; CHECK: bl cos
16         %result = call double @llvm.cos.f64(double %F)
17         ret double %result
18 }
19
20 declare float @llvm.cos.f32(float)
21
22 ; CHECK: cosf:
23 ; CHECK: bl cosf
24 define float @cosf(float %F) {
25         %result = call float @llvm.cos.f32(float %F)
26         ret float %result
27 }
28
29 define double @exp(double %F) {
30 ; CHECK: exp:
31 ; CHECK: bl exp
32         %result = call double @llvm.exp.f64(double %F)
33         ret double %result
34 }
35
36 declare float @llvm.exp.f32(float)
37
38 define float @expf(float %F) {
39 ; CHECK: expf:
40 ; CHECK: bl expf
41         %result = call float @llvm.exp.f32(float %F)
42         ret float %result
43 }
44
45 define double @exp2(double %F) {
46 ; CHECK: exp2:
47 ; CHECK: bl exp2
48         %result = call double @llvm.exp2.f64(double %F)
49         ret double %result
50 }
51
52 declare float @llvm.exp2.f32(float)
53
54 define float @exp2f(float %F) {
55 ; CHECK: exp2f:
56 ; CHECK: bl exp2f
57         %result = call float @llvm.exp2.f32(float %F)
58         ret float %result
59 }
60
61 define double @log(double %F) {
62 ; CHECK: log:
63 ; CHECK: bl log
64         %result = call double @llvm.log.f64(double %F)
65         ret double %result
66 }
67
68 declare float @llvm.log.f32(float)
69
70 define float @logf(float %F) {
71 ; CHECK: logf:
72 ; CHECK: bl logf
73         %result = call float @llvm.log.f32(float %F)
74         ret float %result
75 }
76
77 define double @log10(double %F) {
78 ; CHECK: log10:
79 ; CHECK: bl log10
80         %result = call double @llvm.log10.f64(double %F)
81         ret double %result
82 }
83
84 declare float @llvm.log10.f32(float)
85
86 define float @log10f(float %F) {
87 ; CHECK: log10f:
88 ; CHECK: bl log10f
89         %result = call float @llvm.log10.f32(float %F)
90         ret float %result
91 }
92
93 define double @log2(double %F) {
94 ; CHECK: log2:
95 ; CHECK: bl log2
96         %result = call double @llvm.log2.f64(double %F)
97         ret double %result
98 }
99
100 declare float @llvm.log2.f32(float)
101
102 define float @log2f(float %F) {
103 ; CHECK: log2f:
104 ; CHECK: bl log2f
105         %result = call float @llvm.log2.f32(float %F)
106         ret float %result
107 }
108
109 define double @pow(double %F, double %power) {
110 ; CHECK: pow:
111 ; CHECK: bl pow
112         %result = call double @llvm.pow.f64(double %F, double %power)
113         ret double %result
114 }
115
116 declare float @llvm.pow.f32(float, float)
117
118 define float @powf(float %F, float %power) {
119 ; CHECK: powf:
120 ; CHECK: bl powf
121         %result = call float @llvm.pow.f32(float %F, float %power)
122         ret float %result
123 }
124
125 define double @powi(double %F, i32 %power) {
126 ; CHECK: powi:
127 ; CHECK: bl __powidf2
128         %result = call double @llvm.powi.f64(double %F, i32 %power)
129         ret double %result
130 }
131
132 declare float @llvm.powi.f32(float, i32)
133
134 define float @powif(float %F, i32 %power) {
135 ; CHECK: powif:
136 ; CHECK: bl __powisf2
137         %result = call float @llvm.powi.f32(float %F, i32 %power)
138         ret float %result
139 }
140
141 define double @sin(double %F) {
142 ; CHECK: sin:
143 ; CHECK: bl sin
144         %result = call double @llvm.sin.f64(double %F)
145         ret double %result
146 }
147
148 declare float @llvm.sin.f32(float)
149
150 define float @sinf(float %F) {
151 ; CHECK: sinf:
152 ; CHECK: bl sinf
153         %result = call float @llvm.sin.f32(float %F)
154         ret float %result
155 }
156
157 define double @sqrt(double %F) {
158 ; CHECK: sqrt:
159 ; CHECK: bl sqrt
160         %result = call double @llvm.sqrt.f64(double %F)
161         ret double %result
162 }
163
164 declare float @llvm.sqrt.f32(float)
165
166 define float @sqrtf(float %F) {
167 ; CHECK: sqrtf:
168 ; CHECK: bl sqrtf
169         %result = call float @llvm.sqrt.f32(float %F)
170         ret float %result
171 }