Fix a bug in LSR's dead-PHI cleanup. If a PHI has a def-use chain that
[oota-llvm.git] / test / Transforms / LoopStrengthReduce / pr2570.ll
1 ; RUN: llvm-as < %s | opt -loop-reduce | llvm-dis | grep {phi\\>} | count 14
2 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
3 target triple = "i386-pc-linux-gnu"
4 @g_14 = internal global i32 1           ; <i32*> [#uses=1]
5 @g_39 = internal global i16 -5          ; <i16*> [#uses=2]
6 @g_43 = internal global i32 -6          ; <i32*> [#uses=3]
7 @g_33 = internal global i32 -1269044541         ; <i32*> [#uses=1]
8 @g_137 = internal global i32 8          ; <i32*> [#uses=1]
9 @g_82 = internal global i32 -5          ; <i32*> [#uses=3]
10 @g_91 = internal global i32 1           ; <i32*> [#uses=1]
11 @g_197 = internal global i32 1          ; <i32*> [#uses=4]
12 @g_207 = internal global i32 1          ; <i32*> [#uses=2]
13 @g_222 = internal global i16 4165               ; <i16*> [#uses=1]
14 @g_247 = internal global i8 -21         ; <i8*> [#uses=2]
15 @g_260 = internal global i32 1          ; <i32*> [#uses=2]
16 @g_221 = internal global i16 -17503             ; <i16*> [#uses=3]
17 @g_267 = internal global i16 1          ; <i16*> [#uses=1]
18 @llvm.used = appending global [1 x i8*] [ i8* bitcast (i32 (i32, i32, i16, i32, i8, i32)* @func_44 to i8*) ], section "llvm.metadata"           ; <[1 x i8*]*> [#uses=0]
19
20 define i32 @func_44(i32 %p_45, i32 %p_46, i16 zeroext  %p_48, i32 %p_49, i8 zeroext  %p_50, i32 %p_52) nounwind  {
21 entry:
22         tail call i32 @func_116( i8 zeroext  2 ) nounwind               ; <i32>:0 [#uses=0]
23         tail call i32 @func_63( i16 signext  2 ) nounwind               ; <i32>:1 [#uses=1]
24         load i16* @g_39, align 2                ; <i16>:2 [#uses=1]
25         tail call i32 @func_63( i16 signext  %2 ) nounwind              ; <i32>:3 [#uses=1]
26         trunc i32 %3 to i16             ; <i16>:4 [#uses=1]
27         and i16 %4, 1           ; <i16>:5 [#uses=1]
28         trunc i32 %p_52 to i8           ; <i8>:6 [#uses=1]
29         trunc i32 %1 to i16             ; <i16>:7 [#uses=1]
30         tail call i32 @func_74( i16 zeroext  %5, i8 zeroext  %6, i16 zeroext  %7, i16 zeroext  0 ) nounwind             ; <i32>:8 [#uses=0]
31         tail call i32 @func_124( i32 544824386 ) nounwind               ; <i32>:9 [#uses=0]
32         zext i8 %p_50 to i32            ; <i32>:10 [#uses=1]
33         load i32* @g_43, align 4                ; <i32>:11 [#uses=1]
34         icmp sle i32 %10, %11           ; <i1>:12 [#uses=1]
35         zext i1 %12 to i32              ; <i32>:13 [#uses=2]
36         load i8* @g_247, align 1                ; <i8>:14 [#uses=1]
37         trunc i32 %p_45 to i16          ; <i16>:15 [#uses=1]
38         zext i8 %14 to i16              ; <i16>:16 [#uses=1]
39         tail call i32 @func_74( i16 zeroext  %15, i8 zeroext  0, i16 zeroext  %16, i16 zeroext  23618 ) nounwind                ; <i32>:17 [#uses=4]
40         icmp slt i32 %17, 0             ; <i1>:18 [#uses=1]
41         br i1 %18, label %bb162, label %bb152
42
43 bb152:          ; preds = %entry
44         lshr i32 2147483647, %13                ; <i32>:19 [#uses=1]
45         icmp slt i32 %19, %17           ; <i1>:20 [#uses=1]
46         select i1 %20, i32 0, i32 %13           ; <i32>:21 [#uses=1]
47         %.348 = shl i32 %17, %21                ; <i32> [#uses=1]
48         br label %bb162
49
50 bb162:          ; preds = %bb152, %entry
51         %.0346 = phi i32 [ %.348, %bb152 ], [ %17, %entry ]             ; <i32> [#uses=1]
52         tail call i32 @func_124( i32 1 ) nounwind               ; <i32>:22 [#uses=1]
53         mul i32 %22, %.0346             ; <i32>:23 [#uses=1]
54         icmp slt i32 %p_45, 0           ; <i1>:24 [#uses=1]
55         icmp ugt i32 %p_45, 31          ; <i1>:25 [#uses=1]
56         %or.cond = or i1 %24, %25               ; <i1> [#uses=1]
57         br i1 %or.cond, label %bb172, label %bb168
58
59 bb168:          ; preds = %bb162
60         lshr i32 2147483647, %p_45              ; <i32>:26 [#uses=1]
61         shl i32 1392859848, %p_45               ; <i32>:27 [#uses=1]
62         icmp slt i32 %26, 1392859848            ; <i1>:28 [#uses=1]
63         %.op355 = add i32 %27, 38978            ; <i32> [#uses=1]
64         %phitmp = select i1 %28, i32 1392898826, i32 %.op355            ; <i32> [#uses=1]
65         br label %bb172
66
67 bb172:          ; preds = %bb168, %bb162
68         %.0343 = phi i32 [ %phitmp, %bb168 ], [ 1392898826, %bb162 ]            ; <i32> [#uses=2]
69         tail call i32 @func_84( i32 1, i16 zeroext  0, i16 zeroext  8 ) nounwind                ; <i32>:29 [#uses=0]
70         icmp eq i32 %.0343, 0           ; <i1>:30 [#uses=1]
71         %.0341 = select i1 %30, i32 1, i32 %.0343               ; <i32> [#uses=1]
72         urem i32 %23, %.0341            ; <i32>:31 [#uses=1]
73         load i32* @g_137, align 4               ; <i32>:32 [#uses=4]
74         icmp slt i32 %32, 0             ; <i1>:33 [#uses=1]
75         br i1 %33, label %bb202, label %bb198
76
77 bb198:          ; preds = %bb172
78         %not. = icmp slt i32 %32, 1073741824            ; <i1> [#uses=1]
79         zext i1 %not. to i32            ; <i32>:34 [#uses=1]
80         %.351 = shl i32 %32, %34                ; <i32> [#uses=1]
81         br label %bb202
82
83 bb202:          ; preds = %bb198, %bb172
84         %.0335 = phi i32 [ %.351, %bb198 ], [ %32, %bb172 ]             ; <i32> [#uses=1]
85         icmp ne i32 %31, %.0335         ; <i1>:35 [#uses=1]
86         zext i1 %35 to i32              ; <i32>:36 [#uses=1]
87         tail call i32 @func_128( i32 %36 ) nounwind             ; <i32>:37 [#uses=0]
88         icmp eq i32 %p_45, 293685862            ; <i1>:38 [#uses=1]
89         br i1 %38, label %bb205, label %bb311
90
91 bb205:          ; preds = %bb202
92         icmp sgt i32 %p_46, 214         ; <i1>:39 [#uses=1]
93         zext i1 %39 to i32              ; <i32>:40 [#uses=2]
94         tail call i32 @func_128( i32 %40 ) nounwind             ; <i32>:41 [#uses=0]
95         icmp sgt i32 %p_46, 65532               ; <i1>:42 [#uses=1]
96         zext i1 %42 to i16              ; <i16>:43 [#uses=1]
97         tail call i32 @func_74( i16 zeroext  23618, i8 zeroext  -29, i16 zeroext  %43, i16 zeroext  1 ) nounwind                ; <i32>:44 [#uses=2]
98         tail call i32 @func_103( i16 zeroext  -869 ) nounwind           ; <i32>:45 [#uses=0]
99         udiv i32 %44, 34162             ; <i32>:46 [#uses=1]
100         icmp ult i32 %44, 34162         ; <i1>:47 [#uses=1]
101         %.0331 = select i1 %47, i32 1, i32 %46          ; <i32> [#uses=1]
102         urem i32 293685862, %.0331              ; <i32>:48 [#uses=1]
103         tail call i32 @func_112( i32 %p_52, i16 zeroext  1 ) nounwind           ; <i32>:49 [#uses=0]
104         icmp eq i32 %p_52, 0            ; <i1>:50 [#uses=2]
105         br i1 %50, label %bb222, label %bb215
106
107 bb215:          ; preds = %bb205
108         zext i16 %p_48 to i32           ; <i32>:51 [#uses=1]
109         icmp eq i16 %p_48, 0            ; <i1>:52 [#uses=1]
110         %.0329 = select i1 %52, i32 1, i32 %51          ; <i32> [#uses=1]
111         udiv i32 -1, %.0329             ; <i32>:53 [#uses=1]
112         icmp eq i32 %53, 0              ; <i1>:54 [#uses=1]
113         br i1 %54, label %bb222, label %bb223
114
115 bb222:          ; preds = %bb215, %bb205
116         br label %bb223
117
118 bb223:          ; preds = %bb222, %bb215
119         %iftmp.437.0 = phi i32 [ 0, %bb222 ], [ 1, %bb215 ]             ; <i32> [#uses=1]
120         load i32* @g_91, align 4                ; <i32>:55 [#uses=3]
121         tail call i32 @func_103( i16 zeroext  4 ) nounwind              ; <i32>:56 [#uses=0]
122         tail call i32 @func_112( i32 0, i16 zeroext  -31374 ) nounwind          ; <i32>:57 [#uses=0]
123         load i32* @g_197, align 4               ; <i32>:58 [#uses=1]
124         tail call i32 @func_124( i32 28156 ) nounwind           ; <i32>:59 [#uses=1]
125         load i32* @g_260, align 4               ; <i32>:60 [#uses=1]
126         load i32* @g_43, align 4                ; <i32>:61 [#uses=1]
127         xor i32 %61, %60                ; <i32>:62 [#uses=1]
128         mul i32 %62, %59                ; <i32>:63 [#uses=1]
129         trunc i32 %63 to i8             ; <i8>:64 [#uses=1]
130         trunc i32 %58 to i16            ; <i16>:65 [#uses=1]
131         tail call i32 @func_74( i16 zeroext  0, i8 zeroext  %64, i16 zeroext  %65, i16 zeroext  0 ) nounwind            ; <i32>:66 [#uses=2]
132         icmp slt i32 %66, 0             ; <i1>:67 [#uses=1]
133         icmp slt i32 %55, 0             ; <i1>:68 [#uses=1]
134         icmp ugt i32 %55, 31            ; <i1>:69 [#uses=1]
135         or i1 %68, %69          ; <i1>:70 [#uses=1]
136         %or.cond352 = or i1 %70, %67            ; <i1> [#uses=1]
137         select i1 %or.cond352, i32 0, i32 %55           ; <i32>:71 [#uses=1]
138         %.353 = ashr i32 %66, %71               ; <i32> [#uses=2]
139         load i16* @g_221, align 2               ; <i16>:72 [#uses=1]
140         zext i16 %72 to i32             ; <i32>:73 [#uses=1]
141         icmp ugt i32 %.353, 31          ; <i1>:74 [#uses=1]
142         select i1 %74, i32 0, i32 %.353         ; <i32>:75 [#uses=1]
143         %.0323 = lshr i32 %73, %75              ; <i32> [#uses=1]
144         add i32 %.0323, %iftmp.437.0            ; <i32>:76 [#uses=1]
145         and i32 %48, 255                ; <i32>:77 [#uses=2]
146         add i32 %77, 2042556439         ; <i32>:78 [#uses=1]
147         load i32* @g_207, align 4               ; <i32>:79 [#uses=2]
148         icmp ugt i32 %79, 31            ; <i1>:80 [#uses=1]
149         select i1 %80, i32 0, i32 %79           ; <i32>:81 [#uses=1]
150         %.0320 = lshr i32 %77, %81              ; <i32> [#uses=1]
151         icmp ne i32 %78, %.0320         ; <i1>:82 [#uses=1]
152         zext i1 %82 to i8               ; <i8>:83 [#uses=1]
153         tail call i32 @func_25( i8 zeroext  %83 ) nounwind              ; <i32>:84 [#uses=1]
154         xor i32 %84, 1          ; <i32>:85 [#uses=1]
155         load i32* @g_197, align 4               ; <i32>:86 [#uses=1]
156         add i32 %86, 1          ; <i32>:87 [#uses=1]
157         add i32 %87, %85                ; <i32>:88 [#uses=1]
158         icmp ugt i32 %76, %88           ; <i1>:89 [#uses=1]
159         br i1 %89, label %bb241, label %bb311
160
161 bb241:          ; preds = %bb223
162         store i16 -9, i16* @g_221, align 2
163         udiv i32 %p_52, 1538244727              ; <i32>:90 [#uses=1]
164         load i32* @g_207, align 4               ; <i32>:91 [#uses=1]
165         sub i32 %91, %90                ; <i32>:92 [#uses=1]
166         load i32* @g_14, align 4                ; <i32>:93 [#uses=1]
167         trunc i32 %93 to i16            ; <i16>:94 [#uses=1]
168         trunc i32 %p_46 to i16          ; <i16>:95 [#uses=2]
169         sub i16 %94, %95                ; <i16>:96 [#uses=1]
170         load i32* @g_197, align 4               ; <i32>:97 [#uses=1]
171         trunc i32 %97 to i16            ; <i16>:98 [#uses=1]
172         tail call i32 @func_55( i32 -346178830, i16 zeroext  %98, i16 zeroext  %95 ) nounwind           ; <i32>:99 [#uses=0]
173         zext i16 %p_48 to i32           ; <i32>:100 [#uses=1]
174         load i8* @g_247, align 1                ; <i8>:101 [#uses=1]
175         zext i8 %101 to i32             ; <i32>:102 [#uses=1]
176         sub i32 %100, %102              ; <i32>:103 [#uses=1]
177         tail call i32 @func_55( i32 %103, i16 zeroext  -2972, i16 zeroext  %96 ) nounwind               ; <i32>:104 [#uses=0]
178         xor i32 %92, 2968               ; <i32>:105 [#uses=1]
179         load i32* @g_197, align 4               ; <i32>:106 [#uses=1]
180         icmp ugt i32 %105, %106         ; <i1>:107 [#uses=1]
181         zext i1 %107 to i32             ; <i32>:108 [#uses=1]
182         store i32 %108, i32* @g_33, align 4
183         br label %bb248
184
185 bb248:          ; preds = %bb284, %bb241
186         %p_49_addr.1.reg2mem.0 = phi i32 [ 0, %bb241 ], [ %134, %bb284 ]                ; <i32> [#uses=2]
187         %p_48_addr.2.reg2mem.0 = phi i16 [ %p_48, %bb241 ], [ %p_48_addr.1, %bb284 ]            ; <i16> [#uses=1]
188         %p_46_addr.1.reg2mem.0 = phi i32 [ %p_46, %bb241 ], [ %133, %bb284 ]            ; <i32> [#uses=1]
189         %p_45_addr.1.reg2mem.0 = phi i32 [ %p_45, %bb241 ], [ %p_45_addr.0, %bb284 ]            ; <i32> [#uses=2]
190         tail call i32 @func_63( i16 signext  1 ) nounwind               ; <i32>:109 [#uses=1]
191         icmp eq i32 %109, 0             ; <i1>:110 [#uses=1]
192         br i1 %110, label %bb272.thread, label %bb255.thread
193
194 bb272.thread:           ; preds = %bb248
195         store i32 1, i32* @g_82
196         load i16* @g_267, align 2               ; <i16>:111 [#uses=1]
197         icmp eq i16 %111, 0             ; <i1>:112 [#uses=1]
198         br i1 %112, label %bb311.loopexit.split, label %bb268
199
200 bb255.thread:           ; preds = %bb248
201         load i32* @g_260, align 4               ; <i32>:113 [#uses=1]
202         sub i32 %113, %p_52             ; <i32>:114 [#uses=1]
203         and i32 %114, -20753            ; <i32>:115 [#uses=1]
204         icmp ne i32 %115, 0             ; <i1>:116 [#uses=1]
205         zext i1 %116 to i16             ; <i16>:117 [#uses=1]
206         store i16 %117, i16* @g_221, align 2
207         br label %bb284
208
209 bb268:          ; preds = %bb268, %bb272.thread
210         %indvar = phi i32 [ 0, %bb272.thread ], [ %g_82.tmp.0, %bb268 ]         ; <i32> [#uses=2]
211         %p_46_addr.0.reg2mem.0 = phi i32 [ %p_46_addr.1.reg2mem.0, %bb272.thread ], [ %119, %bb268 ]            ; <i32> [#uses=1]
212         %g_82.tmp.0 = add i32 %indvar, 1                ; <i32> [#uses=2]
213         trunc i32 %p_46_addr.0.reg2mem.0 to i16         ; <i16>:118 [#uses=1]
214         and i32 %g_82.tmp.0, 28156              ; <i32>:119 [#uses=1]
215         add i32 %indvar, 2              ; <i32>:120 [#uses=4]
216         icmp sgt i32 %120, -1           ; <i1>:121 [#uses=1]
217         br i1 %121, label %bb268, label %bb274.split
218
219 bb274.split:            ; preds = %bb268
220         store i32 %120, i32* @g_82
221         br i1 %50, label %bb279, label %bb276
222
223 bb276:          ; preds = %bb274.split
224         store i16 0, i16* @g_222, align 2
225         br label %bb284
226
227 bb279:          ; preds = %bb274.split
228         icmp eq i32 %120, 0             ; <i1>:122 [#uses=1]
229         %.0317 = select i1 %122, i32 1, i32 %120                ; <i32> [#uses=1]
230         udiv i32 -8, %.0317             ; <i32>:123 [#uses=1]
231         trunc i32 %123 to i16           ; <i16>:124 [#uses=1]
232         br label %bb284
233
234 bb284:          ; preds = %bb279, %bb276, %bb255.thread
235         %p_49_addr.0 = phi i32 [ %p_49_addr.1.reg2mem.0, %bb279 ], [ %p_49_addr.1.reg2mem.0, %bb276 ], [ 0, %bb255.thread ]             ; <i32> [#uses=1]
236         %p_48_addr.1 = phi i16 [ %124, %bb279 ], [ %118, %bb276 ], [ %p_48_addr.2.reg2mem.0, %bb255.thread ]            ; <i16> [#uses=1]
237         %p_45_addr.0 = phi i32 [ %p_45_addr.1.reg2mem.0, %bb279 ], [ %p_45_addr.1.reg2mem.0, %bb276 ], [ 8, %bb255.thread ]             ; <i32> [#uses=3]
238         load i32* @g_43, align 4                ; <i32>:125 [#uses=1]
239         trunc i32 %125 to i8            ; <i8>:126 [#uses=1]
240         tail call i32 @func_116( i8 zeroext  %126 ) nounwind            ; <i32>:127 [#uses=0]
241         lshr i32 65255, %p_45_addr.0            ; <i32>:128 [#uses=1]
242         icmp ugt i32 %p_45_addr.0, 31           ; <i1>:129 [#uses=1]
243         %.op = lshr i32 %128, 31                ; <i32> [#uses=1]
244         %.op.op = xor i32 %.op, 1               ; <i32> [#uses=1]
245         %.354..lobit.not = select i1 %129, i32 1, i32 %.op.op           ; <i32> [#uses=1]
246         load i16* @g_39, align 2                ; <i16>:130 [#uses=1]
247         zext i16 %130 to i32            ; <i32>:131 [#uses=1]
248         icmp slt i32 %.354..lobit.not, %131             ; <i1>:132 [#uses=1]
249         zext i1 %132 to i32             ; <i32>:133 [#uses=1]
250         add i32 %p_49_addr.0, 1         ; <i32>:134 [#uses=2]
251         icmp sgt i32 %134, -1           ; <i1>:135 [#uses=1]
252         br i1 %135, label %bb248, label %bb307
253
254 bb307:          ; preds = %bb284
255         tail call i32 @func_103( i16 zeroext  0 ) nounwind              ; <i32>:136 [#uses=0]
256         ret i32 %40
257
258 bb311.loopexit.split:           ; preds = %bb272.thread
259         store i32 1, i32* @g_82
260         ret i32 1
261
262 bb311:          ; preds = %bb223, %bb202
263         %.0 = phi i32 [ 1, %bb202 ], [ 0, %bb223 ]              ; <i32> [#uses=1]
264         ret i32 %.0
265 }
266
267 declare i32 @func_25(i8 zeroext ) nounwind 
268
269 declare i32 @func_55(i32, i16 zeroext , i16 zeroext ) nounwind 
270
271 declare i32 @func_63(i16 signext ) nounwind 
272
273 declare i32 @func_74(i16 zeroext , i8 zeroext , i16 zeroext , i16 zeroext ) nounwind 
274
275 declare i32 @func_84(i32, i16 zeroext , i16 zeroext ) nounwind 
276
277 declare i32 @func_103(i16 zeroext ) nounwind 
278
279 declare i32 @func_124(i32) nounwind 
280
281 declare i32 @func_128(i32) nounwind 
282
283 declare i32 @func_116(i8 zeroext ) nounwind 
284
285 declare i32 @func_112(i32, i16 zeroext ) nounwind