[llvm-commits] [llvm] r55872 - in /llvm/trunk: include/llvm/Analysis/CallGraph.h lib/Analysis/IPA/CallGraph.cpp lib/Transforms/IPO/PruneEH.cpp test/Transforms/PruneEH/2008-09-05-CGUpdate.ll

Evan Cheng evan.cheng at apple.com
Mon Sep 8 00:01:30 PDT 2008


Hi Duncan,

This patch broke 447.dealII on Mac OS X / x86.

/Users/echeng/LLVM/llvm/Release/bin/opt -std-compile-opts -time-passes  
-info-output-file=/Volumes/Vadar/LLVM/llvm/projects/llvm-test/External/ 
SPEC/CFP2006/447.dealII/Output/447.dealII.linked.bc.in\
fo   Output/447.dealII.linked.rbc -o Output/447.dealII.linked.bc -f
Assertion failed: (i && "Cannot find callsite to replace!"), function  
replaceCallSite, file CallGraph.cpp, line 326.
0   opt                                 0x003f37fc  
_ZN4llvm3sys18RemoveFileOnSignalERKNS0_4PathEPSs + 844^@
1   libSystem.B.dylib                   0x92a9809b _sigtramp + 43^@
2   ???                                 0xffffffff 0x0 + 4294967295^@
3   libSystem.B.dylib                   0x92b10ec2 raise + 26^@
4   libSystem.B.dylib                   0x92b2047f abort + 73^@
5   libSystem.B.dylib                   0x92b12063 __assert_rtn + 101^@
6   opt                                 0x00226cf9  
_ZN4llvm13CallGraphNode15replaceCallSiteENS_8CallSiteES1_ + 137^@
7   opt                                 0x00046fca  
_ZN4llvm17createPruneEHPassEv + 3290^@
8   opt                                 0x00047648  
_ZN4llvm17createPruneEHPassEv + 4952^@
9   opt                                 0x0022931a  
_ZN49_GLOBAL__N_CallGraphSCCPass 
.cpp_00000000_609D2F1513CGPassManager11runOnModuleERN4llvm6ModuleE +  
730^@
10  opt                                 0x00373829  
_ZN4llvm13MPPassManager11runOnModuleERNS_6ModuleE + 409^@
11  opt                                 0x00373b34  
_ZN4llvm15PassManagerImpl3runERNS_6ModuleE + 132^@
12  opt                                 0x00373bab  
_ZN4llvm11PassManager3runERNS_6ModuleE + 27^@
13  opt                                 0x00009812 main + 2066^@
14  opt                                 0x00002766 start + 54^@
make[1]: *** [Output/447.dealII.linked.bc] Abort trap

I'll send you the test case in another email. Please take a look.  
Thanks.

Evan

On Sep 6, 2008, at 10:19 AM, Duncan Sands wrote:

