Guard fabs to bfc convert with V6T2 flag
[oota-llvm.git] / test / CodeGen / ARM / 2009-07-29-VFP3Registers.ll
1 ; RUN: llc < %s -mtriple=armv7-apple-darwin10 -mattr=+vfp3
2
3 @a = external global double             ; <double*> [#uses=1]
4
5 declare double @llvm.exp.f64(double) nounwind readonly
6
7 define void @findratio(double* nocapture %res1, double* nocapture %res2) nounwind {
8 entry:
9         br label %bb
10
11 bb:             ; preds = %bb, %entry
12         br i1 undef, label %bb28, label %bb
13
14 bb28:           ; preds = %bb
15         %0 = load double, double* @a, align 4           ; <double> [#uses=2]
16         %1 = fadd double %0, undef              ; <double> [#uses=2]
17         br i1 undef, label %bb59, label %bb60
18
19 bb59:           ; preds = %bb28
20         %2 = fsub double -0.000000e+00, undef           ; <double> [#uses=2]
21         br label %bb61
22
23 bb60:           ; preds = %bb28
24         %3 = tail call double @llvm.exp.f64(double undef) nounwind              ; <double> [#uses=1]
25         %4 = fsub double -0.000000e+00, %3              ; <double> [#uses=2]
26         %5 = fsub double -0.000000e+00, undef           ; <double> [#uses=1]
27         %6 = fsub double -0.000000e+00, undef           ; <double> [#uses=1]
28         br label %bb61
29
30 bb61:           ; preds = %bb60, %bb59
31         %.pn201 = phi double [ undef, %bb59 ], [ undef, %bb60 ]         ; <double> [#uses=1]
32         %.pn111 = phi double [ undef, %bb59 ], [ undef, %bb60 ]         ; <double> [#uses=1]
33         %.pn452 = phi double [ undef, %bb59 ], [ undef, %bb60 ]         ; <double> [#uses=1]
34         %.pn85 = phi double [ undef, %bb59 ], [ undef, %bb60 ]          ; <double> [#uses=1]
35         %.pn238 = phi double [ 0.000000e+00, %bb59 ], [ 0.000000e+00, %bb60 ]           ; <double> [#uses=1]
36         %.pn39 = phi double [ undef, %bb59 ], [ undef, %bb60 ]          ; <double> [#uses=1]
37         %.pn230 = phi double [ undef, %bb59 ], [ undef, %bb60 ]         ; <double> [#uses=1]
38         %.pn228 = phi double [ 0.000000e+00, %bb59 ], [ undef, %bb60 ]          ; <double> [#uses=1]
39         %.pn224 = phi double [ undef, %bb59 ], [ undef, %bb60 ]         ; <double> [#uses=1]
40         %.pn222 = phi double [ 0.000000e+00, %bb59 ], [ undef, %bb60 ]          ; <double> [#uses=1]
41         %.pn218 = phi double [ %2, %bb59 ], [ %4, %bb60 ]               ; <double> [#uses=1]
42         %.pn214 = phi double [ 0.000000e+00, %bb59 ], [ undef, %bb60 ]          ; <double> [#uses=1]
43         %.pn212 = phi double [ %2, %bb59 ], [ %4, %bb60 ]               ; <double> [#uses=1]
44         %.pn213 = phi double [ undef, %bb59 ], [ undef, %bb60 ]         ; <double> [#uses=1]
45         %.pn210 = phi double [ undef, %bb59 ], [ %5, %bb60 ]            ; <double> [#uses=1]
46         %.pn202 = phi double [ undef, %bb59 ], [ %6, %bb60 ]            ; <double> [#uses=0]
47         %.pn390 = fdiv double %.pn452, undef            ; <double> [#uses=0]
48         %.pn145 = fdiv double %.pn238, %1               ; <double> [#uses=0]
49         %.pn138 = fdiv double %.pn230, undef            ; <double> [#uses=1]
50         %.pn139 = fdiv double %.pn228, undef            ; <double> [#uses=1]
51         %.pn134 = fdiv double %.pn224, %0               ; <double> [#uses=1]
52         %.pn135 = fdiv double %.pn222, %1               ; <double> [#uses=1]
53         %.pn133 = fdiv double %.pn218, undef            ; <double> [#uses=0]
54         %.pn128 = fdiv double %.pn214, undef            ; <double> [#uses=1]
55         %.pn129 = fdiv double %.pn212, %.pn213          ; <double> [#uses=1]
56         %.pn126 = fdiv double %.pn210, undef            ; <double> [#uses=0]
57         %.pn54.in = fmul double undef, %.pn201          ; <double> [#uses=1]
58         %.pn42.in = fmul double undef, undef            ; <double> [#uses=1]
59         %.pn76 = fsub double %.pn138, %.pn139           ; <double> [#uses=1]
60         %.pn74 = fsub double %.pn134, %.pn135           ; <double> [#uses=1]
61         %.pn70 = fsub double %.pn128, %.pn129           ; <double> [#uses=1]
62         %.pn54 = fdiv double %.pn54.in, 6.000000e+00            ; <double> [#uses=1]
63         %.pn64 = fmul double undef, 0x3FE5555555555555          ; <double> [#uses=1]
64         %.pn65 = fmul double undef, undef               ; <double> [#uses=1]
65         %.pn50 = fmul double undef, %.pn111             ; <double> [#uses=0]
66         %.pn42 = fdiv double %.pn42.in, 6.000000e+00            ; <double> [#uses=1]
67         %.pn40 = fmul double undef, %.pn85              ; <double> [#uses=0]
68         %.pn56 = fadd double %.pn76, undef              ; <double> [#uses=1]
69         %.pn57 = fmul double %.pn74, undef              ; <double> [#uses=1]
70         %.pn36 = fadd double undef, undef               ; <double> [#uses=1]
71         %.pn37 = fmul double %.pn70, undef              ; <double> [#uses=1]
72         %.pn33 = fmul double undef, 0x3FC5555555555555          ; <double> [#uses=1]
73         %.pn29 = fsub double %.pn64, %.pn65             ; <double> [#uses=1]
74         %.pn21 = fadd double undef, undef               ; <double> [#uses=1]
75         %.pn27 = fmul double undef, 0x3FC5555555555555          ; <double> [#uses=1]
76         %.pn11 = fadd double %.pn56, %.pn57             ; <double> [#uses=1]
77         %.pn32 = fmul double %.pn54, undef              ; <double> [#uses=1]
78         %.pn26 = fmul double %.pn42, undef              ; <double> [#uses=1]
79         %.pn15 = fmul double 0.000000e+00, %.pn39               ; <double> [#uses=1]
80         %.pn7 = fadd double %.pn36, %.pn37              ; <double> [#uses=1]
81         %.pn30 = fsub double %.pn32, %.pn33             ; <double> [#uses=1]
82         %.pn28 = fadd double %.pn30, 0.000000e+00               ; <double> [#uses=1]
83         %.pn24 = fsub double %.pn28, %.pn29             ; <double> [#uses=1]
84         %.pn22 = fsub double %.pn26, %.pn27             ; <double> [#uses=1]
85         %.pn20 = fadd double %.pn24, undef              ; <double> [#uses=1]
86         %.pn18 = fadd double %.pn22, 0.000000e+00               ; <double> [#uses=1]
87         %.pn16 = fsub double %.pn20, %.pn21             ; <double> [#uses=1]
88         %.pn14 = fsub double %.pn18, undef              ; <double> [#uses=1]
89         %.pn12 = fadd double %.pn16, undef              ; <double> [#uses=1]
90         %.pn10 = fadd double %.pn14, %.pn15             ; <double> [#uses=1]
91         %.pn8 = fsub double %.pn12, undef               ; <double> [#uses=1]
92         %.pn6 = fsub double %.pn10, %.pn11              ; <double> [#uses=1]
93         %.pn4 = fadd double %.pn8, undef                ; <double> [#uses=1]
94         %.pn2 = fadd double %.pn6, %.pn7                ; <double> [#uses=1]
95         %N1.0 = fsub double %.pn4, undef                ; <double> [#uses=1]
96         %D1.0 = fsub double %.pn2, undef                ; <double> [#uses=2]
97         br i1 undef, label %bb62, label %bb64
98
99 bb62:           ; preds = %bb61
100         %7 = fadd double %D1.0, undef           ; <double> [#uses=1]
101         br label %bb64
102
103 bb64:           ; preds = %bb62, %bb61
104         %.pn = phi double [ undef, %bb62 ], [ %N1.0, %bb61 ]            ; <double> [#uses=1]
105         %.pn1 = phi double [ %7, %bb62 ], [ %D1.0, %bb61 ]              ; <double> [#uses=1]
106         %x.1 = fdiv double %.pn, %.pn1          ; <double> [#uses=0]
107         ret void
108 }