[opaque pointer type] Add textual IR support for explicit type parameter to gep operator
[oota-llvm.git] / test / CodeGen / X86 / 2008-02-18-TailMergingBug.ll
1 ; REQUIRES: asserts
2 ; RUN: llc < %s -march=x86 -mcpu=yonah -stats 2>&1 | grep "Number of block tails merged" | grep 16
3 ; PR1909
4
5 @.str = internal constant [48 x i8] c"transformed bounds: (%.2f, %.2f), (%.2f, %.2f)\0A\00"             ; <[48 x i8]*> [#uses=1]
6
7 define void @minmax(float* %result) nounwind optsize {
8 entry:
9         %tmp2 = load float, float* %result, align 4             ; <float> [#uses=6]
10         %tmp4 = getelementptr float, float* %result, i32 2              ; <float*> [#uses=5]
11         %tmp5 = load float, float* %tmp4, align 4               ; <float> [#uses=10]
12         %tmp7 = getelementptr float, float* %result, i32 4              ; <float*> [#uses=5]
13         %tmp8 = load float, float* %tmp7, align 4               ; <float> [#uses=8]
14         %tmp10 = getelementptr float, float* %result, i32 6             ; <float*> [#uses=3]
15         %tmp11 = load float, float* %tmp10, align 4             ; <float> [#uses=8]
16         %tmp12 = fcmp olt float %tmp8, %tmp11           ; <i1> [#uses=5]
17         br i1 %tmp12, label %bb, label %bb21
18
19 bb:             ; preds = %entry
20         %tmp23469 = fcmp olt float %tmp5, %tmp8         ; <i1> [#uses=1]
21         br i1 %tmp23469, label %bb26, label %bb30
22
23 bb21:           ; preds = %entry
24         %tmp23 = fcmp olt float %tmp5, %tmp11           ; <i1> [#uses=1]
25         br i1 %tmp23, label %bb26, label %bb30
26
27 bb26:           ; preds = %bb21, %bb
28         %tmp52471 = fcmp olt float %tmp2, %tmp5         ; <i1> [#uses=1]
29         br i1 %tmp52471, label %bb111, label %bb59
30
31 bb30:           ; preds = %bb21, %bb
32         br i1 %tmp12, label %bb40, label %bb50
33
34 bb40:           ; preds = %bb30
35         %tmp52473 = fcmp olt float %tmp2, %tmp8         ; <i1> [#uses=1]
36         br i1 %tmp52473, label %bb111, label %bb59
37
38 bb50:           ; preds = %bb30
39         %tmp52 = fcmp olt float %tmp2, %tmp11           ; <i1> [#uses=1]
40         br i1 %tmp52, label %bb111, label %bb59
41
42 bb59:           ; preds = %bb50, %bb40, %bb26
43         br i1 %tmp12, label %bb72, label %bb80
44
45 bb72:           ; preds = %bb59
46         %tmp82475 = fcmp olt float %tmp5, %tmp8         ; <i1> [#uses=2]
47         %brmerge786 = or i1 %tmp82475, %tmp12           ; <i1> [#uses=1]
48         %tmp4.mux787 = select i1 %tmp82475, float* %tmp4, float* %tmp7          ; <float*> [#uses=1]
49         br i1 %brmerge786, label %bb111, label %bb103
50
51 bb80:           ; preds = %bb59
52         %tmp82 = fcmp olt float %tmp5, %tmp11           ; <i1> [#uses=2]
53         %brmerge = or i1 %tmp82, %tmp12         ; <i1> [#uses=1]
54         %tmp4.mux = select i1 %tmp82, float* %tmp4, float* %tmp7                ; <float*> [#uses=1]
55         br i1 %brmerge, label %bb111, label %bb103
56
57 bb103:          ; preds = %bb80, %bb72
58         br label %bb111
59
60 bb111:          ; preds = %bb103, %bb80, %bb72, %bb50, %bb40, %bb26
61         %iftmp.0.0.in = phi float* [ %tmp10, %bb103 ], [ %result, %bb26 ], [ %result, %bb40 ], [ %result, %bb50 ], [ %tmp4.mux, %bb80 ], [ %tmp4.mux787, %bb72 ]                ; <float*> [#uses=1]
62         %iftmp.0.0 = load float, float* %iftmp.0.0.in           ; <float> [#uses=1]
63         %tmp125 = fcmp ogt float %tmp8, %tmp11          ; <i1> [#uses=5]
64         br i1 %tmp125, label %bb128, label %bb136
65
66 bb128:          ; preds = %bb111
67         %tmp138477 = fcmp ogt float %tmp5, %tmp8                ; <i1> [#uses=1]
68         br i1 %tmp138477, label %bb141, label %bb145
69
70 bb136:          ; preds = %bb111
71         %tmp138 = fcmp ogt float %tmp5, %tmp11          ; <i1> [#uses=1]
72         br i1 %tmp138, label %bb141, label %bb145
73
74 bb141:          ; preds = %bb136, %bb128
75         %tmp167479 = fcmp ogt float %tmp2, %tmp5                ; <i1> [#uses=1]
76         br i1 %tmp167479, label %bb226, label %bb174
77
78 bb145:          ; preds = %bb136, %bb128
79         br i1 %tmp125, label %bb155, label %bb165
80
81 bb155:          ; preds = %bb145
82         %tmp167481 = fcmp ogt float %tmp2, %tmp8                ; <i1> [#uses=1]
83         br i1 %tmp167481, label %bb226, label %bb174
84
85 bb165:          ; preds = %bb145
86         %tmp167 = fcmp ogt float %tmp2, %tmp11          ; <i1> [#uses=1]
87         br i1 %tmp167, label %bb226, label %bb174
88
89 bb174:          ; preds = %bb165, %bb155, %bb141
90         br i1 %tmp125, label %bb187, label %bb195
91
92 bb187:          ; preds = %bb174
93         %tmp197483 = fcmp ogt float %tmp5, %tmp8                ; <i1> [#uses=2]
94         %brmerge790 = or i1 %tmp197483, %tmp125         ; <i1> [#uses=1]
95         %tmp4.mux791 = select i1 %tmp197483, float* %tmp4, float* %tmp7         ; <float*> [#uses=1]
96         br i1 %brmerge790, label %bb226, label %bb218
97
98 bb195:          ; preds = %bb174
99         %tmp197 = fcmp ogt float %tmp5, %tmp11          ; <i1> [#uses=2]
100         %brmerge788 = or i1 %tmp197, %tmp125            ; <i1> [#uses=1]
101         %tmp4.mux789 = select i1 %tmp197, float* %tmp4, float* %tmp7            ; <float*> [#uses=1]
102         br i1 %brmerge788, label %bb226, label %bb218
103
104 bb218:          ; preds = %bb195, %bb187
105         br label %bb226
106
107 bb226:          ; preds = %bb218, %bb195, %bb187, %bb165, %bb155, %bb141
108         %iftmp.7.0.in = phi float* [ %tmp10, %bb218 ], [ %result, %bb141 ], [ %result, %bb155 ], [ %result, %bb165 ], [ %tmp4.mux789, %bb195 ], [ %tmp4.mux791, %bb187 ]                ; <float*> [#uses=1]
109         %iftmp.7.0 = load float, float* %iftmp.7.0.in           ; <float> [#uses=1]
110         %tmp229 = getelementptr float, float* %result, i32 1            ; <float*> [#uses=7]
111         %tmp230 = load float, float* %tmp229, align 4           ; <float> [#uses=6]
112         %tmp232 = getelementptr float, float* %result, i32 3            ; <float*> [#uses=5]
113         %tmp233 = load float, float* %tmp232, align 4           ; <float> [#uses=10]
114         %tmp235 = getelementptr float, float* %result, i32 5            ; <float*> [#uses=5]
115         %tmp236 = load float, float* %tmp235, align 4           ; <float> [#uses=8]
116         %tmp238 = getelementptr float, float* %result, i32 7            ; <float*> [#uses=3]
117         %tmp239 = load float, float* %tmp238, align 4           ; <float> [#uses=8]
118         %tmp240 = fcmp olt float %tmp236, %tmp239               ; <i1> [#uses=5]
119         br i1 %tmp240, label %bb243, label %bb251
120
121 bb243:          ; preds = %bb226
122         %tmp253485 = fcmp olt float %tmp233, %tmp236            ; <i1> [#uses=1]
123         br i1 %tmp253485, label %bb256, label %bb260
124
125 bb251:          ; preds = %bb226
126         %tmp253 = fcmp olt float %tmp233, %tmp239               ; <i1> [#uses=1]
127         br i1 %tmp253, label %bb256, label %bb260
128
129 bb256:          ; preds = %bb251, %bb243
130         %tmp282487 = fcmp olt float %tmp230, %tmp233            ; <i1> [#uses=1]
131         br i1 %tmp282487, label %bb341, label %bb289
132
133 bb260:          ; preds = %bb251, %bb243
134         br i1 %tmp240, label %bb270, label %bb280
135
136 bb270:          ; preds = %bb260
137         %tmp282489 = fcmp olt float %tmp230, %tmp236            ; <i1> [#uses=1]
138         br i1 %tmp282489, label %bb341, label %bb289
139
140 bb280:          ; preds = %bb260
141         %tmp282 = fcmp olt float %tmp230, %tmp239               ; <i1> [#uses=1]
142         br i1 %tmp282, label %bb341, label %bb289
143
144 bb289:          ; preds = %bb280, %bb270, %bb256
145         br i1 %tmp240, label %bb302, label %bb310
146
147 bb302:          ; preds = %bb289
148         %tmp312491 = fcmp olt float %tmp233, %tmp236            ; <i1> [#uses=2]
149         %brmerge793 = or i1 %tmp312491, %tmp240         ; <i1> [#uses=1]
150         %tmp232.mux794 = select i1 %tmp312491, float* %tmp232, float* %tmp235           ; <float*> [#uses=1]
151         br i1 %brmerge793, label %bb341, label %bb333
152
153 bb310:          ; preds = %bb289
154         %tmp312 = fcmp olt float %tmp233, %tmp239               ; <i1> [#uses=2]
155         %brmerge792 = or i1 %tmp312, %tmp240            ; <i1> [#uses=1]
156         %tmp232.mux = select i1 %tmp312, float* %tmp232, float* %tmp235         ; <float*> [#uses=1]
157         br i1 %brmerge792, label %bb341, label %bb333
158
159 bb333:          ; preds = %bb310, %bb302
160         br label %bb341
161
162 bb341:          ; preds = %bb333, %bb310, %bb302, %bb280, %bb270, %bb256
163         %iftmp.14.0.in = phi float* [ %tmp238, %bb333 ], [ %tmp229, %bb280 ], [ %tmp229, %bb270 ], [ %tmp229, %bb256 ], [ %tmp232.mux, %bb310 ], [ %tmp232.mux794, %bb302 ]             ; <float*> [#uses=1]
164         %iftmp.14.0 = load float, float* %iftmp.14.0.in         ; <float> [#uses=1]
165         %tmp355 = fcmp ogt float %tmp236, %tmp239               ; <i1> [#uses=5]
166         br i1 %tmp355, label %bb358, label %bb366
167
168 bb358:          ; preds = %bb341
169         %tmp368493 = fcmp ogt float %tmp233, %tmp236            ; <i1> [#uses=1]
170         br i1 %tmp368493, label %bb371, label %bb375
171
172 bb366:          ; preds = %bb341
173         %tmp368 = fcmp ogt float %tmp233, %tmp239               ; <i1> [#uses=1]
174         br i1 %tmp368, label %bb371, label %bb375
175
176 bb371:          ; preds = %bb366, %bb358
177         %tmp397495 = fcmp ogt float %tmp230, %tmp233            ; <i1> [#uses=1]
178         br i1 %tmp397495, label %bb456, label %bb404
179
180 bb375:          ; preds = %bb366, %bb358
181         br i1 %tmp355, label %bb385, label %bb395
182
183 bb385:          ; preds = %bb375
184         %tmp397497 = fcmp ogt float %tmp230, %tmp236            ; <i1> [#uses=1]
185         br i1 %tmp397497, label %bb456, label %bb404
186
187 bb395:          ; preds = %bb375
188         %tmp397 = fcmp ogt float %tmp230, %tmp239               ; <i1> [#uses=1]
189         br i1 %tmp397, label %bb456, label %bb404
190
191 bb404:          ; preds = %bb395, %bb385, %bb371
192         br i1 %tmp355, label %bb417, label %bb425
193
194 bb417:          ; preds = %bb404
195         %tmp427499 = fcmp ogt float %tmp233, %tmp236            ; <i1> [#uses=2]
196         %brmerge797 = or i1 %tmp427499, %tmp355         ; <i1> [#uses=1]
197         %tmp232.mux798 = select i1 %tmp427499, float* %tmp232, float* %tmp235           ; <float*> [#uses=1]
198         br i1 %brmerge797, label %bb456, label %bb448
199
200 bb425:          ; preds = %bb404
201         %tmp427 = fcmp ogt float %tmp233, %tmp239               ; <i1> [#uses=2]
202         %brmerge795 = or i1 %tmp427, %tmp355            ; <i1> [#uses=1]
203         %tmp232.mux796 = select i1 %tmp427, float* %tmp232, float* %tmp235              ; <float*> [#uses=1]
204         br i1 %brmerge795, label %bb456, label %bb448
205
206 bb448:          ; preds = %bb425, %bb417
207         br label %bb456
208
209 bb456:          ; preds = %bb448, %bb425, %bb417, %bb395, %bb385, %bb371
210         %iftmp.21.0.in = phi float* [ %tmp238, %bb448 ], [ %tmp229, %bb395 ], [ %tmp229, %bb385 ], [ %tmp229, %bb371 ], [ %tmp232.mux796, %bb425 ], [ %tmp232.mux798, %bb417 ]          ; <float*> [#uses=1]
211         %iftmp.21.0 = load float, float* %iftmp.21.0.in         ; <float> [#uses=1]
212         %tmp458459 = fpext float %iftmp.21.0 to double          ; <double> [#uses=1]
213         %tmp460461 = fpext float %iftmp.7.0 to double           ; <double> [#uses=1]
214         %tmp462463 = fpext float %iftmp.14.0 to double          ; <double> [#uses=1]
215         %tmp464465 = fpext float %iftmp.0.0 to double           ; <double> [#uses=1]
216         %tmp467 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([48 x i8], [48 x i8]* @.str, i32 0, i32 0), double %tmp464465, double %tmp462463, double %tmp460461, double %tmp458459 ) nounwind               ; <i32> [#uses=0]
217         ret void
218 }
219
220 declare i32 @printf(i8*, ...) nounwind