Testcase for limited precision stuff.
[oota-llvm.git] / test / CodeGen / X86 / limited-prec.ll
1 ; RUN: llvm-as < %s | llc -limit-float-precision=6 -march=x86 | \
2 ; RUN:    not grep exp | not grep log | not grep pow
3 ; RUN: llvm-as < %s | llc -limit-float-precision=12 -march=x86 | \
4 ; RUN:    not grep exp | not grep log | not grep pow
5 ; RUN: llvm-as < %s | llc -limit-float-precision=18 -march=x86 | \
6 ; RUN:    not grep exp | not grep log | not grep pow
7 target triple = "i386-apple-darwin9.5"
8
9 define float @f1(float %x) nounwind noinline {
10 entry:
11         %x_addr = alloca float          ; <float*> [#uses=2]
12         %retval = alloca float          ; <float*> [#uses=2]
13         %0 = alloca float               ; <float*> [#uses=2]
14         %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
15         store float %x, float* %x_addr
16         %1 = load float* %x_addr, align 4               ; <float> [#uses=1]
17         %2 = call float @llvm.exp.f32(float %1)         ; <float> [#uses=1]
18         store float %2, float* %0, align 4
19         %3 = load float* %0, align 4            ; <float> [#uses=1]
20         store float %3, float* %retval, align 4
21         br label %return
22
23 return:         ; preds = %entry
24         %retval1 = load float* %retval          ; <float> [#uses=1]
25         ret float %retval1
26 }
27
28 declare float @llvm.exp.f32(float) nounwind readonly
29
30 define float @f2(float %x) nounwind noinline {
31 entry:
32         %x_addr = alloca float          ; <float*> [#uses=2]
33         %retval = alloca float          ; <float*> [#uses=2]
34         %0 = alloca float               ; <float*> [#uses=2]
35         %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
36         store float %x, float* %x_addr
37         %1 = load float* %x_addr, align 4               ; <float> [#uses=1]
38         %2 = call float @llvm.exp2.f32(float %1)                ; <float> [#uses=1]
39         store float %2, float* %0, align 4
40         %3 = load float* %0, align 4            ; <float> [#uses=1]
41         store float %3, float* %retval, align 4
42         br label %return
43
44 return:         ; preds = %entry
45         %retval1 = load float* %retval          ; <float> [#uses=1]
46         ret float %retval1
47 }
48
49 declare float @llvm.exp2.f32(float) nounwind readonly
50
51 define float @f3(float %x) nounwind noinline {
52 entry:
53         %x_addr = alloca float          ; <float*> [#uses=2]
54         %retval = alloca float          ; <float*> [#uses=2]
55         %0 = alloca float               ; <float*> [#uses=2]
56         %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
57         store float %x, float* %x_addr
58         %1 = load float* %x_addr, align 4               ; <float> [#uses=1]
59         %2 = call float @llvm.pow.f32(float 1.000000e+01, float %1)             ; <float> [#uses=1]
60         store float %2, float* %0, align 4
61         %3 = load float* %0, align 4            ; <float> [#uses=1]
62         store float %3, float* %retval, align 4
63         br label %return
64
65 return:         ; preds = %entry
66         %retval1 = load float* %retval          ; <float> [#uses=1]
67         ret float %retval1
68 }
69
70 declare float @llvm.pow.f32(float, float) nounwind readonly
71
72 define float @f4(float %x) nounwind noinline {
73 entry:
74         %x_addr = alloca float          ; <float*> [#uses=2]
75         %retval = alloca float          ; <float*> [#uses=2]
76         %0 = alloca float               ; <float*> [#uses=2]
77         %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
78         store float %x, float* %x_addr
79         %1 = load float* %x_addr, align 4               ; <float> [#uses=1]
80         %2 = call float @llvm.log.f32(float %1)         ; <float> [#uses=1]
81         store float %2, float* %0, align 4
82         %3 = load float* %0, align 4            ; <float> [#uses=1]
83         store float %3, float* %retval, align 4
84         br label %return
85
86 return:         ; preds = %entry
87         %retval1 = load float* %retval          ; <float> [#uses=1]
88         ret float %retval1
89 }
90
91 declare float @llvm.log.f32(float) nounwind readonly
92
93 define float @f5(float %x) nounwind noinline {
94 entry:
95         %x_addr = alloca float          ; <float*> [#uses=2]
96         %retval = alloca float          ; <float*> [#uses=2]
97         %0 = alloca float               ; <float*> [#uses=2]
98         %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
99         store float %x, float* %x_addr
100         %1 = load float* %x_addr, align 4               ; <float> [#uses=1]
101         %2 = call float @llvm.log2.f32(float %1)                ; <float> [#uses=1]
102         store float %2, float* %0, align 4
103         %3 = load float* %0, align 4            ; <float> [#uses=1]
104         store float %3, float* %retval, align 4
105         br label %return
106
107 return:         ; preds = %entry
108         %retval1 = load float* %retval          ; <float> [#uses=1]
109         ret float %retval1
110 }
111
112 declare float @llvm.log2.f32(float) nounwind readonly
113
114 define float @f6(float %x) nounwind noinline {
115 entry:
116         %x_addr = alloca float          ; <float*> [#uses=2]
117         %retval = alloca float          ; <float*> [#uses=2]
118         %0 = alloca float               ; <float*> [#uses=2]
119         %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
120         store float %x, float* %x_addr
121         %1 = load float* %x_addr, align 4               ; <float> [#uses=1]
122         %2 = call float @llvm.log10.f32(float %1)               ; <float> [#uses=1]
123         store float %2, float* %0, align 4
124         %3 = load float* %0, align 4            ; <float> [#uses=1]
125         store float %3, float* %retval, align 4
126         br label %return
127
128 return:         ; preds = %entry
129         %retval1 = load float* %retval          ; <float> [#uses=1]
130         ret float %retval1
131 }
132
133 declare float @llvm.log10.f32(float) nounwind readonly