> Author: baldrick
> Date: Sat Sep  6 12:19:29 2008
> New Revision: 55872
>
> URL: http://llvm.org/viewvc/llvm-project?rev=55872&view=rev
> Log:
> When PruneEH turned an invoke into an ordinary
> call (thus changing the call site) it didn't
> inform the callgraph about this.  But the
> call site does matter - as shown by the testcase,
> the callgraph become invalid after the inliner
> ran (with an edge between two functions simply
> missing), resulting in wrong deductions by
> GlobalsModRef.
>
> Added:
>    llvm/trunk/test/Transforms/PruneEH/2008-09-05-CGUpdate.ll
> Modified:
>    llvm/trunk/include/llvm/Analysis/CallGraph.h
>    llvm/trunk/lib/Analysis/IPA/CallGraph.cpp
>    llvm/trunk/lib/Transforms/IPO/PruneEH.cpp
>
> Modified: llvm/trunk/include/llvm/Analysis/CallGraph.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/CallGraph.h?rev=55872&r1=55871&r2=55872&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/include/llvm/Analysis/CallGraph.h (original)
> +++ llvm/trunk/include/llvm/Analysis/CallGraph.h Sat Sep  6 12:19:29  
> 2008
> @@ -235,6 +235,11 @@
>   /// removeCallEdgeTo, so it should not be used unless necessary.
>   void removeAnyCallEdgeTo(CallGraphNode *Callee);
>
> +  /// replaceCallSite - Make the edge in the node for Old CallSite  
> be for
> +  /// New CallSite instead.  Note that this method takes linear  
> time, so it
> +  /// should be used sparingly.
> +  void replaceCallSite(CallSite Old, CallSite New);
> +
>   friend class CallGraph;
>
>   // CallGraphNode ctor - Create a node for the specified function.
>
> Modified: llvm/trunk/lib/Analysis/IPA/CallGraph.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/CallGraph.cpp?rev=55872&r1=55871&r2=55872&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/Analysis/IPA/CallGraph.cpp (original)
> +++ llvm/trunk/lib/Analysis/IPA/CallGraph.cpp Sat Sep  6 12:19:29 2008
> @@ -297,7 +297,7 @@
> /// should be used sparingly.
> void CallGraphNode::removeCallEdgeFor(CallSite CS) {
>   for (unsigned i = CalledFunctions.size(); ; --i) {
> -    assert(i && "Cannot find callee to remove!");
> +    assert(i && "Cannot find callsite to remove!");
>     if (CalledFunctions[i-1].first == CS) {
>       CalledFunctions.erase(CalledFunctions.begin()+i-1);
>       return;
> @@ -318,5 +318,18 @@
>     }
> }
>
> +/// replaceCallSite - Make the edge in the node for Old CallSite be  
> for
> +/// New CallSite instead.  Note that this method takes linear time,  
> so it
> +/// should be used sparingly.
> +void CallGraphNode::replaceCallSite(CallSite Old, CallSite New) {
> +  for (unsigned i = CalledFunctions.size(); ; --i) {
> +    assert(i && "Cannot find callsite to replace!");
> +    if (CalledFunctions[i-1].first == Old) {
> +      CalledFunctions[i-1].first = New;
> +      return;
> +    }
> +  }
> +}
> +
> // Enuse that users of CallGraph.h also link with this file
> DEFINING_FILE_FOR(CallGraph)
>
> Modified: llvm/trunk/lib/Transforms/IPO/PruneEH.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PruneEH.cpp?rev=55872&r1=55871&r2=55872&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/Transforms/IPO/PruneEH.cpp (original)
> +++ llvm/trunk/lib/Transforms/IPO/PruneEH.cpp Sat Sep  6 12:19:29 2008
> @@ -156,6 +156,9 @@
> // function if we have invokes to non-unwinding functions or code  
> after calls to
> // no-return functions.
> bool PruneEH::SimplifyFunction(Function *F) {
> +  CallGraph &CG = getAnalysis<CallGraph>();
> +  CallGraphNode *CGN = CG[F];
> +
>   bool MadeChange = false;
>   for (Function::iterator BB = F->begin(), E = F->end(); BB != E; + 
> +BB) {
>     if (InvokeInst *II = dyn_cast<InvokeInst>(BB->getTerminator()))
> @@ -174,6 +177,9 @@
>         BasicBlock *UnwindBlock = II->getUnwindDest();
>         UnwindBlock->removePredecessor(II->getParent());
>
> +        // Fix up the call graph.
> +        CGN->replaceCallSite(II, Call);
> +
>         // Insert a branch to the normal destination right before the
>         // invoke.
>         BranchInst::Create(II->getNormalDest(), II);
>
> Added: llvm/trunk/test/Transforms/PruneEH/2008-09-05-CGUpdate.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/PruneEH/2008-09-05-CGUpdate.ll?rev=55872&view=auto
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/test/Transforms/PruneEH/2008-09-05-CGUpdate.ll (added)
> +++ llvm/trunk/test/Transforms/PruneEH/2008-09-05-CGUpdate.ll Sat  
> Sep  6 12:19:29 2008
> @@ -0,0 +1,1438 @@
> +; RUN: llvm-as < %s | opt -prune-eh -inline -globalsmodref-aa - 
> markmodref | llvm-dis | not grep {define.*read}
> +	%struct.FRAME.ce3806g = type { %struct.string___XUB,  
> %struct.string___XUB, %struct.string___XUB, %struct.string___XUB }
> +	%struct.FRAME.ce3806g__fxio__put__4 = type { i32, i32, i32,  
> %struct.system__file_control_block__pstring*, i32, i32, i8 }
> +	%struct.RETURN = type { i8, i32 }
> +	%struct.ada__streams__root_stream_type = type  
> { %struct.ada__tags__dispatch_table* }
> +	%struct.ada__tags__dispatch_table = type { [1 x i32] }
> +	%struct.ada__tags__select_specific_data = type { i32,  
> %struct.ada__tags__select_specific_data_element }
> +	%struct.ada__tags__select_specific_data_element = type { i32, i8 }
> +	%struct.ada__tags__type_specific_data = type { i32, i32,  
> [2147483647 x i8]*, [2147483647 x i8]*,  
> %struct.ada__tags__dispatch_table*, i8, i32, i32, i32, i32, [2 x  
> %struct.ada__tags__dispatch_table*] }
> +	%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 }
> +	%struct.exception = type { i8, i8, i32, i8*, i8*, i32, i8* }
> +	%struct.long_long_float___PAD = type { x86_fp80, [1 x i32] }
> +	%struct.string___XUB = type { i32, i32 }
> +	%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* }
> +	%struct.system__file_control_block__pstring = type { i8*,  
> %struct.string___XUB* }
> +	 
> %struct 
> .system__finalization_implementation__limited_record_controller =  
> type { %struct.system__finalization_root__root_controlled,  
> %struct.system__finalization_root__root_controlled* }
> +	%struct.system__finalization_implementation__record_controller =  
> type  
> { %struct 
> .system__finalization_implementation__limited_record_controller, i32 }
> +	%struct.system__finalization_root__empty_root_controlled = type  
> { %struct.ada__tags__dispatch_table* }
> +	%struct.system__finalization_root__root_controlled = type  
> { %struct.ada__streams__root_stream_type,  
> %struct.system__finalization_root__root_controlled*,  
> %struct.system__finalization_root__root_controlled* }
> +	%struct.system__secondary_stack__mark_id = type { i32, i32 }
> +	%struct.system__standard_library__exception_data = type { i8, i8,  
> i32, i32, %struct.system__standard_library__exception_data*, i32,  
> void ()* }
> + at .str = internal constant [12 x i8] c"system.ads\00\00"		; <[12 x  
> i8]*> [#uses=1]
> + at .str1 = internal constant [14 x i8] c"a-tifiio.adb\00\00"		; <[14  
> x i8]*> [#uses=1]
> + at system__soft_links__abort_undefer = external global void ()*		;  
> <void ()**> [#uses=6]
> + at .str2 = internal constant [47 x i8] c"a-tifiio.adb:327  
> instantiated at ce3806g.adb:52"		; <[47 x i8]*> [#uses=1]
> + at C.354.2200 = internal constant %struct.string___XUB { i32 1, i32  
> 47 }		; <%struct.string___XUB*> [#uses=1]
> + at ada__io_exceptions__data_error = external global  
> %struct.exception		; <%struct.exception*> [#uses=1]
> + at constraint_error = external global %struct.exception		; < 
> %struct.exception*> [#uses=2]
> + at __gnat_all_others_value = external constant i32		; <i32*> [#uses=21]
> + at .str3 = internal constant [10 x i8] c"0123456789"		; <[10 x i8]*>  
> [#uses=2]
> + at ada__text_io__current_out = external global  
> %struct.ada__text_io__text_afcb*		; < 
> %struct.ada__text_io__text_afcb**> [#uses=1]
> + at .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]
> + at C.131.1559 = internal constant %struct.string___XUB { i32 1, i32  
> 126 }		; <%struct.string___XUB*> [#uses=1]
> + at .str5 = internal constant [7 x i8] c"CE3806G"		; <[7 x i8]*>  
> [#uses=1]
> + at C.132.1562 = internal constant %struct.string___XUB { i32 1, i32  
> 7 }		; <%struct.string___XUB*> [#uses=1]
> + at incompleteF.1176.b = internal global i1 false		; <i1*> [#uses=2]
> + at 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]
> + at incompleteE.1174 = internal global [23 x i8]  
> c"CE3806G.B_1.INCOMPLETE\00"		; <[23 x i8]*> [#uses=1]
> + at .str6 = internal constant [0 x i8] zeroinitializer		; <[0 x i8]*>  
> [#uses=1]
> + at C.136.1568 = internal constant %struct.string___XUB { i32 1, i32  
> 0 }		; <%struct.string___XUB*> [#uses=1]
> + at C.137.1571 = internal constant %struct.string___XUB { i32 1, i32  
> 0 }		; <%struct.string___XUB*> [#uses=1]
> + at .str7 = internal constant [50 x i8] c"USE_ERROR RAISED ON TEXT  
> CREATE WITH OUT_FILE MODE"		; <[50 x i8]*> [#uses=1]
> + at C.139.1577 = internal constant %struct.string___XUB { i32 1, i32  
> 50 }		; <%struct.string___XUB*> [#uses=1]
> + at .str8 = internal constant [14 x i8] c"ce3806g.adb:65"		; <[14 x  
> i8]*> [#uses=1]
> + at C.140.1580 = internal constant %struct.string___XUB { i32 1, i32  
> 14 }		; <%struct.string___XUB*> [#uses=1]
> + at .str9 = internal constant [51 x i8] c"NAME_ERROR RAISED ON TEXT  
> CREATE WITH OUT_FILE MODE"		; <[51 x i8]*> [#uses=1]
> + at C.143.1585 = internal constant %struct.string___XUB { i32 1, i32  
> 51 }		; <%struct.string___XUB*> [#uses=1]
> + at .str10 = internal constant [14 x i8] c"ce3806g.adb:69"		; <[14 x  
> i8]*> [#uses=1]
> + at C.144.1588 = internal constant %struct.string___XUB { i32 1, i32  
> 14 }		; <%struct.string___XUB*> [#uses=1]
> + at C.146.1592 = internal constant %struct.string___XUB { i32 1, i32  
> 0 }		; <%struct.string___XUB*> [#uses=1]
> + at C.147.1595 = internal constant %struct.string___XUB { i32 1, i32  
> 0 }		; <%struct.string___XUB*> [#uses=1]
> + at C.153.1609 = internal constant %struct.string___XUB { i32 1, i32  
> 0 }		; <%struct.string___XUB*> [#uses=1]
> + at C.154.1612 = internal constant %struct.string___XUB { i32 1, i32  
> 0 }		; <%struct.string___XUB*> [#uses=1]
> + at .str12 = internal constant [47 x i8] c"USE_ERROR RAISED ON TEXT  
> OPEN WITH IN_FILE MODE"		; <[47 x i8]*> [#uses=1]
> + at C.156.1618 = internal constant %struct.string___XUB { i32 1, i32  
> 47 }		; <%struct.string___XUB*> [#uses=1]
> + at .str13 = internal constant [14 x i8] c"ce3806g.adb:88"		; <[14 x  
> i8]*> [#uses=1]
> + at C.157.1621 = internal constant %struct.string___XUB { i32 1, i32  
> 14 }		; <%struct.string___XUB*> [#uses=1]
> + at C.159.1627 = internal constant %struct.string___XUB { i32 1, i32  
> 0 }		; <%struct.string___XUB*> [#uses=1]
> + at C.160.1630 = internal constant %struct.string___XUB { i32 1, i32  
> 0 }		; <%struct.string___XUB*> [#uses=1]
> + at .str14 = internal constant [33 x i8] c"VALUE INCORRECT - FIXED  
> FROM FILE"		; <[33 x i8]*> [#uses=1]
> + at C.162.1637 = internal constant %struct.string___XUB { i32 1, i32  
> 33 }		; <%struct.string___XUB*> [#uses=1]
> + at .str15 = internal constant [36 x i8] c"VALUE INCORRECT - FIXED  
> FROM DEFAULT"		; <[36 x i8]*> [#uses=1]
> + at C.164.1642 = internal constant %struct.string___XUB { i32 1, i32  
> 36 }		; <%struct.string___XUB*> [#uses=1]
> + at ada__io_exceptions__use_error = external global  
> %struct.exception		; <%struct.exception*> [#uses=4]
> + at ada__io_exceptions__name_error = external global  
> %struct.exception		; <%struct.exception*> [#uses=2]
> +
> +define void @_ada_ce3806g() {
> +entry:
> +	%0 = alloca %struct.system__file_control_block__pstring, align  
> 8		; <%struct.system__file_control_block__pstring*> [#uses=3]
> +	%1 = alloca %struct.system__file_control_block__pstring, align  
> 8		; <%struct.system__file_control_block__pstring*> [#uses=3]
> +	%2 = alloca %struct.system__file_control_block__pstring, align  
> 8		; <%struct.system__file_control_block__pstring*> [#uses=3]
> +	%3 = alloca %struct.system__file_control_block__pstring, align  
> 8		; <%struct.system__file_control_block__pstring*> [#uses=3]
> +	%FRAME.356 = alloca %struct.FRAME.ce3806g		; < 
> %struct.FRAME.ce3806g*> [#uses=20]
> +	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 )
> +	%4 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 3		; <%struct.string___XUB*> [#uses=1]
> +	call void @system__secondary_stack__ss_mark( %struct.string___XUB*  
> noalias sret %4 )
> +	%.b = load i1* @incompleteF.1176.b		; <i1> [#uses=1]
> +	br i1 %.b, label %bb11, label %bb
> +
> +bb:		; preds = %entry
> +	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*) )
> +			to label %invcont unwind label %lpad
> +
> +invcont:		; preds = %bb
> +	store i1 true, i1* @incompleteF.1176.b
> +	br label %bb11
> +
> +bb11:		; preds = %entry, %invcont
> +	%5 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 2		; <%struct.string___XUB*> [#uses=1]
> +	invoke void  
> @system__secondary_stack__ss_mark( %struct.string___XUB* noalias  
> sret %5 )
> +			to label %invcont12 unwind label %lpad228
> +
> +invcont12:		; preds = %bb11
> +	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.137.1571 )
> +			to label %invcont17 unwind label %lpad232
> +
> +invcont17:		; preds = %invcont12
> +	%elt18 = getelementptr  
> %struct.system__file_control_block__pstring* %3, i32 0, i32 0		;  
> <i8**> [#uses=1]
> +	%val19 = load i8** %elt18, align 8		; <i8*> [#uses=1]
> +	%elt20 = getelementptr  
> %struct.system__file_control_block__pstring* %3, i32 0, i32 1		; < 
> %struct.string___XUB**> [#uses=1]
> +	%val21 = load %struct.string___XUB** %elt20		; < 
> %struct.string___XUB*> [#uses=1]
> +	%6 = 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 )
> +			to label %invcont26 unwind label %lpad232		; < 
> %struct.ada__text_io__text_afcb*> [#uses=2]
> +
> +invcont26:		; preds = %invcont17
> +	%7 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 2, i32 0		; <i32*> [#uses=1]
> +	%8 = load i32* %7, align 8		; <i32> [#uses=1]
> +	%9 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 2, i32 1		; <i32*> [#uses=1]
> +	%10 = load i32* %9, align 4		; <i32> [#uses=1]
> +	invoke void @system__secondary_stack__ss_release( i32 %8, i32 %10 )
> +			to label %bb73 unwind label %lpad228
> +
> +bb32:		; preds = %lpad232
> +	call void @__gnat_begin_handler( i8* %eh_ptr233 ) nounwind
> +	%11 = load void ()** @system__soft_links__abort_undefer, align  
> 4		; <void ()*> [#uses=1]
> +	invoke void %11( )
> +			to label %invcont33 unwind label %lpad240
> +
> +invcont33:		; preds = %bb32
> +	invoke void @report__not_applicable( i8* getelementptr ([50 x i8]*  
> @.str7, i32 0, i32 0), %struct.string___XUB* @C.139.1577 )
> +			to label %invcont38 unwind label %lpad240
> +
> +invcont38:		; preds = %invcont33
> +	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
> +			to label %invcont43 unwind label %lpad240
> +
> +invcont43:		; preds = %invcont38
> +	unreachable
> +
> +bb47:		; preds = %ppad291
> +	call void @__gnat_begin_handler( i8* %eh_ptr233 ) nounwind
> +	%12 = load void ()** @system__soft_links__abort_undefer, align  
> 4		; <void ()*> [#uses=1]
> +	invoke void %12( )
> +			to label %invcont49 unwind label %lpad248
> +
> +invcont49:		; preds = %bb47
> +	invoke void @report__not_applicable( i8* getelementptr ([51 x i8]*  
> @.str9, i32 0, i32 0), %struct.string___XUB* @C.143.1585 )
> +			to label %invcont54 unwind label %lpad248
> +
> +invcont54:		; preds = %invcont49
> +	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.144.1588 ) noreturn
> +			to label %invcont59 unwind label %lpad248
> +
> +invcont59:		; preds = %invcont54
> +	unreachable
> +
> +bb73:		; preds = %invcont26
> +	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.147.1595 )
> +			to label %invcont78 unwind label %lpad228
> +
> +invcont78:		; preds = %bb73
> +	%elt79 = getelementptr  
> %struct.system__file_control_block__pstring* %2, i32 0, i32 0		;  
> <i8**> [#uses=1]
> +	%val80 = load i8** %elt79, align 8		; <i8*> [#uses=1]
> +	%elt81 = getelementptr  
> %struct.system__file_control_block__pstring* %2, i32 0, i32 1		; < 
> %struct.string___XUB**> [#uses=1]
> +	%val82 = load %struct.string___XUB** %elt81		; < 
> %struct.string___XUB*> [#uses=1]
> +	%13 = 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.146.1592 )
> +			to label %invcont87 unwind label %lpad228		; < 
> %struct.ada__text_io__text_afcb*> [#uses=2]
> +
> +invcont87:		; preds = %invcont78
> +	invoke void  
> @ada__text_io__set_output( %struct.ada__text_io__text_afcb* %13 )
> +			to label %invcont88 unwind label %lpad228
> +
> +invcont88:		; preds = %invcont87
> +	%14 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 1		; <%struct.string___XUB*> [#uses=1]
> +	invoke void  
> @system__secondary_stack__ss_mark( %struct.string___XUB* noalias  
> sret %14 )
> +			to label %invcont89 unwind label %lpad228
> +
> +invcont89:		; preds = %invcont88
> +	invoke fastcc void @ce3806g__fxio__put. 
> 1149( %struct.ada__text_io__text_afcb* %6 )
> +			to label %bb94 unwind label %lpad252
> +
> +bb94:		; preds = %invcont89
> +	invoke fastcc void @ce3806g__fxio__put__2.1155( )
> +			to label %invcont95 unwind label %lpad252
> +
> +invcont95:		; preds = %bb94
> +	%15 = invoke %struct.ada__text_io__text_afcb*  
> @ada__text_io__close( %struct.ada__text_io__text_afcb* %6 )
> +			to label %invcont96 unwind label %lpad252		; < 
> %struct.ada__text_io__text_afcb*> [#uses=1]
> +
> +invcont96:		; preds = %invcont95
> +	%16 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 0		; <%struct.string___XUB*> [#uses=1]
> +	invoke void  
> @system__secondary_stack__ss_mark( %struct.string___XUB* noalias  
> sret %16 )
> +			to label %invcont97 unwind label %lpad252
> +
> +invcont97:		; preds = %invcont96
> +	invoke void  
> @report__legal_file_name 
> ( %struct.system__file_control_block__pstring* noalias sret %1, i32  
> 1, i8* getelementptr ([0 x i8]* @.str6, i32 0, i32 0),  
> %struct.string___XUB* @C.154.1612 )
> +			to label %invcont102 unwind label %lpad256
> +
> +invcont102:		; preds = %invcont97
> +	%elt103 = getelementptr  
> %struct.system__file_control_block__pstring* %1, i32 0, i32 0		;  
> <i8**> [#uses=1]
> +	%val104 = load i8** %elt103, align 8		; <i8*> [#uses=1]
> +	%elt105 = getelementptr  
> %struct.system__file_control_block__pstring* %1, i32 0, i32 1		; < 
> %struct.string___XUB**> [#uses=1]
> +	%val106 = load %struct.string___XUB** %elt105		; < 
> %struct.string___XUB*> [#uses=1]
> +	%17 = invoke %struct.ada__text_io__text_afcb*  
> @ada__text_io__open( %struct.ada__text_io__text_afcb* %15, i8 0, i8*  
> %val104, %struct.string___XUB* %val106, i8* getelementptr ([0 x i8]*  
> @.str6, i32 0, i32 0), %struct.string___XUB* @C.153.1609 )
> +			to label %invcont111 unwind label %lpad256		; < 
> %struct.ada__text_io__text_afcb*> [#uses=2]
> +
> +invcont111:		; preds = %invcont102
> +	%18 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 0, i32 0		; <i32*> [#uses=1]
> +	%19 = load i32* %18, align 8		; <i32> [#uses=1]
> +	%20 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 0, i32 1		; <i32*> [#uses=1]
> +	%21 = load i32* %20, align 4		; <i32> [#uses=1]
> +	invoke void @system__secondary_stack__ss_release( i32 %19, i32 %21 )
> +			to label %bb143 unwind label %lpad252
> +
> +bb117:		; preds = %lpad256
> +	call void @__gnat_begin_handler( i8* %eh_ptr257 ) nounwind
> +	%22 = load void ()** @system__soft_links__abort_undefer, align  
> 4		; <void ()*> [#uses=1]
> +	invoke void %22( )
> +			to label %invcont119 unwind label %lpad264
> +
> +invcont119:		; preds = %bb117
> +	invoke void @report__not_applicable( i8* getelementptr ([47 x i8]*  
> @.str12, i32 0, i32 0), %struct.string___XUB* @C.156.1618 )
> +			to label %invcont124 unwind label %lpad264
> +
> +invcont124:		; preds = %invcont119
> +	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.157.1621 ) noreturn
> +			to label %invcont129 unwind label %lpad264
> +
> +invcont129:		; preds = %invcont124
> +	unreachable
> +
> +bb143:		; preds = %invcont111
> +	%23 = invoke %struct.ada__text_io__text_afcb*  
> @ada__text_io__standard_output( )
> +			to label %invcont144 unwind label %lpad252		; < 
> %struct.ada__text_io__text_afcb*> [#uses=1]
> +
> +invcont144:		; preds = %bb143
> +	invoke void  
> @ada__text_io__set_output( %struct.ada__text_io__text_afcb* %23 )
> +			to label %invcont145 unwind label %lpad252
> +
> +invcont145:		; preds = %invcont144
> +	%24 = invoke %struct.ada__text_io__text_afcb*  
> @ada__text_io__close( %struct.ada__text_io__text_afcb* %13 )
> +			to label %invcont146 unwind label %lpad252		; < 
> %struct.ada__text_io__text_afcb*> [#uses=1]
> +
> +invcont146:		; preds = %invcont145
> +	invoke void  
> @report__legal_file_name 
> ( %struct.system__file_control_block__pstring* noalias sret %0, i32  
> 2, i8* getelementptr ([0 x i8]* @.str6, i32 0, i32 0),  
> %struct.string___XUB* @C.160.1630 )
> +			to label %invcont151 unwind label %lpad252
> +
> +invcont151:		; preds = %invcont146
> +	%elt152 = getelementptr  
> %struct.system__file_control_block__pstring* %0, i32 0, i32 0		;  
> <i8**> [#uses=1]
> +	%val153 = load i8** %elt152, align 8		; <i8*> [#uses=1]
> +	%elt154 = getelementptr  
> %struct.system__file_control_block__pstring* %0, i32 0, i32 1		; < 
> %struct.string___XUB**> [#uses=1]
> +	%val155 = load %struct.string___XUB** %elt154		; < 
> %struct.string___XUB*> [#uses=1]
> +	%25 = invoke %struct.ada__text_io__text_afcb*  
> @ada__text_io__open( %struct.ada__text_io__text_afcb* %24, i8 0, i8*  
> %val153, %struct.string___XUB* %val155, i8* getelementptr ([0 x i8]*  
> @.str6, i32 0, i32 0), %struct.string___XUB* @C.159.1627 )
> +			to label %invcont160 unwind label %lpad252		; < 
> %struct.ada__text_io__text_afcb*> [#uses=2]
> +
> +invcont160:		; preds = %invcont151
> +	%26 = invoke fastcc i8 @ce3806g__fxio__get. 
> 1137( %struct.ada__text_io__text_afcb* %17 ) signext
> +			to label %invcont161 unwind label %lpad252		; <i8> [#uses=1]
> +
> +invcont161:		; preds = %invcont160
> +	%27 = icmp eq i8 %26, -3		; <i1> [#uses=1]
> +	br i1 %27, label %bb169, label %bb163
> +
> +bb163:		; preds = %invcont161
> +	invoke void @report__failed( i8* getelementptr ([33 x i8]*  
> @.str14, i32 0, i32 0), %struct.string___XUB* @C.162.1637 )
> +			to label %bb169 unwind label %lpad252
> +
> +bb169:		; preds = %invcont161, %bb163
> +	%28 = invoke fastcc i8 @ce3806g__fxio__get. 
> 1137( %struct.ada__text_io__text_afcb* %25 ) signext
> +			to label %invcont170 unwind label %lpad252		; <i8> [#uses=1]
> +
> +invcont170:		; preds = %bb169
> +	%29 = icmp eq i8 %28, -1		; <i1> [#uses=1]
> +	br i1 %29, label %bb187, label %bb172
> +
> +bb172:		; preds = %invcont170
> +	invoke void @report__failed( i8* getelementptr ([36 x i8]*  
> @.str15, i32 0, i32 0), %struct.string___XUB* @C.164.1642 )
> +			to label %bb187 unwind label %lpad252
> +
> +bb187:		; preds = %invcont170, %bb172
> +	%30 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 1, i32 0		; <i32*> [#uses=1]
> +	%31 = load i32* %30, align 8		; <i32> [#uses=1]
> +	%32 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 1, i32 1		; <i32*> [#uses=1]
> +	%33 = load i32* %32, align 4		; <i32> [#uses=1]
> +	invoke void @system__secondary_stack__ss_release( i32 %31, i32 %33 )
> +			to label %bb193 unwind label %lpad228
> +
> +bb193:		; preds = %bb187
> +	%34 = invoke %struct.ada__text_io__text_afcb*  
> @ada__text_io__delete( %struct.ada__text_io__text_afcb* %17 )
> +			to label %invcont194 unwind label %lpad268		; < 
> %struct.ada__text_io__text_afcb*> [#uses=0]
> +
> +invcont194:		; preds = %bb193
> +	%35 = invoke %struct.ada__text_io__text_afcb*  
> @ada__text_io__delete( %struct.ada__text_io__text_afcb* %25 )
> +			to label %bb221 unwind label %lpad268		; < 
> %struct.ada__text_io__text_afcb*> [#uses=0]
> +
> +bb196:		; preds = %lpad268
> +	call void @__gnat_begin_handler( i8* %eh_ptr269 ) nounwind
> +	%36 = load void ()** @system__soft_links__abort_undefer, align  
> 4		; <void ()*> [#uses=1]
> +	invoke void %36( )
> +			to label %bb203 unwind label %lpad276
> +
> +bb203:		; preds = %bb196
> +	invoke void @__gnat_end_handler( i8* %eh_ptr269 )
> +			to label %bb221 unwind label %lpad272
> +
> +bb205:		; preds = %ppad304
> +	call void @__gnat_begin_handler( i8* %eh_exception.1 ) nounwind
> +	%37 = load void ()** @system__soft_links__abort_undefer, align  
> 4		; <void ()*> [#uses=1]
> +	invoke void %37( )
> +			to label %bb212 unwind label %lpad284
> +
> +bb212:		; preds = %bb205
> +	invoke void @__gnat_end_handler( i8* %eh_exception.1 )
> +			to label %bb221 unwind label %lpad280
> +
> +bb221:		; preds = %invcont194, %bb212, %bb203
> +	%38 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 3, i32 0		; <i32*> [#uses=1]
> +	%39 = load i32* %38, align 8		; <i32> [#uses=1]
> +	%40 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 3, i32 1		; <i32*> [#uses=1]
> +	%41 = load i32* %40, align 4		; <i32> [#uses=1]
> +	call void @system__secondary_stack__ss_release( i32 %39, i32 %41 )
> +	call void @report__result( )
> +	ret void
> +
> +lpad:		; preds = %bb
> +	%eh_ptr = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%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 )		;  
> <i32> [#uses=0]
> +	br label %ppad
> +
> +lpad228:		; preds = %bb187, %ppad294, %invcont88, %invcont87,  
> %invcont78, %bb73, %ppad288, %invcont26, %bb11
> +	%eh_ptr229 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%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 )		; <i32> [#uses=1]
> +	br label %ppad304
> +
> +lpad232:		; preds = %invcont17, %invcont12
> +	%eh_ptr233 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=6]
> +	%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 )		; <i32> [#uses=3]
> +	%eh_typeid = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr  
> (%struct.exception* @ada__io_exceptions__use_error, i32 0, i32  
> 0) )		; <i32> [#uses=1]
> +	%42 = icmp eq i32 %eh_select235, %eh_typeid		; <i1> [#uses=1]
> +	br i1 %42, label %bb32, label %ppad291
> +
> +lpad236:		; preds = %lpad240
> +	%eh_ptr237 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%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 )		; <i32> [#uses=1]
> +	br label %ppad288
> +
> +lpad240:		; preds = %invcont38, %invcont33, %bb32
> +	%eh_ptr241 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%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 )		; <i32> [#uses=1]
> +	invoke void @__gnat_end_handler( i8* %eh_ptr233 )
> +			to label %ppad288 unwind label %lpad236
> +
> +lpad244:		; preds = %lpad248
> +	%eh_ptr245 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%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 )		; <i32> [#uses=1]
> +	br label %ppad288
> +
> +lpad248:		; preds = %invcont54, %invcont49, %bb47
> +	%eh_ptr249 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%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 )		; <i32> [#uses=1]
> +	invoke void @__gnat_end_handler( i8* %eh_ptr233 )
> +			to label %ppad288 unwind label %lpad244
> +
> +lpad252:		; preds = %bb94, %invcont89, %invcont160, %bb169, %bb172,  
> %bb163, %invcont151, %invcont146, %invcont145, %invcont144, %bb143,  
> %ppad295, %invcont111, %invcont96, %invcont95
> +	%eh_ptr253 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%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 )		; <i32> [#uses=1]
> +	br label %ppad294
> +
> +lpad256:		; preds = %invcont102, %invcont97
> +	%eh_ptr257 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=4]
> +	%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 )		; <i32> [#uses=2]
> +	%eh_typeid297 = call i32 @llvm.eh.typeid.for.i32( i8*  
> getelementptr (%struct.exception* @ada__io_exceptions__use_error,  
> i32 0, i32 0) )		; <i32> [#uses=1]
> +	%43 = icmp eq i32 %eh_select259, %eh_typeid297		; <i1> [#uses=1]
> +	br i1 %43, label %bb117, label %ppad295
> +
> +lpad260:		; preds = %lpad264
> +	%eh_ptr261 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%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 )		; <i32> [#uses=1]
> +	br label %ppad295
> +
> +lpad264:		; preds = %invcont124, %invcont119, %bb117
> +	%eh_ptr265 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%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 )		; <i32> [#uses=1]
> +	invoke void @__gnat_end_handler( i8* %eh_ptr257 )
> +			to label %ppad295 unwind label %lpad260
> +
> +lpad268:		; preds = %invcont194, %bb193
> +	%eh_ptr269 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=5]
> +	%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 )		; <i32> [#uses=2]
> +	%eh_typeid301 = call i32 @llvm.eh.typeid.for.i32( i8*  
> getelementptr (%struct.exception* @ada__io_exceptions__use_error,  
> i32 0, i32 0) )		; <i32> [#uses=1]
> +	%44 = icmp eq i32 %eh_select271, %eh_typeid301		; <i1> [#uses=1]
> +	br i1 %44, label %bb196, label %ppad304
> +
> +lpad272:		; preds = %bb203, %lpad276
> +	%eh_ptr273 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%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 )		; <i32> [#uses=1]
> +	br label %ppad304
> +
> +lpad276:		; preds = %bb196
> +	%eh_ptr277 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%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 )		; <i32> [#uses=1]
> +	invoke void @__gnat_end_handler( i8* %eh_ptr269 )
> +			to label %ppad304 unwind label %lpad272
> +
> +lpad280:		; preds = %bb212, %lpad284
> +	%eh_ptr281 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%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 )		;  
> <i32> [#uses=0]
> +	br label %ppad
> +
> +lpad284:		; preds = %bb205
> +	%eh_ptr285 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%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 )		;  
> <i32> [#uses=0]
> +	invoke void @__gnat_end_handler( i8* %eh_exception.1 )
> +			to label %ppad unwind label %lpad280
> +
> +ppad:		; preds = %lpad284, %ppad304, %lpad280, %lpad
> +	%eh_exception.2 = phi i8* [ %eh_exception.1, %ppad304 ],  
> [ %eh_ptr281, %lpad280 ], [ %eh_ptr, %lpad ], [ %eh_ptr285,  
> %lpad284 ]		; <i8*> [#uses=1]
> +	%45 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 3, i32 0		; <i32*> [#uses=1]
> +	%46 = load i32* %45, align 8		; <i32> [#uses=1]
> +	%47 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 3, i32 1		; <i32*> [#uses=1]
> +	%48 = load i32* %47, align 4		; <i32> [#uses=1]
> +	call void @system__secondary_stack__ss_release( i32 %46, i32 %48 )
> +	%49 = call i32 (...)* @_Unwind_Resume( i8* %eh_exception.2 )		;  
> <i32> [#uses=0]
> +	unreachable
> +
> +ppad288:		; preds = %lpad248, %lpad240, %ppad291, %lpad244, %lpad236
> +	%eh_exception.0 = phi i8* [ %eh_ptr233, %ppad291 ], [ %eh_ptr245,  
> %lpad244 ], [ %eh_ptr237, %lpad236 ], [ %eh_ptr241, %lpad240 ],  
> [ %eh_ptr249, %lpad248 ]		; <i8*> [#uses=1]
> +	%eh_selector.0 = phi i32 [ %eh_select235, %ppad291 ],  
> [ %eh_select247, %lpad244 ], [ %eh_select239, %lpad236 ],  
> [ %eh_select243, %lpad240 ], [ %eh_select251, %lpad248 ]		; <i32>  
> [#uses=1]
> +	%50 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 2, i32 0		; <i32*> [#uses=1]
> +	%51 = load i32* %50, align 8		; <i32> [#uses=1]
> +	%52 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 2, i32 1		; <i32*> [#uses=1]
> +	%53 = load i32* %52, align 4		; <i32> [#uses=1]
> +	invoke void @system__secondary_stack__ss_release( i32 %51, i32 %53 )
> +			to label %ppad304 unwind label %lpad228
> +
> +ppad291:		; preds = %lpad232
> +	%eh_typeid292 = call i32 @llvm.eh.typeid.for.i32( i8*  
> getelementptr (%struct.exception* @ada__io_exceptions__name_error,  
> i32 0, i32 0) )		; <i32> [#uses=1]
> +	%54 = icmp eq i32 %eh_select235, %eh_typeid292		; <i1> [#uses=1]
> +	br i1 %54, label %bb47, label %ppad288
> +
> +ppad294:		; preds = %ppad295, %lpad252
> +	%eh_exception.4 = phi i8* [ %eh_ptr253, %lpad252 ],  
> [ %eh_exception.3, %ppad295 ]		; <i8*> [#uses=1]
> +	%eh_selector.4 = phi i32 [ %eh_select255, %lpad252 ],  
> [ %eh_selector.3, %ppad295 ]		; <i32> [#uses=1]
> +	%55 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 1, i32 0		; <i32*> [#uses=1]
> +	%56 = load i32* %55, align 8		; <i32> [#uses=1]
> +	%57 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 1, i32 1		; <i32*> [#uses=1]
> +	%58 = load i32* %57, align 4		; <i32> [#uses=1]
> +	invoke void @system__secondary_stack__ss_release( i32 %56, i32 %58 )
> +			to label %ppad304 unwind label %lpad228
> +
> +ppad295:		; preds = %lpad264, %lpad256, %lpad260
> +	%eh_exception.3 = phi i8* [ %eh_ptr257, %lpad256 ], [ %eh_ptr261,  
> %lpad260 ], [ %eh_ptr265, %lpad264 ]		; <i8*> [#uses=1]
> +	%eh_selector.3 = phi i32 [ %eh_select259, %lpad256 ],  
> [ %eh_select263, %lpad260 ], [ %eh_select267, %lpad264 ]		; <i32>  
> [#uses=1]
> +	%59 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 0, i32 0		; <i32*> [#uses=1]
> +	%60 = load i32* %59, align 8		; <i32> [#uses=1]
> +	%61 = getelementptr %struct.FRAME.ce3806g* %FRAME.356, i32 0, i32  
> 0, i32 1		; <i32*> [#uses=1]
> +	%62 = load i32* %61, align 4		; <i32> [#uses=1]
> +	invoke void @system__secondary_stack__ss_release( i32 %60, i32 %62 )
> +			to label %ppad294 unwind label %lpad252
> +
> +ppad304:		; preds = %lpad276, %ppad294, %ppad288, %lpad268,  
> %lpad272, %lpad228
> +	%eh_exception.1 = phi i8* [ %eh_ptr229, %lpad228 ], [ %eh_ptr269,  
> %lpad268 ], [ %eh_ptr273, %lpad272 ], [ %eh_exception.0, %ppad288 ],  
> [ %eh_exception.4, %ppad294 ], [ %eh_ptr277, %lpad276 ]		; <i8*>  
> [#uses=4]
> +	%eh_selector.1 = phi i32 [ %eh_select231, %lpad228 ],  
> [ %eh_select271, %lpad268 ], [ %eh_select275, %lpad272 ],  
> [ %eh_selector.0, %ppad288 ], [ %eh_selector.4, %ppad294 ],  
> [ %eh_select279, %lpad276 ]		; <i32> [#uses=1]
> +	%eh_typeid305 = call i32 @llvm.eh.typeid.for.i32( i8*  
> getelementptr (%struct.exception* @incomplete.1177, i32 0, i32  
> 0) )		; <i32> [#uses=1]
> +	%63 = icmp eq i32 %eh_selector.1, %eh_typeid305		; <i1> [#uses=1]
> +	br i1 %63, label %bb205, label %ppad
> +}
> +
> +define internal fastcc i8 @ce3806g__fxio__get. 
> 1137(%struct.ada__text_io__text_afcb* %file) signext {
> +entry:
> +	%0 = invoke x86_fp80  
> @ada__text_io__float_aux__get( %struct.ada__text_io__text_afcb*  
> %file, i32 0 )
> +			to label %invcont unwind label %lpad		; <x86_fp80> [#uses=5]
> +
> +invcont:		; preds = %entry
> +	%1 = fcmp ult x86_fp80 %0, 0xKFFFEFFFFFFFFFFFFFFFF		; <i1> [#uses=1]
> +	%2 = fcmp ugt x86_fp80 %0, 0xK7FFEFFFFFFFFFFFFFFFF		; <i1> [#uses=1]
> +	%or.cond = or i1 %1, %2		; <i1> [#uses=1]
> +	br i1 %or.cond, label %bb2, label %bb4
> +
> +bb2:		; preds = %invcont
> +	invoke void @__gnat_rcheck_12( i8* getelementptr ([12 x i8]*  
> @.str, i32 0, i32 0), i32 1 ) noreturn
> +			to label %invcont3 unwind label %lpad
> +
> +invcont3:		; preds = %bb2
> +	unreachable
> +
> +bb4:		; preds = %invcont
> +	%3 = mul x86_fp80 %0, 0xK40008000000000000000		; <x86_fp80>  
> [#uses=1]
> +	%4 = fcmp ult x86_fp80 %3, 0xKC0068000000000000000		; <i1> [#uses=1]
> +	br i1 %4, label %bb8, label %bb6
> +
> +bb6:		; preds = %bb4
> +	%5 = mul x86_fp80 %0, 0xK40008000000000000000		; <x86_fp80>  
> [#uses=1]
> +	%6 = fcmp ugt x86_fp80 %5, 0xK4005FE00000000000000		; <i1> [#uses=1]
> +	br i1 %6, label %bb8, label %bb10
> +
> +bb8:		; preds = %bb4, %bb6
> +	invoke void @__gnat_rcheck_10( i8* getelementptr ([14 x i8]*  
> @.str1, i32 0, i32 0), i32 324 ) noreturn
> +			to label %invcont9 unwind label %lpad
> +
> +invcont9:		; preds = %bb8
> +	unreachable
> +
> +bb10:		; preds = %bb6
> +	%7 = mul x86_fp80 %0, 0xK40008000000000000000		; <x86_fp80>  
> [#uses=3]
> +	%8 = fcmp ult x86_fp80 %7, 0xK00000000000000000000		; <i1> [#uses=1]
> +	br i1 %8, label %bb13, label %bb12
> +
> +bb12:		; preds = %bb10
> +	%9 = add x86_fp80 %7, 0xK3FFDFFFFFFFFFFFFFFFF		; <x86_fp80>  
> [#uses=1]
> +	br label %bb14
> +
> +bb13:		; preds = %bb10
> +	%10 = sub x86_fp80 %7, 0xK3FFDFFFFFFFFFFFFFFFF		; <x86_fp80>  
> [#uses=1]
> +	br label %bb14
> +
> +bb14:		; preds = %bb13, %bb12
> +	%iftmp.339.0.in = phi x86_fp80 [ %10, %bb13 ], [ %9, %bb12 ]		;  
> <x86_fp80> [#uses=1]
> +	%iftmp.339.0 = fptosi x86_fp80 %iftmp.339.0.in to i8		; <i8>  
> [#uses=3]
> +	%11 = add i8 %iftmp.339.0, 20		; <i8> [#uses=1]
> +	%12 = icmp ugt i8 %11, 40		; <i1> [#uses=1]
> +	br i1 %12, label %bb16, label %bb18
> +
> +bb16:		; preds = %bb14
> +	invoke void @__gnat_rcheck_12( i8* getelementptr ([14 x i8]*  
> @.str1, i32 0, i32 0), i32 324 ) noreturn
> +			to label %invcont17 unwind label %lpad
> +
> +invcont17:		; preds = %bb16
> +	unreachable
> +
> +bb18:		; preds = %bb14
> +	%13 = add i8 %iftmp.339.0, 20		; <i8> [#uses=1]
> +	%14 = icmp ugt i8 %13, 40		; <i1> [#uses=1]
> +	br i1 %14, label %bb20, label %bb22
> +
> +bb20:		; preds = %bb18
> +	invoke void @__gnat_rcheck_12( i8* getelementptr ([14 x i8]*  
> @.str1, i32 0, i32 0), i32 324 ) noreturn
> +			to label %invcont21 unwind label %lpad
> +
> +invcont21:		; preds = %bb20
> +	unreachable
> +
> +bb22:		; preds = %bb18
> +	ret i8 %iftmp.339.0
> +
> +bb23:		; preds = %lpad
> +	call void @__gnat_begin_handler( i8* %eh_ptr ) nounwind
> +	%15 = load void ()** @system__soft_links__abort_undefer, align  
> 4		; <void ()*> [#uses=1]
> +	invoke void %15( )
> +			to label %invcont24 unwind label %lpad33
> +
> +invcont24:		; preds = %bb23
> +	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
> +			to label %invcont27 unwind label %lpad33
> +
> +invcont27:		; preds = %invcont24
> +	unreachable
> +
> +lpad:		; preds = %bb20, %bb16, %bb8, %bb2, %entry
> +	%eh_ptr = call i8* @llvm.eh.exception( )		; <i8*> [#uses=4]
> +	%eh_select32 = 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 )		; <i32> [#uses=1]
> +	%eh_typeid = call i32 @llvm.eh.typeid.for.i32( i8* getelementptr  
> (%struct.exception* @constraint_error, i32 0, i32 0) )		; <i32>  
> [#uses=1]
> +	%16 = icmp eq i32 %eh_select32, %eh_typeid		; <i1> [#uses=1]
> +	br i1 %16, label %bb23, label %Unwind
> +
> +lpad33:		; preds = %invcont24, %bb23
> +	%eh_ptr34 = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%eh_select36 = call i32 (i8*, i8*, ...)*  
> @llvm.eh.selector.i32( i8* %eh_ptr34, i8* bitcast (i32 (...)*  
> @__gnat_eh_personality to i8*), i32* @__gnat_all_others_value )		;  
> <i32> [#uses=0]
> +	call void @__gnat_end_handler( i8* %eh_ptr )
> +	br label %Unwind
> +
> +Unwind:		; preds = %lpad, %lpad33
> +	%eh_exception.0 = phi i8* [ %eh_ptr, %lpad ], [ %eh_ptr34,  
> %lpad33 ]		; <i8*> [#uses=1]
> +	%17 = call i32 (...)* @_Unwind_Resume( i8* %eh_exception.0 )		;  
> <i32> [#uses=0]
> +	unreachable
> +}
> +
> +define internal fastcc void @ce3806g__fxio__put. 
> 1149(%struct.ada__text_io__text_afcb* %file) {
> +entry:
> +	%A.301 = alloca %struct.string___XUB		; <%struct.string___XUB*>  
> [#uses=3]
> +	%A.292 = alloca %struct.string___XUB		; <%struct.string___XUB*>  
> [#uses=3]
> +	%0 = call i8* @llvm.stacksave( )		; <i8*> [#uses=1]
> +	%1 = alloca [12 x i8]		; <[12 x i8]*> [#uses=1]
> +	%.sub = getelementptr [12 x i8]* %1, i32 0, i32 0		; <i8*> [#uses=2]
> +	%2 = getelementptr %struct.string___XUB* %A.292, i32 0, i32 0		;  
> <i32*> [#uses=1]
> +	store i32 1, i32* %2, align 8
> +	%3 = getelementptr %struct.string___XUB* %A.292, i32 0, i32 1		;  
> <i32*> [#uses=1]
> +	store i32 12, i32* %3, align 4
> +	%4 = invoke fastcc i32 @ce3806g__fxio__put__4.1215( i8* %.sub,  
> %struct.string___XUB* %A.292, i8 signext -3 )
> +			to label %invcont unwind label %lpad		; <i32> [#uses=1]
> +
> +invcont:		; preds = %entry
> +	%5 = getelementptr %struct.string___XUB* %A.301, i32 0, i32 0		;  
> <i32*> [#uses=1]
> +	store i32 1, i32* %5, align 8
> +	%6 = getelementptr %struct.string___XUB* %A.301, i32 0, i32 1		;  
> <i32*> [#uses=1]
> +	store i32 %4, i32* %6, align 4
> +	invoke void  
> @ada__text_io__generic_aux__put_item 
> ( %struct.ada__text_io__text_afcb* %file, i8* %.sub,  
> %struct.string___XUB* %A.301 )
> +			to label %bb60 unwind label %lpad
> +
> +bb60:		; preds = %invcont
> +	ret void
> +
> +lpad:		; preds = %entry, %invcont
> +	%eh_ptr = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%eh_select62 = call i32 (i8*, i8*, ...)*  
> @llvm.eh.selector.i32( i8* %eh_ptr, i8* bitcast (i32 (...)*  
> @__gnat_eh_personality to i8*), i32* @__gnat_all_others_value )		;  
> <i32> [#uses=0]
> +	call void @llvm.stackrestore( i8* %0 )
> +	%7 = call i32 (...)* @_Unwind_Resume( i8* %eh_ptr )		; <i32>  
> [#uses=0]
> +	unreachable
> +}
> +
> +define internal fastcc void @ce3806g__fxio__put__2.1155() {
> +entry:
> +	%A.266 = alloca %struct.string___XUB		; <%struct.string___XUB*>  
> [#uses=3]
> +	%A.257 = alloca %struct.string___XUB		; <%struct.string___XUB*>  
> [#uses=3]
> +	%0 = call i8* @llvm.stacksave( )		; <i8*> [#uses=1]
> +	%1 = alloca [12 x i8]		; <[12 x i8]*> [#uses=1]
> +	%.sub = getelementptr [12 x i8]* %1, i32 0, i32 0		; <i8*> [#uses=2]
> +	%2 = getelementptr %struct.string___XUB* %A.257, i32 0, i32 0		;  
> <i32*> [#uses=1]
> +	store i32 1, i32* %2, align 8
> +	%3 = getelementptr %struct.string___XUB* %A.257, i32 0, i32 1		;  
> <i32*> [#uses=1]
> +	store i32 12, i32* %3, align 4
> +	%4 = invoke fastcc i32 @ce3806g__fxio__put__4.1215( i8* %.sub,  
> %struct.string___XUB* %A.257, i8 signext -1 )
> +			to label %invcont unwind label %lpad		; <i32> [#uses=1]
> +
> +invcont:		; preds = %entry
> +	%5 = getelementptr %struct.string___XUB* %A.266, i32 0, i32 0		;  
> <i32*> [#uses=1]
> +	store i32 1, i32* %5, align 8
> +	%6 = getelementptr %struct.string___XUB* %A.266, i32 0, i32 1		;  
> <i32*> [#uses=1]
> +	store i32 %4, i32* %6, align 4
> +	%7 = load %struct.ada__text_io__text_afcb**  
> @ada__text_io__current_out, align 4		; < 
> %struct.ada__text_io__text_afcb*> [#uses=1]
> +	invoke void  
> @ada__text_io__generic_aux__put_item 
> ( %struct.ada__text_io__text_afcb* %7, i8* %.sub,  
> %struct.string___XUB* %A.266 )
> +			to label %bb60 unwind label %lpad
> +
> +bb60:		; preds = %invcont
> +	ret void
> +
> +lpad:		; preds = %entry, %invcont
> +	%eh_ptr = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%eh_select62 = call i32 (i8*, i8*, ...)*  
> @llvm.eh.selector.i32( i8* %eh_ptr, i8* bitcast (i32 (...)*  
> @__gnat_eh_personality to i8*), i32* @__gnat_all_others_value )		;  
> <i32> [#uses=0]
> +	call void @llvm.stackrestore( i8* %0 )
> +	%8 = call i32 (...)* @_Unwind_Resume( i8* %eh_ptr )		; <i32>  
> [#uses=0]
> +	unreachable
> +}
> +
> +define internal fastcc i32 @ce3806g__fxio__put__4.1215(i8* %to.0,  
> %struct.string___XUB* %to.1, i8 signext %item) {
> +entry:
> +	%to_addr = alloca %struct.system__file_control_block__pstring		; < 
> %struct.system__file_control_block__pstring*> [#uses=4]
> +	%FRAME.358 = alloca %struct.FRAME.ce3806g__fxio__put__4		; < 
> %struct.FRAME.ce3806g__fxio__put__4*> [#uses=65]
> +	%0 = getelementptr %struct.system__file_control_block__pstring*  
> %to_addr, i32 0, i32 0		; <i8**> [#uses=1]
> +	store i8* %to.0, i8** %0, align 8
> +	%1 = getelementptr %struct.system__file_control_block__pstring*  
> %to_addr, i32 0, i32 1		; <%struct.string___XUB**> [#uses=1]
> +	store %struct.string___XUB* %to.1, %struct.string___XUB** %1
> +	%2 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	store %struct.system__file_control_block__pstring* %to_addr,  
> %struct.system__file_control_block__pstring** %2, align 4
> +	%3 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 0		; <i32*> [#uses=1]
> +	store i32 3, i32* %3, align 8
> +	%4 = getelementptr %struct.system__file_control_block__pstring*  
> %to_addr, i32 0, i32 1		; <%struct.string___XUB**> [#uses=1]
> +	%5 = load %struct.string___XUB** %4, align 4		; < 
> %struct.string___XUB*> [#uses=1]
> +	%6 = getelementptr %struct.string___XUB* %5, i32 0, i32 0		;  
> <i32*> [#uses=1]
> +	%7 = load i32* %6, align 4		; <i32> [#uses=1]
> +	%8 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 2		; <i32*> [#uses=1]
> +	store i32 %7, i32* %8, align 8
> +	%9 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 2		; <i32*> [#uses=1]
> +	%10 = load i32* %9, align 8		; <i32> [#uses=1]
> +	%11 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 4		; <i32*> [#uses=1]
> +	store i32 %10, i32* %11, align 8
> +	%item.lobit = lshr i8 %item, 7		; <i8> [#uses=1]
> +	%12 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 6		; <i8*> [#uses=1]
> +	store i8 %item.lobit, i8* %12, align 8
> +	%13 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 2		; <i32*> [#uses=1]
> +	%14 = load i32* %13, align 8		; <i32> [#uses=1]
> +	%15 = add i32 %14, -1		; <i32> [#uses=1]
> +	%16 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %15, i32* %16, align 4
> +	%17 = sext i8 %item to i64		; <i64> [#uses=1]
> +	%18 = call i64 @system__exn_lli__exn_long_long_integer( i64 10,  
> i32 1 ) readnone		; <i64> [#uses=1]
> +	%19 = sub i64 0, %18		; <i64> [#uses=1]
> +	%20 = call i64 @system__exn_lli__exn_long_long_integer( i64 10,  
> i32 0 ) readnone		; <i64> [#uses=1]
> +	%21 = mul i64 %20, -2		; <i64> [#uses=1]
> +	call fastcc void  
> @ce3806g__fxio__put__put_scaled__4.1346 
> ( %struct.FRAME.ce3806g__fxio__put__4* %FRAME.358, i64 %17, i64 %19,  
> i64 %21, i32 0, i32 -1 )
> +	%22 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%23 = load i32* %22, align 4		; <i32> [#uses=1]
> +	%24 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 2		; <i32*> [#uses=1]
> +	%25 = load i32* %24, align 8		; <i32> [#uses=1]
> +	%26 = icmp slt i32 %23, %25		; <i1> [#uses=1]
> +	br i1 %26, label %bb71, label %bb72
> +
> +bb71:		; preds = %entry
> +	%27 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 1		; <i32*> [#uses=1]
> +	store i32 0, i32* %27, align 4
> +	br label %bb72
> +
> +bb72:		; preds = %entry, %bb102, %bb71
> +	%28 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 1		; <i32*> [#uses=1]
> +	%29 = load i32* %28, align 4		; <i32> [#uses=1]
> +	%30 = icmp slt i32 %29, -1		; <i1> [#uses=1]
> +	%31 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%32 = load i32* %31, align 4		; <i32> [#uses=2]
> +	br i1 %30, label %bb103, label %bb74
> +
> +bb74:		; preds = %bb72
> +	%33 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 2		; <i32*> [#uses=1]
> +	%34 = load i32* %33, align 8		; <i32> [#uses=1]
> +	%35 = add i32 %34, -1		; <i32> [#uses=1]
> +	%36 = icmp eq i32 %32, %35		; <i1> [#uses=1]
> +	%37 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 1		; <i32*> [#uses=1]
> +	%38 = load i32* %37, align 4		; <i32> [#uses=2]
> +	br i1 %36, label %bb76, label %bb98
> +
> +bb76:		; preds = %bb74
> +	%39 = icmp slt i32 %38, 1		; <i1> [#uses=1]
> +	br i1 %39, label %bb80, label %bb102
> +
> +bb80:		; preds = %bb76
> +	%40 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 1		; <i32*> [#uses=1]
> +	%41 = load i32* %40, align 4		; <i32> [#uses=2]
> +	%42 = icmp sgt i32 %41, -1		; <i1> [#uses=1]
> +	%.op = add i32 %41, 2		; <i32> [#uses=1]
> +	%43 = select i1 %42, i32 %.op, i32 2		; <i32> [#uses=1]
> +	%44 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 6		; <i8*> [#uses=1]
> +	%45 = load i8* %44, align 8		; <i8> [#uses=1]
> +	%46 = zext i8 %45 to i32		; <i32> [#uses=1]
> +	%47 = add i32 %43, %46		; <i32> [#uses=2]
> +	%48 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 0		; <i32*> [#uses=1]
> +	%49 = load i32* %48, align 8		; <i32> [#uses=1]
> +	%50 = icmp sgt i32 %47, %49		; <i1> [#uses=1]
> +	br i1 %50, label %bb88, label %bb85
> +
> +bb85:		; preds = %bb80, %bb87
> +	%j.0 = phi i32 [ %68, %bb87 ], [ %47, %bb80 ]		; <i32> [#uses=2]
> +	%51 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%52 = load i32* %51, align 4		; <i32> [#uses=1]
> +	%53 = add i32 %52, 1		; <i32> [#uses=1]
> +	%54 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %53, i32* %54, align 4
> +	%55 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 4		; <i32*> [#uses=1]
> +	%56 = load i32* %55, align 8		; <i32> [#uses=1]
> +	%57 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%58 = load %struct.system__file_control_block__pstring** %57,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%59 = getelementptr %struct.system__file_control_block__pstring*  
> %58, i32 0, i32 0		; <i8**> [#uses=1]
> +	%60 = load i8** %59, align 4		; <i8*> [#uses=1]
> +	%61 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%62 = load i32* %61, align 4		; <i32> [#uses=1]
> +	%63 = sub i32 %62, %56		; <i32> [#uses=1]
> +	%64 = getelementptr i8* %60, i32 %63		; <i8*> [#uses=1]
> +	store i8 32, i8* %64, align 1
> +	%65 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 0		; <i32*> [#uses=1]
> +	%66 = load i32* %65, align 8		; <i32> [#uses=1]
> +	%67 = icmp eq i32 %66, %j.0		; <i1> [#uses=1]
> +	br i1 %67, label %bb88, label %bb87
> +
> +bb87:		; preds = %bb85
> +	%68 = add i32 %j.0, 1		; <i32> [#uses=1]
> +	br label %bb85
> +
> +bb88:		; preds = %bb80, %bb85
> +	%69 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 6		; <i8*> [#uses=1]
> +	%70 = load i8* %69, align 8		; <i8> [#uses=1]
> +	%toBool89 = icmp eq i8 %70, 0		; <i1> [#uses=1]
> +	br i1 %toBool89, label %bb91, label %bb90
> +
> +bb90:		; preds = %bb88
> +	%71 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%72 = load i32* %71, align 4		; <i32> [#uses=1]
> +	%73 = add i32 %72, 1		; <i32> [#uses=1]
> +	%74 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %73, i32* %74, align 4
> +	%75 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 4		; <i32*> [#uses=1]
> +	%76 = load i32* %75, align 8		; <i32> [#uses=1]
> +	%77 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%78 = load %struct.system__file_control_block__pstring** %77,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%79 = getelementptr %struct.system__file_control_block__pstring*  
> %78, i32 0, i32 0		; <i8**> [#uses=1]
> +	%80 = load i8** %79, align 4		; <i8*> [#uses=1]
> +	%81 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%82 = load i32* %81, align 4		; <i32> [#uses=1]
> +	%83 = sub i32 %82, %76		; <i32> [#uses=1]
> +	%84 = getelementptr i8* %80, i32 %83		; <i8*> [#uses=1]
> +	store i8 45, i8* %84, align 1
> +	br label %bb91
> +
> +bb91:		; preds = %bb88, %bb90
> +	%85 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 1		; <i32*> [#uses=1]
> +	%86 = load i32* %85, align 4		; <i32> [#uses=1]
> +	%87 = icmp slt i32 %86, 0		; <i1> [#uses=1]
> +	br i1 %87, label %bb93, label %bb97
> +
> +bb93:		; preds = %bb91
> +	%88 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%89 = load i32* %88, align 4		; <i32> [#uses=1]
> +	%90 = add i32 %89, 1		; <i32> [#uses=1]
> +	%91 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %90, i32* %91, align 4
> +	%92 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 4		; <i32*> [#uses=1]
> +	%93 = load i32* %92, align 8		; <i32> [#uses=1]
> +	%94 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%95 = load %struct.system__file_control_block__pstring** %94,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%96 = getelementptr %struct.system__file_control_block__pstring*  
> %95, i32 0, i32 0		; <i8**> [#uses=1]
> +	%97 = load i8** %96, align 4		; <i8*> [#uses=1]
> +	%98 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%99 = load i32* %98, align 4		; <i32> [#uses=1]
> +	%100 = sub i32 %99, %93		; <i32> [#uses=1]
> +	%101 = getelementptr i8* %97, i32 %100		; <i8*> [#uses=1]
> +	store i8 48, i8* %101, align 1
> +	%102 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%103 = load i32* %102, align 4		; <i32> [#uses=1]
> +	%104 = add i32 %103, 1		; <i32> [#uses=1]
> +	%105 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %104, i32* %105, align 4
> +	%106 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 4		; <i32*> [#uses=1]
> +	%107 = load i32* %106, align 8		; <i32> [#uses=1]
> +	%108 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%109 = load %struct.system__file_control_block__pstring** %108,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%110 = getelementptr %struct.system__file_control_block__pstring*  
> %109, i32 0, i32 0		; <i8**> [#uses=1]
> +	%111 = load i8** %110, align 4		; <i8*> [#uses=1]
> +	%112 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%113 = load i32* %112, align 4		; <i32> [#uses=1]
> +	%114 = sub i32 %113, %107		; <i32> [#uses=1]
> +	%115 = getelementptr i8* %111, i32 %114		; <i8*> [#uses=1]
> +	store i8 46, i8* %115, align 1
> +	%116 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 1		; <i32*> [#uses=1]
> +	%117 = load i32* %116, align 4		; <i32> [#uses=1]
> +	br label %bb94
> +
> +bb94:		; preds = %bb96, %bb93
> +	%j8.0 = phi i32 [ %117, %bb93 ], [ %133, %bb96 ]		; <i32> [#uses=2]
> +	%118 = icmp sgt i32 %j8.0, -2		; <i1> [#uses=1]
> +	br i1 %118, label %bb97, label %bb96
> +
> +bb96:		; preds = %bb94
> +	%119 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%120 = load i32* %119, align 4		; <i32> [#uses=1]
> +	%121 = add i32 %120, 1		; <i32> [#uses=1]
> +	%122 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %121, i32* %122, align 4
> +	%123 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 4		; <i32*> [#uses=1]
> +	%124 = load i32* %123, align 8		; <i32> [#uses=1]
> +	%125 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%126 = load %struct.system__file_control_block__pstring** %125,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%127 = getelementptr %struct.system__file_control_block__pstring*  
> %126, i32 0, i32 0		; <i8**> [#uses=1]
> +	%128 = load i8** %127, align 4		; <i8*> [#uses=1]
> +	%129 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%130 = load i32* %129, align 4		; <i32> [#uses=1]
> +	%131 = sub i32 %130, %124		; <i32> [#uses=1]
> +	%132 = getelementptr i8* %128, i32 %131		; <i8*> [#uses=1]
> +	store i8 48, i8* %132, align 1
> +	%133 = add i32 %j8.0, 1		; <i32> [#uses=1]
> +	br label %bb94
> +
> +bb97:		; preds = %bb91, %bb94
> +	%134 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%135 = load i32* %134, align 4		; <i32> [#uses=1]
> +	%136 = add i32 %135, 1		; <i32> [#uses=1]
> +	%137 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %136, i32* %137, align 4
> +	%138 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 4		; <i32*> [#uses=1]
> +	%139 = load i32* %138, align 8		; <i32> [#uses=1]
> +	%140 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%141 = load %struct.system__file_control_block__pstring** %140,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%142 = getelementptr %struct.system__file_control_block__pstring*  
> %141, i32 0, i32 0		; <i8**> [#uses=1]
> +	%143 = load i8** %142, align 4		; <i8*> [#uses=1]
> +	%144 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%145 = load i32* %144, align 4		; <i32> [#uses=1]
> +	%146 = sub i32 %145, %139		; <i32> [#uses=1]
> +	%147 = getelementptr i8* %143, i32 %146		; <i8*> [#uses=1]
> +	store i8 48, i8* %147, align 1
> +	br label %bb102
> +
> +bb98:		; preds = %bb74
> +	%148 = icmp eq i32 %38, -1		; <i1> [#uses=1]
> +	br i1 %148, label %bb100, label %bb101
> +
> +bb100:		; preds = %bb98
> +	%149 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%150 = load i32* %149, align 4		; <i32> [#uses=1]
> +	%151 = add i32 %150, 1		; <i32> [#uses=1]
> +	%152 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %151, i32* %152, align 4
> +	%153 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 4		; <i32*> [#uses=1]
> +	%154 = load i32* %153, align 8		; <i32> [#uses=1]
> +	%155 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%156 = load %struct.system__file_control_block__pstring** %155,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%157 = getelementptr %struct.system__file_control_block__pstring*  
> %156, i32 0, i32 0		; <i8**> [#uses=1]
> +	%158 = load i8** %157, align 4		; <i8*> [#uses=1]
> +	%159 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%160 = load i32* %159, align 4		; <i32> [#uses=1]
> +	%161 = sub i32 %160, %154		; <i32> [#uses=1]
> +	%162 = getelementptr i8* %158, i32 %161		; <i8*> [#uses=1]
> +	store i8 46, i8* %162, align 1
> +	br label %bb101
> +
> +bb101:		; preds = %bb98, %bb100
> +	%163 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%164 = load i32* %163, align 4		; <i32> [#uses=1]
> +	%165 = add i32 %164, 1		; <i32> [#uses=1]
> +	%166 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %165, i32* %166, align 4
> +	%167 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 4		; <i32*> [#uses=1]
> +	%168 = load i32* %167, align 8		; <i32> [#uses=1]
> +	%169 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%170 = load %struct.system__file_control_block__pstring** %169,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%171 = getelementptr %struct.system__file_control_block__pstring*  
> %170, i32 0, i32 0		; <i8**> [#uses=1]
> +	%172 = load i8** %171, align 4		; <i8*> [#uses=1]
> +	%173 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 5		; <i32*> [#uses=1]
> +	%174 = load i32* %173, align 4		; <i32> [#uses=1]
> +	%175 = sub i32 %174, %168		; <i32> [#uses=1]
> +	%176 = getelementptr i8* %172, i32 %175		; <i8*> [#uses=1]
> +	store i8 48, i8* %176, align 1
> +	br label %bb102
> +
> +bb102:		; preds = %bb76, %bb101, %bb97
> +	%177 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 1		; <i32*> [#uses=1]
> +	%178 = load i32* %177, align 4		; <i32> [#uses=1]
> +	%179 = add i32 %178, -1		; <i32> [#uses=1]
> +	%180 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %FRAME. 
> 358, i32 0, i32 1		; <i32*> [#uses=1]
> +	store i32 %179, i32* %180, align 4
> +	br label %bb72
> +
> +bb103:		; preds = %bb72
> +	ret i32 %32
> +}
> +
> +declare x86_fp80  
> @ada__text_io__float_aux__get(%struct.ada__text_io__text_afcb*, i32)
> +
> +declare void @__gnat_rcheck_12(i8*, i32) noreturn
> +
> +declare void @__gnat_rcheck_10(i8*, i32) noreturn
> +
> +declare i8* @llvm.eh.exception() nounwind
> +
> +declare i32 @llvm.eh.selector.i32(i8*, i8*, ...) nounwind
> +
> +declare i32 @llvm.eh.typeid.for.i32(i8*) nounwind
> +
> +declare void @__gnat_begin_handler(i8*) nounwind
> +
> +declare void  
> @__gnat_raise_exception 
> (%struct.system__standard_library__exception_data*, i8*,  
> %struct.string___XUB*) noreturn
> +
> +declare void @__gnat_end_handler(i8*)
> +
> +declare i32 @__gnat_eh_personality(...)
> +
> +declare i32 @_Unwind_Resume(...)
> +
> +define internal fastcc void  
> @ce3806g__fxio__put__put_int64__4.1339 
> (%struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i64 %x, i32  
> %scale) {
> +entry:
> +	%0 = icmp eq i64 %x, 0		; <i1> [#uses=1]
> +	br i1 %0, label %return, label %bb
> +
> +bb:		; preds = %entry
> +	%1 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 1		; <i32*> [#uses=1]
> +	store i32 %scale, i32* %1, align 4
> +	%2 = add i64 %x, 9		; <i64> [#uses=1]
> +	%3 = icmp ugt i64 %2, 18		; <i1> [#uses=1]
> +	br i1 %3, label %bb18, label %bb19
> +
> +bb18:		; preds = %bb
> +	%4 = add i32 %scale, 1		; <i32> [#uses=1]
> +	%5 = sdiv i64 %x, 10		; <i64> [#uses=1]
> +	call fastcc void  
> @ce3806g__fxio__put__put_int64__4.1339 
> ( %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.361, i64 %5, i32 %4 )
> +	br label %bb19
> +
> +bb19:		; preds = %bb, %bb18
> +	%6 = srem i64 %x, 10		; <i64> [#uses=3]
> +	%neg = sub i64 0, %6		; <i64> [#uses=1]
> +	%abscond = icmp sgt i64 %6, -1		; <i1> [#uses=1]
> +	%abs = select i1 %abscond, i64 %6, i64 %neg		; <i64> [#uses=3]
> +	%7 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%8 = load i32* %7, align 4		; <i32> [#uses=1]
> +	%9 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 2		; <i32*> [#uses=1]
> +	%10 = load i32* %9, align 4		; <i32> [#uses=1]
> +	%11 = add i32 %10, -1		; <i32> [#uses=1]
> +	%12 = icmp eq i32 %8, %11		; <i1> [#uses=1]
> +	br i1 %12, label %bb23, label %bb44
> +
> +bb23:		; preds = %bb19
> +	%13 = icmp ne i64 %abs, 0		; <i1> [#uses=1]
> +	%14 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 1		; <i32*> [#uses=1]
> +	%15 = load i32* %14, align 4		; <i32> [#uses=1]
> +	%16 = icmp slt i32 %15, 1		; <i1> [#uses=1]
> +	%17 = or i1 %13, %16		; <i1> [#uses=1]
> +	br i1 %17, label %bb27, label %bb48
> +
> +bb27:		; preds = %bb23
> +	%18 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 1		; <i32*> [#uses=1]
> +	%19 = load i32* %18, align 4		; <i32> [#uses=2]
> +	%20 = icmp sgt i32 %19, -1		; <i1> [#uses=1]
> +	%.op = add i32 %19, 2		; <i32> [#uses=1]
> +	%21 = select i1 %20, i32 %.op, i32 2		; <i32> [#uses=1]
> +	%22 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 6		; <i8*> [#uses=1]
> +	%23 = load i8* %22, align 1		; <i8> [#uses=1]
> +	%24 = zext i8 %23 to i32		; <i32> [#uses=1]
> +	%25 = add i32 %21, %24		; <i32> [#uses=2]
> +	%26 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 0		; <i32*> [#uses=1]
> +	%27 = load i32* %26, align 4		; <i32> [#uses=1]
> +	%28 = icmp sgt i32 %25, %27		; <i1> [#uses=1]
> +	br i1 %28, label %bb34, label %bb31
> +
> +bb31:		; preds = %bb27, %bb33
> +	%j.0 = phi i32 [ %46, %bb33 ], [ %25, %bb27 ]		; <i32> [#uses=2]
> +	%29 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%30 = load i32* %29, align 4		; <i32> [#uses=1]
> +	%31 = add i32 %30, 1		; <i32> [#uses=1]
> +	%32 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %31, i32* %32, align 4
> +	%33 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 4		; <i32*> [#uses=1]
> +	%34 = load i32* %33, align 4		; <i32> [#uses=1]
> +	%35 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%36 = load %struct.system__file_control_block__pstring** %35,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%37 = getelementptr %struct.system__file_control_block__pstring*  
> %36, i32 0, i32 0		; <i8**> [#uses=1]
> +	%38 = load i8** %37, align 4		; <i8*> [#uses=1]
> +	%39 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%40 = load i32* %39, align 4		; <i32> [#uses=1]
> +	%41 = sub i32 %40, %34		; <i32> [#uses=1]
> +	%42 = getelementptr i8* %38, i32 %41		; <i8*> [#uses=1]
> +	store i8 32, i8* %42, align 1
> +	%43 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 0		; <i32*> [#uses=1]
> +	%44 = load i32* %43, align 4		; <i32> [#uses=1]
> +	%45 = icmp eq i32 %44, %j.0		; <i1> [#uses=1]
> +	br i1 %45, label %bb34, label %bb33
> +
> +bb33:		; preds = %bb31
> +	%46 = add i32 %j.0, 1		; <i32> [#uses=1]
> +	br label %bb31
> +
> +bb34:		; preds = %bb27, %bb31
> +	%47 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 6		; <i8*> [#uses=1]
> +	%48 = load i8* %47, align 1		; <i8> [#uses=1]
> +	%toBool35 = icmp eq i8 %48, 0		; <i1> [#uses=1]
> +	br i1 %toBool35, label %bb37, label %bb36
> +
> +bb36:		; preds = %bb34
> +	%49 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%50 = load i32* %49, align 4		; <i32> [#uses=1]
> +	%51 = add i32 %50, 1		; <i32> [#uses=1]
> +	%52 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %51, i32* %52, align 4
> +	%53 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 4		; <i32*> [#uses=1]
> +	%54 = load i32* %53, align 4		; <i32> [#uses=1]
> +	%55 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%56 = load %struct.system__file_control_block__pstring** %55,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%57 = getelementptr %struct.system__file_control_block__pstring*  
> %56, i32 0, i32 0		; <i8**> [#uses=1]
> +	%58 = load i8** %57, align 4		; <i8*> [#uses=1]
> +	%59 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%60 = load i32* %59, align 4		; <i32> [#uses=1]
> +	%61 = sub i32 %60, %54		; <i32> [#uses=1]
> +	%62 = getelementptr i8* %58, i32 %61		; <i8*> [#uses=1]
> +	store i8 45, i8* %62, align 1
> +	br label %bb37
> +
> +bb37:		; preds = %bb34, %bb36
> +	%63 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 1		; <i32*> [#uses=1]
> +	%64 = load i32* %63, align 4		; <i32> [#uses=1]
> +	%65 = icmp slt i32 %64, 0		; <i1> [#uses=1]
> +	br i1 %65, label %bb39, label %bb43
> +
> +bb39:		; preds = %bb37
> +	%66 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%67 = load i32* %66, align 4		; <i32> [#uses=1]
> +	%68 = add i32 %67, 1		; <i32> [#uses=1]
> +	%69 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %68, i32* %69, align 4
> +	%70 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 4		; <i32*> [#uses=1]
> +	%71 = load i32* %70, align 4		; <i32> [#uses=1]
> +	%72 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%73 = load %struct.system__file_control_block__pstring** %72,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%74 = getelementptr %struct.system__file_control_block__pstring*  
> %73, i32 0, i32 0		; <i8**> [#uses=1]
> +	%75 = load i8** %74, align 4		; <i8*> [#uses=1]
> +	%76 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%77 = load i32* %76, align 4		; <i32> [#uses=1]
> +	%78 = sub i32 %77, %71		; <i32> [#uses=1]
> +	%79 = getelementptr i8* %75, i32 %78		; <i8*> [#uses=1]
> +	store i8 48, i8* %79, align 1
> +	%80 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%81 = load i32* %80, align 4		; <i32> [#uses=1]
> +	%82 = add i32 %81, 1		; <i32> [#uses=1]
> +	%83 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %82, i32* %83, align 4
> +	%84 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 4		; <i32*> [#uses=1]
> +	%85 = load i32* %84, align 4		; <i32> [#uses=1]
> +	%86 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%87 = load %struct.system__file_control_block__pstring** %86,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%88 = getelementptr %struct.system__file_control_block__pstring*  
> %87, i32 0, i32 0		; <i8**> [#uses=1]
> +	%89 = load i8** %88, align 4		; <i8*> [#uses=1]
> +	%90 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%91 = load i32* %90, align 4		; <i32> [#uses=1]
> +	%92 = sub i32 %91, %85		; <i32> [#uses=1]
> +	%93 = getelementptr i8* %89, i32 %92		; <i8*> [#uses=1]
> +	store i8 46, i8* %93, align 1
> +	%94 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 1		; <i32*> [#uses=1]
> +	%95 = load i32* %94, align 4		; <i32> [#uses=1]
> +	br label %bb40
> +
> +bb40:		; preds = %bb42, %bb39
> +	%j15.0 = phi i32 [ %95, %bb39 ], [ %111, %bb42 ]		; <i32> [#uses=2]
> +	%96 = icmp sgt i32 %j15.0, -2		; <i1> [#uses=1]
> +	br i1 %96, label %bb43, label %bb42
> +
> +bb42:		; preds = %bb40
> +	%97 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%98 = load i32* %97, align 4		; <i32> [#uses=1]
> +	%99 = add i32 %98, 1		; <i32> [#uses=1]
> +	%100 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %99, i32* %100, align 4
> +	%101 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 4		; <i32*> [#uses=1]
> +	%102 = load i32* %101, align 4		; <i32> [#uses=1]
> +	%103 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%104 = load %struct.system__file_control_block__pstring** %103,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%105 = getelementptr %struct.system__file_control_block__pstring*  
> %104, i32 0, i32 0		; <i8**> [#uses=1]
> +	%106 = load i8** %105, align 4		; <i8*> [#uses=1]
> +	%107 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%108 = load i32* %107, align 4		; <i32> [#uses=1]
> +	%109 = sub i32 %108, %102		; <i32> [#uses=1]
> +	%110 = getelementptr i8* %106, i32 %109		; <i8*> [#uses=1]
> +	store i8 48, i8* %110, align 1
> +	%111 = add i32 %j15.0, 1		; <i32> [#uses=1]
> +	br label %bb40
> +
> +bb43:		; preds = %bb37, %bb40
> +	%112 = trunc i64 %abs to i32		; <i32> [#uses=1]
> +	%113 = getelementptr [10 x i8]* @.str3, i32 0, i32 %112		; <i8*>  
> [#uses=1]
> +	%114 = load i8* %113, align 1		; <i8> [#uses=1]
> +	%115 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%116 = load i32* %115, align 4		; <i32> [#uses=1]
> +	%117 = add i32 %116, 1		; <i32> [#uses=1]
> +	%118 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %117, i32* %118, align 4
> +	%119 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 4		; <i32*> [#uses=1]
> +	%120 = load i32* %119, align 4		; <i32> [#uses=1]
> +	%121 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%122 = load %struct.system__file_control_block__pstring** %121,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%123 = getelementptr %struct.system__file_control_block__pstring*  
> %122, i32 0, i32 0		; <i8**> [#uses=1]
> +	%124 = load i8** %123, align 4		; <i8*> [#uses=1]
> +	%125 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%126 = load i32* %125, align 4		; <i32> [#uses=1]
> +	%127 = sub i32 %126, %120		; <i32> [#uses=1]
> +	%128 = getelementptr i8* %124, i32 %127		; <i8*> [#uses=1]
> +	store i8 %114, i8* %128, align 1
> +	br label %bb48
> +
> +bb44:		; preds = %bb19
> +	%129 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 1		; <i32*> [#uses=1]
> +	%130 = load i32* %129, align 4		; <i32> [#uses=1]
> +	%131 = icmp eq i32 %130, -1		; <i1> [#uses=1]
> +	br i1 %131, label %bb46, label %bb47
> +
> +bb46:		; preds = %bb44
> +	%132 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%133 = load i32* %132, align 4		; <i32> [#uses=1]
> +	%134 = add i32 %133, 1		; <i32> [#uses=1]
> +	%135 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %134, i32* %135, align 4
> +	%136 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 4		; <i32*> [#uses=1]
> +	%137 = load i32* %136, align 4		; <i32> [#uses=1]
> +	%138 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%139 = load %struct.system__file_control_block__pstring** %138,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%140 = getelementptr %struct.system__file_control_block__pstring*  
> %139, i32 0, i32 0		; <i8**> [#uses=1]
> +	%141 = load i8** %140, align 4		; <i8*> [#uses=1]
> +	%142 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%143 = load i32* %142, align 4		; <i32> [#uses=1]
> +	%144 = sub i32 %143, %137		; <i32> [#uses=1]
> +	%145 = getelementptr i8* %141, i32 %144		; <i8*> [#uses=1]
> +	store i8 46, i8* %145, align 1
> +	br label %bb47
> +
> +bb47:		; preds = %bb44, %bb46
> +	%146 = trunc i64 %abs to i32		; <i32> [#uses=1]
> +	%147 = getelementptr [10 x i8]* @.str3, i32 0, i32 %146		; <i8*>  
> [#uses=1]
> +	%148 = load i8* %147, align 1		; <i8> [#uses=1]
> +	%149 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%150 = load i32* %149, align 4		; <i32> [#uses=1]
> +	%151 = add i32 %150, 1		; <i32> [#uses=1]
> +	%152 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	store i32 %151, i32* %152, align 4
> +	%153 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 4		; <i32*> [#uses=1]
> +	%154 = load i32* %153, align 4		; <i32> [#uses=1]
> +	%155 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 3		; <%struct.system__file_control_block__pstring**>  
> [#uses=1]
> +	%156 = load %struct.system__file_control_block__pstring** %155,  
> align 4		; <%struct.system__file_control_block__pstring*> [#uses=1]
> +	%157 = getelementptr %struct.system__file_control_block__pstring*  
> %156, i32 0, i32 0		; <i8**> [#uses=1]
> +	%158 = load i8** %157, align 4		; <i8*> [#uses=1]
> +	%159 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 5		; <i32*> [#uses=1]
> +	%160 = load i32* %159, align 4		; <i32> [#uses=1]
> +	%161 = sub i32 %160, %154		; <i32> [#uses=1]
> +	%162 = getelementptr i8* %158, i32 %161		; <i8*> [#uses=1]
> +	store i8 %148, i8* %162, align 1
> +	br label %bb48
> +
> +bb48:		; preds = %bb23, %bb47, %bb43
> +	%163 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 1		; <i32*> [#uses=1]
> +	%164 = load i32* %163, align 4		; <i32> [#uses=1]
> +	%165 = add i32 %164, -1		; <i32> [#uses=1]
> +	%166 = getelementptr %struct.FRAME.ce3806g__fxio__put__4* %CHAIN. 
> 361, i32 0, i32 1		; <i32*> [#uses=1]
> +	store i32 %165, i32* %166, align 4
> +	ret void
> +
> +return:		; preds = %entry
> +	ret void
> +}
> +
> +define internal fastcc void  
> @ce3806g__fxio__put__put_scaled__4.1346 
> (%struct.FRAME.ce3806g__fxio__put__4* %CHAIN.365, i64 %x, i64 %y,  
> i64 %z, i32 %a, i32 %e) {
> +entry:
> +	%0 = alloca { i64, i64 }		; <{ i64, i64 }*> [#uses=3]
> +	%1 = call i8* @llvm.stacksave( )		; <i8*> [#uses=1]
> +	%2 = add i32 %a, 17		; <i32> [#uses=2]
> +	%3 = sdiv i32 %2, 18		; <i32> [#uses=3]
> +	%4 = add i32 %3, 1		; <i32> [#uses=7]
> +	%5 = icmp sgt i32 %4, -1		; <i1> [#uses=1]
> +	%max53 = select i1 %5, i32 %4, i32 0		; <i32> [#uses=1]
> +	%6 = alloca i64, i32 %max53		; <i64*> [#uses=21]
> +	%7 = icmp sgt i32 %4, 0		; <i1> [#uses=1]
> +	br i1 %7, label %bb55, label %bb58
> +
> +bb55:		; preds = %entry, %bb57
> +	%J60b.0 = phi i32 [ %11, %bb57 ], [ 1, %entry ]		; <i32> [#uses=3]
> +	%8 = add i32 %J60b.0, -1		; <i32> [#uses=1]
> +	%9 = getelementptr i64* %6, i32 %8		; <i64*> [#uses=1]
> +	store i64 0, i64* %9, align 8
> +	%10 = icmp eq i32 %4, %J60b.0		; <i1> [#uses=1]
> +	br i1 %10, label %bb58, label %bb57
> +
> +bb57:		; preds = %bb55
> +	%11 = add i32 %J60b.0, 1		; <i32> [#uses=1]
> +	br label %bb55
> +
> +bb58:		; preds = %entry, %bb55
> +	%12 = icmp sgt i32 %4, 0		; <i1> [#uses=1]
> +	br i1 %12, label %bb61, label %bb91
> +
> +bb61:		; preds = %bb58, %bb90
> +	%j2.0 = phi i32 [ %88, %bb90 ], [ 1, %bb58 ]		; <i32> [#uses=11]
> +	%aa.0 = phi i32 [ %86, %bb90 ], [ %a, %bb58 ]		; <i32> [#uses=6]
> +	%yy.0 = phi i64 [ %84, %bb90 ], [ %y, %bb58 ]		; <i64> [#uses=3]
> +	%xx.0 = phi i64 [ %21, %bb90 ], [ %x, %bb58 ]		; <i64> [#uses=2]
> +	%13 = icmp eq i64 %xx.0, 0		; <i1> [#uses=1]
> +	br i1 %13, label %bb91, label %bb63
> +
> +bb63:		; preds = %bb61
> +	%14 = icmp eq i32 %aa.0, 0		; <i1> [#uses=1]
> +	%15 = zext i1 %14 to i8		; <i8> [#uses=1]
> +	invoke void @system__arith_64__scaled_divide( { i64, i64 }*  
> noalias sret %0, i64 %xx.0, i64 %yy.0, i64 %z, i8 %15 )
> +			to label %invcont unwind label %lpad
> +
> +invcont:		; preds = %bb63
> +	%16 = getelementptr { i64, i64 }* %0, i32 0, i32 0		; <i64*>  
> [#uses=1]
> +	%17 = load i64* %16, align 8		; <i64> [#uses=1]
> +	%18 = add i32 %j2.0, -1		; <i32> [#uses=1]
> +	%19 = getelementptr i64* %6, i32 %18		; <i64*> [#uses=1]
> +	store i64 %17, i64* %19, align 8
> +	%20 = getelementptr { i64, i64 }* %0, i32 0, i32 1		; <i64*>  
> [#uses=1]
> +	%21 = load i64* %20, align 8		; <i64> [#uses=1]
> +	%22 = add i32 %j2.0, -1		; <i32> [#uses=1]
> +	%23 = getelementptr i64* %6, i32 %22		; <i64*> [#uses=1]
> +	%24 = load i64* %23, align 8		; <i64> [#uses=1]
> +	%25 = icmp eq i64 %24, %yy.0		; <i1> [#uses=1]
> +	%26 = add i32 %j2.0, -1		; <i32> [#uses=1]
> +	%27 = getelementptr i64* %6, i32 %26		; <i64*> [#uses=1]
> +	%28 = load i64* %27, align 8		; <i64> [#uses=1]
> +	%29 = sub i64 0, %28		; <i64> [#uses=1]
> +	%30 = icmp eq i64 %yy.0, %29		; <i1> [#uses=1]
> +	%31 = or i1 %25, %30		; <i1> [#uses=1]
> +	%32 = icmp sgt i32 %j2.0, 1		; <i1> [#uses=1]
> +	%or.cond = and i1 %31, %32		; <i1> [#uses=1]
> +	br i1 %or.cond, label %bb69, label %bb83
> +
> +bb69:		; preds = %invcont
> +	%33 = add i32 %j2.0, -1		; <i32> [#uses=1]
> +	%34 = getelementptr i64* %6, i32 %33		; <i64*> [#uses=1]
> +	%35 = load i64* %34, align 8		; <i64> [#uses=1]
> +	%36 = icmp slt i64 %35, 0		; <i1> [#uses=1]
> +	%37 = add i32 %j2.0, -2		; <i32> [#uses=1]
> +	%38 = getelementptr i64* %6, i32 %37		; <i64*> [#uses=1]
> +	%39 = load i64* %38, align 8		; <i64> [#uses=2]
> +	br i1 %36, label %bb71, label %bb72
> +
> +bb71:		; preds = %bb69
> +	%40 = add i64 %39, 1		; <i64> [#uses=1]
> +	%41 = add i32 %j2.0, -2		; <i32> [#uses=1]
> +	%42 = getelementptr i64* %6, i32 %41		; <i64*> [#uses=1]
> +	store i64 %40, i64* %42, align 8
> +	br label %bb73
> +
> +bb72:		; preds = %bb69
> +	%43 = add i64 %39, -1		; <i64> [#uses=1]
> +	%44 = add i32 %j2.0, -2		; <i32> [#uses=1]
> +	%45 = getelementptr i64* %6, i32 %44		; <i64*> [#uses=1]
> +	store i64 %43, i64* %45, align 8
> +	br label %bb73
> +
> +bb73:		; preds = %bb72, %bb71
> +	%46 = add i32 %j2.0, -1		; <i32> [#uses=1]
> +	%47 = getelementptr i64* %6, i32 %46		; <i64*> [#uses=1]
> +	store i64 0, i64* %47, align 8
> +	br label %bb74
> +
> +bb74:		; preds = %bb82, %bb73
> +	%j1.0 = phi i32 [ %4, %bb73 ], [ %81, %bb82 ]		; <i32> [#uses=12]
> +	%48 = icmp slt i32 %j1.0, 2		; <i1> [#uses=1]
> +	br i1 %48, label %bb83, label %bb76
> +
> +bb76:		; preds = %bb74
> +	%49 = add i32 %j1.0, -1		; <i32> [#uses=1]
> +	%50 = getelementptr i64* %6, i32 %49		; <i64*> [#uses=1]
> +	%51 = load i64* %50, align 8		; <i64> [#uses=1]
> +	%52 = icmp sgt i64 %51, 999999999999999999		; <i1> [#uses=1]
> +	br i1 %52, label %bb78, label %bb79
> +
> +bb78:		; preds = %bb76
> +	%53 = add i32 %j1.0, -2		; <i32> [#uses=1]
> +	%54 = getelementptr i64* %6, i32 %53		; <i64*> [#uses=1]
> +	%55 = load i64* %54, align 8		; <i64> [#uses=1]
> +	%56 = add i64 %55, 1		; <i64> [#uses=1]
> +	%57 = add i32 %j1.0, -2		; <i32> [#uses=1]
> +	%58 = getelementptr i64* %6, i32 %57		; <i64*> [#uses=1]
> +	store i64 %56, i64* %58, align 8
> +	%59 = add i32 %j1.0, -1		; <i32> [#uses=1]
> +	%60 = getelementptr i64* %6, i32 %59		; <i64*> [#uses=1]
> +	%61 = load i64* %60, align 8		; <i64> [#uses=1]
> +	%62 = add i64 %61, -1000000000000000000		; <i64> [#uses=1]
> +	%63 = add i32 %j1.0, -1		; <i32> [#uses=1]
> +	%64 = getelementptr i64* %6, i32 %63		; <i64*> [#uses=1]
> +	store i64 %62, i64* %64, align 8
> +	br label %bb82
> +
> +bb79:		; preds = %bb76
> +	%65 = add i32 %j1.0, -1		; <i32> [#uses=1]
> +	%66 = getelementptr i64* %6, i32 %65		; <i64*> [#uses=1]
> +	%67 = load i64* %66, align 8		; <i64> [#uses=1]
> +	%68 = icmp slt i64 %67, -999999999999999999		; <i1> [#uses=1]
> +	br i1 %68, label %bb81, label %bb82
> +
> +bb81:		; preds = %bb79
> +	%69 = add i32 %j1.0, -2		; <i32> [#uses=1]
> +	%70 = getelementptr i64* %6, i32 %69		; <i64*> [#uses=1]
> +	%71 = load i64* %70, align 8		; <i64> [#uses=1]
> +	%72 = add i64 %71, -1		; <i64> [#uses=1]
> +	%73 = add i32 %j1.0, -2		; <i32> [#uses=1]
> +	%74 = getelementptr i64* %6, i32 %73		; <i64*> [#uses=1]
> +	store i64 %72, i64* %74, align 8
> +	%75 = add i32 %j1.0, -1		; <i32> [#uses=1]
> +	%76 = getelementptr i64* %6, i32 %75		; <i64*> [#uses=1]
> +	%77 = load i64* %76, align 8		; <i64> [#uses=1]
> +	%78 = add i64 %77, 1000000000000000000		; <i64> [#uses=1]
> +	%79 = add i32 %j1.0, -1		; <i32> [#uses=1]
> +	%80 = getelementptr i64* %6, i32 %79		; <i64*> [#uses=1]
> +	store i64 %78, i64* %80, align 8
> +	br label %bb82
> +
> +bb82:		; preds = %bb79, %bb81, %bb78
> +	%81 = add i32 %j1.0, -1		; <i32> [#uses=1]
> +	br label %bb74
> +
> +bb83:		; preds = %invcont, %bb74
> +	%82 = icmp slt i32 %aa.0, 19		; <i1> [#uses=1]
> +	%min = select i1 %82, i32 %aa.0, i32 18		; <i32> [#uses=1]
> +	%83 = invoke i64 @system__exn_lli__exn_long_long_integer( i64 10,  
> i32 %min ) readnone
> +			to label %invcont86 unwind label %lpad		; <i64> [#uses=1]
> +
> +invcont86:		; preds = %bb83
> +	%84 = sub i64 0, %83		; <i64> [#uses=1]
> +	%85 = icmp slt i32 %aa.0, 19		; <i1> [#uses=1]
> +	%min87 = select i1 %85, i32 %aa.0, i32 18		; <i32> [#uses=1]
> +	%86 = sub i32 %aa.0, %min87		; <i32> [#uses=1]
> +	%87 = icmp eq i32 %4, %j2.0		; <i1> [#uses=1]
> +	br i1 %87, label %bb91, label %bb90
> +
> +bb90:		; preds = %invcont86
> +	%88 = add i32 %j2.0, 1		; <i32> [#uses=1]
> +	br label %bb61
> +
> +bb91:		; preds = %bb58, %bb61, %invcont86
> +	%89 = icmp slt i32 %2, 18		; <i1> [#uses=1]
> +	br i1 %89, label %bb98, label %bb94
> +
> +bb94:		; preds = %bb91, %bb97
> +	%j.0 = phi i32 [ %97, %bb97 ], [ 1, %bb91 ]		; <i32> [#uses=4]
> +	%90 = mul i32 %j.0, 18		; <i32> [#uses=1]
> +	%91 = add i32 %90, -18		; <i32> [#uses=1]
> +	%92 = sub i32 %e, %91		; <i32> [#uses=1]
> +	%93 = add i32 %j.0, -1		; <i32> [#uses=1]
> +	%94 = getelementptr i64* %6, i32 %93		; <i64*> [#uses=1]
> +	%95 = load i64* %94, align 8		; <i64> [#uses=1]
> +	invoke fastcc void  
> @ce3806g__fxio__put__put_int64__4.1339 
> ( %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.365, i64 %95, i32 %92 )
> +			to label %invcont95 unwind label %lpad
> +
> +invcont95:		; preds = %bb94
> +	%96 = icmp eq i32 %3, %j.0		; <i1> [#uses=1]
> +	br i1 %96, label %bb98, label %bb97
> +
> +bb97:		; preds = %invcont95
> +	%97 = add i32 %j.0, 1		; <i32> [#uses=1]
> +	br label %bb94
> +
> +bb98:		; preds = %bb91, %invcont95
> +	%98 = sub i32 %e, %a		; <i32> [#uses=1]
> +	%99 = getelementptr i64* %6, i32 %3		; <i64*> [#uses=1]
> +	%100 = load i64* %99, align 8		; <i64> [#uses=1]
> +	invoke fastcc void  
> @ce3806g__fxio__put__put_int64__4.1339 
> ( %struct.FRAME.ce3806g__fxio__put__4* %CHAIN.365, i64 %100, i32 %98 )
> +			to label %bb101 unwind label %lpad
> +
> +bb101:		; preds = %bb98
> +	ret void
> +
> +lpad:		; preds = %bb98, %bb94, %bb83, %bb63
> +	%eh_ptr = call i8* @llvm.eh.exception( )		; <i8*> [#uses=2]
> +	%eh_select103 = call i32 (i8*, i8*, ...)*  
> @llvm.eh.selector.i32( i8* %eh_ptr, i8* bitcast (i32 (...)*  
> @__gnat_eh_personality to i8*), i32* @__gnat_all_others_value )		;  
> <i32> [#uses=0]
> +	call void @llvm.stackrestore( i8* %1 )
> +	%101 = call i32 (...)* @_Unwind_Resume( i8* %eh_ptr )		; <i32>  
> [#uses=0]
> +	unreachable
> +}
> +
> +declare i8* @llvm.stacksave() nounwind
> +
> +declare void @system__arith_64__scaled_divide({ i64, i64 }* noalias  
> sret, i64, i64, i64, i8)
> +
> +declare i64 @system__exn_lli__exn_long_long_integer(i64, i32)  
> readnone
> +
> +declare void @llvm.stackrestore(i8*) nounwind
> +
> +declare i32 @system__img_real__set_image_real(x86_fp80, i8*,  
> %struct.string___XUB*, i32, i32, i32, i32)
> +
> +declare void  
> @ada__text_io__generic_aux__put_item 
> (%struct.ada__text_io__text_afcb*, i8*, %struct.string___XUB*)
> +
> +declare void @report__test(i8*, %struct.string___XUB*, i8*,  
> %struct.string___XUB*)
> +
> +declare void  
> @system__secondary_stack__ss_mark(%struct.string___XUB* noalias sret)
> +
> +declare void  
> @system__exception_table__register_exception 
> (%struct.system__standard_library__exception_data*)
> +
> +declare void  
> @report__legal_file_name 
> (%struct.system__file_control_block__pstring* noalias sret, i32,  
> i8*, %struct.string___XUB*)
> +
> +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*)
> +
> +declare void @system__secondary_stack__ss_release(i32, i32)
> +
> +declare void @report__not_applicable(i8*, %struct.string___XUB*)
> +
> +declare void  
> @ada__text_io__set_output(%struct.ada__text_io__text_afcb*)
> +
> +declare %struct.ada__text_io__text_afcb*  
> @ada__text_io__close(%struct.ada__text_io__text_afcb*)
> +
> +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*)
> +
> +declare %struct.ada__text_io__text_afcb*  
> @ada__text_io__standard_output()
> +
> +declare void @report__failed(i8*, %struct.string___XUB*)
> +
> +declare %struct.ada__text_io__text_afcb*  
> @ada__text_io__delete(%struct.ada__text_io__text_afcb*)
> +
> +declare void @report__result()
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list