Fix PR5258, jump-threading creating invalid PHIs.
[oota-llvm.git] / test / Transforms / JumpThreading / 2009-10-20-jumpthreading-phi.ll
1 ; RUN: opt -jump-threading -verify %s -disable-output
2 ; PR5258
3 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
4 target triple = "x86_64-unknown-linux-gnu"
5
6 %0 = type { i64, [12 x i32] }
7 %1 = type { %2 }
8 %2 = type { i32, i32, i32, i32, i32, i32, %3 }
9 %3 = type { %3*, %3* }
10 %4 = type { i32 }
11 %5 = type { %6*, %84, %87, %89, %92, %95, %69, %79*, %102*, %69, %69, %69 }
12 %6 = type { %7* }
13 %7 = type { %8, %10, %28, %34, %38, %40, %40, %40, %40, %40, %40, %40, %21*, %21*, %45, %46, %45, %45, %15, %15, %15, %15, %15, %15, %15, %15, %49, %49, %49, %49, %49, %9, %9, %51, %51, %51, %51, %51, %51, %53, %56 }
14 %8 = type { %9, i32, i32 }
15 %9 = type { i8* }
16 %10 = type { i32, %11*, i32, i32 }
17 %11 = type { %12, %21* }
18 %12 = type { %13, %15* }
19 %13 = type { i32, %14 }
20 %14 = type { i64 }
21 %15 = type { %16, i8, [3 x i8], i32, %6*, %15*, %17, i32, %20* }
22 %16 = type { i32 (...)** }
23 %17 = type { %18 }
24 %18 = type { %19 }
25 %19 = type { %16**, %16**, %16** }
26 %20 = type { %15*, %16* }
27 %21 = type { %22, %13 }
28 %22 = type { %23 }
29 %23 = type { %24, %26*, i32 }
30 %24 = type { i32 (...)**, i8, i8, i8, i16, %25, %26*, %27* }
31 %25 = type { %15* }
32 %26 = type { %24*, %26*, %14 }
33 %27 = type { %4, %24* }
34 %28 = type { i32, %29*, i32, i32 }
35 %29 = type { %30, %33* }
36 %30 = type { %31 }
37 %31 = type { %32*, %14, i16, i16 }
38 %32 = type { i16, i16, i32, i32 }
39 %33 = type { %22, %31 }
40 %34 = type { %35, %37 }
41 %35 = type { %36*, i32, i32, i32, i32 }
42 %36 = type { i32, %4* }
43 %37 = type <{ i8 }>
44 %38 = type { %39 }
45 %39 = type { i32 (...)**, i8**, i32, i32 }
46 %40 = type { %16, %41, %41, %41, %45 }
47 %41 = type { %42 }
48 %42 = type { %43 }
49 %43 = type { %37, %44, i64 }
50 %44 = type { i32, %44*, %44*, %44* }
51 %45 = type { %9, i32, i8 }
52 %46 = type { %47, %24*, i8* }
53 %47 = type { %48, [8 x i8*] }
54 %48 = type { i8**, i32, i32, i32, [1 x i8*] }
55 %49 = type { %50 }
56 %50 = type { %15 }
57 %51 = type { %52, %41 }
58 %52 = type { %41 }
59 %53 = type { i32, %54*, i32, i32 }
60 %54 = type { %24*, %55* }
61 %55 = type { %14, %55*, %24* }
62 %56 = type { %57, %34 }
63 %57 = type { i32, %58*, i32, i32 }
64 %58 = type <{ %59*, [8 x i8], %83 }>
65 %59 = type { %23, %60, %62* }
66 %60 = type { %61, %59* }
67 %61 = type { %59* }
68 %62 = type { %24, %63, %65, %67* }
69 %63 = type { %64, %62* }
70 %64 = type { %62* }
71 %65 = type { %66, %59* }
72 %66 = type { %61 }
73 %67 = type { %68, %70, %72, %74, %79*, %80 }
74 %68 = type { %22, %5*, i32, %69 }
75 %69 = type { %9 }
76 %70 = type { %71, %67* }
77 %71 = type { %67* }
78 %72 = type { %73, %62* }
79 %73 = type { %64 }
80 %74 = type { %75, %77* }
81 %75 = type { %76 }
82 %76 = type { %77* }
83 %77 = type { %24, %78, %67* }
84 %78 = type { %76, %77* }
85 %79 = type { %34, i32 }
86 %80 = type { %81* }
87 %81 = type <{ %9, i32, [4 x i8], %82 }>
88 %82 = type <{ [33 x i8], [31 x i8] }>
89 %83 = type <{ [33 x i8], [63 x i8] }>
90 %84 = type { %85* }
91 %85 = type { %68, %86, i8 }
92 %86 = type { %84, %85* }
93 %87 = type { %88, %67* }
94 %88 = type { %70 }
95 %89 = type { %90* }
96 %90 = type { %68, %91 }
97 %91 = type { %89, %90* }
98 %92 = type { %93 }
99 %93 = type { %94 }
100 %94 = type { %69*, %69*, %69* }
101 %95 = type { %96, %99* }
102 %96 = type { %97 }
103 %97 = type { %98, %99* }
104 %98 = type { %99* }
105 %99 = type <{ %100, %97, %5*, %101 }>
106 %100 = type { [52 x i8], i32 }
107 %101 = type <{ [33 x i8], [95 x i8] }>
108 %102 = type { %16, %41, i32 }
109
110 @_ZL20__gthrw_pthread_oncePiPFvvE = alias weak i32 (i32*, void ()*)* @pthread_once ; <i32 (i32*, void ()*)*> [#uses=0]
111 @_ZL27__gthrw_pthread_getspecificj = alias weak i8* (i32)* @pthread_getspecific ; <i8* (i32)*> [#uses=0]
112 @_ZL27__gthrw_pthread_setspecificjPKv = alias weak i32 (i32, i8*)* @pthread_setspecific ; <i32 (i32, i8*)*> [#uses=0]
113 @_ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_ = alias weak i32 (i64*, %0*, i8* (i8*)*, i8*)* @pthread_create ; <i32 (i64*, %0*, i8* (i8*)*, i8*)*> [#uses=0]
114 @_ZL22__gthrw_pthread_cancelm = alias weak i32 (i64)* @pthread_cancel ; <i32 (i64)*> [#uses=0]
115 @_ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t = alias weak i32 (%1*)* @pthread_mutex_lock ; <i32 (%1*)*> [#uses=0]
116 @_ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t = alias weak i32 (%1*)* @pthread_mutex_trylock ; <i32 (%1*)*> [#uses=0]
117 @_ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t = alias weak i32 (%1*)* @pthread_mutex_unlock ; <i32 (%1*)*> [#uses=0]
118 @_ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t = alias weak i32 (%1*, %4*)* @pthread_mutex_init ; <i32 (%1*, %4*)*> [#uses=0]
119 @_ZL26__gthrw_pthread_key_createPjPFvPvE = alias weak i32 (i32*, void (i8*)*)* @pthread_key_create ; <i32 (i32*, void (i8*)*)*> [#uses=0]
120 @_ZL26__gthrw_pthread_key_deletej = alias weak i32 (i32)* @pthread_key_delete ; <i32 (i32)*> [#uses=0]
121 @_ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t = alias weak i32 (%4*)* @pthread_mutexattr_init ; <i32 (%4*)*> [#uses=0]
122 @_ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti = alias weak i32 (%4*, i32)* @pthread_mutexattr_settype ; <i32 (%4*, i32)*> [#uses=0]
123 @_ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t = alias weak i32 (%4*)* @pthread_mutexattr_destroy ; <i32 (%4*)*> [#uses=0]
124
125 define fastcc zeroext i8 @_ZN4llvm6Linker11LinkModulesEPNS_6ModuleES2_PSs(%5*, %5*, %69*) nounwind align 2 {
126   br i1 false, label %4, label %5
127
128 ; <label>:4                                       ; preds = %3
129   unreachable
130
131 ; <label>:5                                       ; preds = %3
132   br i1 false, label %6, label %7
133
134 ; <label>:6                                       ; preds = %5
135   unreachable
136
137 ; <label>:7                                       ; preds = %5
138   br i1 false, label %8, label %11
139
140 ; <label>:8                                       ; preds = %7
141   br i1 undef, label %10, label %9
142
143 ; <label>:9                                       ; preds = %8
144   unreachable
145
146 ; <label>:10                                      ; preds = %8
147   unreachable
148
149 ; <label>:11                                      ; preds = %7
150   br i1 undef, label %13, label %12
151
152 ; <label>:12                                      ; preds = %11
153   unreachable
154
155 ; <label>:13                                      ; preds = %11
156   br i1 undef, label %15, label %14
157
158 ; <label>:14                                      ; preds = %13
159   br label %15
160
161 ; <label>:15                                      ; preds = %14, %13
162   br i1 undef, label %17, label %16
163
164 ; <label>:16                                      ; preds = %15
165   unreachable
166
167 ; <label>:17                                      ; preds = %15
168   br i1 undef, label %19, label %18
169
170 ; <label>:18                                      ; preds = %17
171   unreachable
172
173 ; <label>:19                                      ; preds = %17
174   br i1 false, label %20, label %21
175
176 ; <label>:20                                      ; preds = %19
177   unreachable
178
179 ; <label>:21                                      ; preds = %19
180   br i1 undef, label %22, label %23
181
182 ; <label>:22                                      ; preds = %21
183   br label %23
184
185 ; <label>:23                                      ; preds = %22, %21
186   br i1 false, label %24, label %25
187
188 ; <label>:24                                      ; preds = %23
189   unreachable
190
191 ; <label>:25                                      ; preds = %23
192   br i1 undef, label %29, label %26
193
194 ; <label>:26                                      ; preds = %25
195   br i1 undef, label %28, label %27
196
197 ; <label>:27                                      ; preds = %26
198   unreachable
199
200 ; <label>:28                                      ; preds = %26
201   unreachable
202
203 ; <label>:29                                      ; preds = %25
204   br i1 undef, label %31, label %30
205
206 ; <label>:30                                      ; preds = %29
207   unreachable
208
209 ; <label>:31                                      ; preds = %29
210   br i1 undef, label %32, label %33
211
212 ; <label>:32                                      ; preds = %31
213   br label %33
214
215 ; <label>:33                                      ; preds = %32, %31
216   br i1 false, label %34, label %35
217
218 ; <label>:34                                      ; preds = %33
219   unreachable
220
221 ; <label>:35                                      ; preds = %33
222   br i1 undef, label %36, label %37
223
224 ; <label>:36                                      ; preds = %35
225   br label %37
226
227 ; <label>:37                                      ; preds = %36, %35
228   br i1 undef, label %39, label %38
229
230 ; <label>:38                                      ; preds = %37
231   br i1 false, label %39, label %40
232
233 ; <label>:39                                      ; preds = %38, %37
234   unreachable
235
236 ; <label>:40                                      ; preds = %38
237   %41 = load i8* undef, align 8                   ; <i8> [#uses=1]
238   switch i8 %41, label %42 [
239     i8 4, label %43
240     i8 2, label %43
241     i8 3, label %43
242   ]
243
244 ; <label>:42                                      ; preds = %40
245   unreachable
246
247 ; <label>:43                                      ; preds = %40, %40, %40
248   %44 = trunc i32 undef to i5                     ; <i5> [#uses=1]
249   switch i5 %44, label %45 [
250     i5 7, label %50
251     i5 9, label %50
252   ]
253
254 ; <label>:45                                      ; preds = %43
255   br i1 undef, label %47, label %46
256
257 ; <label>:46                                      ; preds = %45
258   br label %47
259
260 ; <label>:47                                      ; preds = %46, %45
261   %48 = icmp eq %85* null, null                   ; <i1> [#uses=1]
262   br i1 %48, label %50, label %49
263
264 ; <label>:49                                      ; preds = %47
265   unreachable
266
267 ; <label>:50                                      ; preds = %47, %43, %43
268   %51 = phi %68* [ null, %43 ], [ undef, %47 ], [ null, %43 ] ; <%68*> [#uses=4]
269   %52 = phi %68* [ null, %43 ], [ undef, %47 ], [ null, %43 ] ; <%68*> [#uses=1]
270   %53 = icmp eq %68* %52, null                    ; <i1> [#uses=1]
271   br i1 %53, label %54, label %59
272
273 ; <label>:54                                      ; preds = %50
274   %55 = trunc i32 undef to i5                     ; <i5> [#uses=1]
275   switch i5 %55, label %56 [
276     i5 7, label %59
277     i5 8, label %59
278     i5 9, label %59
279   ]
280
281 ; <label>:56                                      ; preds = %54
282   br i1 undef, label %58, label %57
283
284 ; <label>:57                                      ; preds = %56
285   br label %58
286
287 ; <label>:58                                      ; preds = %57, %56
288   br label %59
289
290 ; <label>:59                                      ; preds = %58, %54, %54, %54, %50
291   %60 = phi %68* [ %51, %50 ], [ %51, %54 ], [ %51, %54 ], [ %51, %54 ], [ undef, %58 ] ; <%68*> [#uses=0]
292   br i1 undef, label %62, label %61
293
294 ; <label>:61                                      ; preds = %59
295   br label %62
296
297 ; <label>:62                                      ; preds = %61, %59
298   switch i8 undef, label %64 [
299     i8 3, label %63
300     i8 2, label %65
301   ]
302
303 ; <label>:63                                      ; preds = %62
304   unreachable
305
306 ; <label>:64                                      ; preds = %62
307   unreachable
308
309 ; <label>:65                                      ; preds = %62
310   switch i8 undef, label %67 [
311     i8 0, label %66
312     i8 1, label %66
313   ]
314
315 ; <label>:66                                      ; preds = %65, %65
316   unreachable
317
318 ; <label>:67                                      ; preds = %65
319   unreachable
320 }
321
322 declare i32 @pthread_mutex_trylock(%1*) nounwind
323
324 declare i32 @pthread_mutex_unlock(%1*) nounwind
325
326 declare i32 @pthread_mutex_lock(%1*) nounwind
327
328 declare i32 @pthread_mutexattr_init(%4*) nounwind
329
330 declare i32 @pthread_mutexattr_settype(%4*, i32) nounwind
331
332 declare i32 @pthread_mutex_init(%1*, %4*) nounwind
333
334 declare i32 @pthread_mutexattr_destroy(%4*) nounwind
335
336 declare i8* @pthread_getspecific(i32) nounwind
337
338 declare i32 @pthread_setspecific(i32, i8*) nounwind
339
340 declare i32 @pthread_key_delete(i32) nounwind
341
342 declare i32 @pthread_key_create(i32*, void (i8*)*) nounwind
343
344 declare i32 @pthread_once(i32*, void ()*)
345
346 declare i32 @pthread_create(i64*, %0*, i8* (i8*)*, i8*)
347
348 declare i32 @pthread_cancel(i64)