[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / Thumb2 / 2009-08-04-ScavengerAssert.ll
blob5656d78423949a9d9a3d86cc49b60d54677e4305
1 ; RUN: llc < %s -mtriple=thumbv7-apple-darwin -mcpu=cortex-a8 -relocation-model=pic -frame-pointer=all -O3
3         %0 = type { i16, i8, i8 }               ; type %0
4         %1 = type { [2 x i32], [2 x i32] }              ; type %1
5         %2 = type { %struct.GAP }               ; type %2
6         %3 = type { %struct.rec* }              ; type %3
7         %4 = type { i8, i8, i16, i8, i8, i8, i8 }               ; type %4
8         %5 = type { i8, i8, i8, i8 }            ; type %5
9         %struct.COMPOSITE = type { i8, i16, i16 }
10         %struct.FILE = type { i8*, i32, i32, i16, i16, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, %struct.__sFILEX*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 }
11         %struct.FILE_POS = type { i8, i8, i16, i32 }
12         %struct.FIRST_UNION = type { %struct.FILE_POS }
13         %struct.FONT_INFO = type { %struct.metrics*, i8*, i16*, %struct.COMPOSITE*, i32, %struct.rec*, %struct.rec*, i16, i16, i16*, i8*, i8*, i16* }
14         %struct.FOURTH_UNION = type { %struct.STYLE }
15         %struct.GAP = type { i8, i8, i16 }
16         %struct.LIST = type { %struct.rec*, %struct.rec* }
17         %struct.SECOND_UNION = type { %0 }
18         %struct.STYLE = type { %2, %2, i16, i16, i32 }
19         %struct.THIRD_UNION = type { %1 }
20         %struct.__sFILEX = type opaque
21         %struct.__sbuf = type { i8*, i32 }
22         %struct.head_type = type { [2 x %struct.LIST], %struct.FIRST_UNION, %struct.SECOND_UNION, %struct.THIRD_UNION, %struct.FOURTH_UNION, %struct.rec*, %3, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, i32 }
23         %struct.metrics = type { i16, i16, i16, i16, i16 }
24         %struct.rec = type { %struct.head_type }
25 @.str24239 = external constant [20 x i8], align 1               ; <[20 x i8]*> [#uses=1]
26 @no_file_pos = external global %4               ; <%4*> [#uses=1]
27 @.str19294 = external constant [9 x i8], align 1                ; <[9 x i8]*> [#uses=1]
28 @zz_lengths = external global [150 x i8]                ; <[150 x i8]*> [#uses=1]
29 @next_free.4772 = external global i8**          ; <i8***> [#uses=3]
30 @top_free.4773 = external global i8**           ; <i8***> [#uses=2]
31 @.str1575 = external constant [32 x i8], align 1                ; <[32 x i8]*> [#uses=1]
32 @zz_free = external global [524 x %struct.rec*]         ; <[524 x %struct.rec*]*> [#uses=2]
33 @zz_hold = external global %struct.rec*         ; <%struct.rec**> [#uses=5]
34 @zz_tmp = external global %struct.rec*          ; <%struct.rec**> [#uses=2]
35 @zz_res = external global %struct.rec*          ; <%struct.rec**> [#uses=2]
36 @xx_link = external global %struct.rec*         ; <%struct.rec**> [#uses=2]
37 @font_count = external global i32               ; <i32*> [#uses=1]
38 @.str81872 = external constant [10 x i8], align 1               ; <[10 x i8]*> [#uses=1]
39 @.str101874 = external constant [30 x i8], align 1              ; <[30 x i8]*> [#uses=1]
40 @.str111875 = external constant [17 x i8], align 1              ; <[17 x i8]*> [#uses=1]
41 @.str141878 = external constant [27 x i8], align 1              ; <[27 x i8]*> [#uses=1]
42 @out_fp = external global %struct.FILE*         ; <%struct.FILE**> [#uses=3]
43 @.str192782 = external constant [17 x i8], align 1              ; <[17 x i8]*> [#uses=1]
44 @cpexists = external global i32         ; <i32*> [#uses=2]
45 @.str212784 = external constant [17 x i8], align 1              ; <[17 x i8]*> [#uses=1]
46 @currentfont = external global i32              ; <i32*> [#uses=3]
47 @wordcount = external global i32                ; <i32*> [#uses=1]
48 @needs = external global %struct.rec*           ; <%struct.rec**> [#uses=1]
49 @.str742838 = external constant [6 x i8], align 1               ; <[6 x i8]*> [#uses=1]
50 @.str752839 = external constant [10 x i8], align 1              ; <[10 x i8]*> [#uses=1]
51 @.str1802944 = external constant [40 x i8], align 1             ; <[40 x i8]*> [#uses=1]
52 @.str1822946 = external constant [8 x i8], align 1              ; <[8 x i8]*> [#uses=1]
53 @.str1842948 = external constant [11 x i8], align 1             ; <[11 x i8]*> [#uses=1]
54 @.str1852949 = external constant [23 x i8], align 1             ; <[23 x i8]*> [#uses=1]
55 @.str1872951 = external constant [17 x i8], align 1             ; <[17 x i8]*> [#uses=1]
56 @.str1932957 = external constant [26 x i8], align 1             ; <[26 x i8]*> [#uses=1]
58 declare i32 @fprintf(%struct.FILE* nocapture, i8* nocapture, ...) nounwind
60 declare i32 @"\01_fwrite"(i8*, i32, i32, i8*)
62 declare i32 @remove(i8* nocapture) nounwind
64 declare %struct.FILE* @OpenIncGraphicFile(i8*, i8 zeroext, %struct.rec** nocapture, %struct.FILE_POS*, i32* nocapture) nounwind
66 declare %struct.rec* @MakeWord(i32, i8* nocapture, %struct.FILE_POS*) nounwind
68 declare void @Error(i32, i32, i8*, i32, %struct.FILE_POS*, ...) nounwind
70 declare i32 @"\01_fputs"(i8*, %struct.FILE*)
72 declare noalias i8* @calloc(i32, i32) nounwind
74 declare i8* @fgets(i8*, i32, %struct.FILE* nocapture) nounwind
76 define void @PS_PrintGraphicInclude(%struct.rec* %x, i32 %colmark, i32 %rowmark) nounwind {
77 entry:
78         %buff = alloca [512 x i8], align 4              ; <[512 x i8]*> [#uses=5]
79         %0 = getelementptr %struct.rec, %struct.rec* %x, i32 0, i32 0, i32 1, i32 0, i32 0              ; <i8*> [#uses=2]
80         %1 = load i8, i8* %0, align 4           ; <i8> [#uses=1]
81         %2 = add i8 %1, -94             ; <i8> [#uses=1]
82         %3 = icmp ugt i8 %2, 1          ; <i1> [#uses=1]
83         br i1 %3, label %bb, label %bb1
85 bb:             ; preds = %entry
86         br label %bb1
88 bb1:            ; preds = %bb, %entry
89         %4 = getelementptr %struct.rec, %struct.rec* %x, i32 0, i32 0, i32 2            ; <%struct.SECOND_UNION*> [#uses=1]
90         %5 = bitcast %struct.SECOND_UNION* %4 to %5*            ; <%5*> [#uses=1]
91         %6 = getelementptr %5, %5* %5, i32 0, i32 1             ; <i8*> [#uses=1]
92         %7 = load i8, i8* %6, align 1           ; <i8> [#uses=1]
93         %8 = icmp eq i8 %7, 0           ; <i1> [#uses=1]
94         br i1 %8, label %bb2, label %bb3
96 bb2:            ; preds = %bb1
97         call  void (i32, i32, i8*, i32, %struct.FILE_POS*, ...) @Error(i32 1, i32 2, i8* getelementptr ([20 x i8], [20 x i8]* @.str24239, i32 0, i32 0), i32 0, %struct.FILE_POS* bitcast (%4* @no_file_pos to %struct.FILE_POS*), i8* getelementptr ([40 x i8], [40 x i8]* @.str1802944, i32 0, i32 0)) nounwind
98         br label %bb3
100 bb3:            ; preds = %bb2, %bb1
101         %9 = load %struct.rec*, %struct.rec** undef, align 4            ; <%struct.rec*> [#uses=0]
102         br label %bb5
104 bb5:            ; preds = %bb5, %bb3
105         %y.0 = load %struct.rec*, %struct.rec** null            ; <%struct.rec*> [#uses=2]
106         br i1 false, label %bb5, label %bb6
108 bb6:            ; preds = %bb5
109         %10 = load i8, i8* %0, align 4          ; <i8> [#uses=1]
110         %11 = getelementptr %struct.rec, %struct.rec* %y.0, i32 0, i32 0, i32 1, i32 0          ; <%struct.FILE_POS*> [#uses=1]
111         %12 = call  %struct.FILE* @OpenIncGraphicFile(i8* undef, i8 zeroext %10, %struct.rec** null, %struct.FILE_POS* %11, i32* undef) nounwind                ; <%struct.FILE*> [#uses=4]
112         br i1 false, label %bb7, label %bb8
114 bb7:            ; preds = %bb6
115         unreachable
117 bb8:            ; preds = %bb6
118         %13 = and i32 undef, 4095               ; <i32> [#uses=2]
119         %14 = load i32, i32* @currentfont, align 4              ; <i32> [#uses=0]
120         br i1 false, label %bb10, label %bb9
122 bb9:            ; preds = %bb8
123         %15 = icmp ult i32 0, %13               ; <i1> [#uses=1]
124         br i1 %15, label %bb.i, label %FontHalfXHeight.exit
126 bb.i:           ; preds = %bb9
127         call  void (i32, i32, i8*, i32, %struct.FILE_POS*, ...) @Error(i32 1, i32 2, i8* getelementptr ([20 x i8], [20 x i8]* @.str24239, i32 0, i32 0), i32 0, %struct.FILE_POS* bitcast (%4* @no_file_pos to %struct.FILE_POS*), i8* getelementptr ([17 x i8], [17 x i8]* @.str111875, i32 0, i32 0)) nounwind
128         %.pre186 = load i32, i32* @currentfont, align 4         ; <i32> [#uses=1]
129         br label %FontHalfXHeight.exit
131 FontHalfXHeight.exit:           ; preds = %bb.i, %bb9
132         %16 = phi i32 [ %.pre186, %bb.i ], [ %13, %bb9 ]                ; <i32> [#uses=1]
133         br i1 false, label %bb.i1, label %bb1.i
135 bb.i1:          ; preds = %FontHalfXHeight.exit
136         br label %bb1.i
138 bb1.i:          ; preds = %bb.i1, %FontHalfXHeight.exit
139         br i1 undef, label %bb2.i, label %FontSize.exit
141 bb2.i:          ; preds = %bb1.i
142         call  void (i32, i32, i8*, i32, %struct.FILE_POS*, ...) @Error(i32 37, i32 61, i8* getelementptr ([30 x i8], [30 x i8]* @.str101874, i32 0, i32 0), i32 1, %struct.FILE_POS* null) nounwind
143         unreachable
145 FontSize.exit:          ; preds = %bb1.i
146         %17 = getelementptr %struct.FONT_INFO, %struct.FONT_INFO* undef, i32 %16, i32 5         ; <%struct.rec**> [#uses=0]
147         %18 = load i32, i32* undef, align 4             ; <i32> [#uses=1]
148         %19 = load i32, i32* @currentfont, align 4              ; <i32> [#uses=2]
149         %20 = load i32, i32* @font_count, align 4               ; <i32> [#uses=1]
150         %21 = icmp ult i32 %20, %19             ; <i1> [#uses=1]
151         br i1 %21, label %bb.i5, label %FontName.exit
153 bb.i5:          ; preds = %FontSize.exit
154         call  void (i32, i32, i8*, i32, %struct.FILE_POS*, ...) @Error(i32 1, i32 2, i8* getelementptr ([20 x i8], [20 x i8]* @.str24239, i32 0, i32 0), i32 0, %struct.FILE_POS* bitcast (%4* @no_file_pos to %struct.FILE_POS*), i8* getelementptr ([10 x i8], [10 x i8]* @.str81872, i32 0, i32 0)) nounwind
155         br label %FontName.exit
157 FontName.exit:          ; preds = %bb.i5, %FontSize.exit
158         %22 = phi %struct.FONT_INFO* [ undef, %bb.i5 ], [ undef, %FontSize.exit ]               ; <%struct.FONT_INFO*> [#uses=1]
159         %23 = getelementptr %struct.FONT_INFO, %struct.FONT_INFO* %22, i32 %19, i32 5           ; <%struct.rec**> [#uses=0]
160         %24 = call  i32 (%struct.FILE*, i8*, ...) @fprintf(%struct.FILE* undef, i8* getelementptr ([8 x i8], [8 x i8]* @.str1822946, i32 0, i32 0), i32 %18, i8* null) nounwind         ; <i32> [#uses=0]
161         br label %bb10
163 bb10:           ; preds = %FontName.exit, %bb8
164         %25 = call  i32 @"\01_fwrite"(i8* getelementptr ([11 x i8], [11 x i8]* @.str1842948, i32 0, i32 0), i32 1, i32 10, i8* undef) nounwind          ; <i32> [#uses=0]
165         %26 = sub i32 %rowmark, undef           ; <i32> [#uses=1]
166         %27 = load %struct.FILE*, %struct.FILE** @out_fp, align 4               ; <%struct.FILE*> [#uses=1]
167         %28 = call  i32 (%struct.FILE*, i8*, ...) @fprintf(%struct.FILE* %27, i8* getelementptr ([17 x i8], [17 x i8]* @.str212784, i32 0, i32 0), i32 undef, i32 %26) nounwind         ; <i32> [#uses=0]
168         store i32 0, i32* @cpexists, align 4
169         %29 = call  i32 (%struct.FILE*, i8*, ...) @fprintf(%struct.FILE* undef, i8* getelementptr ([17 x i8], [17 x i8]* @.str192782, i32 0, i32 0), double 2.000000e+01, double 2.000000e+01) nounwind         ; <i32> [#uses=0]
170         %30 = getelementptr %struct.rec, %struct.rec* %y.0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0            ; <i32*> [#uses=1]
171         %31 = load i32, i32* %30, align 4               ; <i32> [#uses=1]
172         %32 = sub i32 0, %31            ; <i32> [#uses=1]
173         %33 = load i32, i32* undef, align 4             ; <i32> [#uses=1]
174         %34 = sub i32 0, %33            ; <i32> [#uses=1]
175         %35 = load %struct.FILE*, %struct.FILE** @out_fp, align 4               ; <%struct.FILE*> [#uses=1]
176         %36 = call  i32 (%struct.FILE*, i8*, ...) @fprintf(%struct.FILE* %35, i8* getelementptr ([17 x i8], [17 x i8]* @.str212784, i32 0, i32 0), i32 %32, i32 %34) nounwind           ; <i32> [#uses=0]
177         store i32 0, i32* @cpexists, align 4
178         %37 = load %struct.rec*, %struct.rec** null, align 4            ; <%struct.rec*> [#uses=1]
179         %38 = getelementptr %struct.rec, %struct.rec* %37, i32 0, i32 0, i32 4          ; <%struct.FOURTH_UNION*> [#uses=1]
180         %39 = call  i32 (%struct.FILE*, i8*, ...) @fprintf(%struct.FILE* undef, i8* getelementptr ([23 x i8], [23 x i8]* @.str1852949, i32 0, i32 0), %struct.FOURTH_UNION* %38) nounwind               ; <i32> [#uses=0]
181         %buff14 = getelementptr [512 x i8], [512 x i8]* %buff, i32 0, i32 0             ; <i8*> [#uses=5]
182         %40 = call  i8* @fgets(i8* %buff14, i32 512, %struct.FILE* %12) nounwind                ; <i8*> [#uses=0]
183         %iftmp.506.0 = select i1 undef, i32 2, i32 0            ; <i32> [#uses=1]
184         %41 = getelementptr [512 x i8], [512 x i8]* %buff, i32 0, i32 26                ; <i8*> [#uses=1]
185         br label %bb100.outer.outer
187 bb100.outer.outer:              ; preds = %bb83, %bb10
188         %state.0.ph.ph = phi i32 [ %iftmp.506.0, %bb10 ], [ undef, %bb83 ]              ; <i32> [#uses=1]
189         %x_addr.0.ph.ph = phi %struct.rec* [ %x, %bb10 ], [ %71, %bb83 ]                ; <%struct.rec*> [#uses=1]
190         %42 = getelementptr %struct.rec, %struct.rec* %x_addr.0.ph.ph, i32 0, i32 0, i32 1, i32 0               ; <%struct.FILE_POS*> [#uses=0]
191         br label %bb100.outer
193 bb.i80:         ; preds = %bb3.i85
194         %43 = icmp eq i8 %44, %46               ; <i1> [#uses=1]
195         %indvar.next.i79 = add i32 %indvar.i81, 1               ; <i32> [#uses=1]
196         br i1 %43, label %bb2.i84, label %bb2.i51
198 bb2.i84:                ; preds = %bb100.outer, %bb.i80
199         %indvar.i81 = phi i32 [ %indvar.next.i79, %bb.i80 ], [ 0, %bb100.outer ]                ; <i32> [#uses=3]
200         %pp.0.i82 = getelementptr [27 x i8], [27 x i8]* @.str141878, i32 0, i32 %indvar.i81             ; <i8*> [#uses=2]
201         %sp.0.i83 = getelementptr [512 x i8], [512 x i8]* %buff, i32 0, i32 %indvar.i81         ; <i8*> [#uses=1]
202         %44 = load i8, i8* %sp.0.i83, align 1           ; <i8> [#uses=2]
203         %45 = icmp eq i8 %44, 0         ; <i1> [#uses=1]
204         br i1 %45, label %StringBeginsWith.exit88thread-split, label %bb3.i85
206 bb3.i85:                ; preds = %bb2.i84
207         %46 = load i8, i8* %pp.0.i82, align 1           ; <i8> [#uses=3]
208         %47 = icmp eq i8 %46, 0         ; <i1> [#uses=1]
209         br i1 %47, label %StringBeginsWith.exit88, label %bb.i80
211 StringBeginsWith.exit88thread-split:            ; preds = %bb2.i84
212         %.pr = load i8, i8* %pp.0.i82           ; <i8> [#uses=1]
213         br label %StringBeginsWith.exit88
215 StringBeginsWith.exit88:                ; preds = %StringBeginsWith.exit88thread-split, %bb3.i85
216         %48 = phi i8 [ %.pr, %StringBeginsWith.exit88thread-split ], [ %46, %bb3.i85 ]          ; <i8> [#uses=1]
217         %phitmp91 = icmp eq i8 %48, 0           ; <i1> [#uses=1]
218         br i1 %phitmp91, label %bb3.i77, label %bb2.i51
220 bb2.i.i68:              ; preds = %bb3.i77
221         br i1 false, label %bb2.i51, label %bb2.i75
223 bb2.i75:                ; preds = %bb2.i.i68
224         br label %bb3.i77
226 bb3.i77:                ; preds = %bb2.i75, %StringBeginsWith.exit88
227         %sp.0.i76 = getelementptr [512 x i8], [512 x i8]* %buff, i32 0, i32 undef               ; <i8*> [#uses=1]
228         %49 = load i8, i8* %sp.0.i76, align 1           ; <i8> [#uses=1]
229         %50 = icmp eq i8 %49, 0         ; <i1> [#uses=1]
230         br i1 %50, label %bb24, label %bb2.i.i68
232 bb24:           ; preds = %bb3.i77
233         %51 = call  %struct.rec* @MakeWord(i32 11, i8* %41, %struct.FILE_POS* bitcast (%4* @no_file_pos to %struct.FILE_POS*)) nounwind         ; <%struct.rec*> [#uses=0]
234         %52 = load i8, i8* getelementptr ([150 x i8], [150 x i8]* @zz_lengths, i32 0, i32 0), align 4           ; <i8> [#uses=1]
235         %53 = zext i8 %52 to i32                ; <i32> [#uses=2]
236         %54 = getelementptr [524 x %struct.rec*], [524 x %struct.rec*]* @zz_free, i32 0, i32 %53                ; <%struct.rec**> [#uses=2]
237         %55 = load %struct.rec*, %struct.rec** %54, align 4             ; <%struct.rec*> [#uses=3]
238         %56 = icmp eq %struct.rec* %55, null            ; <i1> [#uses=1]
239         br i1 %56, label %bb27, label %bb28
241 bb27:           ; preds = %bb24
242         br i1 undef, label %bb.i56, label %GetMemory.exit62
244 bb.i56:         ; preds = %bb27
245         br i1 undef, label %bb1.i58, label %bb2.i60
247 bb1.i58:                ; preds = %bb.i56
248         call  void (i32, i32, i8*, i32, %struct.FILE_POS*, ...) @Error(i32 31, i32 1, i8* getelementptr ([32 x i8], [32 x i8]* @.str1575, i32 0, i32 0), i32 1, %struct.FILE_POS* bitcast (%4* @no_file_pos to %struct.FILE_POS*)) nounwind
249         br label %bb2.i60
251 bb2.i60:                ; preds = %bb1.i58, %bb.i56
252         %.pre1.i59 = phi i8** [ undef, %bb1.i58 ], [ undef, %bb.i56 ]           ; <i8**> [#uses=1]
253         store i8** undef, i8*** @top_free.4773, align 4
254         br label %GetMemory.exit62
256 GetMemory.exit62:               ; preds = %bb2.i60, %bb27
257         %57 = phi i8** [ %.pre1.i59, %bb2.i60 ], [ undef, %bb27 ]               ; <i8**> [#uses=1]
258         %58 = getelementptr i8*, i8** %57, i32 %53              ; <i8**> [#uses=1]
259         store i8** %58, i8*** @next_free.4772, align 4
260         store %struct.rec* undef, %struct.rec** @zz_hold, align 4
261         br label %bb29
263 bb28:           ; preds = %bb24
264         store %struct.rec* %55, %struct.rec** @zz_hold, align 4
265         %59 = load %struct.rec*, %struct.rec** null, align 4            ; <%struct.rec*> [#uses=1]
266         store %struct.rec* %59, %struct.rec** %54, align 4
267         br label %bb29
269 bb29:           ; preds = %bb28, %GetMemory.exit62
270         %.pre184 = phi %struct.rec* [ %55, %bb28 ], [ undef, %GetMemory.exit62 ]                ; <%struct.rec*> [#uses=3]
271         store i8 0, i8* undef
272         store %struct.rec* %.pre184, %struct.rec** @xx_link, align 4
273         br i1 undef, label %bb35, label %bb31
275 bb31:           ; preds = %bb29
276         store %struct.rec* %.pre184, %struct.rec** undef
277         br label %bb35
279 bb35:           ; preds = %bb31, %bb29
280         br i1 undef, label %bb41, label %bb37
282 bb37:           ; preds = %bb35
283         %60 = load %struct.rec*, %struct.rec** null, align 4            ; <%struct.rec*> [#uses=1]
284         store %struct.rec* %60, %struct.rec** undef
285         store %struct.rec* undef, %struct.rec** null
286         store %struct.rec* %.pre184, %struct.rec** null, align 4
287         br label %bb41
289 bb41:           ; preds = %bb37, %bb35
290         %61 = call  i8* @fgets(i8* %buff14, i32 512, %struct.FILE* %12) nounwind                ; <i8*> [#uses=1]
291         %62 = icmp eq i8* %61, null             ; <i1> [#uses=1]
292         %iftmp.554.0 = select i1 %62, i32 2, i32 1              ; <i32> [#uses=1]
293         br label %bb100.outer
295 bb.i47:         ; preds = %bb3.i52
296         %63 = icmp eq i8 %64, %65               ; <i1> [#uses=1]
297         br i1 %63, label %bb2.i51, label %bb2.i41
299 bb2.i51:                ; preds = %bb.i47, %bb2.i.i68, %StringBeginsWith.exit88, %bb.i80
300         %pp.0.i49 = getelementptr [17 x i8], [17 x i8]* @.str1872951, i32 0, i32 0              ; <i8*> [#uses=1]
301         %64 = load i8, i8* null, align 1                ; <i8> [#uses=1]
302         br i1 false, label %StringBeginsWith.exit55thread-split, label %bb3.i52
304 bb3.i52:                ; preds = %bb2.i51
305         %65 = load i8, i8* %pp.0.i49, align 1           ; <i8> [#uses=1]
306         br i1 false, label %StringBeginsWith.exit55, label %bb.i47
308 StringBeginsWith.exit55thread-split:            ; preds = %bb2.i51
309         br label %StringBeginsWith.exit55
311 StringBeginsWith.exit55:                ; preds = %StringBeginsWith.exit55thread-split, %bb3.i52
312         br i1 false, label %bb49, label %bb2.i41
314 bb49:           ; preds = %StringBeginsWith.exit55
315         br label %bb2.i41
317 bb2.i41:                ; preds = %bb2.i41, %bb49, %StringBeginsWith.exit55, %bb.i47
318         br i1 false, label %bb2.i41, label %bb2.i.i15
320 bb2.i.i15:              ; preds = %bb2.i41
321         %pp.0.i.i13 = getelementptr [6 x i8], [6 x i8]* @.str742838, i32 0, i32 0               ; <i8*> [#uses=1]
322         br i1 false, label %StringBeginsWith.exitthread-split.i18, label %bb3.i.i16
324 bb3.i.i16:              ; preds = %bb2.i.i15
325         %66 = load i8, i8* %pp.0.i.i13, align 1         ; <i8> [#uses=1]
326         br label %StringBeginsWith.exit.i20
328 StringBeginsWith.exitthread-split.i18:          ; preds = %bb2.i.i15
329         br label %StringBeginsWith.exit.i20
331 StringBeginsWith.exit.i20:              ; preds = %StringBeginsWith.exitthread-split.i18, %bb3.i.i16
332         %67 = phi i8 [ undef, %StringBeginsWith.exitthread-split.i18 ], [ %66, %bb3.i.i16 ]             ; <i8> [#uses=1]
333         %phitmp.i19 = icmp eq i8 %67, 0         ; <i1> [#uses=1]
334         br i1 %phitmp.i19, label %bb58, label %bb2.i6.i26
336 bb2.i6.i26:             ; preds = %bb2.i6.i26, %StringBeginsWith.exit.i20
337         %indvar.i3.i23 = phi i32 [ %indvar.next.i1.i21, %bb2.i6.i26 ], [ 0, %StringBeginsWith.exit.i20 ]                ; <i32> [#uses=3]
338         %sp.0.i5.i25 = getelementptr [512 x i8], [512 x i8]* %buff, i32 0, i32 %indvar.i3.i23           ; <i8*> [#uses=0]
339         %pp.0.i4.i24 = getelementptr [10 x i8], [10 x i8]* @.str752839, i32 0, i32 %indvar.i3.i23               ; <i8*> [#uses=1]
340         %68 = load i8, i8* %pp.0.i4.i24, align 1                ; <i8> [#uses=0]
341         %indvar.next.i1.i21 = add i32 %indvar.i3.i23, 1         ; <i32> [#uses=1]
342         br i1 undef, label %bb2.i6.i26, label %bb55
344 bb55:           ; preds = %bb2.i6.i26
345         %69 = call  i32 @"\01_fputs"(i8* %buff14, %struct.FILE* undef) nounwind         ; <i32> [#uses=0]
346         unreachable
348 bb58:           ; preds = %StringBeginsWith.exit.i20
349         %70 = call  i8* @fgets(i8* %buff14, i32 512, %struct.FILE* %12) nounwind                ; <i8*> [#uses=0]
350         %iftmp.560.0 = select i1 undef, i32 2, i32 0            ; <i32> [#uses=1]
351         br label %bb100.outer
353 bb.i7:          ; preds = %bb3.i
354         br i1 false, label %bb2.i8, label %bb2.i.i
356 bb2.i8:         ; preds = %bb100.outer, %bb.i7
357         br i1 undef, label %StringBeginsWith.exitthread-split, label %bb3.i
359 bb3.i:          ; preds = %bb2.i8
360         br i1 undef, label %StringBeginsWith.exit, label %bb.i7
362 StringBeginsWith.exitthread-split:              ; preds = %bb2.i8
363         br label %StringBeginsWith.exit
365 StringBeginsWith.exit:          ; preds = %StringBeginsWith.exitthread-split, %bb3.i
366         %phitmp93 = icmp eq i8 undef, 0         ; <i1> [#uses=1]
367         br i1 %phitmp93, label %bb66, label %bb2.i.i
369 bb66:           ; preds = %StringBeginsWith.exit
370         %71 = call  %struct.rec* @MakeWord(i32 11, i8* undef, %struct.FILE_POS* bitcast (%4* @no_file_pos to %struct.FILE_POS*)) nounwind               ; <%struct.rec*> [#uses=4]
371         %72 = load i8, i8* getelementptr ([150 x i8], [150 x i8]* @zz_lengths, i32 0, i32 0), align 4           ; <i8> [#uses=1]
372         %73 = zext i8 %72 to i32                ; <i32> [#uses=2]
373         %74 = getelementptr [524 x %struct.rec*], [524 x %struct.rec*]* @zz_free, i32 0, i32 %73                ; <%struct.rec**> [#uses=2]
374         %75 = load %struct.rec*, %struct.rec** %74, align 4             ; <%struct.rec*> [#uses=3]
375         %76 = icmp eq %struct.rec* %75, null            ; <i1> [#uses=1]
376         br i1 %76, label %bb69, label %bb70
378 bb69:           ; preds = %bb66
379         br i1 undef, label %bb.i2, label %GetMemory.exit
381 bb.i2:          ; preds = %bb69
382         %77 = call  noalias i8* @calloc(i32 1020, i32 4) nounwind               ; <i8*> [#uses=1]
383         %78 = bitcast i8* %77 to i8**           ; <i8**> [#uses=3]
384         store i8** %78, i8*** @next_free.4772, align 4
385         br i1 undef, label %bb1.i3, label %bb2.i4
387 bb1.i3:         ; preds = %bb.i2
388         call  void (i32, i32, i8*, i32, %struct.FILE_POS*, ...) @Error(i32 31, i32 1, i8* getelementptr ([32 x i8], [32 x i8]* @.str1575, i32 0, i32 0), i32 1, %struct.FILE_POS* bitcast (%4* @no_file_pos to %struct.FILE_POS*)) nounwind
389         br label %bb2.i4
391 bb2.i4:         ; preds = %bb1.i3, %bb.i2
392         %.pre1.i = phi i8** [ undef, %bb1.i3 ], [ %78, %bb.i2 ]         ; <i8**> [#uses=1]
393         %79 = phi i8** [ undef, %bb1.i3 ], [ %78, %bb.i2 ]              ; <i8**> [#uses=1]
394         %80 = getelementptr i8*, i8** %79, i32 1020             ; <i8**> [#uses=1]
395         store i8** %80, i8*** @top_free.4773, align 4
396         br label %GetMemory.exit
398 GetMemory.exit:         ; preds = %bb2.i4, %bb69
399         %81 = phi i8** [ %.pre1.i, %bb2.i4 ], [ undef, %bb69 ]          ; <i8**> [#uses=2]
400         %82 = bitcast i8** %81 to %struct.rec*          ; <%struct.rec*> [#uses=3]
401         %83 = getelementptr i8*, i8** %81, i32 %73              ; <i8**> [#uses=1]
402         store i8** %83, i8*** @next_free.4772, align 4
403         store %struct.rec* %82, %struct.rec** @zz_hold, align 4
404         br label %bb71
406 bb70:           ; preds = %bb66
407         %84 = load %struct.rec*, %struct.rec** null, align 4            ; <%struct.rec*> [#uses=1]
408         store %struct.rec* %84, %struct.rec** %74, align 4
409         br label %bb71
411 bb71:           ; preds = %bb70, %GetMemory.exit
412         %.pre185 = phi %struct.rec* [ %75, %bb70 ], [ %82, %GetMemory.exit ]            ; <%struct.rec*> [#uses=8]
413         %85 = phi %struct.rec* [ %75, %bb70 ], [ %82, %GetMemory.exit ]         ; <%struct.rec*> [#uses=1]
414         %86 = getelementptr %struct.rec, %struct.rec* %85, i32 0, i32 0, i32 1, i32 0, i32 0            ; <i8*> [#uses=0]
415         %87 = getelementptr %struct.rec, %struct.rec* %.pre185, i32 0, i32 0, i32 0, i32 1, i32 1               ; <%struct.rec**> [#uses=0]
416         %88 = getelementptr %struct.rec, %struct.rec* %.pre185, i32 0, i32 0, i32 0, i32 1, i32 0               ; <%struct.rec**> [#uses=1]
417         store %struct.rec* %.pre185, %struct.rec** @xx_link, align 4
418         store %struct.rec* %.pre185, %struct.rec** @zz_res, align 4
419         %89 = load %struct.rec*, %struct.rec** @needs, align 4          ; <%struct.rec*> [#uses=2]
420         store %struct.rec* %89, %struct.rec** @zz_hold, align 4
421         br i1 false, label %bb77, label %bb73
423 bb73:           ; preds = %bb71
424         %90 = getelementptr %struct.rec, %struct.rec* %89, i32 0, i32 0, i32 0, i32 0, i32 0            ; <%struct.rec**> [#uses=1]
425         store %struct.rec* null, %struct.rec** @zz_tmp, align 4
426         store %struct.rec* %.pre185, %struct.rec** %90
427         store %struct.rec* %.pre185, %struct.rec** undef, align 4
428         br label %bb77
430 bb77:           ; preds = %bb73, %bb71
431         store %struct.rec* %.pre185, %struct.rec** @zz_res, align 4
432         store %struct.rec* %71, %struct.rec** @zz_hold, align 4
433         br i1 undef, label %bb83, label %bb79
435 bb79:           ; preds = %bb77
436         %91 = getelementptr %struct.rec, %struct.rec* %71, i32 0, i32 0, i32 0, i32 1, i32 0            ; <%struct.rec**> [#uses=1]
437         store %struct.rec* null, %struct.rec** @zz_tmp, align 4
438         %92 = load %struct.rec*, %struct.rec** %88, align 4             ; <%struct.rec*> [#uses=1]
439         store %struct.rec* %92, %struct.rec** %91
440         %93 = getelementptr %struct.rec, %struct.rec* undef, i32 0, i32 0, i32 0, i32 1, i32 1          ; <%struct.rec**> [#uses=1]
441         store %struct.rec* %71, %struct.rec** %93, align 4
442         store %struct.rec* %.pre185, %struct.rec** undef, align 4
443         br label %bb83
445 bb83:           ; preds = %bb79, %bb77
446         br label %bb100.outer.outer
448 bb.i.i:         ; preds = %bb3.i.i
449         br i1 undef, label %bb2.i.i, label %bb2.i6.i
451 bb2.i.i:                ; preds = %bb.i.i, %StringBeginsWith.exit, %bb.i7
452         br i1 undef, label %StringBeginsWith.exitthread-split.i, label %bb3.i.i
454 bb3.i.i:                ; preds = %bb2.i.i
455         br i1 undef, label %StringBeginsWith.exit.i, label %bb.i.i
457 StringBeginsWith.exitthread-split.i:            ; preds = %bb2.i.i
458         br label %StringBeginsWith.exit.i
460 StringBeginsWith.exit.i:                ; preds = %StringBeginsWith.exitthread-split.i, %bb3.i.i
461         br i1 false, label %bb94, label %bb2.i6.i
463 bb.i2.i:                ; preds = %bb3.i7.i
464         br i1 false, label %bb2.i6.i, label %bb91
466 bb2.i6.i:               ; preds = %bb.i2.i, %StringBeginsWith.exit.i, %bb.i.i
467         br i1 undef, label %strip_out.exitthread-split, label %bb3.i7.i
469 bb3.i7.i:               ; preds = %bb2.i6.i
470         %94 = load i8, i8* undef, align 1               ; <i8> [#uses=1]
471         br i1 undef, label %strip_out.exit, label %bb.i2.i
473 strip_out.exitthread-split:             ; preds = %bb2.i6.i
474         %.pr100 = load i8, i8* undef            ; <i8> [#uses=1]
475         br label %strip_out.exit
477 strip_out.exit:         ; preds = %strip_out.exitthread-split, %bb3.i7.i
478         %95 = phi i8 [ %.pr100, %strip_out.exitthread-split ], [ %94, %bb3.i7.i ]               ; <i8> [#uses=0]
479         br i1 undef, label %bb94, label %bb91
481 bb91:           ; preds = %strip_out.exit, %bb.i2.i
482         unreachable
484 bb94:           ; preds = %strip_out.exit, %StringBeginsWith.exit.i
485         %96 = call  i8* @fgets(i8* %buff14, i32 512, %struct.FILE* %12) nounwind                ; <i8*> [#uses=0]
486         unreachable
488 bb100.outer:            ; preds = %bb58, %bb41, %bb100.outer.outer
489         %state.0.ph = phi i32 [ %state.0.ph.ph, %bb100.outer.outer ], [ %iftmp.560.0, %bb58 ], [ %iftmp.554.0, %bb41 ]          ; <i32> [#uses=1]
490         switch i32 %state.0.ph, label %bb2.i84 [
491                 i32 2, label %bb101.split
492                 i32 1, label %bb2.i8
493         ]
495 bb101.split:            ; preds = %bb100.outer
496         %97 = icmp eq i32 undef, 0              ; <i1> [#uses=1]
497         br i1 %97, label %bb103, label %bb102
499 bb102:          ; preds = %bb101.split
500         %98 = call  i32 @remove(i8* getelementptr ([9 x i8], [9 x i8]* @.str19294, i32 0, i32 0)) nounwind              ; <i32> [#uses=0]
501         unreachable
503 bb103:          ; preds = %bb101.split
504         %99 = load %struct.FILE*, %struct.FILE** @out_fp, align 4               ; <%struct.FILE*> [#uses=1]
505         %100 = call  i32 (%struct.FILE*, i8*, ...) @fprintf(%struct.FILE* %99, i8* getelementptr ([26 x i8], [26 x i8]* @.str1932957, i32 0, i32 0)) nounwind           ; <i32> [#uses=0]
506         store i32 0, i32* @wordcount, align 4
507         ret void