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