llvm.org GIT mirror llvm / acdb2ee
Remove the MarkModRef pass (use AddReadAttrs instead). Unfortunately this means removing one regression test of GlobalsModRef because I couldn't work out how to perform it without MarkModRef. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56342 91177308-0d34-0410-b5e6-96231b3b80d8 Duncan Sands 10 years ago
5 changed file(s) with 0 addition(s) and 1184 deletion(s). Raw diff Collapse all Expand all
8585 (void) llvm::createLowerInvokePass();
8686 (void) llvm::createLowerSetJmpPass();
8787 (void) llvm::createLowerSwitchPass();
88 (void) llvm::createMarkModRefPass();
8988 (void) llvm::createNoAAPass();
9089 (void) llvm::createNoProfileInfoPass();
9190 (void) llvm::createProfileLoaderPass();
138138
139139 //===----------------------------------------------------------------------===//
140140 //
141 // MarkModRef - This pass marks functions readnone/readonly.
142 //
143 FunctionPass *createMarkModRefPass();
144
145 //===----------------------------------------------------------------------===//
146 //
147141 // PromoteMemoryToRegister - This pass is used to promote memory references to
148142 // be register references. A simple example of the transformation performed by
149143 // this pass is:
+0
-69
lib/Transforms/Scalar/MarkModRef.cpp less more
None //===--------- MarkModRef.cpp - Mark functions readnone/readonly ----------===//
1 //
2 // The LLVM Compiler Infrastructure
3 //
4 // This file is distributed under the University of Illinois Open Source
5 // License. See LICENSE.TXT for details.
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This pass marks functions readnone/readonly based on the results of alias
10 // analysis. This requires a sufficiently powerful alias analysis, such as
11 // GlobalsModRef (invoke as "opt ... -globalsmodref-aa -markmodref ...").
12 //
13 //===----------------------------------------------------------------------===//
14
15 #define DEBUG_TYPE "markmodref"
16 #include "llvm/ADT/Statistic.h"
17 #include "llvm/Analysis/AliasAnalysis.h"
18 #include "llvm/Support/Compiler.h"
19 #include "llvm/Transforms/Scalar.h"
20 #include "llvm/Function.h"
21 #include "llvm/Pass.h"
22 using namespace llvm;
23
24 STATISTIC(NumReadNone, "Number of functions marked readnone");
25 STATISTIC(NumReadOnly, "Number of functions marked readonly");
26
27 namespace {
28 struct VISIBILITY_HIDDEN MarkModRef : public FunctionPass {
29 static char ID; // Pass identification, replacement for typeid
30 MarkModRef() : FunctionPass(&ID) {}
31
32 bool runOnFunction(Function &F);
33
34 virtual void getAnalysisUsage(AnalysisUsage &AU) const {
35 AU.setPreservesCFG();
36 AU.addRequired();
37 AU.addPreserved();
38 }
39 };
40 }
41
42 char MarkModRef::ID = 0;
43 static RegisterPass
44 X("markmodref", "Mark functions readnone/readonly");
45
46 bool MarkModRef::runOnFunction(Function &F) {
47 // FIXME: Wrong for functions with weak linkage.
48 if (F.doesNotAccessMemory())
49 // Cannot do better.
50 return false;
51
52 AliasAnalysis &AA = getAnalysis();
53 AliasAnalysis::ModRefBehavior ModRef = AA.getModRefBehavior(&F);
54 if (ModRef == AliasAnalysis::DoesNotAccessMemory) {
55 F.setDoesNotAccessMemory();
56 NumReadNone++;
57 return true;
58 } else if (ModRef == AliasAnalysis::OnlyReadsMemory && !F.onlyReadsMemory()) {
59 F.setOnlyReadsMemory();
60 NumReadOnly++;
61 return true;
62 }
63 return false;
64 }
65
66 FunctionPass *llvm::createMarkModRefPass() {
67 return new MarkModRef();
68 }
+0
-1104
test/Analysis/GlobalsModRef/2008-09-03-WrongRecords.ll less more
None ; RUN: llvm-as < %s | opt -globalsmodref-aa -markmodref | llvm-dis | not grep {define.*read}
1
2 %struct.FRAME.ce3806g = type { %struct.string___XUB, %struct.string___XUB, %struct.string___XUB, %struct.string___XUB }
3 %struct.FRAME.ce3806g__fxio__put__4 = type { i32, i32, i32, %struct.system__file_control_block__pstring*, i32, i32, i8 }
4 %struct.ada__streams__root_stream_type = type { %struct.ada__tags__dispatch_table* }
5 %struct.ada__tags__dispatch_table = type { [1 x i32] }
6 %struct.ada__text_io__text_afcb = type { %struct.system__file_control_block__afcb, i32, i32, i32, i32, i32, %struct.ada__text_io__text_afcb*, i8, i8 }
7 %struct.exception = type { i8, i8, i32, i8*, i8*, i32, i8* }
8 %struct.string___XUB = type { i32, i32 }
9 %struct.system__file_control_block__afcb = type { %struct.ada__streams__root_stream_type, i32, %struct.system__file_control_block__pstring, %struct.system__file_control_block__pstring, i8, i8, i8, i8, i8, i8, i8, %struct.system__file_control_block__afcb*, %struct.system__file_control_block__afcb* }
10 %struct.system__file_control_block__pstring = type { i8*, %struct.string___XUB* }
11 %struct.system__standard_library__exception_data = type { i8, i8, i32, i32, %struct.system__standard_library__exception_data*, i32, void ()* }
12 @.str = internal constant [12 x i8] c"system.ads\00\00" ; <[12 x i8]*> [#uses=1]
13 @.str1 = internal constant [14 x i8] c"a-tifiio.adb\00\00" ; <[14 x i8]*> [#uses=1]
14 @system__soft_links__abort_undefer = external global void ()* ; [#uses=6]
15 @.str2 = internal constant [47 x i8] c"a-tifiio.adb:327 instantiated at ce3806g.adb:52" ; <[47 x i8]*> [#uses=1]
16 @C.354.2200 = internal constant %struct.string___XUB { i32 1, i32 47 } ; <%struct.string___XUB*> [#uses=2]
17 @ada__io_exceptions__data_error = external global %struct.exception ; <%struct.exception*> [#uses=1]
18 @constraint_error = external global %struct.exception ; <%struct.exception*> [#uses=2]
19 @__gnat_all_others_value = external constant i32 ; [#uses=21]
20 @.str3 = internal constant [10 x i8] c"0123456789" ; <[10 x i8]*> [#uses=2]
21 @ada__text_io__current_out = external global %struct.ada__text_io__text_afcb* ; <%struct.ada__text_io__text_afcb**> [#uses=1]
22 @.str4 = internal constant [126 x i8] c"CHECK THAT FIXED_IO PUT OPERATES ON FILES OF MODE OUT_FILE AND IF NO FILE IS SPECIFIED THE CURRENT DEFAULT OUTPUT FILE IS USED" ; <[126 x i8]*> [#uses=1]
23 @C.131.1559 = internal constant %struct.string___XUB { i32 1, i32 126 } ; <%struct.string___XUB*> [#uses=1]
24 @.str5 = internal constant [7 x i8] c"CE3806G" ; <[7 x i8]*> [#uses=1]
25 @C.132.1562 = internal constant %struct.string___XUB { i32 1, i32 7 } ; <%struct.string___XUB*> [#uses=1]
26 @incompleteF.1176.b = internal global i1 false ; [#uses=2]
27 @incomplete.1177 = internal global %struct.exception { i8 0, i8 65, i32 23, i8* getelementptr ([23 x i8]* @incompleteE.1174, i32 0, i32 0), i8* null, i32 0, i8* null } ; <%struct.exception*> [#uses=15]
28 @incompleteE.1174 = internal global [23 x i8] c"CE3806G.B_1.INCOMPLETE\00" ; <[23 x i8]*> [#uses=1]
29 @.str6 = internal constant [0 x i8] zeroinitializer ; <[0 x i8]*> [#uses=1]
30 @C.136.1568 = internal constant %struct.string___XUB { i32 1, i32 0 } ; <%struct.string___XUB*> [#uses=8]
31 @.str7 = internal constant [50 x i8] c"USE_ERROR RAISED ON TEXT CREATE WITH OUT_FILE MODE" ; <[50 x i8]*> [#uses=1]
32 @C.139.1577 = internal constant %struct.string___XUB { i32 1, i32 50 } ; <%struct.string___XUB*> [#uses=1]
33 @.str8 = internal constant [14 x i8] c"ce3806g.adb:65" ; <[14 x i8]*> [#uses=1]
34 @C.140.1580 = internal constant %struct.string___XUB { i32 1, i32 14 } ; <%struct.string___XUB*> [#uses=3]
35 @.str9 = internal constant [51 x i8] c"NAME_ERROR RAISED ON TEXT CREATE WITH OUT_FILE MODE" ; <[51 x i8]*> [#uses=1]
36 @C.143.1585 = internal constant %struct.string___XUB { i32 1, i32 51 } ; <%struct.string___XUB*> [#uses=1]
37 @.str10 = internal constant [14 x i8] c"ce3806g.adb:69" ; <[14 x i8]*> [#uses=1]
38 @.str12 = internal constant [47 x i8] c"USE_ERROR RAISED ON TEXT OPEN WITH IN_FILE MODE" ; <[47 x i8]*> [#uses=1]
39 @.str13 = internal constant [14 x i8] c"ce3806g.adb:88" ; <[14 x i8]*> [#uses=1]
40 @.str14 = internal constant [33 x i8] c"VALUE INCORRECT - FIXED FROM FILE" ; <[33 x i8]*> [#uses=1]
41 @C.162.1637 = internal constant %struct.string___XUB { i32 1, i32 33 } ; <%struct.string___XUB*> [#uses=1]
42 @.str15 = internal constant [36 x i8] c"VALUE INCORRECT - FIXED FROM DEFAULT" ; <[36 x i8]*> [#uses=1]
43 @C.164.1642 = internal constant %struct.string___XUB { i32 1, i32 36 } ; <%struct.string___XUB*> [#uses=1]
44 @ada__io_exceptions__use_error = external global %struct.exception ; <%struct.exception*> [#uses=4]
45 @ada__io_exceptions__name_error = external global %struct.exception ; <%struct.exception*> [#uses=2]
46
47 define void @_ada_ce3806g() {
48 entry:
49 %A.266.i = alloca %struct.string___XUB ; <%struct.string___XUB*> [#uses=3]
50 %A.257.i = alloca %struct.string___XUB ; <%struct.string___XUB*> [#uses=3]
51 %0 = alloca [12 x i8] ; <[12 x i8]*> [#uses=1]
52 %A.301.i = alloca %struct.string___XUB ; <%struct.string___XUB*> [#uses=3]
53 %A.292.i = alloca %struct.string___XUB ; <%struct.string___XUB*> [#uses=3]
54 %1 = alloca [12 x i8] ; <[12 x i8]*> [#uses=1]
55 %2 = alloca %struct.system__file_control_block__pstring, align 8 ; <%struct.system__file_control_block__pstring*> [#uses=3]
56 %3 = alloca %struct.system__file_control_block__pstring, align 8 ; <%struct.system__file_control_block__pstring*> [#uses=3]
57 %4 = alloca %struct.system__file_control_block__pstring, align 8 ; <%struct.system__file_control_block__pstring*> [#uses=3]
58 %5 = alloca %struct.system__file_control_block__pstring, align 8 ; <%struct.system__file_control_block__pstring*> [#uses=3]
59 %FRAME.356 = alloca %struct.FRAME.ce3806g ; <%struct.FRAME.ce3806g*> [#uses=20]
60 call void @report__test( i8* getelementptr ([7 x i8]* @.str5, i32 0, i32 0), %struct.string___XUB* @C.132.1562, i8* getelementptr ([126 x i8]* @.str4, i32 0, i32 0), %struct.string___XUB* @C.131.1559 )
61 %6 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 3 ; <%struct.string___XUB*> [#uses=1]
62 call void @system__secondary_stack__ss_mark( %struct.string___XUB* noalias sret %6 )
63 %.b = load i1* @incompleteF.1176.b ; [#uses=1]
64 br i1 %.b, label %bb11, label %bb
65
66 bb: ; preds = %entry
67 invoke void @system__exception_table__register_exception( %struct.system__standard_library__exception_data* bitcast (%struct.exception* @incomplete.1177 to %struct.system__standard_library__exception_data*) )
68 to label %invcont unwind label %lpad
69
70 invcont: ; preds = %bb
71 store i1 true, i1* @incompleteF.1176.b
72 br label %bb11
73
74 bb11: ; preds = %entry, %invcont
75 %7 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 2 ; <%struct.string___XUB*> [#uses=1]
76 invoke void @system__secondary_stack__ss_mark( %struct.string___XUB* noalias sret %7 )
77 to label %invcont12 unwind label %lpad228
78
79 invcont12: ; preds = %bb11
80 invoke void @report__legal_file_name( %struct.system__file_control_block__pstring* noalias sret %5, i32 1, i8* getelementptr ([0 x i8]* @.str6, i32 0, i32 0), %struct.string___XUB* @C.136.1568 )
81 to label %invcont17 unwind label %lpad232
82
83 invcont17: ; preds = %invcont12
84 %elt18 = getelementptr %struct.system__file_control_block__pstring* %5, i32 0, i32 0 ; [#uses=1]
85 %val19 = load i8** %elt18, align 8 ; [#uses=1]
86 %elt20 = getelementptr %struct.system__file_control_block__pstring* %5, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1]
87 %val21 = load %struct.string___XUB** %elt20 ; <%struct.string___XUB*> [#uses=1]
88 %8 = invoke %struct.ada__text_io__text_afcb* @ada__text_io__create( %struct.ada__text_io__text_afcb* null, i8 2, i8* %val19, %struct.string___XUB* %val21, i8* getelementptr ([0 x i8]* @.str6, i32 0, i32 0), %struct.string___XUB* @C.136.1568 )
89 to label %invcont26 unwind label %lpad232 ; <%struct.ada__text_io__text_afcb*> [#uses=2]
90
91 invcont26: ; preds = %invcont17
92 %9 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 2, i32 0 ; [#uses=1]
93 %10 = load i32* %9, align 8 ; [#uses=1]
94 %11 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 2, i32 1 ; [#uses=1]
95 %12 = load i32* %11, align 4 ; [#uses=1]
96 invoke void @system__secondary_stack__ss_release( i32 %10, i32 %12 )
97 to label %bb73 unwind label %lpad228
98
99 bb32: ; preds = %lpad232
100 call void @__gnat_begin_handler( i8* %eh_ptr233 ) nounwind
101 %13 = load void ()** @system__soft_links__abort_undefer, align 4 ; [#uses=1]
102 invoke void %13( )
103 to label %invcont33 unwind label %lpad240
104
105 invcont33: ; preds = %bb32
106 invoke void @report__not_applicable( i8* getelementptr ([50 x i8]* @.str7, i32 0, i32 0), %struct.string___XUB* @C.139.1577 )
107 to label %invcont38 unwind label %lpad240
108
109 invcont38: ; preds = %invcont33
110 invoke void @__gnat_raise_exception( %struct.system__standard_library__exception_data* bitcast (%struct.exception* @incomplete.1177 to %struct.system__standard_library__exception_data*), i8* getelementptr ([14 x i8]* @.str8, i32 0, i32 0), %struct.string___XUB* @C.140.1580 ) noreturn
111 to label %invcont43 unwind label %lpad240
112
113 invcont43: ; preds = %invcont38
114 unreachable
115
116 bb47: ; preds = %ppad291
117 call void @__gnat_begin_handler( i8* %eh_ptr233 ) nounwind
118 %14 = load void ()** @system__soft_links__abort_undefer, align 4 ; [#uses=1]
119 invoke void %14( )
120 to label %invcont49 unwind label %lpad248
121
122 invcont49: ; preds = %bb47
123 invoke void @report__not_applicable( i8* getelementptr ([51 x i8]* @.str9, i32 0, i32 0), %struct.string___XUB* @C.143.1585 )
124 to label %invcont54 unwind label %lpad248
125
126 invcont54: ; preds = %invcont49
127 invoke void @__gnat_raise_exception( %struct.system__standard_library__exception_data* bitcast (%struct.exception* @incomplete.1177 to %struct.system__standard_library__exception_data*), i8* getelementptr ([14 x i8]* @.str10, i32 0, i32 0), %struct.string___XUB* @C.140.1580 ) noreturn
128 to label %invcont59 unwind label %lpad248
129
130 invcont59: ; preds = %invcont54
131 unreachable
132
133 bb73: ; preds = %invcont26
134 invoke void @report__legal_file_name( %struct.system__file_control_block__pstring* noalias sret %4, i32 2, i8* getelementptr ([0 x i8]* @.str6, i32 0, i32 0), %struct.string___XUB* @C.136.1568 )
135 to label %invcont78 unwind label %lpad228
136
137 invcont78: ; preds = %bb73
138 %elt79 = getelementptr %struct.system__file_control_block__pstring* %4, i32 0, i32 0 ; [#uses=1]
139 %val80 = load i8** %elt79, align 8 ; [#uses=1]
140 %elt81 = getelementptr %struct.system__file_control_block__pstring* %4, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1]
141 %val82 = load %struct.string___XUB** %elt81 ; <%struct.string___XUB*> [#uses=1]
142 %15 = invoke %struct.ada__text_io__text_afcb* @ada__text_io__create( %struct.ada__text_io__text_afcb* null, i8 2, i8* %val80, %struct.string___XUB* %val82, i8* getelementptr ([0 x i8]* @.str6, i32 0, i32 0), %struct.string___XUB* @C.136.1568 )
143 to label %invcont87 unwind label %lpad228 ; <%struct.ada__text_io__text_afcb*> [#uses=2]
144
145 invcont87: ; preds = %invcont78
146 invoke void @ada__text_io__set_output( %struct.ada__text_io__text_afcb* %15 )
147 to label %invcont88 unwind label %lpad228
148
149 invcont88: ; preds = %invcont87
150 %16 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 1 ; <%struct.string___XUB*> [#uses=1]
151 invoke void @system__secondary_stack__ss_mark( %struct.string___XUB* noalias sret %16 )
152 to label %invcont89 unwind label %lpad228
153
154 invcont89: ; preds = %invcont88
155 %17 = call i8* @llvm.stacksave( ) ; [#uses=1]
156 %.sub.i = getelementptr [12 x i8]* %1, i32 0, i32 0 ; [#uses=2]
157 %18 = getelementptr %struct.string___XUB* %A.292.i, i32 0, i32 0 ; [#uses=1]
158 store i32 1, i32* %18, align 8
159 %19 = getelementptr %struct.string___XUB* %A.292.i, i32 0, i32 1 ; [#uses=1]
160 store i32 12, i32* %19, align 4
161 %20 = invoke fastcc i32 @ce3806g__fxio__put__4.1215( i8* %.sub.i, %struct.string___XUB* %A.292.i, i8 signext -3 )
162 to label %invcont.i unwind label %lpad.i ; [#uses=1]
163
164 invcont.i: ; preds = %invcont89
165 %21 = getelementptr %struct.string___XUB* %A.301.i, i32 0, i32 0 ; [#uses=1]
166 store i32 1, i32* %21, align 8
167 %22 = getelementptr %struct.string___XUB* %A.301.i, i32 0, i32 1 ; [#uses=1]
168 store i32 %20, i32* %22, align 4
169 invoke void @ada__text_io__generic_aux__put_item( %struct.ada__text_io__text_afcb* %8, i8* %.sub.i, %struct.string___XUB* %A.301.i )
170 to label %bb94 unwind label %lpad.i
171
172 lpad.i: ; preds = %invcont.i, %invcont89
173 %eh_ptr.i = call i8* @llvm.eh.exception( ) ; [#uses=2]
174 %eh_select62.i = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr.i, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_all_others_value ) ; [#uses=0]
175 call void @llvm.stackrestore( i8* %17 )
176 %23 = invoke i32 (...)* @_Unwind_Resume( i8* %eh_ptr.i )
177 to label %.noexc unwind label %lpad252 ; [#uses=0]
178
179 .noexc: ; preds = %lpad.i
180 unreachable
181
182 bb94: ; preds = %invcont.i
183 %24 = call i8* @llvm.stacksave( ) ; [#uses=1]
184 %.sub.i360 = getelementptr [12 x i8]* %0, i32 0, i32 0 ; [#uses=2]
185 %25 = getelementptr %struct.string___XUB* %A.257.i, i32 0, i32 0 ; [#uses=1]
186 store i32 1, i32* %25, align 8
187 %26 = getelementptr %struct.string___XUB* %A.257.i, i32 0, i32 1 ; [#uses=1]
188 store i32 12, i32* %26, align 4
189 %27 = invoke fastcc i32 @ce3806g__fxio__put__4.1215( i8* %.sub.i360, %struct.string___XUB* %A.257.i, i8 signext -1 )
190 to label %invcont.i361 unwind label %lpad.i364 ; [#uses=1]
191
192 invcont.i361: ; preds = %bb94
193 %28 = getelementptr %struct.string___XUB* %A.266.i, i32 0, i32 0 ; [#uses=1]
194 store i32 1, i32* %28, align 8
195 %29 = getelementptr %struct.string___XUB* %A.266.i, i32 0, i32 1 ; [#uses=1]
196 store i32 %27, i32* %29, align 4
197 %30 = load %struct.ada__text_io__text_afcb** @ada__text_io__current_out, align 4 ; <%struct.ada__text_io__text_afcb*> [#uses=1]
198 invoke void @ada__text_io__generic_aux__put_item( %struct.ada__text_io__text_afcb* %30, i8* %.sub.i360, %struct.string___XUB* %A.266.i )
199 to label %invcont95 unwind label %lpad.i364
200
201 lpad.i364: ; preds = %invcont.i361, %bb94
202 %eh_ptr.i362 = call i8* @llvm.eh.exception( ) ; [#uses=2]
203 %eh_select62.i363 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr.i362, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_all_others_value ) ; [#uses=0]
204 call void @llvm.stackrestore( i8* %24 )
205 %31 = invoke i32 (...)* @_Unwind_Resume( i8* %eh_ptr.i362 )
206 to label %.noexc365 unwind label %lpad252 ; [#uses=0]
207
208 .noexc365: ; preds = %lpad.i364
209 unreachable
210
211 invcont95: ; preds = %invcont.i361
212 %32 = invoke %struct.ada__text_io__text_afcb* @ada__text_io__close( %struct.ada__text_io__text_afcb* %8 )
213 to label %invcont96 unwind label %lpad252 ; <%struct.ada__text_io__text_afcb*> [#uses=1]
214
215 invcont96: ; preds = %invcont95
216 %33 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 0 ; <%struct.string___XUB*> [#uses=1]
217 invoke void @system__secondary_stack__ss_mark( %struct.string___XUB* noalias sret %33 )
218 to label %invcont97 unwind label %lpad252
219
220 invcont97: ; preds = %invcont96
221 invoke void @report__legal_file_name( %struct.system__file_control_block__pstring* noalias sret %3, i32 1, i8* getelementptr ([0 x i8]* @.str6, i32 0, i32 0), %struct.string___XUB* @C.136.1568 )
222 to label %invcont102 unwind label %lpad256
223
224 invcont102: ; preds = %invcont97
225 %elt103 = getelementptr %struct.system__file_control_block__pstring* %3, i32 0, i32 0 ; [#uses=1]
226 %val104 = load i8** %elt103, align 8 ; [#uses=1]
227 %elt105 = getelementptr %struct.system__file_control_block__pstring* %3, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1]
228 %val106 = load %struct.string___XUB** %elt105 ; <%struct.string___XUB*> [#uses=1]
229 %34 = invoke %struct.ada__text_io__text_afcb* @ada__text_io__open( %struct.ada__text_io__text_afcb* %32, i8 0, i8* %val104, %struct.string___XUB* %val106, i8* getelementptr ([0 x i8]* @.str6, i32 0, i32 0), %struct.string___XUB* @C.136.1568 )
230 to label %invcont111 unwind label %lpad256 ; <%struct.ada__text_io__text_afcb*> [#uses=2]
231
232 invcont111: ; preds = %invcont102
233 %35 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 0, i32 0 ; [#uses=1]
234 %36 = load i32* %35, align 8 ; [#uses=1]
235 %37 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 0, i32 1 ; [#uses=1]
236 %38 = load i32* %37, align 4 ; [#uses=1]
237 invoke void @system__secondary_stack__ss_release( i32 %36, i32 %38 )
238 to label %bb143 unwind label %lpad252
239
240 bb117: ; preds = %lpad256
241 call void @__gnat_begin_handler( i8* %eh_ptr257 ) nounwind
242 %39 = load void ()** @system__soft_links__abort_undefer, align 4 ; [#uses=1]
243 invoke void %39( )
244 to label %invcont119 unwind label %lpad264
245
246 invcont119: ; preds = %bb117
247 invoke void @report__not_applicable( i8* getelementptr ([47 x i8]* @.str12, i32 0, i32 0), %struct.string___XUB* @C.354.2200 )
248 to label %invcont124 unwind label %lpad264
249
250 invcont124: ; preds = %invcont119
251 invoke void @__gnat_raise_exception( %struct.system__standard_library__exception_data* bitcast (%struct.exception* @incomplete.1177 to %struct.system__standard_library__exception_data*), i8* getelementptr ([14 x i8]* @.str13, i32 0, i32 0), %struct.string___XUB* @C.140.1580 ) noreturn
252 to label %invcont129 unwind label %lpad264
253
254 invcont129: ; preds = %invcont124
255 unreachable
256
257 bb143: ; preds = %invcont111
258 %40 = invoke %struct.ada__text_io__text_afcb* @ada__text_io__standard_output( )
259 to label %invcont144 unwind label %lpad252 ; <%struct.ada__text_io__text_afcb*> [#uses=1]
260
261 invcont144: ; preds = %bb143
262 invoke void @ada__text_io__set_output( %struct.ada__text_io__text_afcb* %40 )
263 to label %invcont145 unwind label %lpad252
264
265 invcont145: ; preds = %invcont144
266 %41 = invoke %struct.ada__text_io__text_afcb* @ada__text_io__close( %struct.ada__text_io__text_afcb* %15 )
267 to label %invcont146 unwind label %lpad252 ; <%struct.ada__text_io__text_afcb*> [#uses=1]
268
269 invcont146: ; preds = %invcont145
270 invoke void @report__legal_file_name( %struct.system__file_control_block__pstring* noalias sret %2, i32 2, i8* getelementptr ([0 x i8]* @.str6, i32 0, i32 0), %struct.string___XUB* @C.136.1568 )
271 to label %invcont151 unwind label %lpad252
272
273 invcont151: ; preds = %invcont146
274 %elt152 = getelementptr %struct.system__file_control_block__pstring* %2, i32 0, i32 0 ; [#uses=1]
275 %val153 = load i8** %elt152, align 8 ; [#uses=1]
276 %elt154 = getelementptr %struct.system__file_control_block__pstring* %2, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1]
277 %val155 = load %struct.string___XUB** %elt154 ; <%struct.string___XUB*> [#uses=1]
278 %42 = invoke %struct.ada__text_io__text_afcb* @ada__text_io__open( %struct.ada__text_io__text_afcb* %41, i8 0, i8* %val153, %struct.string___XUB* %val155, i8* getelementptr ([0 x i8]* @.str6, i32 0, i32 0), %struct.string___XUB* @C.136.1568 )
279 to label %invcont160 unwind label %lpad252 ; <%struct.ada__text_io__text_afcb*> [#uses=2]
280
281 invcont160: ; preds = %invcont151
282 %43 = invoke fastcc i8 @ce3806g__fxio__get.1137( %struct.ada__text_io__text_afcb* %34 ) signext
283 to label %invcont161 unwind label %lpad252 ; [#uses=1]
284
285 invcont161: ; preds = %invcont160
286 %44 = icmp eq i8 %43, -3 ; [#uses=1]
287 br i1 %44, label %bb169, label %bb163
288
289 bb163: ; preds = %invcont161
290 invoke void @report__failed( i8* getelementptr ([33 x i8]* @.str14, i32 0, i32 0), %struct.string___XUB* @C.162.1637 )
291 to label %bb169 unwind label %lpad252
292
293 bb169: ; preds = %bb163, %invcont161
294 %45 = invoke fastcc i8 @ce3806g__fxio__get.1137( %struct.ada__text_io__text_afcb* %42 ) signext
295 to label %invcont170 unwind label %lpad252 ; [#uses=1]
296
297 invcont170: ; preds = %bb169
298 %46 = icmp eq i8 %45, -1 ; [#uses=1]
299 br i1 %46, label %bb187, label %bb172
300
301 bb172: ; preds = %invcont170
302 invoke void @report__failed( i8* getelementptr ([36 x i8]* @.str15, i32 0, i32 0), %struct.string___XUB* @C.164.1642 )
303 to label %bb187 unwind label %lpad252
304
305 bb187: ; preds = %bb172, %invcont170
306 %47 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 1, i32 0 ; [#uses=1]
307 %48 = load i32* %47, align 8 ; [#uses=1]
308 %49 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 1, i32 1 ; [#uses=1]
309 %50 = load i32* %49, align 4 ; [#uses=1]
310 invoke void @system__secondary_stack__ss_release( i32 %48, i32 %50 )
311 to label %bb193 unwind label %lpad228
312
313 bb193: ; preds = %bb187
314 %51 = invoke %struct.ada__text_io__text_afcb* @ada__text_io__delete( %struct.ada__text_io__text_afcb* %34 )
315 to label %invcont194 unwind label %lpad268 ; <%struct.ada__text_io__text_afcb*> [#uses=0]
316
317 invcont194: ; preds = %bb193
318 %52 = invoke %struct.ada__text_io__text_afcb* @ada__text_io__delete( %struct.ada__text_io__text_afcb* %42 )
319 to label %bb221 unwind label %lpad268 ; <%struct.ada__text_io__text_afcb*> [#uses=0]
320
321 bb196: ; preds = %lpad268
322 call void @__gnat_begin_handler( i8* %eh_ptr269 ) nounwind
323 %53 = load void ()** @system__soft_links__abort_undefer, align 4 ; [#uses=1]
324 invoke void %53( )
325 to label %bb203 unwind label %lpad276
326
327 bb203: ; preds = %bb196
328 invoke void @__gnat_end_handler( i8* %eh_ptr269 )
329 to label %bb221 unwind label %lpad272
330
331 bb205: ; preds = %ppad304
332 call void @__gnat_begin_handler( i8* %eh_exception.1 ) nounwind
333 %54 = load void ()** @system__soft_links__abort_undefer, align 4 ; [#uses=1]
334 invoke void %54( )
335 to label %bb212 unwind label %lpad284
336
337 bb212: ; preds = %bb205
338 invoke void @__gnat_end_handler( i8* %eh_exception.1 )
339 to label %bb221 unwind label %lpad280
340
341 bb221: ; preds = %bb212, %bb203, %invcont194
342 %55 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 3, i32 0 ; [#uses=1]
343 %56 = load i32* %55, align 8 ; [#uses=1]
344 %57 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 3, i32 1 ; [#uses=1]
345 %58 = load i32* %57, align 4 ; [#uses=1]
346 call void @system__secondary_stack__ss_release( i32 %56, i32 %58 )
347 call void @report__result( )
348 ret void
349
350 lpad: ; preds = %bb
351 %eh_ptr = call i8* @llvm.eh.exception( ) ; [#uses=2]
352 %eh_select227 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_all_others_value ) ; [#uses=0]
353 br label %ppad
354
355 lpad228: ; preds = %ppad294, %ppad288, %bb187, %invcont88, %invcont87, %invcont78, %bb73, %invcont26, %bb11
356 %eh_ptr229 = call i8* @llvm.eh.exception( ) ; [#uses=2]
357 %eh_select231 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr229, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @incomplete.1177, i32* @__gnat_all_others_value ) ; [#uses=1]
358 br label %ppad304
359
360 lpad232: ; preds = %invcont17, %invcont12
361 %eh_ptr233 = call i8* @llvm.eh.exception( ) ; [#uses=6]
362 %eh_select235 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr233, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @ada__io_exceptions__use_error, %struct.exception* @ada__io_exceptions__name_error, %struct.exception* @incomplete.1177, i32* @__gnat_all_others_value ) ; [#uses=3]
363 %eh_typeid = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @ada__io_exceptions__use_error, i32 0, i32 0) ) ; [#uses=1]
364 %59 = icmp eq i32 %eh_select235, %eh_typeid ; [#uses=1]
365 br i1 %59, label %bb32, label %ppad291
366
367 lpad236: ; preds = %lpad240
368 %eh_ptr237 = call i8* @llvm.eh.exception( ) ; [#uses=2]
369 %eh_select239 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr237, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @incomplete.1177, i32* @__gnat_all_others_value ) ; [#uses=1]
370 br label %ppad288
371
372 lpad240: ; preds = %invcont38, %invcont33, %bb32
373 %eh_ptr241 = call i8* @llvm.eh.exception( ) ; [#uses=2]
374 %eh_select243 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr241, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @incomplete.1177, i32* @__gnat_all_others_value ) ; [#uses=1]
375 invoke void @__gnat_end_handler( i8* %eh_ptr233 )
376 to label %ppad288 unwind label %lpad236
377
378 lpad244: ; preds = %lpad248
379 %eh_ptr245 = call i8* @llvm.eh.exception( ) ; [#uses=2]
380 %eh_select247 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr245, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @incomplete.1177, i32* @__gnat_all_others_value ) ; [#uses=1]
381 br label %ppad288
382
383 lpad248: ; preds = %invcont54, %invcont49, %bb47
384 %eh_ptr249 = call i8* @llvm.eh.exception( ) ; [#uses=2]
385 %eh_select251 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr249, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @incomplete.1177, i32* @__gnat_all_others_value ) ; [#uses=1]
386 invoke void @__gnat_end_handler( i8* %eh_ptr233 )
387 to label %ppad288 unwind label %lpad244
388
389 lpad252: ; preds = %ppad295, %bb172, %bb169, %bb163, %invcont160, %invcont151, %invcont146, %invcont145, %invcont144, %bb143, %invcont111, %invcont96, %invcont95, %lpad.i364, %lpad.i
390 %eh_ptr253 = call i8* @llvm.eh.exception( ) ; [#uses=2]
391 %eh_select255 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr253, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @incomplete.1177, i32* @__gnat_all_others_value ) ; [#uses=1]
392 br label %ppad294
393
394 lpad256: ; preds = %invcont102, %invcont97
395 %eh_ptr257 = call i8* @llvm.eh.exception( ) ; [#uses=4]
396 %eh_select259 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr257, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @ada__io_exceptions__use_error, %struct.exception* @incomplete.1177, i32* @__gnat_all_others_value ) ; [#uses=2]
397 %eh_typeid297 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @ada__io_exceptions__use_error, i32 0, i32 0) ) ; [#uses=1]
398 %60 = icmp eq i32 %eh_select259, %eh_typeid297 ; [#uses=1]
399 br i1 %60, label %bb117, label %ppad295
400
401 lpad260: ; preds = %lpad264
402 %eh_ptr261 = call i8* @llvm.eh.exception( ) ; [#uses=2]
403 %eh_select263 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr261, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @incomplete.1177, i32* @__gnat_all_others_value ) ; [#uses=1]
404 br label %ppad295
405
406 lpad264: ; preds = %invcont124, %invcont119, %bb117
407 %eh_ptr265 = call i8* @llvm.eh.exception( ) ; [#uses=2]
408 %eh_select267 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr265, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @incomplete.1177, i32* @__gnat_all_others_value ) ; [#uses=1]
409 invoke void @__gnat_end_handler( i8* %eh_ptr257 )
410 to label %ppad295 unwind label %lpad260
411
412 lpad268: ; preds = %invcont194, %bb193
413 %eh_ptr269 = call i8* @llvm.eh.exception( ) ; [#uses=5]
414 %eh_select271 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr269, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @ada__io_exceptions__use_error, %struct.exception* @incomplete.1177, i32* @__gnat_all_others_value ) ; [#uses=2]
415 %eh_typeid301 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @ada__io_exceptions__use_error, i32 0, i32 0) ) ; [#uses=1]
416 %61 = icmp eq i32 %eh_select271, %eh_typeid301 ; [#uses=1]
417 br i1 %61, label %bb196, label %ppad304
418
419 lpad272: ; preds = %lpad276, %bb203
420 %eh_ptr273 = call i8* @llvm.eh.exception( ) ; [#uses=2]
421 %eh_select275 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr273, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @incomplete.1177, i32* @__gnat_all_others_value ) ; [#uses=1]
422 br label %ppad304
423
424 lpad276: ; preds = %bb196
425 %eh_ptr277 = call i8* @llvm.eh.exception( ) ; [#uses=2]
426 %eh_select279 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr277, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @incomplete.1177, i32* @__gnat_all_others_value ) ; [#uses=1]
427 invoke void @__gnat_end_handler( i8* %eh_ptr269 )
428 to label %ppad304 unwind label %lpad272
429
430 lpad280: ; preds = %lpad284, %bb212
431 %eh_ptr281 = call i8* @llvm.eh.exception( ) ; [#uses=2]
432 %eh_select283 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr281, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_all_others_value ) ; [#uses=0]
433 br label %ppad
434
435 lpad284: ; preds = %bb205
436 %eh_ptr285 = call i8* @llvm.eh.exception( ) ; [#uses=2]
437 %eh_select287 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr285, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_all_others_value ) ; [#uses=0]
438 invoke void @__gnat_end_handler( i8* %eh_exception.1 )
439 to label %ppad unwind label %lpad280
440
441 ppad: ; preds = %ppad304, %lpad284, %lpad280, %lpad
442 %eh_exception.2 = phi i8* [ %eh_ptr281, %lpad280 ], [ %eh_ptr, %lpad ], [ %eh_ptr285, %lpad284 ], [ %eh_exception.1, %ppad304 ] ; [#uses=1]
443 %62 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 3, i32 0 ; [#uses=1]
444 %63 = load i32* %62, align 8 ; [#uses=1]
445 %64 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 3, i32 1 ; [#uses=1]
446 %65 = load i32* %64, align 4 ; [#uses=1]
447 call void @system__secondary_stack__ss_release( i32 %63, i32 %65 )
448 %66 = call i32 (...)* @_Unwind_Resume( i8* %eh_exception.2 ) ; [#uses=0]
449 unreachable
450
451 ppad288: ; preds = %ppad291, %lpad248, %lpad240, %lpad244, %lpad236
452 %eh_exception.0 = phi i8* [ %eh_ptr245, %lpad244 ], [ %eh_ptr237, %lpad236 ], [ %eh_ptr241, %lpad240 ], [ %eh_ptr249, %lpad248 ], [ %eh_ptr233, %ppad291 ] ; [#uses=1]
453 %eh_selector.0 = phi i32 [ %eh_select247, %lpad244 ], [ %eh_select239, %lpad236 ], [ %eh_select243, %lpad240 ], [ %eh_select251, %lpad248 ], [ %eh_select235, %ppad291 ] ; [#uses=1]
454 %67 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 2, i32 0 ; [#uses=1]
455 %68 = load i32* %67, align 8 ; [#uses=1]
456 %69 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 2, i32 1 ; [#uses=1]
457 %70 = load i32* %69, align 4 ; [#uses=1]
458 invoke void @system__secondary_stack__ss_release( i32 %68, i32 %70 )
459 to label %ppad304 unwind label %lpad228
460
461 ppad291: ; preds = %lpad232
462 %eh_typeid292 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @ada__io_exceptions__name_error, i32 0, i32 0) ) ; [#uses=1]
463 %71 = icmp eq i32 %eh_select235, %eh_typeid292 ; [#uses=1]
464 br i1 %71, label %bb47, label %ppad288
465
466 ppad294: ; preds = %ppad295, %lpad252
467 %eh_exception.4 = phi i8* [ %eh_ptr253, %lpad252 ], [ %eh_exception.3, %ppad295 ] ; [#uses=1]
468 %eh_selector.4 = phi i32 [ %eh_select255, %lpad252 ], [ %eh_selector.3, %ppad295 ] ; [#uses=1]
469 %72 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 1, i32 0 ; [#uses=1]
470 %73 = load i32* %72, align 8 ; [#uses=1]
471 %74 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 1, i32 1 ; [#uses=1]
472 %75 = load i32* %74, align 4 ; [#uses=1]
473 invoke void @system__secondary_stack__ss_release( i32 %73, i32 %75 )
474 to label %ppad304 unwind label %lpad228
475
476 ppad295: ; preds = %lpad264, %lpad256, %lpad260
477 %eh_exception.3 = phi i8* [ %eh_ptr261, %lpad260 ], [ %eh_ptr257, %lpad256 ], [ %eh_ptr265, %lpad264 ] ; [#uses=1]
478 %eh_selector.3 = phi i32 [ %eh_select263, %lpad260 ], [ %eh_select259, %lpad256 ], [ %eh_select267, %lpad264 ] ; [#uses=1]
479 %76 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 0, i32 0 ; [#uses=1]
480 %77 = load i32* %76, align 8 ; [#uses=1]
481 %78 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32 0, i32 1 ; [#uses=1]
482 %79 = load i32* %78, align 4 ; [#uses=1]
483 invoke void @system__secondary_stack__ss_release( i32 %77, i32 %79 )
484 to label %ppad294 unwind label %lpad252
485
486 ppad304: ; preds = %ppad294, %ppad288, %lpad276, %lpad268, %lpad272, %lpad228
487 %eh_exception.1 = phi i8* [ %eh_ptr229, %lpad228 ], [ %eh_ptr273, %lpad272 ], [ %eh_ptr269, %lpad268 ], [ %eh_ptr277, %lpad276 ], [ %eh_exception.0, %ppad288 ], [ %eh_exception.4, %ppad294 ] ; [#uses=4]
488 %eh_selector.1 = phi i32 [ %eh_select231, %lpad228 ], [ %eh_select275, %lpad272 ], [ %eh_select271, %lpad268 ], [ %eh_select279, %lpad276 ], [ %eh_selector.0, %ppad288 ], [ %eh_selector.4, %ppad294 ] ; [#uses=1]
489 %eh_typeid305 = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @incomplete.1177, i32 0, i32 0) ) ; [#uses=1]
490 %80 = icmp eq i32 %eh_selector.1, %eh_typeid305 ; [#uses=1]
491 br i1 %80, label %bb205, label %ppad
492 }
493
494 define internal fastcc i8 @ce3806g__fxio__get.1137(%struct.ada__text_io__text_afcb* %file) signext {
495 entry:
496 %0 = invoke x86_fp80 @ada__text_io__float_aux__get( %struct.ada__text_io__text_afcb* %file, i32 0 )
497 to label %invcont unwind label %lpad ; [#uses=3]
498
499 invcont: ; preds = %entry
500 %1 = fcmp ult x86_fp80 %0, 0xKFFFEFFFFFFFFFFFFFFFF ; [#uses=1]
501 %2 = fcmp ugt x86_fp80 %0, 0xK7FFEFFFFFFFFFFFFFFFF ; [#uses=1]
502 %or.cond = or i1 %1, %2 ; [#uses=1]
503 br i1 %or.cond, label %bb2, label %bb4
504
505 bb2: ; preds = %invcont
506 invoke void @__gnat_rcheck_12( i8* getelementptr ([12 x i8]* @.str, i32 0, i32 0), i32 1 ) noreturn
507 to label %invcont3 unwind label %lpad
508
509 invcont3: ; preds = %bb2
510 unreachable
511
512 bb4: ; preds = %invcont
513 %3 = mul x86_fp80 %0, 0xK40008000000000000000 ; [#uses=5]
514 %4 = fcmp ult x86_fp80 %3, 0xKC0068000000000000000 ; [#uses=1]
515 %5 = fcmp ugt x86_fp80 %3, 0xK4005FE00000000000000 ; [#uses=1]
516 %or.cond1 = or i1 %4, %5 ; [#uses=1]
517 br i1 %or.cond1, label %bb8, label %bb10
518
519 bb8: ; preds = %bb4
520 invoke void @__gnat_rcheck_10( i8* getelementptr ([14 x i8]* @.str1, i32 0, i32 0), i32 324 ) noreturn
521 to label %invcont9 unwind label %lpad
522
523 invcont9: ; preds = %bb8
524 unreachable
525
526 bb10: ; preds = %bb4
527 %6 = fcmp ult x86_fp80 %3, 0xK00000000000000000000 ; [#uses=1]
528 br i1 %6, label %bb13, label %bb12
529
530 bb12: ; preds = %bb10
531 %7 = add x86_fp80 %3, 0xK3FFDFFFFFFFFFFFFFFFF ; [#uses=1]
532 br label %bb14
533
534 bb13: ; preds = %bb10
535 %8 = sub x86_fp80 %3, 0xK3FFDFFFFFFFFFFFFFFFF ; [#uses=1]
536 br label %bb14
537
538 bb14: ; preds = %bb13, %bb12
539 %iftmp.339.0.in = phi x86_fp80 [ %8, %bb13 ], [ %7, %bb12 ] ; [#uses=1]
540 %iftmp.339.0 = fptosi x86_fp80 %iftmp.339.0.in to i8 ; [#uses=2]
541 %9 = add i8 %iftmp.339.0, 20 ; [#uses=1]
542 %10 = icmp ugt i8 %9, 40 ; [#uses=1]
543 br i1 %10, label %bb16, label %bb22
544
545 bb16: ; preds = %bb14
546 invoke void @__gnat_rcheck_12( i8* getelementptr ([14 x i8]* @.str1, i32 0, i32 0), i32 324 ) noreturn
547 to label %invcont17 unwind label %lpad
548
549 invcont17: ; preds = %bb16
550 unreachable
551
552 bb22: ; preds = %bb14
553 ret i8 %iftmp.339.0
554
555 bb23: ; preds = %lpad
556 tail call void @__gnat_begin_handler( i8* %eh_ptr ) nounwind
557 %11 = load void ()** @system__soft_links__abort_undefer, align 4 ; [#uses=1]
558 invoke void %11( )
559 to label %invcont24 unwind label %lpad33
560
561 invcont24: ; preds = %bb23
562 invoke void @__gnat_raise_exception( %struct.system__standard_library__exception_data* bitcast (%struct.exception* @ada__io_exceptions__data_error to %struct.system__standard_library__exception_data*), i8* getelementptr ([47 x i8]* @.str2, i32 0, i32 0), %struct.string___XUB* @C.354.2200 ) noreturn
563 to label %invcont27 unwind label %lpad33
564
565 invcont27: ; preds = %invcont24
566 unreachable
567
568 lpad: ; preds = %bb16, %bb8, %bb2, %entry
569 %eh_ptr = tail call i8* @llvm.eh.exception( ) ; [#uses=4]
570 %eh_select32 = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_all_others_value ) ; [#uses=1]
571 %eh_typeid = tail call i32 @llvm.eh.typeid.for.i32( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; [#uses=1]
572 %12 = icmp eq i32 %eh_select32, %eh_typeid ; [#uses=1]
573 br i1 %12, label %bb23, label %Unwind
574
575 lpad33: ; preds = %invcont24, %bb23
576 %eh_ptr34 = tail call i8* @llvm.eh.exception( ) ; [#uses=2]
577 %eh_select36 = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr34, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_all_others_value ) ; [#uses=0]
578 tail call void @__gnat_end_handler( i8* %eh_ptr )
579 br label %Unwind
580
581 Unwind: ; preds = %lpad, %lpad33
582 %eh_exception.0 = phi i8* [ %eh_ptr34, %lpad33 ], [ %eh_ptr, %lpad ] ; [#uses=1]
583 %13 = tail call i32 (...)* @_Unwind_Resume( i8* %eh_exception.0 ) ; [#uses=0]
584 unreachable
585 }
586
587 define internal fastcc i32 @ce3806g__fxio__put__4.1215(i8* %to.0, %struct.string___XUB* %to.1, i8 signext %item) {
588 entry:
589 %0 = alloca { i64, i64 } ; <{ i64, i64 }*> [#uses=3]
590 %1 = alloca i64 ; [#uses=3]
591 %to_addr = alloca %struct.system__file_control_block__pstring ; <%struct.system__file_control_block__pstring*> [#uses=3]
592 %FRAME.358 = alloca %struct.FRAME.ce3806g__fxio__put__4 ; <%struct.FRAME.ce3806g__fxio__put__4*> [#uses=9]
593 %2 = getelementptr %struct.system__file_control_block__pstring* %to_addr, i32 0, i32 0 ; [#uses=1]
594 store i8* %to.0, i8** %2, align 8
595 %3 = getelementptr %struct.system__file_control_block__pstring* %to_addr, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1]
596 store %struct.string___XUB* %to.1, %struct.string___XUB** %3
597 %4 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME.358, i32 0, i32 3 ; <%struct.system__file_control_block__pstring**> [#uses=9]
598 store %struct.system__file_control_block__pstring* %to_addr, %struct.system__file_control_block__pstring** %4, align 4
599 %5 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME.358, i32 0, i32 0 ; [#uses=3]
600 store i32 3, i32* %5, align 8
601 %6 = getelementptr %struct.string___XUB* %to.1, i32 0, i32 0 ; [#uses=1]
602 %7 = load i32* %6, align 4 ; [#uses=3]
603 %8 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME.358, i32 0, i32 2 ; [#uses=3]
604 store i32 %7, i32* %8, align 8
605 %9 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME.358, i32 0, i32 4 ; [#uses=9]
606 store i32 %7, i32* %9, align 8
607 %item.lobit = lshr i8 %item, 7 ; [#uses=1]
608 %10 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME.358, i32 0, i32 6 ; [#uses=3]
609 store i8 %item.lobit, i8* %10, align 8
610 %11 = add i32 %7, -1 ; [#uses=1]
611 %12 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME.358, i32 0, i32 5 ; [#uses=18]
612 store i32 %11, i32* %12, align 4
613 %13 = sext i8 %item to i64 ; [#uses=2]
614 %14 = call i64 @system__exn_lli__exn_long_long_integer( i64 10, i32 1 ) readnone ; [#uses=1]
615 %15 = call i64 @system__exn_lli__exn_long_long_integer( i64 10, i32 0 ) readnone ; [#uses=1]
616 %16 = mul i64 %15, -2 ; [#uses=1]
617 %savedstack = call i8* @llvm.stacksave( ) ; [#uses=1]
618 %17 = call i8* @llvm.stacksave( ) ; [#uses=1]
619 store i64 0, i64* %1, align 8
620 %18 = getelementptr { i64, i64 }* %0, i32 0, i32 0 ; [#uses=1]
621 %19 = getelementptr { i64, i64 }* %0, i32 0, i32 1 ; [#uses=1]
622 %20 = icmp eq i64 %13, 0 ; [#uses=1]
623 br i1 %20, label %ce3806g__fxio__put__put_scaled__4.1346.exit, label %bb63.i
624
625 bb63.i: ; preds = %entry
626 %yy.0.i = sub i64 0, %14 ; [#uses=1]
627 invoke void @system__arith_64__scaled_divide( { i64, i64 }* noalias sret %0, i64 %13, i64 %yy.0.i, i64 %16, i8 1 )
628 to label %invcont.i unwind label %lpad.i
629
630 invcont.i: ; preds = %bb63.i
631 %21 = load i64* %18, align 8 ; [#uses=1]
632 store i64 %21, i64* %1, align 8
633 %22 = load i64* %19, align 8 ; [#uses=0]
634 %23 = invoke i64 @system__exn_lli__exn_long_long_integer( i64 10, i32 0 ) readnone
635 to label %ce3806g__fxio__put__put_scaled__4.1346.exit unwind label %lpad.i ; [#uses=0]
636
637 lpad.i: ; preds = %invcont.i, %bb63.i
638 %eh_ptr.i = call i8* @llvm.eh.exception( ) ; [#uses=2]
639 %eh_select103.i = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* %eh_ptr.i, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_all_others_value ) ; [#uses=0]
640 call void @llvm.stackrestore( i8* %17 )
641 %24 = call i32 (...)* @_Unwind_Resume( i8* %eh_ptr.i ) ; [#uses=0]
642 unreachable
643
644 ce3806g__fxio__put__put_scaled__4.1346.exit: ; preds = %invcont.i, %entry
645 %25 = load i64* %1, align 8 ; [#uses=1]
646 call fastcc void @ce3806g__fxio__put__put_int64__4.1339( %struct.FRAME.ce3806g__fxio__put__4* %FRAME.358, i64 %25, i32 -1 )
647 call void @llvm.stackrestore( i8* %savedstack )
648 %26 = load i32* %12, align 4 ; [#uses=4]
649 %27 = load i32* %8, align 8 ; [#uses=1]
650 %28 = icmp slt i32 %26, %27 ; [#uses=1]
651 %.pre = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME.358, i32 0, i32 1 ; [#uses=1]
652 br i1 %28, label %bb71, label %bb72.preheader
653
654 bb71: ; preds = %ce3806g__fxio__put__put_scaled__4.1346.exit
655 %29 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME.358, i32 0, i32 1 ; [#uses=2]
656 store i32 0, i32* %29, align 4
657 br label %bb72.preheader
658
659 bb72.preheader: ; preds = %ce3806g__fxio__put__put_scaled__4.1346.exit, %bb71
660 %.pre-phi = phi i32* [ %29, %bb71 ], [ %.pre, %ce3806g__fxio__put__put_scaled__4.1346.exit ] ; [#uses=5]
661 %30 = load i32* %.pre-phi, align 4 ; [#uses=2]
662 %31 = icmp slt i32 %30, -1 ; [#uses=1]
663 br i1 %31, label %bb103, label %bb74
664
665 bb74: ; preds = %bb102, %bb72.preheader
666 %.rle10 = phi i32 [ %26, %bb72.preheader ], [ %119, %bb102 ] ; [#uses=1]
667 %.rle = phi i32 [ %30, %bb72.preheader ], [ %117, %bb102 ] ; [#uses=4]
668 %32 = phi i32 [ %26, %bb72.preheader ], [ %119, %bb102 ] ; [#uses=1]
669 %33 = load i32* %8, align 8 ; [#uses=1]
670 %34 = add i32 %33, -1 ; [#uses=1]
671 %35 = icmp eq i32 %32, %34 ; [#uses=1]
672 br i1 %35, label %bb76, label %bb98
673
674 bb76: ; preds = %bb74
675 %36 = icmp slt i32 %.rle, 1 ; [#uses=1]
676 br i1 %36, label %bb80, label %bb102
677
678 bb80: ; preds = %bb76
679 %37 = icmp sgt i32 %.rle, -1 ; [#uses=1]
680 %.op = add i32 %.rle, 2 ; [#uses=1]
681 %38 = select i1 %37, i32 %.op, i32 2 ; [#uses=1]
682 %39 = load i8* %10, align 8 ; [#uses=1]
683 %40 = zext i8 %39 to i32 ; [#uses=1]
684 %41 = add i32 %38, %40 ; [#uses=2]
685 %42 = load i32* %5, align 8 ; [#uses=1]
686 %43 = icmp sgt i32 %41, %42 ; [#uses=1]
687 br i1 %43, label %bb88, label %bb85
688
689 bb85: ; preds = %bb80, %bb87
690 %indvar4 = phi i32 [ %indvar.next5, %bb87 ], [ 0, %bb80 ] ; [#uses=2]
691 %j.0 = add i32 %indvar4, %41 ; [#uses=1]
692 %44 = load i32* %12, align 4 ; [#uses=1]
693 %45 = add i32 %44, 1 ; [#uses=2]
694 store i32 %45, i32* %12, align 4
695 %46 = load i32* %9, align 8 ; [#uses=1]
696 %47 = load %struct.system__file_control_block__pstring** %4, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
697 %48 = getelementptr %struct.system__file_control_block__pstring* %47, i32 0, i32 0 ; [#uses=1]
698 %49 = load i8** %48, align 4 ; [#uses=1]
699 %50 = sub i32 %45, %46 ; [#uses=1]
700 %51 = getelementptr i8* %49, i32 %50 ; [#uses=1]
701 store i8 32, i8* %51, align 1
702 %52 = load i32* %5, align 8 ; [#uses=1]
703 %53 = icmp eq i32 %52, %j.0 ; [#uses=1]
704 br i1 %53, label %bb88, label %bb87
705
706 bb87: ; preds = %bb85
707 %indvar.next5 = add i32 %indvar4, 1 ; [#uses=1]
708 br label %bb85
709
710 bb88: ; preds = %bb85, %bb80
711 %54 = load i8* %10, align 8 ; [#uses=1]
712 %toBool89 = icmp eq i8 %54, 0 ; [#uses=1]
713 br i1 %toBool89, label %bb91, label %bb90
714
715 bb90: ; preds = %bb88
716 %55 = load i32* %12, align 4 ; [#uses=1]
717 %56 = add i32 %55, 1 ; [#uses=2]
718 store i32 %56, i32* %12, align 4
719 %57 = load i32* %9, align 8 ; [#uses=1]
720 %58 = load %struct.system__file_control_block__pstring** %4, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
721 %59 = getelementptr %struct.system__file_control_block__pstring* %58, i32 0, i32 0 ; [#uses=1]
722 %60 = load i8** %59, align 4 ; [#uses=1]
723 %61 = sub i32 %56, %57 ; [#uses=1]
724 %62 = getelementptr i8* %60, i32 %61 ; [#uses=1]
725 store i8 45, i8* %62, align 1
726 br label %bb91
727
728 bb91: ; preds = %bb88, %bb90
729 %63 = load i32* %.pre-phi, align 4 ; [#uses=1]
730 %64 = icmp slt i32 %63, 0 ; [#uses=1]
731 br i1 %64, label %bb93, label %bb97
732
733 bb93: ; preds = %bb91
734 %65 = load i32* %12, align 4 ; [#uses=1]
735 %66 = add i32 %65, 1 ; [#uses=2]
736 store i32 %66, i32* %12, align 4
737 %67 = load i32* %9, align 8 ; [#uses=1]
738 %68 = load %struct.system__file_control_block__pstring** %4, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
739 %69 = getelementptr %struct.system__file_control_block__pstring* %68, i32 0, i32 0 ; [#uses=1]
740 %70 = load i8** %69, align 4 ; [#uses=1]
741 %71 = sub i32 %66, %67 ; [#uses=1]
742 %72 = getelementptr i8* %70, i32 %71 ; [#uses=1]
743 store i8 48, i8* %72, align 1
744 %73 = load i32* %12, align 4 ; [#uses=1]
745 %74 = add i32 %73, 1 ; [#uses=2]
746 store i32 %74, i32* %12, align 4
747 %75 = load i32* %9, align 8 ; [#uses=1]
748 %76 = load %struct.system__file_control_block__pstring** %4, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
749 %77 = getelementptr %struct.system__file_control_block__pstring* %76, i32 0, i32 0 ; [#uses=1]
750 %78 = load i8** %77, align 4 ; [#uses=1]
751 %79 = sub i32 %74, %75 ; [#uses=1]
752 %80 = getelementptr i8* %78, i32 %79 ; [#uses=1]
753 store i8 46, i8* %80, align 1
754 %81 = load i32* %.pre-phi, align 4 ; [#uses=2]
755 %82 = icmp sgt i32 %81, -2 ; [#uses=1]
756 br i1 %82, label %bb97, label %bb96
757
758 bb96: ; preds = %bb96, %bb93
759 %indvar = phi i32 [ 0, %bb93 ], [ %indvar.next, %bb96 ] ; [#uses=2]
760 %83 = load i32* %12, align 4 ; [#uses=1]
761 %84 = add i32 %83, 1 ; [#uses=2]
762 store i32 %84, i32* %12, align 4
763 %85 = load i32* %9, align 8 ; [#uses=1]
764 %86 = load %struct.system__file_control_block__pstring** %4, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
765 %87 = getelementptr %struct.system__file_control_block__pstring* %86, i32 0, i32 0 ; [#uses=1]
766 %88 = load i8** %87, align 4 ; [#uses=1]
767 %89 = sub i32 %84, %85 ; [#uses=1]
768 %90 = getelementptr i8* %88, i32 %89 ; [#uses=1]
769 store i8 48, i8* %90, align 1
770 %j8.01 = add i32 %indvar, %81 ; [#uses=1]
771 %91 = add i32 %j8.01, 1 ; [#uses=1]
772 %phitmp = icmp sgt i32 %91, -2 ; [#uses=1]
773 %indvar.next = add i32 %indvar, 1 ; [#uses=1]
774 br i1 %phitmp, label %bb97, label %bb96
775
776 bb97: ; preds = %bb93, %bb96, %bb91
777 %92 = load i32* %12, align 4 ; [#uses=1]
778 %93 = add i32 %92, 1 ; [#uses=2]
779 store i32 %93, i32* %12, align 4
780 %94 = load i32* %9, align 8 ; [#uses=1]
781 %95 = load %struct.system__file_control_block__pstring** %4, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
782 %96 = getelementptr %struct.system__file_control_block__pstring* %95, i32 0, i32 0 ; [#uses=1]
783 %97 = load i8** %96, align 4 ; [#uses=1]
784 %98 = sub i32 %93, %94 ; [#uses=1]
785 %99 = getelementptr i8* %97, i32 %98 ; [#uses=1]
786 store i8 48, i8* %99, align 1
787 br label %bb102
788
789 bb98: ; preds = %bb74
790 %100 = icmp eq i32 %.rle, -1 ; [#uses=1]
791 br i1 %100, label %bb100, label %bb101
792
793 bb100: ; preds = %bb98
794 %101 = add i32 %.rle10, 1 ; [#uses=2]
795 store i32 %101, i32* %12, align 4
796 %102 = load i32* %9, align 8 ; [#uses=1]
797 %103 = load %struct.system__file_control_block__pstring** %4, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
798 %104 = getelementptr %struct.system__file_control_block__pstring* %103, i32 0, i32 0 ; [#uses=1]
799 %105 = load i8** %104, align 4 ; [#uses=1]
800 %106 = sub i32 %101, %102 ; [#uses=1]
801 %107 = getelementptr i8* %105, i32 %106 ; [#uses=1]
802 store i8 46, i8* %107, align 1
803 br label %bb101
804
805 bb101: ; preds = %bb98, %bb100
806 %108 = load i32* %12, align 4 ; [#uses=1]
807 %109 = add i32 %108, 1 ; [#uses=2]
808 store i32 %109, i32* %12, align 4
809 %110 = load i32* %9, align 8 ; [#uses=1]
810 %111 = load %struct.system__file_control_block__pstring** %4, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
811 %112 = getelementptr %struct.system__file_control_block__pstring* %111, i32 0, i32 0 ; [#uses=1]
812 %113 = load i8** %112, align 4 ; [#uses=1]
813 %114 = sub i32 %109, %110 ; [#uses=1]
814 %115 = getelementptr i8* %113, i32 %114 ; [#uses=1]
815 store i8 48, i8* %115, align 1
816 br label %bb102
817
818 bb102: ; preds = %bb76, %bb101, %bb97
819 %116 = load i32* %.pre-phi, align 4 ; [#uses=1]
820 %117 = add i32 %116, -1 ; [#uses=3]
821 store i32 %117, i32* %.pre-phi, align 4
822 %118 = icmp slt i32 %117, -1 ; [#uses=1]
823 %119 = load i32* %12, align 4 ; [#uses=3]
824 br i1 %118, label %bb103, label %bb74
825
826 bb103: ; preds = %bb102, %bb72.preheader
827 %.lcssa = phi i32 [ %26, %bb72.preheader ], [ %119, %bb102 ] ; [#uses=1]
828 ret i32 %.lcssa
829 }
830
831 declare x86_fp80 @ada__text_io__float_aux__get(%struct.ada__text_io__text_afcb*, i32)
832
833 declare void @__gnat_rcheck_12(i8*, i32) noreturn
834
835 declare void @__gnat_rcheck_10(i8*, i32) noreturn
836
837 declare i8* @llvm.eh.exception() nounwind
838
839 declare i32 @llvm.eh.selector.i32(i8*, i8*, ...) nounwind
840
841 declare i32 @llvm.eh.typeid.for.i32(i8*) nounwind
842
843 declare void @__gnat_begin_handler(i8*) nounwind
844
845 declare void @__gnat_raise_exception(%struct.system__standard_library__exception_data*, i8*, %struct.string___XUB*) noreturn
846
847 declare void @__gnat_end_handler(i8*)
848
849 declare i32 @__gnat_eh_personality(...)
850
851 declare i32 @_Unwind_Resume(...)
852
853 define internal fastcc void @ce3806g__fxio__put__put_int64__4.1339(%struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i64 %x, i32 %scale) nounwind {
854 entry:
855 %0 = icmp eq i64 %x, 0 ; [#uses=1]
856 br i1 %0, label %return, label %bb
857
858 bb: ; preds = %entry
859 %1 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 1 ; [#uses=7]
860 store i32 %scale, i32* %1, align 4
861 %2 = add i64 %x, 9 ; [#uses=1]
862 %3 = icmp ugt i64 %2, 18 ; [#uses=1]
863 br i1 %3, label %bb18, label %bb19
864
865 bb18: ; preds = %bb
866 %4 = add i32 %scale, 1 ; [#uses=1]
867 %5 = sdiv i64 %x, 10 ; [#uses=1]
868 tail call fastcc void @ce3806g__fxio__put__put_int64__4.1339( %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i64 %5, i32 %4 )
869 br label %bb19
870
871 bb19: ; preds = %bb, %bb18
872 %6 = srem i64 %x, 10 ; [#uses=3]
873 %neg = sub i64 0, %6 ; [#uses=1]
874 %abscond = icmp sgt i64 %6, -1 ; [#uses=1]
875 %abs = select i1 %abscond, i64 %6, i64 %neg ; [#uses=3]
876 %7 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 5 ; [#uses=16]
877 %8 = load i32* %7, align 4 ; [#uses=2]
878 %9 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 2 ; [#uses=1]
879 %10 = load i32* %9, align 4 ; [#uses=1]
880 %11 = add i32 %10, -1 ; [#uses=1]
881 %12 = icmp eq i32 %8, %11 ; [#uses=1]
882 br i1 %12, label %bb23, label %bb44
883
884 bb23: ; preds = %bb19
885 %13 = icmp ne i64 %abs, 0 ; [#uses=1]
886 %14 = load i32* %1, align 4 ; [#uses=3]
887 %15 = icmp slt i32 %14, 1 ; [#uses=1]
888 %16 = or i1 %15, %13 ; [#uses=1]
889 br i1 %16, label %bb27, label %bb48
890
891 bb27: ; preds = %bb23
892 %17 = icmp sgt i32 %14, -1 ; [#uses=1]
893 %.op = add i32 %14, 2 ; [#uses=1]
894 %18 = select i1 %17, i32 %.op, i32 2 ; [#uses=1]
895 %19 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 6 ; [#uses=2]
896 %20 = load i8* %19, align 1 ; [#uses=1]
897 %21 = zext i8 %20 to i32 ; [#uses=1]
898 %22 = add i32 %18, %21 ; [#uses=2]
899 %23 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 0 ; [#uses=2]
900 %24 = load i32* %23, align 4 ; [#uses=1]
901 %25 = icmp sgt i32 %22, %24 ; [#uses=1]
902 br i1 %25, label %bb34, label %bb31.preheader
903
904 bb31.preheader: ; preds = %bb27
905 %26 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 4 ; [#uses=1]
906 %27 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 3 ; <%struct.system__file_control_block__pstring**> [#uses=1]
907 br label %bb31
908
909 bb31: ; preds = %bb31.preheader, %bb33
910 %indvar = phi i32 [ 0, %bb31.preheader ], [ %indvar.next, %bb33 ] ; [#uses=2]
911 %j.0 = add i32 %indvar, %22 ; [#uses=1]
912 %28 = load i32* %7, align 4 ; [#uses=1]
913 %29 = add i32 %28, 1 ; [#uses=2]
914 store i32 %29, i32* %7, align 4
915 %30 = load i32* %26, align 4 ; [#uses=1]
916 %31 = load %struct.system__file_control_block__pstring** %27, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
917 %32 = getelementptr %struct.system__file_control_block__pstring* %31, i32 0, i32 0 ; [#uses=1]
918 %33 = load i8** %32, align 4 ; [#uses=1]
919 %34 = sub i32 %29, %30 ; [#uses=1]
920 %35 = getelementptr i8* %33, i32 %34 ; [#uses=1]
921 store i8 32, i8* %35, align 1
922 %36 = load i32* %23, align 4 ; [#uses=1]
923 %37 = icmp eq i32 %36, %j.0 ; [#uses=1]
924 br i1 %37, label %bb34, label %bb33
925
926 bb33: ; preds = %bb31
927 %indvar.next = add i32 %indvar, 1 ; [#uses=1]
928 br label %bb31
929
930 bb34: ; preds = %bb31, %bb27
931 %38 = load i8* %19, align 1 ; [#uses=1]
932 %toBool35 = icmp eq i8 %38, 0 ; [#uses=1]
933 br i1 %toBool35, label %bb37, label %bb36
934
935 bb36: ; preds = %bb34
936 %39 = load i32* %7, align 4 ; [#uses=1]
937 %40 = add i32 %39, 1 ; [#uses=2]
938 store i32 %40, i32* %7, align 4
939 %41 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 4 ; [#uses=1]
940 %42 = load i32* %41, align 4 ; [#uses=1]
941 %43 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 3 ; <%struct.system__file_control_block__pstring**> [#uses=1]
942 %44 = load %struct.system__file_control_block__pstring** %43, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
943 %45 = getelementptr %struct.system__file_control_block__pstring* %44, i32 0, i32 0 ; [#uses=1]
944 %46 = load i8** %45, align 4 ; [#uses=1]
945 %47 = sub i32 %40, %42 ; [#uses=1]
946 %48 = getelementptr i8* %46, i32 %47 ; [#uses=1]
947 store i8 45, i8* %48, align 1
948 br label %bb37
949
950 bb37: ; preds = %bb34, %bb36
951 %49 = load i32* %1, align 4 ; [#uses=1]
952 %50 = icmp slt i32 %49, 0 ; [#uses=1]
953 br i1 %50, label %bb39, label %bb43
954
955 bb39: ; preds = %bb37
956 %51 = load i32* %7, align 4 ; [#uses=1]
957 %52 = add i32 %51, 1 ; [#uses=2]
958 store i32 %52, i32* %7, align 4
959 %53 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 4 ; [#uses=3]
960 %54 = load i32* %53, align 4 ; [#uses=1]
961 %55 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 3 ; <%struct.system__file_control_block__pstring**> [#uses=3]
962 %56 = load %struct.system__file_control_block__pstring** %55, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
963 %57 = getelementptr %struct.system__file_control_block__pstring* %56, i32 0, i32 0 ; [#uses=1]
964 %58 = load i8** %57, align 4 ; [#uses=1]
965 %59 = sub i32 %52, %54 ; [#uses=1]
966 %60 = getelementptr i8* %58, i32 %59 ; [#uses=1]
967 store i8 48, i8* %60, align 1
968 %61 = load i32* %7, align 4 ; [#uses=1]
969 %62 = add i32 %61, 1 ; [#uses=2]
970 store i32 %62, i32* %7, align 4
971 %63 = load i32* %53, align 4 ; [#uses=1]
972 %64 = load %struct.system__file_control_block__pstring** %55, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
973 %65 = getelementptr %struct.system__file_control_block__pstring* %64, i32 0, i32 0 ; [#uses=1]
974 %66 = load i8** %65, align 4 ; [#uses=1]
975 %67 = sub i32 %62, %63 ; [#uses=1]
976 %68 = getelementptr i8* %66, i32 %67 ; [#uses=1]
977 store i8 46, i8* %68, align 1
978 %69 = load i32* %1, align 4 ; [#uses=2]
979 %70 = icmp sgt i32 %69, -2 ; [#uses=1]
980 br i1 %70, label %bb43, label %bb42
981
982 bb42: ; preds = %bb42, %bb39
983 %indvar52 = phi i32 [ 0, %bb39 ], [ %indvar.next53, %bb42 ] ; [#uses=2]
984 %71 = load i32* %7, align 4 ; [#uses=1]
985 %72 = add i32 %71, 1 ; [#uses=2]
986 store i32 %72, i32* %7, align 4
987 %73 = load i32* %53, align 4 ; [#uses=1]
988 %74 = load %struct.system__file_control_block__pstring** %55, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
989 %75 = getelementptr %struct.system__file_control_block__pstring* %74, i32 0, i32 0 ; [#uses=1]
990 %76 = load i8** %75, align 4 ; [#uses=1]
991 %77 = sub i32 %72, %73 ; [#uses=1]
992 %78 = getelementptr i8* %76, i32 %77 ; [#uses=1]
993 store i8 48, i8* %78, align 1
994 %j15.050 = add i32 %indvar52, %69 ; [#uses=1]
995 %79 = add i32 %j15.050, 1 ; [#uses=1]
996 %phitmp = icmp sgt i32 %79, -2 ; [#uses=1]
997 %indvar.next53 = add i32 %indvar52, 1 ; [#uses=1]
998 br i1 %phitmp, label %bb43, label %bb42
999
1000 bb43: ; preds = %bb39, %bb42, %bb37
1001 %80 = trunc i64 %abs to i32 ; [#uses=1]
1002 %81 = getelementptr [10 x i8]* @.str3, i32 0, i32 %80 ; [#uses=1]
1003 %82 = load i8* %81, align 1 ; [#uses=1]
1004 %83 = load i32* %7, align 4 ; [#uses=1]
1005 %84 = add i32 %83, 1 ; [#uses=2]
1006 store i32 %84, i32* %7, align 4
1007 %85 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 4 ; [#uses=1]
1008 %86 = load i32* %85, align 4 ; [#uses=1]
1009 %87 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 3 ; <%struct.system__file_control_block__pstring**> [#uses=1]
1010 %88 = load %struct.system__file_control_block__pstring** %87, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
1011 %89 = getelementptr %struct.system__file_control_block__pstring* %88, i32 0, i32 0 ; [#uses=1]
1012 %90 = load i8** %89, align 4 ; [#uses=1]
1013 %91 = sub i32 %84, %86 ; [#uses=1]
1014 %92 = getelementptr i8* %90, i32 %91 ; [#uses=1]
1015 store i8 %82, i8* %92, align 1
1016 br label %bb48
1017
1018 bb44: ; preds = %bb19
1019 %93 = load i32* %1, align 4 ; [#uses=1]
1020 %94 = icmp eq i32 %93, -1 ; [#uses=1]
1021 %.pre = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 4 ; [#uses=1]
1022 %.pre55 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 3 ; <%struct.system__file_control_block__pstring**> [#uses=1]
1023 br i1 %94, label %bb46, label %bb47
1024
1025 bb46: ; preds = %bb44
1026 %95 = add i32 %8, 1 ; [#uses=2]
1027 store i32 %95, i32* %7, align 4
1028 %96 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 4 ; [#uses=2]
1029 %97 = load i32* %96, align 4 ; [#uses=1]
1030 %98 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i32 0, i32 3 ; <%struct.system__file_control_block__pstring**> [#uses=2]
1031 %99 = load %struct.system__file_control_block__pstring** %98, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
1032 %100 = getelementptr %struct.system__file_control_block__pstring* %99, i32 0, i32 0 ; [#uses=1]
1033 %101 = load i8** %100, align 4 ; [#uses=1]
1034 %102 = sub i32 %95, %97 ; [#uses=1]
1035 %103 = getelementptr i8* %101, i32 %102 ; [#uses=1]
1036 store i8 46, i8* %103, align 1
1037 br label %bb47
1038
1039 bb47: ; preds = %bb44, %bb46
1040 %.pre-phi56 = phi %struct.system__file_control_block__pstring** [ %98, %bb46 ], [ %.pre55, %bb44 ] ; <%struct.system__file_control_block__pstring**> [#uses=1]
1041 %.pre-phi = phi i32* [ %96, %bb46 ], [ %.pre, %bb44 ] ; [#uses=1]
1042 %104 = trunc i64 %abs to i32 ; [#uses=1]
1043 %105 = getelementptr [10 x i8]* @.str3, i32 0, i32 %104 ; [#uses=1]
1044 %106 = load i8* %105, align 1 ; [#uses=1]
1045 %107 = load i32* %7, align 4 ; [#uses=1]
1046 %108 = add i32 %107, 1 ; [#uses=2]
1047 store i32 %108, i32* %7, align 4
1048 %109 = load i32* %.pre-phi, align 4 ; [#uses=1]
1049 %110 = load %struct.system__file_control_block__pstring** %.pre-phi56, align 4 ; <%struct.system__file_control_block__pstring*> [#uses=1]
1050 %111 = getelementptr %struct.system__file_control_block__pstring* %110, i32 0, i32 0 ; [#uses=1]
1051 %112 = load i8** %111, align 4 ; [#uses=1]
1052 %113 = sub i32 %108, %109 ; [#uses=1]
1053 %114 = getelementptr i8* %112, i32 %113 ; [#uses=1]
1054 store i8 %106, i8* %114, align 1
1055 br label %bb48
1056
1057 bb48: ; preds = %bb23, %bb47, %bb43
1058 %115 = load i32* %1, align 4 ; [#uses=1]
1059 %116 = add i32 %115, -1 ; [#uses=1]
1060 store i32 %116, i32* %1, align 4
1061 ret void
1062
1063 return: ; preds = %entry
1064 ret void
1065 }
1066
1067 declare i8* @llvm.stacksave() nounwind
1068
1069 declare void @system__arith_64__scaled_divide({ i64, i64 }* noalias sret, i64, i64, i64, i8)
1070
1071 declare i64 @system__exn_lli__exn_long_long_integer(i64, i32) readnone
1072
1073 declare void @llvm.stackrestore(i8*) nounwind
1074
1075 declare void @ada__text_io__generic_aux__put_item(%struct.ada__text_io__text_afcb*, i8*, %struct.string___XUB*)
1076
1077 declare void @report__test(i8*, %struct.string___XUB*, i8*, %struct.string___XUB*)
1078
1079 declare void @system__secondary_stack__ss_mark(%struct.string___XUB* noalias sret)
1080
1081 declare void @system__exception_table__register_exception(%struct.system__standard_library__exception_data*)
1082
1083 declare void @report__legal_file_name(%struct.system__file_control_block__pstring* noalias sret, i32, i8*, %struct.string___XUB*)
1084
1085 declare %struct.ada__text_io__text_afcb* @ada__text_io__create(%struct.ada__text_io__text_afcb*, i8, i8*, %struct.string___XUB*, i8*, %struct.string___XUB*)
1086
1087 declare void @system__secondary_stack__ss_release(i32, i32)
1088
1089 declare void @report__not_applicable(i8*, %struct.string___XUB*)
1090
1091 declare void @ada__text_io__set_output(%struct.ada__text_io__text_afcb*)
1092
1093 declare %struct.ada__text_io__text_afcb* @ada__text_io__close(%struct.ada__text_io__text_afcb*)
1094
1095 declare %struct.ada__text_io__text_afcb* @ada__text_io__open(%struct.ada__text_io__text_afcb*, i8, i8*, %struct.string___XUB*, i8*, %struct.string___XUB*)
1096
1097 declare %struct.ada__text_io__text_afcb* @ada__text_io__standard_output()
1098
1099 declare void @report__failed(i8*, %struct.string___XUB*)
1100
1101 declare %struct.ada__text_io__text_afcb* @ada__text_io__delete(%struct.ada__text_io__text_afcb*)
1102
1103 declare void @report__result()
496496
497497
498498 RelativePath="..\..\lib\Transforms\Scalar\LoopUnswitch.cpp"
499 >
500
501
502 RelativePath="..\..\lib\Transforms\Scalar\MarkModRef.cpp"
503499 >
504500
505501