diff options
author | Dan Gohman <djg@cray.com> | 2007-07-18 16:29:46 +0000 |
---|---|---|
committer | Dan Gohman <djg@cray.com> | 2007-07-18 16:29:46 +0000 |
commit | f17a25c88b892d30c2b41ba7ecdfbdfb2b4be9cc (patch) | |
tree | ebb79ea1ee5e3bc1fdf38541a811a8b804f0679a /test/CodeGen/Generic | |
download | external_llvm-f17a25c88b892d30c2b41ba7ecdfbdfb2b4be9cc.zip external_llvm-f17a25c88b892d30c2b41ba7ecdfbdfb2b4be9cc.tar.gz external_llvm-f17a25c88b892d30c2b41ba7ecdfbdfb2b4be9cc.tar.bz2 |
It's not necessary to do rounding for alloca operations when the requested
alignment is equal to the stack alignment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40004 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/Generic')
118 files changed, 9957 insertions, 0 deletions
diff --git a/test/CodeGen/Generic/2002-04-14-UnexpectedUnsignedType.ll b/test/CodeGen/Generic/2002-04-14-UnexpectedUnsignedType.ll new file mode 100644 index 0000000..3e2dbfe --- /dev/null +++ b/test/CodeGen/Generic/2002-04-14-UnexpectedUnsignedType.ll @@ -0,0 +1,15 @@ +; RUN: llvm-upgrade < %s | llvm-as -o - | llc + +; This caused the backend to assert out with: +; SparcInstrInfo.cpp:103: failed assertion `0 && "Unexpected unsigned type"' +; +implementation + +declare void "bar"(sbyte* %G) + +void "foo"() +begin + %cast225 = cast ulong 123456 to sbyte* ; <sbyte*> [#uses=1] + call void %bar( sbyte* %cast225) + ret void +end diff --git a/test/CodeGen/Generic/2002-04-16-StackFrameSizeAlignment.ll b/test/CodeGen/Generic/2002-04-16-StackFrameSizeAlignment.ll new file mode 100644 index 0000000..d7e138a --- /dev/null +++ b/test/CodeGen/Generic/2002-04-16-StackFrameSizeAlignment.ll @@ -0,0 +1,18 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +; Compiling this file produces: +; Sparc.cpp:91: failed assertion `(offset - OFFSET) % getStackFrameSizeAlignment() == 0' +; +implementation + +declare int "SIM"(sbyte* %A, sbyte* %B, int %M, int %N, int %K, [256 x int]* %V, int %Q, int %R, int %nseq) + +void "foo"() +begin +bb0: ;[#uses=0] + %V = alloca [256 x int], uint 256 ; <[256 x int]*> [#uses=1] + call int %SIM( sbyte* null, sbyte* null, int 0, int 0, int 0, [256 x int]* %V, int 0, int 0, int 2 ) ; <int>:0 [#uses=0] + ret void +end + + diff --git a/test/CodeGen/Generic/2003-05-27-phifcmpd.ll b/test/CodeGen/Generic/2003-05-27-phifcmpd.ll new file mode 100644 index 0000000..5c795fa --- /dev/null +++ b/test/CodeGen/Generic/2003-05-27-phifcmpd.ll @@ -0,0 +1,18 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +void %QRiterate(int %p.1, double %tmp.212) { +entry: ; No predecessors! + %tmp.184 = setgt int %p.1, 0 ; <bool> [#uses=1] + br bool %tmp.184, label %shortcirc_next.1, label %shortcirc_done.1 + +shortcirc_next.1: ; preds = %entry + %tmp.213 = setne double %tmp.212, 0.000000e+00 + br label %shortcirc_done.1 + +shortcirc_done.1: ; preds = %entry, %shortcirc_next.1 + %val.1 = phi bool [ false, %entry ], [ %tmp.213, %shortcirc_next.1 ] + br bool %val.1, label %shortcirc_next.1, label %exit.1 + +exit.1: + ret void +} diff --git a/test/CodeGen/Generic/2003-05-27-useboolinotherbb.ll b/test/CodeGen/Generic/2003-05-27-useboolinotherbb.ll new file mode 100644 index 0000000..8df84f0 --- /dev/null +++ b/test/CodeGen/Generic/2003-05-27-useboolinotherbb.ll @@ -0,0 +1,13 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + + +void %QRiterate(double %tmp.212) { + %tmp.213 = setne double %tmp.212, 0.000000e+00 + br label %shortcirc_next.1 + +shortcirc_next.1: ; preds = %entry + br bool %tmp.213, label %shortcirc_next.1, label %exit.1 + +exit.1: + ret void +} diff --git a/test/CodeGen/Generic/2003-05-27-usefsubasbool.ll b/test/CodeGen/Generic/2003-05-27-usefsubasbool.ll new file mode 100644 index 0000000..40f4d4d --- /dev/null +++ b/test/CodeGen/Generic/2003-05-27-usefsubasbool.ll @@ -0,0 +1,13 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +void %QRiterate(double %tmp.212) { +entry: ; No predecessors! + br label %shortcirc_next.1 + +shortcirc_next.1: ; preds = %entry + %tmp.213 = setne double %tmp.212, 0.000000e+00 + br bool %tmp.213, label %shortcirc_next.1, label %exit.1 + +exit.1: + ret void +} diff --git a/test/CodeGen/Generic/2003-05-28-ManyArgs.ll b/test/CodeGen/Generic/2003-05-28-ManyArgs.ll new file mode 100644 index 0000000..8600638 --- /dev/null +++ b/test/CodeGen/Generic/2003-05-28-ManyArgs.ll @@ -0,0 +1,156 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +;; Date: May 28, 2003. +;; From: test/Programs/External/SPEC/CINT2000/175.vpr.llvm.bc +;; Function: int %main(int %argc.1, sbyte** %argv.1) +;; +;; Error: A function call with about 56 arguments causes an assertion failure +;; in llc because the register allocator cannot find a register +;; not used explicitly by the call instruction. +;; +;; Cause: Regalloc was not keeping track of free registers correctly. +;; It was counting the registers allocated to all outgoing arguments, +;; even though most of those are copied to the stack (so those +;; registers are not actually used by the call instruction). +;; +;; Fixed: By rewriting selection and allocation so that selection explicitly +;; inserts all copy operations required for passing arguments and +;; for the return value of a call, copying to/from registers +;; and/or to stack locations as needed. +;; + + %struct..s_annealing_sched = type { uint, float, float, float, float } + %struct..s_chan = type { uint, float, float, float, float } + %struct..s_det_routing_arch = type { uint, float, float, float, uint, int, short, short, short, float, float } + %struct..s_placer_opts = type { int, float, int, uint, sbyte*, uint, int } + %struct..s_router_opts = type { float, float, float, float, float, int, int, uint, int } + %struct..s_segment_inf = type { float, int, short, short, float, float, uint, float, float } + %struct..s_switch_inf = type { uint, float, float, float, float } + +implementation + +int %main(int %argc.1, sbyte** %argv.1) { +entry: + %net_file = alloca [300 x sbyte] + %place_file = alloca [300 x sbyte] + %arch_file = alloca [300 x sbyte] + %route_file = alloca [300 x sbyte] + %full_stats = alloca uint + %operation = alloca int + %verify_binary_search = alloca uint + %show_graphics = alloca uint + %annealing_sched = alloca %struct..s_annealing_sched + %placer_opts = alloca %struct..s_placer_opts + %router_opts = alloca %struct..s_router_opts + %det_routing_arch = alloca %struct..s_det_routing_arch + %segment_inf = alloca %struct..s_segment_inf* + %timing_inf = alloca { uint, float, float, float, float, float, float, float, float, float, float } + %tmp.101 = getelementptr %struct..s_placer_opts* %placer_opts, long 0, uint 4 + %tmp.105 = getelementptr [300 x sbyte]* %net_file, long 0, long 0 + %tmp.106 = getelementptr [300 x sbyte]* %arch_file, long 0, long 0 + %tmp.107 = getelementptr [300 x sbyte]* %place_file, long 0, long 0 + %tmp.108 = getelementptr [300 x sbyte]* %route_file, long 0, long 0 + %tmp.109 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, uint 0 + %tmp.112 = getelementptr %struct..s_placer_opts* %placer_opts, long 0, uint 0 + %tmp.114 = getelementptr %struct..s_placer_opts* %placer_opts, long 0, uint 6 + %tmp.118 = getelementptr %struct..s_router_opts* %router_opts, long 0, uint 7 + %tmp.135 = load int* %operation + %tmp.137 = load int* %tmp.112 + %tmp.138 = getelementptr %struct..s_placer_opts* %placer_opts, long 0, uint 1 + %tmp.139 = load float* %tmp.138 + %tmp.140 = getelementptr %struct..s_placer_opts* %placer_opts, long 0, uint 2 + %tmp.141 = load int* %tmp.140 + %tmp.142 = getelementptr %struct..s_placer_opts* %placer_opts, long 0, uint 3 + %tmp.143 = load uint* %tmp.142 + %tmp.145 = load sbyte** %tmp.101 + %tmp.146 = getelementptr %struct..s_placer_opts* %placer_opts, long 0, uint 5 + %tmp.147 = load uint* %tmp.146 + %tmp.149 = load int* %tmp.114 + %tmp.154 = load uint* %full_stats + %tmp.155 = load uint* %verify_binary_search + %tmp.156 = getelementptr %struct..s_annealing_sched* %annealing_sched, long 0, uint 0 + %tmp.157 = load uint* %tmp.156 + %tmp.158 = getelementptr %struct..s_annealing_sched* %annealing_sched, long 0, uint 1 + %tmp.159 = load float* %tmp.158 + %tmp.160 = getelementptr %struct..s_annealing_sched* %annealing_sched, long 0, uint 2 + %tmp.161 = load float* %tmp.160 + %tmp.162 = getelementptr %struct..s_annealing_sched* %annealing_sched, long 0, uint 3 + %tmp.163 = load float* %tmp.162 + %tmp.164 = getelementptr %struct..s_annealing_sched* %annealing_sched, long 0, uint 4 + %tmp.165 = load float* %tmp.164 + %tmp.166 = getelementptr %struct..s_router_opts* %router_opts, long 0, uint 0 + %tmp.167 = load float* %tmp.166 + %tmp.168 = getelementptr %struct..s_router_opts* %router_opts, long 0, uint 1 + %tmp.169 = load float* %tmp.168 + %tmp.170 = getelementptr %struct..s_router_opts* %router_opts, long 0, uint 2 + %tmp.171 = load float* %tmp.170 + %tmp.172 = getelementptr %struct..s_router_opts* %router_opts, long 0, uint 3 + %tmp.173 = load float* %tmp.172 + %tmp.174 = getelementptr %struct..s_router_opts* %router_opts, long 0, uint 4 + %tmp.175 = load float* %tmp.174 + %tmp.176 = getelementptr %struct..s_router_opts* %router_opts, long 0, uint 5 + %tmp.177 = load int* %tmp.176 + %tmp.178 = getelementptr %struct..s_router_opts* %router_opts, long 0, uint 6 + %tmp.179 = load int* %tmp.178 + %tmp.181 = load uint* %tmp.118 + %tmp.182 = getelementptr %struct..s_router_opts* %router_opts, long 0, uint 8 + %tmp.183 = load int* %tmp.182 + %tmp.184 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, uint 0 + %tmp.185 = load uint* %tmp.184 + %tmp.186 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, uint 1 + %tmp.187 = load float* %tmp.186 + %tmp.188 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, uint 2 + %tmp.189 = load float* %tmp.188 + %tmp.190 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, uint 3 + %tmp.191 = load float* %tmp.190 + %tmp.192 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, uint 4 + %tmp.193 = load uint* %tmp.192 + %tmp.194 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, uint 5 + %tmp.195 = load int* %tmp.194 + %tmp.196 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, uint 6 + %tmp.197 = load short* %tmp.196 + %tmp.198 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, uint 7 + %tmp.199 = load short* %tmp.198 + %tmp.200 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, uint 8 + %tmp.201 = load short* %tmp.200 + %tmp.202 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, uint 9 + %tmp.203 = load float* %tmp.202 + %tmp.204 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, long 0, uint 10 + %tmp.205 = load float* %tmp.204 + %tmp.206 = load %struct..s_segment_inf** %segment_inf + %tmp.208 = load uint* %tmp.109 + %tmp.209 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, uint 1 + %tmp.210 = load float* %tmp.209 + %tmp.211 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, uint 2 + %tmp.212 = load float* %tmp.211 + %tmp.213 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, uint 3 + %tmp.214 = load float* %tmp.213 + %tmp.215 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, uint 4 + %tmp.216 = load float* %tmp.215 + %tmp.217 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, uint 5 + %tmp.218 = load float* %tmp.217 + %tmp.219 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, uint 6 + %tmp.220 = load float* %tmp.219 + %tmp.221 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, uint 7 + %tmp.222 = load float* %tmp.221 + %tmp.223 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, uint 8 + %tmp.224 = load float* %tmp.223 + %tmp.225 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, uint 9 + %tmp.226 = load float* %tmp.225 + %tmp.227 = getelementptr { uint, float, float, float, float, float, float, float, float, float, float }* %timing_inf, long 0, uint 10 + %tmp.228 = load float* %tmp.227 + call void %place_and_route( int %tmp.135, int %tmp.137, float %tmp.139, int %tmp.141, uint %tmp.143, sbyte* %tmp.145, uint %tmp.147, int %tmp.149, sbyte* %tmp.107, sbyte* %tmp.105, sbyte* %tmp.106, sbyte* %tmp.108, uint %tmp.154, uint %tmp.155, uint %tmp.157, float %tmp.159, float %tmp.161, float %tmp.163, float %tmp.165, float %tmp.167, float %tmp.169, float %tmp.171, float %tmp.173, float %tmp.175, int %tmp.177, int %tmp.179, uint %tmp.181, int %tmp.183, uint %tmp.185, float %tmp.187, float %tmp.189, float %tmp.191, uint %tmp.193, int %tmp.195, short %tmp.197, short %tmp.199, short %tmp.201, float %tmp.203, float %tmp.205, %struct..s_segment_inf* %tmp.206, uint %tmp.208, float %tmp.210, float %tmp.212, float %tmp.214, float %tmp.216, float %tmp.218, float %tmp.220, float %tmp.222, float %tmp.224, float %tmp.226, float %tmp.228 ) + %tmp.231 = load uint* %show_graphics + %tmp.232 = setne uint %tmp.231, 0 + br bool %tmp.232, label %then.2, label %endif.2 + +then.2: + br label %endif.2 + +endif.2: + ret int 0 +} + +declare int %printf(sbyte*, ...) + +declare void %place_and_route(int, int, float, int, uint, sbyte*, uint, int, sbyte*, sbyte*, sbyte*, sbyte*, uint, uint, uint, float, float, float, float, float, float, float, float, float, int, int, uint, int, uint, float, float, float, uint, int, short, short, short, float, float, %struct..s_segment_inf*, uint, float, float, float, float, float, float, float, float, float, float) diff --git a/test/CodeGen/Generic/2003-05-30-BadFoldGEP.ll b/test/CodeGen/Generic/2003-05-30-BadFoldGEP.ll new file mode 100644 index 0000000..61d802c --- /dev/null +++ b/test/CodeGen/Generic/2003-05-30-BadFoldGEP.ll @@ -0,0 +1,50 @@ +; RUN: llvm-upgrade %s | llvm-as | llc + +;; Date: May 28, 2003. +;; From: test/Programs/External/SPEC/CINT2000/254.gap.llvm.bc +;; Function: int %OpenOutput(sbyte* %filename.1) +;; +;; Error: A sequence of GEPs is folded incorrectly by llc during selection +;; causing an assertion about a dynamic casting error. +;; This code sequence was produced (correctly) by preselection +;; from a nested pair of ConstantExpr getelementptrs. +;; The code below is the output of preselection. +;; The original ConstantExprs are included in a comment. +;; +;; Cause: FoldGetElemChain() was inserting an extra leading 0 even though +;; the first instruction in the sequence contributes no indices. +;; The next instruction contributes a leading non-zero so another +;; zero should not be added before it! +;; + + +%FileType = type { int, [256 x sbyte], int, int, int, int } +%OutputFiles = uninitialized global [16 x %FileType] +%Output = internal global %FileType* null + + +implementation; Functions: + +internal int %OpenOutput(sbyte* %filename.1) { +entry: + %tmp.0 = load %FileType** %Output + %tmp.4 = getelementptr %FileType* %tmp.0, long 1 + + ;;------ Original instruction in 254.gap.llvm.bc: + ;; %tmp.10 = seteq { int, [256 x sbyte], int, int, int, int }* %tmp.4, getelementptr ([16 x { int, [256 x sbyte], int, int, int, int }]* getelementptr ([16 x { int, [256 x sbyte], int, int, int, int }]* %OutputFiles, long 1), long 0, long 0) + + ;;------ Code sequence produced by preselection phase for above instr: + ;; This code sequence is folded incorrectly by llc during selection + ;; causing an assertion about a dynamic casting error. + %addrOfGlobal = getelementptr [16 x %FileType]* %OutputFiles, long 0 + %constantGEP = getelementptr [16 x %FileType]* %addrOfGlobal, long 1 + %constantGEP = getelementptr [16 x %FileType]* %constantGEP, long 0, long 0 + %tmp.10 = seteq %FileType* %tmp.4, %constantGEP + br bool %tmp.10, label %return, label %endif.0 + +endif.0: + ret int 0 + +return: + ret int 1 +} diff --git a/test/CodeGen/Generic/2003-05-30-BadPreselectPhi.ll b/test/CodeGen/Generic/2003-05-30-BadPreselectPhi.ll new file mode 100644 index 0000000..e9cac7f --- /dev/null +++ b/test/CodeGen/Generic/2003-05-30-BadPreselectPhi.ll @@ -0,0 +1,34 @@ +; RUN: llvm-upgrade %s | llvm-as | llc + +;; Date: May 28, 2003. +;; From: test/Programs/SingleSource/richards_benchmark.c +;; Function: struct task *handlerfn(struct packet *pkt) +;; +;; Error: PreSelection puts the arguments of the Phi just before +;; the Phi instead of in predecessor blocks. This later +;; causes llc to produces an invalid register <NULL VALUE> +;; for the phi arguments. + + %struct..packet = type { %struct..packet*, int, int, int, [4 x sbyte] } + %struct..task = type { %struct..task*, int, int, %struct..packet*, int, %struct..task* (%struct..packet*)*, int, int } +%v1 = external global int +%v2 = external global int + +implementation ; Functions: + +%struct..task* %handlerfn(%struct..packet* %pkt.2) { +entry: ; No predecessors! + %tmp.1 = setne %struct..packet* %pkt.2, null + br bool %tmp.1, label %cond_false, label %cond_continue + +cond_false: ; preds = %entry + br label %cond_continue + +cond_continue: ; preds = %entry, %cond_false + %mem_tmp.0 = phi int* [ %v2, %cond_false ], [ %v1, %entry ] + %tmp.12 = cast int* %mem_tmp.0 to %struct..packet* + call void %append( %struct..packet* %pkt.2, %struct..packet* %tmp.12 ) + ret %struct..task* null +} + +declare void %append(%struct..packet*, %struct..packet*) diff --git a/test/CodeGen/Generic/2003-07-06-BadIntCmp.ll b/test/CodeGen/Generic/2003-07-06-BadIntCmp.ll new file mode 100644 index 0000000..a741ebc --- /dev/null +++ b/test/CodeGen/Generic/2003-07-06-BadIntCmp.ll @@ -0,0 +1,52 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +;; Date: May 28, 2003. +;; From: test/Programs/MultiSource/Olden-perimeter/maketree.c +;; Function: int CheckOutside(int x, int y) +;; +;; Note: The .ll code below for this regression test has identical +;; behavior to the above function up to the error, but then prints +;; true/false on the two branches. +;; +;; Error: llc generates a branch-on-xcc instead of branch-on-icc, which +;; is wrong because the value being compared (int euclid = x*x + y*y) +;; overflows, so that the 64-bit and 32-bit compares are not equal. + +%.str_1 = internal constant [6 x sbyte] c"true\0A\00" +%.str_2 = internal constant [7 x sbyte] c"false\0A\00" + +implementation ; Functions: + +declare int %printf(sbyte*, ...) + +internal void %__main() { +entry: ; No predecessors! + ret void +} + +internal void %CheckOutside(int %x.1, int %y.1) { +entry: ; No predecessors! + %tmp.2 = mul int %x.1, %x.1 ; <int> [#uses=1] + %tmp.5 = mul int %y.1, %y.1 ; <int> [#uses=1] + %tmp.6 = add int %tmp.2, %tmp.5 ; <int> [#uses=1] + %tmp.8 = setle int %tmp.6, 4194304 ; <bool> [#uses=1] + br bool %tmp.8, label %then, label %else + +then: ; preds = %entry + %tmp.11 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([6 x sbyte]* %.str_1, long 0, long 0) ) ; <int> [#uses=0] + br label %UnifiedExitNode + +else: ; preds = %entry + %tmp.13 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([7 x sbyte]* %.str_2, long 0, long 0) ) ; <int> [#uses=0] + br label %UnifiedExitNode + +UnifiedExitNode: ; preds = %then, %else + ret void +} + +int %main() { +entry: ; No predecessors! + call void %__main( ) + call void %CheckOutside( int 2097152, int 2097152 ) + ret int 0 +} diff --git a/test/CodeGen/Generic/2003-07-07-BadLongConst.ll b/test/CodeGen/Generic/2003-07-07-BadLongConst.ll new file mode 100644 index 0000000..376ef19 --- /dev/null +++ b/test/CodeGen/Generic/2003-07-07-BadLongConst.ll @@ -0,0 +1,22 @@ +; RUN: llvm-upgrade %s | llvm-as | llc + + +%.str_1 = internal constant [42 x sbyte] c" ui = %u (0x%x)\09\09UL-ui = %lld (0x%llx)\0A\00" + +implementation ; Functions: + +declare int %printf(sbyte*, ...) + +internal ulong %getL() { +entry: ; No predecessors! + ret ulong 12659530247033960611 +} + +int %main(int %argc.1, sbyte** %argv.1) { +entry: ; No predecessors! + %tmp.11 = call ulong %getL( ) + %tmp.5 = cast ulong %tmp.11 to uint + %tmp.23 = and ulong %tmp.11, 18446744069414584320 + %tmp.16 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([42 x sbyte]* %.str_1, long 0, long 0), uint %tmp.5, uint %tmp.5, ulong %tmp.23, ulong %tmp.23 ) + ret int 0 +} diff --git a/test/CodeGen/Generic/2003-07-08-BadCastToBool.ll b/test/CodeGen/Generic/2003-07-08-BadCastToBool.ll new file mode 100644 index 0000000..2fede53 --- /dev/null +++ b/test/CodeGen/Generic/2003-07-08-BadCastToBool.ll @@ -0,0 +1,36 @@ +; RUN: llvm-upgrade %s | llvm-as | llc + +;; Date: Jul 8, 2003. +;; From: test/Programs/MultiSource/Olden-perimeter +;; Function: int %adj(uint %d.1, uint %ct.1) +;; +;; Errors: (1) cast-int-to-bool was being treated as a NOP (i.e., the int +;; register was treated as effectively true if non-zero). +;; This cannot be used for later boolean operations. +;; (2) (A or NOT(B)) was being folded into A orn B, which is ok +;; for bitwise operations but not booleans! For booleans, +;; the result has to be compared with 0. + +%.str_1 = internal constant [30 x sbyte] c"d = %d, ct = %d, d ^ ct = %d\0A\00" + + +implementation ; Functions: + +declare int %printf(sbyte*, ...) + +int %adj(uint %d.1, uint %ct.1) { +entry: + %tmp.19 = seteq uint %ct.1, 2 + %tmp.22.not = cast uint %ct.1 to bool + %tmp.221 = xor bool %tmp.22.not, true + %tmp.26 = or bool %tmp.19, %tmp.221 + %tmp.27 = cast bool %tmp.26 to int + ret int %tmp.27 +} + +int %main() { +entry: + %result = call int %adj(uint 3, uint 2) + %tmp.0 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([30 x sbyte]* %.str_1, long 0, long 0), uint 3, uint 2, int %result) + ret int 0 +} diff --git a/test/CodeGen/Generic/2003-07-29-BadConstSbyte.ll b/test/CodeGen/Generic/2003-07-29-BadConstSbyte.ll new file mode 100644 index 0000000..09a0431 --- /dev/null +++ b/test/CodeGen/Generic/2003-07-29-BadConstSbyte.ll @@ -0,0 +1,41 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +;; Date: Jul 29, 2003. +;; From: test/Programs/MultiSource/Ptrdist-bc +;; Function: --- +;; Global: %yy_ec = internal constant [256 x sbyte] ... +;; A subset of this array is used in the test below. +;; +;; Error: Character '\07' was being emitted as '\a', at yy_ec[38]. +;; When loaded, this returned the value 97 ('a'), instead of 7. +;; +;; Incorrect LLC Output for the array yy_ec was: +;; yy_ec_1094: +;; .ascii "\000\001\001\001\001\001\001\001\001\002\003\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\002\004\005\001\001\006\a\001\b\t\n\v\f\r\016\017\020\020\020\020\020\020\020\020\020\020\001\021\022\023\024\001\001\025\025\025\025\025\025\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\026\027\030\031\032\001\033\034\035\036\037 !\"#$%&'()*+,-./$0$1$234\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001\001" +;; + + +%yy_ec = internal constant [6 x sbyte] c"\06\07\01\08\01\09" + +%.str_3 = internal constant [8 x sbyte] c"[%d] = \00" +%.str_4 = internal constant [4 x sbyte] c"%d\0A\00" + +implementation + +declare int %printf(sbyte*, ...) + +int %main() { +entry: + br label %loopentry +loopentry: + %i = phi long [0, %entry], [%inc.i, %loopentry] + %cptr = getelementptr [6 x sbyte]* %yy_ec, long 0, long %i + %c = load sbyte* %cptr + %ignore = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([8 x sbyte]* %.str_3, long 0, long 0), long %i) + %ignore2 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([4 x sbyte]* %.str_4, long 0, long 0), sbyte %c) + %inc.i = add long %i, 1 + %done = setle long %inc.i, 5 + br bool %done, label %loopentry, label %exit.1 +exit.1: + ret int 0 +}; diff --git a/test/CodeGen/Generic/2004-02-08-UnwindSupport.llx b/test/CodeGen/Generic/2004-02-08-UnwindSupport.llx new file mode 100644 index 0000000..6e57fbc --- /dev/null +++ b/test/CodeGen/Generic/2004-02-08-UnwindSupport.llx @@ -0,0 +1,13 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -enable-correct-eh-support + +int %test() { + unwind +} + +int %main() { + %X = invoke int %test() to label %cont except label %EH +cont: + ret int 1 +EH: + ret int 0 +} diff --git a/test/CodeGen/Generic/2004-05-09-LiveVarPartialRegister.llx b/test/CodeGen/Generic/2004-05-09-LiveVarPartialRegister.llx new file mode 100644 index 0000000..82d33a0 --- /dev/null +++ b/test/CodeGen/Generic/2004-05-09-LiveVarPartialRegister.llx @@ -0,0 +1,15 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +%global_long_1 = linkonce global long 7 +%global_long_2 = linkonce global long 49 + +implementation ; Functions: + +int %main() { + %l1 = load long* %global_long_1 + %l2 = load long* %global_long_2 + %cond = setle long %l1, %l2 + %cast2 = cast bool %cond to int + %RV = sub int 1, %cast2 + ret int %RV +} diff --git a/test/CodeGen/Generic/2005-01-18-SetUO-InfLoop.ll b/test/CodeGen/Generic/2005-01-18-SetUO-InfLoop.ll new file mode 100644 index 0000000..e47aa18 --- /dev/null +++ b/test/CodeGen/Generic/2005-01-18-SetUO-InfLoop.ll @@ -0,0 +1,19 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +void %intersect_pixel() { +entry: + %tmp125 = call bool %llvm.isunordered.f64( double 0.000000e+00, double 0.000000e+00 ) ; <bool> [#uses=1] + %tmp126 = or bool %tmp125, false ; <bool> [#uses=1] + %tmp126.not = xor bool %tmp126, true ; <bool> [#uses=1] + %brmerge1 = or bool %tmp126.not, false ; <bool> [#uses=1] + br bool %brmerge1, label %bb154, label %cond_false133 + +cond_false133: ; preds = %entry + ret void + +bb154: ; preds = %entry + %tmp164 = seteq uint 0, 0 ; <bool> [#uses=0] + ret void +} + +declare bool %llvm.isunordered.f64(double, double) diff --git a/test/CodeGen/Generic/2005-04-09-GlobalInPHI.ll b/test/CodeGen/Generic/2005-04-09-GlobalInPHI.ll new file mode 100644 index 0000000..54f9883 --- /dev/null +++ b/test/CodeGen/Generic/2005-04-09-GlobalInPHI.ll @@ -0,0 +1,21 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + %struct.TypHeader = type { uint, %struct.TypHeader**, [3 x sbyte], ubyte } +%.str_67 = external global [4 x sbyte] ; <[4 x sbyte]*> [#uses=1] +%.str_87 = external global [17 x sbyte] ; <[17 x sbyte]*> [#uses=1] + +implementation ; Functions: + +void %PrBinop() { +entry: + br bool false, label %cond_true, label %else.0 + +cond_true: ; preds = %entry + br label %else.0 + +else.0: + %tmp.167.1 = phi int [ cast ([17 x sbyte]* %.str_87 to int), %entry ], [ 0, %cond_true ] + call void %Pr( sbyte* getelementptr ([4 x sbyte]* %.str_67, int 0, int 0), int 0, int 0 ) + ret void +} + +declare void %Pr(sbyte*, int, int) diff --git a/test/CodeGen/Generic/2005-07-12-memcpy-i64-length.ll b/test/CodeGen/Generic/2005-07-12-memcpy-i64-length.ll new file mode 100644 index 0000000..3224d1a --- /dev/null +++ b/test/CodeGen/Generic/2005-07-12-memcpy-i64-length.ll @@ -0,0 +1,11 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc +; Test that llvm.memcpy works with a i64 length operand on all targets. + + +declare void %llvm.memcpy.i64(sbyte*, sbyte*, ulong, uint) + +void %l12_l94_bc_divide_endif_2E_3_2E_ce() { +newFuncRoot: + tail call void %llvm.memcpy.i64( sbyte* null, sbyte* null, ulong 0, uint 1 ) + unreachable +} diff --git a/test/CodeGen/Generic/2005-10-18-ZeroSizeStackObject.ll b/test/CodeGen/Generic/2005-10-18-ZeroSizeStackObject.ll new file mode 100644 index 0000000..e7cce1f --- /dev/null +++ b/test/CodeGen/Generic/2005-10-18-ZeroSizeStackObject.ll @@ -0,0 +1,6 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +void %test() { + %X = alloca {} + ret void +} diff --git a/test/CodeGen/Generic/2005-10-21-longlonggtu.ll b/test/CodeGen/Generic/2005-10-21-longlonggtu.ll new file mode 100644 index 0000000..d445e59 --- /dev/null +++ b/test/CodeGen/Generic/2005-10-21-longlonggtu.ll @@ -0,0 +1,12 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc +float %t(long %u_arg) { + %u = cast long %u_arg to ulong ; <ulong> [#uses=1] + %tmp5 = add ulong %u, 9007199254740991 ; <ulong> [#uses=1] + %tmp = setgt ulong %tmp5, 18014398509481982 ; <bool> [#uses=1] + br bool %tmp, label %T, label %F +T: + ret float 1.0 +F: + call float %t(long 0) + ret float 0.0 +} diff --git a/test/CodeGen/Generic/2005-12-01-Crash.ll b/test/CodeGen/Generic/2005-12-01-Crash.ll new file mode 100644 index 0000000..a9d8deb --- /dev/null +++ b/test/CodeGen/Generic/2005-12-01-Crash.ll @@ -0,0 +1,23 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +%str = external global [36 x sbyte] ; <[36 x sbyte]*> [#uses=0] +%str = external global [29 x sbyte] ; <[29 x sbyte]*> [#uses=0] +%str1 = external global [29 x sbyte] ; <[29 x sbyte]*> [#uses=0] +%str2 = external global [29 x sbyte] ; <[29 x sbyte]*> [#uses=1] +%str = external global [2 x sbyte] ; <[2 x sbyte]*> [#uses=0] +%str3 = external global [2 x sbyte] ; <[2 x sbyte]*> [#uses=0] +%str4 = external global [2 x sbyte] ; <[2 x sbyte]*> [#uses=0] +%str5 = external global [2 x sbyte] ; <[2 x sbyte]*> [#uses=0] + +implementation ; Functions: + +void %printArgsNoRet(int %a1, float %a2, sbyte %a3, double %a4, sbyte* %a5, int %a6, float %a7, sbyte %a8, double %a9, sbyte* %a10, int %a11, float %a12, sbyte %a13, double %a14, sbyte* %a15) { +entry: + %tmp17 = cast sbyte %a13 to int ; <int> [#uses=1] + %tmp23 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([29 x sbyte]* %str2, int 0, uint 0), int %a11, double 0.000000e+00, int %tmp17, double %a14, int 0 ) ; <int> [#uses=0] + ret void +} + +declare int %printf(sbyte*, ...) + +declare int %main(int, sbyte**) diff --git a/test/CodeGen/Generic/2005-12-12-ExpandSextInreg.ll b/test/CodeGen/Generic/2005-12-12-ExpandSextInreg.ll new file mode 100644 index 0000000..ef1359e --- /dev/null +++ b/test/CodeGen/Generic/2005-12-12-ExpandSextInreg.ll @@ -0,0 +1,7 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +long %test(long %A) { + %B = cast long %A to sbyte + %C = cast sbyte %B to long + ret long %C +} diff --git a/test/CodeGen/Generic/2006-01-12-BadSetCCFold.ll b/test/CodeGen/Generic/2006-01-12-BadSetCCFold.ll new file mode 100644 index 0000000..876e9f2 --- /dev/null +++ b/test/CodeGen/Generic/2006-01-12-BadSetCCFold.ll @@ -0,0 +1,37 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + + %struct.node_t = type { double*, %struct.node_t*, %struct.node_t**, double**, double*, int, int } + +implementation ; Functions: + +void %main() { +entry: + br bool false, label %then.2.i, label %endif.2.i + +then.2.i: ; preds = %entry + br label %dealwithargs.exit + +endif.2.i: ; preds = %entry + br bool false, label %then.3.i, label %dealwithargs.exit + +then.3.i: ; preds = %endif.2.i + br label %dealwithargs.exit + +dealwithargs.exit: ; preds = %then.3.i, %endif.2.i, %then.2.i + %n_nodes.4 = phi int [ 64, %then.3.i ], [ 64, %then.2.i ], [ 64, %endif.2.i ] ; <int> [#uses=1] + %tmp.14.i1134.i.i = setgt int %n_nodes.4, 1 ; <bool> [#uses=2] + br bool %tmp.14.i1134.i.i, label %no_exit.i12.i.i, label %fill_table.exit22.i.i + +no_exit.i12.i.i: ; preds = %no_exit.i12.i.i, %dealwithargs.exit + br bool false, label %fill_table.exit22.i.i, label %no_exit.i12.i.i + +fill_table.exit22.i.i: ; preds = %no_exit.i12.i.i, %dealwithargs.exit + %cur_node.0.i8.1.i.i = phi %struct.node_t* [ undef, %dealwithargs.exit ], [ null, %no_exit.i12.i.i ] ; <%struct.node_t*> [#uses=0] + br bool %tmp.14.i1134.i.i, label %no_exit.i.preheader.i.i, label %make_tables.exit.i + +no_exit.i.preheader.i.i: ; preds = %fill_table.exit22.i.i + ret void + +make_tables.exit.i: ; preds = %fill_table.exit22.i.i + ret void +} diff --git a/test/CodeGen/Generic/2006-01-18-InvalidBranchOpcodeAssert.ll b/test/CodeGen/Generic/2006-01-18-InvalidBranchOpcodeAssert.ll new file mode 100644 index 0000000..73fd658 --- /dev/null +++ b/test/CodeGen/Generic/2006-01-18-InvalidBranchOpcodeAssert.ll @@ -0,0 +1,16 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc +; This crashed the PPC backend. + +void %test() { + %tmp125 = call bool %llvm.isunordered.f64( double 0.000000e+00, double 0.000000e+00 ) ; <bool> [#uses=1] + br bool %tmp125, label %bb154, label %cond_false133 + +cond_false133: ; preds = %entry + ret void + +bb154: ; preds = %entry + %tmp164 = seteq uint 0, 0 ; <bool> [#uses=0] + ret void +} + +declare bool %llvm.isunordered.f64(double, double) diff --git a/test/CodeGen/Generic/2006-02-12-InsertLibcall.ll b/test/CodeGen/Generic/2006-02-12-InsertLibcall.ll new file mode 100644 index 0000000..d18ce14 --- /dev/null +++ b/test/CodeGen/Generic/2006-02-12-InsertLibcall.ll @@ -0,0 +1,60 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc +%G = external global int + +void %encode_one_frame(long %tmp.2i) { +entry: + %tmp.9 = seteq int 0, 0 ; <bool> [#uses=1] + br bool %tmp.9, label %endif.0, label %shortcirc_next.0 + +then.5.i: ; preds = %shortcirc_next.i + %tmp.114.i = div long %tmp.2i, 3 ; <long> [#uses=1] + %tmp.111.i = call long %lseek( int 0, long %tmp.114.i, int 1 ) ; <long> [#uses=0] + ret void + +shortcirc_next.0: ; preds = %entry + ret void + +endif.0: ; preds = %entry + %tmp.324.i = seteq int 0, 0 ; <bool> [#uses=2] + %tmp.362.i = setlt int 0, 0 ; <bool> [#uses=1] + br bool %tmp.324.i, label %else.4.i, label %then.11.i37 + +then.11.i37: ; preds = %endif.0 + ret void + +else.4.i: ; preds = %endif.0 + br bool %tmp.362.i, label %else.5.i, label %then.12.i + +then.12.i: ; preds = %else.4.i + ret void + +else.5.i: ; preds = %else.4.i + br bool %tmp.324.i, label %then.0.i40, label %then.17.i + +then.17.i: ; preds = %else.5.i + ret void + +then.0.i40: ; preds = %else.5.i + %tmp.8.i42 = seteq int 0, 0 ; <bool> [#uses=1] + br bool %tmp.8.i42, label %else.1.i56, label %then.1.i52 + +then.1.i52: ; preds = %then.0.i40 + ret void + +else.1.i56: ; preds = %then.0.i40 + %tmp.28.i = load int* %G + %tmp.29.i = seteq int %tmp.28.i, 1 ; <bool> [#uses=1] + br bool %tmp.29.i, label %shortcirc_next.i, label %shortcirc_done.i + +shortcirc_next.i: ; preds = %else.1.i56 + %tmp.34.i = seteq int 0, 3 ; <bool> [#uses=1] + br bool %tmp.34.i, label %then.5.i, label %endif.5.i + +shortcirc_done.i: ; preds = %else.1.i56 + ret void + +endif.5.i: ; preds = %shortcirc_next.i + ret void +} + +declare long %lseek(int, long, int) diff --git a/test/CodeGen/Generic/2006-03-01-dagcombineinfloop.ll b/test/CodeGen/Generic/2006-03-01-dagcombineinfloop.ll new file mode 100644 index 0000000..797af74 --- /dev/null +++ b/test/CodeGen/Generic/2006-03-01-dagcombineinfloop.ll @@ -0,0 +1,98 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc +; Infinite loop in the dag combiner, reduced from 176.gcc. + + %struct._obstack_chunk = type { sbyte*, %struct._obstack_chunk*, [4 x sbyte] } + %struct.anon = type { int } + %struct.lang_decl = type opaque + %struct.lang_type = type { int, [1 x %struct.tree_node*] } + %struct.obstack = type { int, %struct._obstack_chunk*, sbyte*, sbyte*, sbyte*, int, int, %struct._obstack_chunk* (...)*, void (...)*, sbyte*, ubyte } + %struct.rtx_def = type { ushort, ubyte, ubyte, [1 x %struct.anon] } + %struct.tree_common = type { %struct.tree_node*, %struct.tree_node*, ubyte, ubyte, ubyte, ubyte } + %struct.tree_decl = type { [12 x sbyte], sbyte*, int, %struct.tree_node*, uint, ubyte, ubyte, ubyte, ubyte, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.rtx_def*, %struct.anon, { %struct.rtx_def* }, %struct.tree_node*, %struct.lang_decl* } + %struct.tree_list = type { [12 x sbyte], %struct.tree_node*, %struct.tree_node* } + %struct.tree_node = type { %struct.tree_decl } + %struct.tree_type = type { [12 x sbyte], %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, uint, ubyte, ubyte, ubyte, ubyte, uint, %struct.tree_node*, %struct.tree_node*, %struct.anon, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.obstack*, %struct.lang_type* } +%void_type_node = external global %struct.tree_node* ; <%struct.tree_node**> [#uses=1] +%char_type_node = external global %struct.tree_node* ; <%struct.tree_node**> [#uses=1] +%short_integer_type_node = external global %struct.tree_node* ; <%struct.tree_node**> [#uses=1] +%short_unsigned_type_node = external global %struct.tree_node* ; <%struct.tree_node**> [#uses=1] +%float_type_node = external global %struct.tree_node* ; <%struct.tree_node**> [#uses=1] +%signed_char_type_node = external global %struct.tree_node* ; <%struct.tree_node**> [#uses=1] +%unsigned_char_type_node = external global %struct.tree_node* ; <%struct.tree_node**> [#uses=1] + +implementation ; Functions: + +fastcc int %self_promoting_args_p(%struct.tree_node* %parms) { +entry: + %tmp915 = seteq %struct.tree_node* %parms, null ; <bool> [#uses=1] + br bool %tmp915, label %return, label %cond_true92.preheader + +cond_true: ; preds = %cond_true92 + %tmp9.not = setne %struct.tree_node* %tmp2, %tmp7 ; <bool> [#uses=1] + %tmp14 = seteq %struct.tree_node* %tmp2, null ; <bool> [#uses=1] + %bothcond = or bool %tmp9.not, %tmp14 ; <bool> [#uses=1] + br bool %bothcond, label %return, label %cond_next18 + +cond_next12: ; preds = %cond_true92 + %tmp14.old = seteq %struct.tree_node* %tmp2, null ; <bool> [#uses=1] + br bool %tmp14.old, label %return, label %cond_next18 + +cond_next18: ; preds = %cond_next12, %cond_true + %tmp20 = cast %struct.tree_node* %tmp2 to %struct.tree_type* ; <%struct.tree_type*> [#uses=1] + %tmp21 = getelementptr %struct.tree_type* %tmp20, int 0, uint 17 ; <%struct.tree_node**> [#uses=1] + %tmp22 = load %struct.tree_node** %tmp21 ; <%struct.tree_node*> [#uses=6] + %tmp24 = seteq %struct.tree_node* %tmp22, %tmp23 ; <bool> [#uses=1] + br bool %tmp24, label %return, label %cond_next28 + +cond_next28: ; preds = %cond_next18 + %tmp30 = cast %struct.tree_node* %tmp2 to %struct.tree_common* ; <%struct.tree_common*> [#uses=1] + %tmp = getelementptr %struct.tree_common* %tmp30, int 0, uint 2 ; <ubyte*> [#uses=1] + %tmp = cast ubyte* %tmp to uint* ; <uint*> [#uses=1] + %tmp = load uint* %tmp ; <uint> [#uses=1] + %tmp32 = cast uint %tmp to ubyte ; <ubyte> [#uses=1] + %tmp33 = seteq ubyte %tmp32, 7 ; <bool> [#uses=1] + br bool %tmp33, label %cond_true34, label %cond_next84 + +cond_true34: ; preds = %cond_next28 + %tmp40 = seteq %struct.tree_node* %tmp22, %tmp39 ; <bool> [#uses=1] + %tmp49 = seteq %struct.tree_node* %tmp22, %tmp48 ; <bool> [#uses=1] + %bothcond6 = or bool %tmp40, %tmp49 ; <bool> [#uses=1] + %tmp58 = seteq %struct.tree_node* %tmp22, %tmp57 ; <bool> [#uses=1] + %bothcond7 = or bool %bothcond6, %tmp58 ; <bool> [#uses=1] + %tmp67 = seteq %struct.tree_node* %tmp22, %tmp66 ; <bool> [#uses=1] + %bothcond8 = or bool %bothcond7, %tmp67 ; <bool> [#uses=1] + %tmp76 = seteq %struct.tree_node* %tmp22, %tmp75 ; <bool> [#uses=1] + %bothcond9 = or bool %bothcond8, %tmp76 ; <bool> [#uses=2] + %brmerge = or bool %bothcond9, %tmp ; <bool> [#uses=1] + %bothcond9 = cast bool %bothcond9 to int ; <int> [#uses=1] + %.mux = xor int %bothcond9, 1 ; <int> [#uses=1] + br bool %brmerge, label %return, label %cond_true92 + +cond_next84: ; preds = %cond_next28 + br bool %tmp, label %return, label %cond_true92 + +cond_true92.preheader: ; preds = %entry + %tmp7 = load %struct.tree_node** %void_type_node ; <%struct.tree_node*> [#uses=1] + %tmp23 = load %struct.tree_node** %float_type_node ; <%struct.tree_node*> [#uses=1] + %tmp39 = load %struct.tree_node** %char_type_node ; <%struct.tree_node*> [#uses=1] + %tmp48 = load %struct.tree_node** %signed_char_type_node ; <%struct.tree_node*> [#uses=1] + %tmp57 = load %struct.tree_node** %unsigned_char_type_node ; <%struct.tree_node*> [#uses=1] + %tmp66 = load %struct.tree_node** %short_integer_type_node ; <%struct.tree_node*> [#uses=1] + %tmp75 = load %struct.tree_node** %short_unsigned_type_node ; <%struct.tree_node*> [#uses=1] + br label %cond_true92 + +cond_true92: ; preds = %cond_true92.preheader, %cond_next84, %cond_true34 + %t.0.0 = phi %struct.tree_node* [ %parms, %cond_true92.preheader ], [ %tmp6, %cond_true34 ], [ %tmp6, %cond_next84 ] ; <%struct.tree_node*> [#uses=2] + %tmp = cast %struct.tree_node* %t.0.0 to %struct.tree_list* ; <%struct.tree_list*> [#uses=1] + %tmp = getelementptr %struct.tree_list* %tmp, int 0, uint 2 ; <%struct.tree_node**> [#uses=1] + %tmp2 = load %struct.tree_node** %tmp ; <%struct.tree_node*> [#uses=5] + %tmp4 = cast %struct.tree_node* %t.0.0 to %struct.tree_common* ; <%struct.tree_common*> [#uses=1] + %tmp5 = getelementptr %struct.tree_common* %tmp4, int 0, uint 0 ; <%struct.tree_node**> [#uses=1] + %tmp6 = load %struct.tree_node** %tmp5 ; <%struct.tree_node*> [#uses=3] + %tmp = seteq %struct.tree_node* %tmp6, null ; <bool> [#uses=3] + br bool %tmp, label %cond_true, label %cond_next12 + +return: ; preds = %cond_next84, %cond_true34, %cond_next18, %cond_next12, %cond_true, %entry + %retval.0 = phi int [ 1, %entry ], [ 1, %cond_next84 ], [ %.mux, %cond_true34 ], [ 0, %cond_next18 ], [ 0, %cond_next12 ], [ 0, %cond_true ] ; <int> [#uses=1] + ret int %retval.0 +} diff --git a/test/CodeGen/Generic/2006-03-27-DebugInfoNULLDeclare.ll b/test/CodeGen/Generic/2006-03-27-DebugInfoNULLDeclare.ll new file mode 100644 index 0000000..4e262f8 --- /dev/null +++ b/test/CodeGen/Generic/2006-03-27-DebugInfoNULLDeclare.ll @@ -0,0 +1,10 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +implementation ; Functions: + +declare void %llvm.dbg.declare({ }*, { }*) + +void %foo() { + call void %llvm.dbg.declare( { }* null, { }* null ) + ret void +} diff --git a/test/CodeGen/Generic/2006-04-11-vecload.ll b/test/CodeGen/Generic/2006-04-11-vecload.ll new file mode 100644 index 0000000..056edac --- /dev/null +++ b/test/CodeGen/Generic/2006-04-11-vecload.ll @@ -0,0 +1,12 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=x86 -mcpu=yonah + +; The vload was getting memoized to the previous scalar load! + +void %VertexProgram2() { + %xFloat0.688 = load float* null ; <float> [#uses=0] + %loadVector37.712 = load <4 x float>* null ; <<4 x float>> [#uses=1] + %inFloat3.713 = insertelement <4 x float> %loadVector37.712, float 0.000000e+00, uint 3 ; <<4 x float>> [#uses=1] + store <4 x float> %inFloat3.713, <4 x float>* null + unreachable +} + diff --git a/test/CodeGen/Generic/2006-04-26-SetCCAnd.ll b/test/CodeGen/Generic/2006-04-26-SetCCAnd.ll new file mode 100644 index 0000000..2a424be --- /dev/null +++ b/test/CodeGen/Generic/2006-04-26-SetCCAnd.ll @@ -0,0 +1,43 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc +; PR748 + +%G = external global ushort ; <ushort*> [#uses=1] + +implementation ; Functions: + +void %OmNewObjHdr() { +entry: + br bool false, label %endif.4, label %then.0 + +then.0: ; preds = %entry + ret void + +endif.4: ; preds = %entry + br bool false, label %else.3, label %shortcirc_next.3 + +shortcirc_next.3: ; preds = %endif.4 + ret void + +else.3: ; preds = %endif.4 + switch int 0, label %endif.10 [ + int 5001, label %then.10 + int -5008, label %then.10 + ] + +then.10: ; preds = %else.3, %else.3 + %tmp.112 = load ushort* null ; <ushort> [#uses=2] + %tmp.113 = load ushort* %G ; <ushort> [#uses=2] + %tmp.114 = setgt ushort %tmp.112, %tmp.113 ; <bool> [#uses=1] + %tmp.120 = setlt ushort %tmp.112, %tmp.113 ; <bool> [#uses=1] + %bothcond = and bool %tmp.114, %tmp.120 ; <bool> [#uses=1] + br bool %bothcond, label %else.4, label %then.11 + +then.11: ; preds = %then.10 + ret void + +else.4: ; preds = %then.10 + ret void + +endif.10: ; preds = %else.3 + ret void +} diff --git a/test/CodeGen/Generic/2006-04-28-Sign-extend-bool.ll b/test/CodeGen/Generic/2006-04-28-Sign-extend-bool.ll new file mode 100644 index 0000000..068d680 --- /dev/null +++ b/test/CodeGen/Generic/2006-04-28-Sign-extend-bool.ll @@ -0,0 +1,10 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +int %test(int %tmp93) { + %tmp98 = shl int %tmp93, ubyte 31 ; <int> [#uses=1] + %tmp99 = shr int %tmp98, ubyte 31 ; <int> [#uses=1] + %tmp99 = cast int %tmp99 to sbyte ; <sbyte> [#uses=1] + %tmp99100 = cast sbyte %tmp99 to int ; <int> [#uses=1] + ret int %tmp99100 +} + diff --git a/test/CodeGen/Generic/2006-05-06-GEP-Cast-Sink-Crash.ll b/test/CodeGen/Generic/2006-05-06-GEP-Cast-Sink-Crash.ll new file mode 100644 index 0000000..ac7e19d --- /dev/null +++ b/test/CodeGen/Generic/2006-05-06-GEP-Cast-Sink-Crash.ll @@ -0,0 +1,33 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + + %struct.FILE = type { ubyte*, int, int, short, short, %struct.__sbuf, int, sbyte*, int (sbyte*)*, int (sbyte*, sbyte*, int)*, long (sbyte*, long, int)*, int (sbyte*, sbyte*, int)*, %struct.__sbuf, %struct.__sFILEX*, int, [3 x ubyte], [1 x ubyte], %struct.__sbuf, int, long } + %struct.SYMBOL_TABLE_ENTRY = type { [9 x sbyte], [9 x sbyte], int, int, uint, %struct.SYMBOL_TABLE_ENTRY* } + %struct.__sFILEX = type opaque + %struct.__sbuf = type { ubyte*, int } +%str14 = external global [6 x sbyte] ; <[6 x sbyte]*> [#uses=0] + +implementation ; Functions: + +declare void %fprintf(int, ...) + +void %OUTPUT_TABLE(%struct.SYMBOL_TABLE_ENTRY* %SYM_TAB) { +entry: + %tmp11 = getelementptr %struct.SYMBOL_TABLE_ENTRY* %SYM_TAB, int 0, uint 1, int 0 ; <sbyte*> [#uses=2] + %tmp.i = cast sbyte* %tmp11 to ubyte* ; <ubyte*> [#uses=1] + br label %bb.i + +bb.i: ; preds = %cond_next.i, %entry + %s1.0.i = phi ubyte* [ %tmp.i, %entry ], [ null, %cond_next.i ] ; <ubyte*> [#uses=0] + br bool false, label %cond_true.i31, label %cond_next.i + +cond_true.i31: ; preds = %bb.i + call void (int, ...)* %fprintf( int 0, sbyte* %tmp11, sbyte* null ) + ret void + +cond_next.i: ; preds = %bb.i + br bool false, label %bb.i, label %bb19.i + +bb19.i: ; preds = %cond_next.i + ret void +} + diff --git a/test/CodeGen/Generic/2006-06-12-LowerSwitchCrash.ll b/test/CodeGen/Generic/2006-06-12-LowerSwitchCrash.ll new file mode 100644 index 0000000..0cf2e93 --- /dev/null +++ b/test/CodeGen/Generic/2006-06-12-LowerSwitchCrash.ll @@ -0,0 +1,10 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -fast + +float %test(uint %tmp12771278) { + switch uint %tmp12771278, label %bb1279 [ + ] + +bb1279: ; preds = %cond_next1272 + ret float 1.0 +} + diff --git a/test/CodeGen/Generic/2006-06-13-ComputeMaskedBitsCrash.ll b/test/CodeGen/Generic/2006-06-13-ComputeMaskedBitsCrash.ll new file mode 100644 index 0000000..a910b58 --- /dev/null +++ b/test/CodeGen/Generic/2006-06-13-ComputeMaskedBitsCrash.ll @@ -0,0 +1,37 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -fast + + %struct.cl_perfunc_opts = type { ubyte, ubyte, ubyte, ubyte, ubyte, ubyte, ubyte, ubyte, ubyte, ubyte, ubyte, ubyte, int, int, int, int, int, int, int } +%cl_pf_opts = external global %struct.cl_perfunc_opts ; <%struct.cl_perfunc_opts*> [#uses=2] + +implementation ; Functions: + +void %set_flags_from_O() { +entry: + %tmp22 = setgt int 0, 0 ; <bool> [#uses=1] + br bool %tmp22, label %cond_true23, label %cond_next159 + +cond_true23: ; preds = %entry + %tmp138 = getelementptr %struct.cl_perfunc_opts* %cl_pf_opts, int 0, uint 8 ; <ubyte*> [#uses=1] + %tmp138 = cast ubyte* %tmp138 to uint* ; <uint*> [#uses=2] + %tmp139 = load uint* %tmp138 ; <uint> [#uses=1] + %tmp140 = shl uint 1, ubyte 27 ; <uint> [#uses=1] + %tmp141 = and uint %tmp140, 134217728 ; <uint> [#uses=1] + %tmp142 = and uint %tmp139, 4160749567 ; <uint> [#uses=1] + %tmp143 = or uint %tmp142, %tmp141 ; <uint> [#uses=1] + store uint %tmp143, uint* %tmp138 + %tmp144 = getelementptr %struct.cl_perfunc_opts* %cl_pf_opts, int 0, uint 8 ; <ubyte*> [#uses=1] + %tmp144 = cast ubyte* %tmp144 to uint* ; <uint*> [#uses=1] + %tmp145 = load uint* %tmp144 ; <uint> [#uses=1] + %tmp146 = shl uint %tmp145, ubyte 22 ; <uint> [#uses=1] + %tmp147 = shr uint %tmp146, ubyte 31 ; <uint> [#uses=1] + %tmp147 = cast uint %tmp147 to ubyte ; <ubyte> [#uses=1] + %tmp148 = seteq ubyte %tmp147, 0 ; <bool> [#uses=1] + br bool %tmp148, label %cond_true149, label %cond_next159 + +cond_true149: ; preds = %cond_true23 + %tmp150 = cast ubyte* null to uint* ; <uint*> [#uses=0] + ret void + +cond_next159: ; preds = %cond_true23, %entry + ret void +} diff --git a/test/CodeGen/Generic/2006-06-28-SimplifySetCCCrash.ll b/test/CodeGen/Generic/2006-06-28-SimplifySetCCCrash.ll new file mode 100644 index 0000000..1fe13f8 --- /dev/null +++ b/test/CodeGen/Generic/2006-06-28-SimplifySetCCCrash.ll @@ -0,0 +1,281 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + %struct.rtunion = type { long } + %struct.rtx_def = type { ushort, ubyte, ubyte, [1 x %struct.rtunion] } +%ix86_cpu = external global uint ; <uint*> [#uses=1] +%which_alternative = external global int ; <int*> [#uses=3] + +implementation ; Functions: + +declare fastcc int %recog() + +void %athlon_fp_unit_ready_cost() { +entry: + %tmp = setlt int 0, 0 ; <bool> [#uses=1] + br bool %tmp, label %cond_true.i, label %cond_true + +cond_true: ; preds = %entry + ret void + +cond_true.i: ; preds = %entry + %tmp8.i = tail call fastcc int %recog( ) ; <int> [#uses=1] + switch int %tmp8.i, label %UnifiedReturnBlock [ + int -1, label %bb2063 + int 19, label %bb2035 + int 20, label %bb2035 + int 21, label %bb2035 + int 23, label %bb2035 + int 24, label %bb2035 + int 27, label %bb2035 + int 32, label %bb2035 + int 33, label %bb1994 + int 35, label %bb2035 + int 36, label %bb1994 + int 90, label %bb1948 + int 94, label %bb1948 + int 95, label %bb1948 + int 101, label %bb1648 + int 102, label %bb1648 + int 103, label %bb1648 + int 104, label %bb1648 + int 133, label %bb1419 + int 135, label %bb1238 + int 136, label %bb1238 + int 137, label %bb1238 + int 138, label %bb1238 + int 139, label %bb1201 + int 140, label %bb1201 + int 141, label %bb1154 + int 142, label %bb1126 + int 144, label %bb1201 + int 145, label %bb1126 + int 146, label %bb1201 + int 147, label %bb1126 + int 148, label %bb1201 + int 149, label %bb1126 + int 150, label %bb1201 + int 151, label %bb1126 + int 152, label %bb1096 + int 153, label %bb1096 + int 154, label %bb1096 + int 157, label %bb1096 + int 158, label %bb1096 + int 159, label %bb1096 + int 162, label %bb1096 + int 163, label %bb1096 + int 164, label %bb1096 + int 167, label %bb1201 + int 168, label %bb1201 + int 170, label %bb1201 + int 171, label %bb1201 + int 173, label %bb1201 + int 174, label %bb1201 + int 176, label %bb1201 + int 177, label %bb1201 + int 179, label %bb993 + int 180, label %bb993 + int 181, label %bb993 + int 182, label %bb993 + int 183, label %bb993 + int 184, label %bb993 + int 365, label %bb1126 + int 366, label %bb1126 + int 367, label %bb1126 + int 368, label %bb1126 + int 369, label %bb1126 + int 370, label %bb1126 + int 371, label %bb1126 + int 372, label %bb1126 + int 373, label %bb1126 + int 384, label %bb1126 + int 385, label %bb1126 + int 386, label %bb1126 + int 387, label %bb1126 + int 388, label %bb1126 + int 389, label %bb1126 + int 390, label %bb1126 + int 391, label %bb1126 + int 392, label %bb1126 + int 525, label %bb919 + int 526, label %bb839 + int 528, label %bb919 + int 529, label %bb839 + int 531, label %cond_next6.i119 + int 532, label %cond_next6.i97 + int 533, label %cond_next6.i81 + int 534, label %bb495 + int 536, label %cond_next6.i81 + int 537, label %cond_next6.i81 + int 538, label %bb396 + int 539, label %bb288 + int 541, label %bb396 + int 542, label %bb396 + int 543, label %bb396 + int 544, label %bb396 + int 545, label %bb189 + int 546, label %cond_next6.i + int 547, label %bb189 + int 548, label %cond_next6.i + int 549, label %bb189 + int 550, label %cond_next6.i + int 551, label %bb189 + int 552, label %cond_next6.i + int 553, label %bb189 + int 554, label %cond_next6.i + int 555, label %bb189 + int 556, label %cond_next6.i + int 557, label %bb189 + int 558, label %cond_next6.i + int 618, label %bb40 + int 619, label %bb18 + int 620, label %bb40 + int 621, label %bb10 + int 622, label %bb10 + ] + +bb10: ; preds = %cond_true.i, %cond_true.i + ret void + +bb18: ; preds = %cond_true.i + ret void + +bb40: ; preds = %cond_true.i, %cond_true.i + ret void + +cond_next6.i: ; preds = %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i + ret void + +bb189: ; preds = %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i + ret void + +bb288: ; preds = %cond_true.i + ret void + +bb396: ; preds = %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i + ret void + +bb495: ; preds = %cond_true.i + ret void + +cond_next6.i81: ; preds = %cond_true.i, %cond_true.i, %cond_true.i + ret void + +cond_next6.i97: ; preds = %cond_true.i + ret void + +cond_next6.i119: ; preds = %cond_true.i + %tmp.i126 = seteq ushort 0, 78 ; <bool> [#uses=1] + br bool %tmp.i126, label %cond_next778, label %bb802 + +cond_next778: ; preds = %cond_next6.i119 + %tmp781 = seteq uint 0, 1 ; <bool> [#uses=1] + br bool %tmp781, label %cond_next784, label %bb790 + +cond_next784: ; preds = %cond_next778 + %tmp785 = load uint* %ix86_cpu ; <uint> [#uses=1] + %tmp786 = seteq uint %tmp785, 5 ; <bool> [#uses=1] + br bool %tmp786, label %UnifiedReturnBlock, label %bb790 + +bb790: ; preds = %cond_next784, %cond_next778 + %tmp793 = seteq uint 0, 1 ; <bool> [#uses=0] + ret void + +bb802: ; preds = %cond_next6.i119 + ret void + +bb839: ; preds = %cond_true.i, %cond_true.i + ret void + +bb919: ; preds = %cond_true.i, %cond_true.i + ret void + +bb993: ; preds = %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i + ret void + +bb1096: ; preds = %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i + ret void + +bb1126: ; preds = %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i + ret void + +bb1154: ; preds = %cond_true.i + ret void + +bb1201: ; preds = %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i + ret void + +bb1238: ; preds = %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i + ret void + +bb1419: ; preds = %cond_true.i + ret void + +bb1648: ; preds = %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i + %tmp1650 = load int* %which_alternative ; <int> [#uses=1] + switch int %tmp1650, label %bb1701 [ + int 0, label %cond_next1675 + int 1, label %cond_next1675 + int 2, label %cond_next1675 + ] + +cond_next1675: ; preds = %bb1648, %bb1648, %bb1648 + ret void + +bb1701: ; preds = %bb1648 + %tmp1702 = load int* %which_alternative ; <int> [#uses=1] + switch int %tmp1702, label %bb1808 [ + int 0, label %cond_next1727 + int 1, label %cond_next1727 + int 2, label %cond_next1727 + ] + +cond_next1727: ; preds = %bb1701, %bb1701, %bb1701 + ret void + +bb1808: ; preds = %bb1701 + %bothcond696 = or bool false, false ; <bool> [#uses=1] + br bool %bothcond696, label %bb1876, label %cond_next1834 + +cond_next1834: ; preds = %bb1808 + ret void + +bb1876: ; preds = %bb1808 + %tmp1877signed = load int* %which_alternative ; <int> [#uses=4] + %tmp1877 = cast int %tmp1877signed to uint ; <uint> [#uses=1] + %bothcond699 = setlt uint %tmp1877, 2 ; <bool> [#uses=1] + %tmp1888 = seteq int %tmp1877signed, 2 ; <bool> [#uses=1] + %bothcond700 = or bool %bothcond699, %tmp1888 ; <bool> [#uses=1] + %bothcond700.not = xor bool %bothcond700, true ; <bool> [#uses=1] + %tmp1894 = seteq int %tmp1877signed, 3 ; <bool> [#uses=1] + %bothcond701 = or bool %tmp1894, %bothcond700.not ; <bool> [#uses=1] + %bothcond702 = or bool %bothcond701, false ; <bool> [#uses=1] + br bool %bothcond702, label %UnifiedReturnBlock, label %cond_next1902 + +cond_next1902: ; preds = %bb1876 + switch int %tmp1877signed, label %cond_next1937 [ + int 0, label %bb1918 + int 1, label %bb1918 + int 2, label %bb1918 + ] + +bb1918: ; preds = %cond_next1902, %cond_next1902, %cond_next1902 + ret void + +cond_next1937: ; preds = %cond_next1902 + ret void + +bb1948: ; preds = %cond_true.i, %cond_true.i, %cond_true.i + ret void + +bb1994: ; preds = %cond_true.i, %cond_true.i + ret void + +bb2035: ; preds = %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i, %cond_true.i + ret void + +bb2063: ; preds = %cond_true.i + ret void + +UnifiedReturnBlock: ; preds = %bb1876, %cond_next784, %cond_true.i + %UnifiedRetVal = phi int [ 100, %bb1876 ], [ 100, %cond_true.i ], [ 4, %cond_next784 ] ; <int> [#uses=0] + ret void +} diff --git a/test/CodeGen/Generic/2006-07-03-schedulers.ll b/test/CodeGen/Generic/2006-07-03-schedulers.ll new file mode 100644 index 0000000..6edb7a0 --- /dev/null +++ b/test/CodeGen/Generic/2006-07-03-schedulers.ll @@ -0,0 +1,40 @@ +; RUN: llvm-upgrade %s | llvm-as | llc -pre-RA-sched=none +; RUN: llvm-upgrade %s | llvm-as | llc -pre-RA-sched=default +; RUN: llvm-upgrade %s | llvm-as | llc -pre-RA-sched=simple +; RUN: llvm-upgrade %s | llvm-as | llc -pre-RA-sched=simple-noitin +; RUN: llvm-upgrade %s | llvm-as | llc -pre-RA-sched=list-td +; RUN: llvm-upgrade %s | llvm-as | llc -pre-RA-sched=list-tdrr +; RUN: llvm-upgrade %s | llvm-as | llc -pre-RA-sched=list-burr +; PR859 + +implementation +declare int "printf"(sbyte*, int, float) + + +int "testissue"(int %i, float %x, float %y) +begin + br label %bb1 +bb1: + %x1 = mul float %x, %y ;; x1 + %y1 = mul float %y, 0.75 ;; y1 + %z1 = add float %x1, %y1 ;; z1 = x1 + y1 + + %x2 = mul float %x, 0.5 ;; x2 + %y2 = mul float %y, 0.9 ;; y2 + %z2 = add float %x2, %y2 ;; z2 = x2 + y2 + + %z3 = add float %z1, %z2 ;; z3 = z1 + z2 + + %i1 = shl int %i, ubyte 3 ;; i1 + %j1 = add int %i, 7 ;; j1 + %m1 = add int %i1, %j1 ;; k1 = i1 + j1 +;; %m1 = div int %k1, 99 ;; m1 = k1 / 99 + + %b = setle int %m1, 6 ;; (m1 <= 6)? + br bool %b, label %bb1, label %bb2 + +bb2: + %Msg = cast ulong 0 to sbyte * + call int %printf(sbyte* %Msg, int %m1, float %z3) + ret int 0 +end diff --git a/test/CodeGen/Generic/2006-08-30-CoallescerCrash.ll b/test/CodeGen/Generic/2006-08-30-CoallescerCrash.ll new file mode 100644 index 0000000..68aadc5 --- /dev/null +++ b/test/CodeGen/Generic/2006-08-30-CoallescerCrash.ll @@ -0,0 +1,115 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + + %struct.CUMULATIVE_ARGS = type { int, int, int, int, int, int, int, int, int, int, int, int, int, int } + %struct.VEC_edge = type { uint, uint, [1 x %struct.edge_def*] } + %struct._obstack_chunk = type { sbyte*, %struct._obstack_chunk*, [4 x sbyte] } + %struct.basic_block_def = type { %struct.rtx_def*, %struct.rtx_def*, %struct.tree_node*, %struct.VEC_edge*, %struct.VEC_edge*, %struct.bitmap_head_def*, %struct.bitmap_head_def*, sbyte*, %struct.loop*, [2 x %struct.et_node*], %struct.basic_block_def*, %struct.basic_block_def*, %struct.reorder_block_def*, %struct.bb_ann_d*, long, int, int, int, int } + %struct.bb_ann_d = type { %struct.tree_node*, ubyte, %struct.edge_prediction* } + %struct.bitmap_element_def = type { %struct.bitmap_element_def*, %struct.bitmap_element_def*, uint, [4 x uint] } + %struct.bitmap_head_def = type { %struct.bitmap_element_def*, %struct.bitmap_element_def*, uint, %struct.bitmap_obstack* } + %struct.bitmap_obstack = type { %struct.bitmap_element_def*, %struct.bitmap_head_def*, %struct.obstack } + %struct.cost_pair = type { %struct.iv_cand*, uint, %struct.bitmap_head_def* } + %struct.dataflow_d = type { %struct.varray_head_tag*, [2 x %struct.tree_node*] } + %struct.def_operand_ptr = type { %struct.tree_node** } + %struct.def_optype_d = type { uint, [1 x %struct.def_operand_ptr] } + %struct.edge_def = type { %struct.basic_block_def*, %struct.basic_block_def*, %struct.edge_def_insns, sbyte*, %struct.location_t*, int, int, long, uint } + %struct.edge_def_insns = type { %struct.rtx_def* } + %struct.edge_prediction = type { %struct.edge_prediction*, %struct.edge_def*, uint, int } + %struct.eh_status = type opaque + %struct.emit_status = type { int, int, %struct.rtx_def*, %struct.rtx_def*, %struct.sequence_stack*, int, %struct.location_t, int, ubyte*, %struct.rtx_def** } + %struct.et_node = type opaque + %struct.expr_status = type { int, int, int, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def* } + %struct.function = type { %struct.eh_status*, %struct.expr_status*, %struct.emit_status*, %struct.varasm_status*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.function*, int, int, int, int, %struct.rtx_def*, %struct.CUMULATIVE_ARGS, %struct.rtx_def*, %struct.rtx_def*, %struct.initial_value_struct*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, ubyte, int, long, %struct.tree_node*, %struct.tree_node*, %struct.rtx_def*, %struct.varray_head_tag*, %struct.temp_slot*, int, %struct.var_refs_queue*, int, int, %struct.rtvec_def*, %struct.tree_node*, int, int, int, %struct.machine_function*, uint, uint, bool, bool, %struct.language_function*, %struct.rtx_def*, uint, int, int, int, %struct.location_t, %struct.varray_head_tag*, %struct.tree_node*, ubyte, ubyte, ubyte } + %struct.htab = type { uint (sbyte*)*, int (sbyte*, sbyte*)*, void (sbyte*)*, sbyte**, uint, uint, uint, uint, uint, sbyte* (uint, uint)*, void (sbyte*)*, sbyte*, sbyte* (sbyte*, uint, uint)*, void (sbyte*, sbyte*)*, uint } + %struct.initial_value_struct = type opaque + %struct.iv = type { %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, bool, bool, uint } + %struct.iv_cand = type { uint, bool, uint, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.iv*, uint } + %struct.iv_use = type { uint, uint, %struct.iv*, %struct.tree_node*, %struct.tree_node**, %struct.bitmap_head_def*, uint, %struct.cost_pair*, %struct.iv_cand* } + %struct.ivopts_data = type { %struct.loop*, %struct.htab*, uint, %struct.version_info*, %struct.bitmap_head_def*, uint, %struct.varray_head_tag*, %struct.varray_head_tag*, %struct.bitmap_head_def*, bool } + %struct.lang_decl = type opaque + %struct.language_function = type opaque + %struct.location_t = type { sbyte*, int } + %struct.loop = type { int, %struct.basic_block_def*, %struct.basic_block_def*, %struct.basic_block_def*, %struct.lpt_decision, uint, uint, %struct.edge_def**, int, %struct.basic_block_def*, %struct.basic_block_def*, uint, %struct.edge_def**, int, %struct.edge_def**, int, %struct.simple_bitmap_def*, int, %struct.loop**, int, %struct.loop*, %struct.loop*, %struct.loop*, %struct.loop*, int, sbyte*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, int, %struct.tree_node*, %struct.tree_node*, %struct.nb_iter_bound*, %struct.edge_def*, bool } + %struct.lpt_decision = type { uint, uint } + %struct.machine_function = type { %struct.stack_local_entry*, sbyte*, %struct.rtx_def*, int, int, int, int, int } + %struct.nb_iter_bound = type { %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.nb_iter_bound* } + %struct.obstack = type { int, %struct._obstack_chunk*, sbyte*, sbyte*, sbyte*, int, int, %struct._obstack_chunk* (sbyte*, int)*, void (sbyte*, %struct._obstack_chunk*)*, sbyte*, ubyte } + %struct.reorder_block_def = type { %struct.rtx_def*, %struct.rtx_def*, %struct.basic_block_def*, %struct.basic_block_def*, %struct.basic_block_def*, int, int, int } + %struct.rtvec_def = type { int, [1 x %struct.rtx_def*] } + %struct.rtx_def = type { ushort, ubyte, ubyte, %struct.u } + %struct.sequence_stack = type { %struct.rtx_def*, %struct.rtx_def*, %struct.sequence_stack* } + %struct.simple_bitmap_def = type { uint, uint, uint, [1 x ulong] } + %struct.stack_local_entry = type opaque + %struct.stmt_ann_d = type { %struct.tree_ann_common_d, ubyte, %struct.basic_block_def*, %struct.stmt_operands_d, %struct.dataflow_d*, %struct.bitmap_head_def*, uint } + %struct.stmt_operands_d = type { %struct.def_optype_d*, %struct.def_optype_d*, %struct.v_may_def_optype_d*, %struct.vuse_optype_d*, %struct.v_may_def_optype_d* } + %struct.temp_slot = type opaque + %struct.tree_ann_common_d = type { uint, sbyte*, %struct.tree_node* } + %struct.tree_ann_d = type { %struct.stmt_ann_d } + %struct.tree_common = type { %struct.tree_node*, %struct.tree_node*, %struct.tree_ann_d*, ubyte, ubyte, ubyte, ubyte, ubyte } + %struct.tree_decl = type { %struct.tree_common, %struct.location_t, uint, %struct.tree_node*, ubyte, ubyte, ubyte, ubyte, ubyte, ubyte, ubyte, uint, %struct.tree_decl_u1, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.rtx_def*, int, %struct.tree_decl_u2, %struct.tree_node*, %struct.tree_node*, long, %struct.lang_decl* } + %struct.tree_decl_u1 = type { long } + %struct.tree_decl_u2 = type { %struct.function* } + %struct.tree_node = type { %struct.tree_decl } + %struct.u = type { [1 x long] } + %struct.v_def_use_operand_type_t = type { %struct.tree_node*, %struct.tree_node* } + %struct.v_may_def_optype_d = type { uint, [1 x %struct.v_def_use_operand_type_t] } + %struct.var_refs_queue = type { %struct.rtx_def*, uint, int, %struct.var_refs_queue* } + %struct.varasm_status = type opaque + %struct.varray_head_tag = type { uint, uint, uint, sbyte*, %struct.u } + %struct.version_info = type { %struct.tree_node*, %struct.iv*, bool, uint, bool } + %struct.vuse_optype_d = type { uint, [1 x %struct.tree_node*] } + +implementation ; Functions: + +bool %determine_use_iv_cost(%struct.ivopts_data* %data, %struct.iv_use* %use, %struct.iv_cand* %cand) { +entry: + switch uint 0, label %bb91 [ + uint 0, label %bb + uint 1, label %bb6 + uint 3, label %cond_next135 + ] + +bb: ; preds = %entry + ret bool false + +bb6: ; preds = %entry + br bool false, label %bb87, label %cond_next27 + +cond_next27: ; preds = %bb6 + br bool false, label %cond_true30, label %cond_next55 + +cond_true30: ; preds = %cond_next27 + br bool false, label %cond_next41, label %cond_true35 + +cond_true35: ; preds = %cond_true30 + ret bool false + +cond_next41: ; preds = %cond_true30 + %tmp44 = call uint %force_var_cost( %struct.ivopts_data* %data, %struct.tree_node* null, %struct.bitmap_head_def** null ) ; <uint> [#uses=2] + %tmp46 = div uint %tmp44, 5 ; <uint> [#uses=1] + call void %set_use_iv_cost( %struct.ivopts_data* %data, %struct.iv_use* %use, %struct.iv_cand* %cand, uint %tmp46, %struct.bitmap_head_def* null ) + %tmp44.off = add uint %tmp44, 4244967296 ; <uint> [#uses=1] + %tmp52 = setgt uint %tmp44.off, 4 ; <bool> [#uses=1] + %tmp52 = cast bool %tmp52 to int ; <int> [#uses=1] + br label %bb87 + +cond_next55: ; preds = %cond_next27 + ret bool false + +bb87: ; preds = %cond_next41, %bb6 + %tmp2.0 = phi int [ %tmp52, %cond_next41 ], [ 1, %bb6 ] ; <int> [#uses=0] + ret bool false + +bb91: ; preds = %entry + ret bool false + +cond_next135: ; preds = %entry + %tmp193 = call bool %determine_use_iv_cost_generic( %struct.ivopts_data* %data, %struct.iv_use* %use, %struct.iv_cand* %cand ) ; <bool> [#uses=0] + ret bool false +} + +declare void %set_use_iv_cost(%struct.ivopts_data*, %struct.iv_use*, %struct.iv_cand*, uint, %struct.bitmap_head_def*) + +declare uint %force_var_cost(%struct.ivopts_data*, %struct.tree_node*, %struct.bitmap_head_def**) + +declare bool %determine_use_iv_cost_generic(%struct.ivopts_data*, %struct.iv_use*, %struct.iv_cand*) diff --git a/test/CodeGen/Generic/2006-09-02-LocalAllocCrash.ll b/test/CodeGen/Generic/2006-09-02-LocalAllocCrash.ll new file mode 100644 index 0000000..e2f07e8 --- /dev/null +++ b/test/CodeGen/Generic/2006-09-02-LocalAllocCrash.ll @@ -0,0 +1,115 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -regalloc=local + + %struct.CHESS_POSITION = type { ulong, ulong, ulong, ulong, ulong, ulong, ulong, ulong, ulong, ulong, ulong, ulong, ulong, ulong, ulong, ulong, ulong, ulong, uint, int, sbyte, sbyte, [64 x sbyte], sbyte, sbyte, sbyte, sbyte, sbyte } +%search = external global %struct.CHESS_POSITION ; <%struct.CHESS_POSITION*> [#uses=2] +%bishop_shift_rl45 = external global [64 x int] ; <[64 x int]*> [#uses=1] +%bishop_shift_rr45 = external global [64 x int] ; <[64 x int]*> [#uses=1] +%black_outpost = external global [64 x sbyte] ; <[64 x sbyte]*> [#uses=1] +%bishop_mobility_rl45 = external global [64 x [256 x int]] ; <[64 x [256 x int]]*> [#uses=1] +%bishop_mobility_rr45 = external global [64 x [256 x int]] ; <[64 x [256 x int]]*> [#uses=1] + +implementation ; Functions: + +declare fastcc int %FirstOne() + +fastcc void %Evaluate() { +entry: + br bool false, label %cond_false186, label %cond_true + +cond_true: ; preds = %entry + ret void + +cond_false186: ; preds = %entry + br bool false, label %cond_true293, label %bb203 + +bb203: ; preds = %cond_false186 + ret void + +cond_true293: ; preds = %cond_false186 + br bool false, label %cond_true298, label %cond_next317 + +cond_true298: ; preds = %cond_true293 + br bool false, label %cond_next518, label %cond_true397.preheader + +cond_next317: ; preds = %cond_true293 + ret void + +cond_true397.preheader: ; preds = %cond_true298 + ret void + +cond_next518: ; preds = %cond_true298 + br bool false, label %bb1069, label %cond_true522 + +cond_true522: ; preds = %cond_next518 + ret void + +bb1069: ; preds = %cond_next518 + br bool false, label %cond_next1131, label %bb1096 + +bb1096: ; preds = %bb1069 + ret void + +cond_next1131: ; preds = %bb1069 + br bool false, label %cond_next1207, label %cond_true1150 + +cond_true1150: ; preds = %cond_next1131 + ret void + +cond_next1207: ; preds = %cond_next1131 + br bool false, label %cond_next1219, label %cond_true1211 + +cond_true1211: ; preds = %cond_next1207 + ret void + +cond_next1219: ; preds = %cond_next1207 + br bool false, label %cond_true1223, label %cond_next1283 + +cond_true1223: ; preds = %cond_next1219 + br bool false, label %cond_true1254, label %cond_true1264 + +cond_true1254: ; preds = %cond_true1223 + br bool false, label %bb1567, label %cond_true1369.preheader + +cond_true1264: ; preds = %cond_true1223 + ret void + +cond_next1283: ; preds = %cond_next1219 + ret void + +cond_true1369.preheader: ; preds = %cond_true1254 + ret void + +bb1567: ; preds = %cond_true1254 + %tmp1580 = load ulong* getelementptr (%struct.CHESS_POSITION* %search, int 0, uint 3) ; <ulong> [#uses=1] + %tmp1591 = load ulong* getelementptr (%struct.CHESS_POSITION* %search, int 0, uint 4) ; <ulong> [#uses=1] + %tmp1572 = tail call fastcc int %FirstOne( ) ; <int> [#uses=5] + %tmp1582 = getelementptr [64 x int]* %bishop_shift_rl45, int 0, int %tmp1572 ; <int*> [#uses=1] + %tmp1583 = load int* %tmp1582 ; <int> [#uses=1] + %tmp1583 = cast int %tmp1583 to ubyte ; <ubyte> [#uses=1] + %tmp1584 = shr ulong %tmp1580, ubyte %tmp1583 ; <ulong> [#uses=1] + %tmp1584 = cast ulong %tmp1584 to uint ; <uint> [#uses=1] + %tmp1585 = and uint %tmp1584, 255 ; <uint> [#uses=1] + %tmp1587 = getelementptr [64 x [256 x int]]* %bishop_mobility_rl45, int 0, int %tmp1572, uint %tmp1585 ; <int*> [#uses=1] + %tmp1588 = load int* %tmp1587 ; <int> [#uses=1] + %tmp1593 = getelementptr [64 x int]* %bishop_shift_rr45, int 0, int %tmp1572 ; <int*> [#uses=1] + %tmp1594 = load int* %tmp1593 ; <int> [#uses=1] + %tmp1594 = cast int %tmp1594 to ubyte ; <ubyte> [#uses=1] + %tmp1595 = shr ulong %tmp1591, ubyte %tmp1594 ; <ulong> [#uses=1] + %tmp1595 = cast ulong %tmp1595 to uint ; <uint> [#uses=1] + %tmp1596 = and uint %tmp1595, 255 ; <uint> [#uses=1] + %tmp1598 = getelementptr [64 x [256 x int]]* %bishop_mobility_rr45, int 0, int %tmp1572, uint %tmp1596 ; <int*> [#uses=1] + %tmp1599 = load int* %tmp1598 ; <int> [#uses=1] + %tmp1600.neg = sub int 0, %tmp1588 ; <int> [#uses=1] + %tmp1602 = sub int %tmp1600.neg, %tmp1599 ; <int> [#uses=1] + %tmp1604 = getelementptr [64 x sbyte]* %black_outpost, int 0, int %tmp1572 ; <sbyte*> [#uses=1] + %tmp1605 = load sbyte* %tmp1604 ; <sbyte> [#uses=1] + %tmp1606 = seteq sbyte %tmp1605, 0 ; <bool> [#uses=1] + br bool %tmp1606, label %cond_next1637, label %cond_true1607 + +cond_true1607: ; preds = %bb1567 + ret void + +cond_next1637: ; preds = %bb1567 + %tmp1662 = sub int %tmp1602, 0 ; <int> [#uses=0] + ret void +} diff --git a/test/CodeGen/Generic/2006-09-06-SwitchLowering.ll b/test/CodeGen/Generic/2006-09-06-SwitchLowering.ll new file mode 100644 index 0000000..2b12926 --- /dev/null +++ b/test/CodeGen/Generic/2006-09-06-SwitchLowering.ll @@ -0,0 +1,96 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +void %foo() { + br label %cond_true813.i + +cond_true813.i: ; preds = %0 + br bool false, label %cond_true818.i, label %cond_next1146.i + +cond_true818.i: ; preds = %cond_true813.i + br bool false, label %recog_memoized.exit52, label %cond_next1146.i + +recog_memoized.exit52: ; preds = %cond_true818.i + switch int 0, label %bb886.i.preheader [ + int 0, label %bb907.i + int 44, label %bb866.i + int 103, label %bb874.i + int 114, label %bb874.i + ] + +bb857.i: ; preds = %bb886.i, %bb866.i + %tmp862.i494.24 = phi sbyte* [ null, %bb866.i ], [ %tmp862.i494.26, %bb886.i ] ; <sbyte*> [#uses=4] + switch int 0, label %bb886.i.preheader [ + int 0, label %bb907.i + int 44, label %bb866.i + int 103, label %bb874.i + int 114, label %bb874.i + ] + +bb866.i.loopexit: ; preds = %bb874.i + br label %bb866.i + +bb866.i.loopexit31: ; preds = %cond_true903.i + br label %bb866.i + +bb866.i: ; preds = %bb866.i.loopexit31, %bb866.i.loopexit, %bb857.i, %recog_memoized.exit52 + br bool false, label %bb907.i, label %bb857.i + +bb874.i.preheader.loopexit: ; preds = %cond_true903.i, %cond_true903.i + ret void + +bb874.i: ; preds = %bb857.i, %bb857.i, %recog_memoized.exit52, %recog_memoized.exit52 + %tmp862.i494.25 = phi sbyte* [ %tmp862.i494.24, %bb857.i ], [ %tmp862.i494.24, %bb857.i ], [ undef, %recog_memoized.exit52 ], [ undef, %recog_memoized.exit52 ] ; <sbyte*> [#uses=1] + switch int 0, label %bb886.i.preheader.loopexit [ + int 0, label %bb907.i + int 44, label %bb866.i.loopexit + int 103, label %bb874.i.backedge + int 114, label %bb874.i.backedge + ] + +bb874.i.backedge: ; preds = %bb874.i, %bb874.i + ret void + +bb886.i.preheader.loopexit: ; preds = %bb874.i + ret void + +bb886.i.preheader: ; preds = %bb857.i, %recog_memoized.exit52 + %tmp862.i494.26 = phi sbyte* [ undef, %recog_memoized.exit52 ], [ %tmp862.i494.24, %bb857.i ] ; <sbyte*> [#uses=1] + br label %bb886.i + +bb886.i: ; preds = %cond_true903.i, %bb886.i.preheader + br bool false, label %bb857.i, label %cond_true903.i + +cond_true903.i: ; preds = %bb886.i + switch int 0, label %bb886.i [ + int 0, label %bb907.i + int 44, label %bb866.i.loopexit31 + int 103, label %bb874.i.preheader.loopexit + int 114, label %bb874.i.preheader.loopexit + ] + +bb907.i: ; preds = %cond_true903.i, %bb874.i, %bb866.i, %bb857.i, %recog_memoized.exit52 + %tmp862.i494.0 = phi sbyte* [ %tmp862.i494.24, %bb857.i ], [ null, %bb866.i ], [ undef, %recog_memoized.exit52 ], [ %tmp862.i494.25, %bb874.i ], [ null, %cond_true903.i ] ; <sbyte*> [#uses=1] + br bool false, label %cond_next1146.i, label %cond_true910.i + +cond_true910.i: ; preds = %bb907.i + ret void + +cond_next1146.i: ; preds = %bb907.i, %cond_true818.i, %cond_true813.i + %tmp862.i494.1 = phi sbyte* [ %tmp862.i494.0, %bb907.i ], [ undef, %cond_true818.i ], [ undef, %cond_true813.i ] ; <sbyte*> [#uses=0] + ret void + +bb2060.i: ; No predecessors! + br bool false, label %cond_true2064.i, label %bb2067.i + +cond_true2064.i: ; preds = %bb2060.i + unreachable + +bb2067.i: ; preds = %bb2060.i + ret void + +cond_next3473: ; No predecessors! + ret void + +cond_next3521: ; No predecessors! + ret void +} diff --git a/test/CodeGen/Generic/2006-10-27-CondFolding.ll b/test/CodeGen/Generic/2006-10-27-CondFolding.ll new file mode 100644 index 0000000..8bf3c11 --- /dev/null +++ b/test/CodeGen/Generic/2006-10-27-CondFolding.ll @@ -0,0 +1,21 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +void %start_pass_huff(int %gather_statistics) { +entry: + %tmp = seteq int %gather_statistics, 0 ; <bool> [#uses=1] + br bool false, label %cond_next22, label %bb166 + +cond_next22: ; preds = %entry + %bothcond = and bool false, %tmp ; <bool> [#uses=1] + br bool %bothcond, label %bb34, label %bb46 + +bb34: ; preds = %cond_next22 + ret void + +bb46: ; preds = %cond_next22 + ret void + +bb166: ; preds = %entry + ret void +} + diff --git a/test/CodeGen/Generic/2006-10-29-Crash.ll b/test/CodeGen/Generic/2006-10-29-Crash.ll new file mode 100644 index 0000000..8857c93 --- /dev/null +++ b/test/CodeGen/Generic/2006-10-29-Crash.ll @@ -0,0 +1,21 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +void %form_component_prediction(int %dy) { +entry: + %tmp7 = and int %dy, 1 ; <int> [#uses=1] + %tmp27 = seteq int %tmp7, 0 ; <bool> [#uses=1] + br bool false, label %cond_next30, label %bb115 + +cond_next30: ; preds = %entry + ret void + +bb115: ; preds = %entry + %bothcond1 = or bool %tmp27, false ; <bool> [#uses=1] + br bool %bothcond1, label %bb228, label %cond_next125 + +cond_next125: ; preds = %bb115 + ret void + +bb228: ; preds = %bb115 + ret void +} diff --git a/test/CodeGen/Generic/2006-11-06-MemIntrinsicExpand.ll b/test/CodeGen/Generic/2006-11-06-MemIntrinsicExpand.ll new file mode 100644 index 0000000..330bee6 --- /dev/null +++ b/test/CodeGen/Generic/2006-11-06-MemIntrinsicExpand.ll @@ -0,0 +1,11 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=x86 | not grep adc + +; PR987 + +declare void %llvm.memcpy.i64(sbyte*, sbyte*, ulong, uint) + +void %foo(ulong %a) { + %b = add ulong %a, 1 +call void %llvm.memcpy.i64( sbyte* null, sbyte* null, ulong %b, uint 1 ) + ret void +} diff --git a/test/CodeGen/Generic/2006-11-20-DAGCombineCrash.ll b/test/CodeGen/Generic/2006-11-20-DAGCombineCrash.ll new file mode 100644 index 0000000..6a76079 --- /dev/null +++ b/test/CodeGen/Generic/2006-11-20-DAGCombineCrash.ll @@ -0,0 +1,44 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc +; PR1011 + + %struct.mng_data = type { sbyte* (%struct.mng_data*, uint)*, int, int, int, sbyte, sbyte, int, int, int, int, int } + +implementation ; Functions: + +void %mng_display_bgr565() { +entry: + br bool false, label %bb.preheader, label %return + +bb.preheader: ; preds = %entry + br bool false, label %cond_true48, label %cond_next80 + +cond_true48: ; preds = %bb.preheader + %tmp = load ubyte* null ; <ubyte> [#uses=1] + %tmp51 = cast ubyte %tmp to ushort ; <ushort> [#uses=1] + %tmp99 = load sbyte* null ; <sbyte> [#uses=1] + %tmp54 = cast sbyte %tmp99 to ubyte ; <ubyte> [#uses=1] + %tmp54 = cast ubyte %tmp54 to int ; <int> [#uses=1] + %tmp55 = lshr int %tmp54, ubyte 3 ; <int> [#uses=1] + %tmp55 = cast int %tmp55 to ushort ; <ushort> [#uses=1] + %tmp52 = shl ushort %tmp51, ubyte 5 ; <ushort> [#uses=1] + %tmp56 = and ushort %tmp55, 28 ; <ushort> [#uses=1] + %tmp57 = or ushort %tmp56, %tmp52 ; <ushort> [#uses=1] + %tmp60 = cast ushort %tmp57 to uint ; <uint> [#uses=1] + %tmp62 = xor uint 0, 65535 ; <uint> [#uses=1] + %tmp63 = mul uint %tmp60, %tmp62 ; <uint> [#uses=1] + %tmp65 = add uint 0, %tmp63 ; <uint> [#uses=1] + %tmp69 = add uint 0, %tmp65 ; <uint> [#uses=1] + %tmp70 = lshr uint %tmp69, ubyte 16 ; <uint> [#uses=1] + %tmp70 = cast uint %tmp70 to ushort ; <ushort> [#uses=1] + %tmp75 = lshr ushort %tmp70, ubyte 8 ; <ushort> [#uses=1] + %tmp75 = cast ushort %tmp75 to ubyte ; <ubyte> [#uses=1] + %tmp76 = lshr ubyte %tmp75, ubyte 5 ; <ubyte> [#uses=1] + store ubyte %tmp76, ubyte* null + ret void + +cond_next80: ; preds = %bb.preheader + ret void + +return: ; preds = %entry + ret void +} diff --git a/test/CodeGen/Generic/2006-12-16-InlineAsmCrash.ll b/test/CodeGen/Generic/2006-12-16-InlineAsmCrash.ll new file mode 100644 index 0000000..e4a3906 --- /dev/null +++ b/test/CodeGen/Generic/2006-12-16-InlineAsmCrash.ll @@ -0,0 +1,34 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=x86 +; PR1049 +target datalayout = "e-p:32:32" +target endian = little +target pointersize = 32 +target triple = "i686-pc-linux-gnu" + %struct.QBasicAtomic = type { int } + %struct.QByteArray = type { "struct.QByteArray::Data"* } + "struct.QByteArray::Data" = type { %struct.QBasicAtomic, int, int, sbyte*, [1 x sbyte] } + %struct.QFactoryLoader = type { %struct.QObject } + %struct.QImageIOHandler = type { int (...)**, %struct.QImageIOHandlerPrivate* } + %struct.QImageIOHandlerPrivate = type opaque + %struct.QImageWriter = type { %struct.QImageWriterPrivate* } + %struct.QImageWriterPrivate = type { %struct.QByteArray, %struct.QFactoryLoader*, bool, %struct.QImageIOHandler*, int, float, %struct.QString, %struct.QString, uint, %struct.QString, %struct.QImageWriter* } + "struct.QList<QByteArray>" = type { "struct.QList<QByteArray>::._20" } + "struct.QList<QByteArray>::._20" = type { %struct.QListData } + %struct.QListData = type { "struct.QListData::Data"* } + "struct.QListData::Data" = type { %struct.QBasicAtomic, int, int, int, ubyte, [1 x sbyte*] } + %struct.QObject = type { int (...)**, %struct.QObjectData* } + %struct.QObjectData = type { int (...)**, %struct.QObject*, %struct.QObject*, "struct.QList<QByteArray>", ubyte, [3 x ubyte], int, int } + %struct.QString = type { "struct.QString::Data"* } + "struct.QString::Data" = type { %struct.QBasicAtomic, int, int, ushort*, ubyte, ubyte, [1 x ushort] } + +implementation ; Functions: + +bool %_ZNK12QImageWriter8canWriteEv() { + %tmp62 = load %struct.QImageWriterPrivate** null ; <%struct.QImageWriterPrivate*> [#uses=1] + %tmp = getelementptr %struct.QImageWriterPrivate* %tmp62, int 0, uint 9 ; <%struct.QString*> [#uses=1] + %tmp75 = call %struct.QString* %_ZN7QStringaSERKS_( %struct.QString* %tmp, %struct.QString* null ) ; <%struct.QString*> [#uses=0] + call void asm sideeffect "lock\0Adecl $0\0Asetne 1", "=*m"( int* null ) + ret bool false +} + +declare %struct.QString* %_ZN7QStringaSERKS_(%struct.QString*, %struct.QString*) diff --git a/test/CodeGen/Generic/2007-01-15-LoadSelectCycle.ll b/test/CodeGen/Generic/2007-01-15-LoadSelectCycle.ll new file mode 100644 index 0000000..49203d9 --- /dev/null +++ b/test/CodeGen/Generic/2007-01-15-LoadSelectCycle.ll @@ -0,0 +1,12 @@ +; RUN: llvm-as < %s | llc +; PR1114 + +declare i1 @foo() + +define i32 @test(i32* %A, i32* %B) { + %a = load i32* %A + %b = load i32* %B + %cond = call i1 @foo() + %c = select i1 %cond, i32 %a, i32 %b + ret i32 %c +} diff --git a/test/CodeGen/Generic/2007-02-16-BranchFold.ll b/test/CodeGen/Generic/2007-02-16-BranchFold.ll new file mode 100644 index 0000000..0a8e49e --- /dev/null +++ b/test/CodeGen/Generic/2007-02-16-BranchFold.ll @@ -0,0 +1,95 @@ +; PR 1200 +; RUN: llvm-as < %s | llc -enable-tail-merge=0 | not grep jmp + +; ModuleID = '<stdin>' +target datalayout = "e-p:32:32" +target triple = "i686-apple-darwin8" + %struct.FILE = type { i8*, i32, i32, i16, i16, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, %struct.__sFILEX*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 } + %struct.Index_Map = type { i32, %struct.item_set** } + %struct.Item = type { [4 x i16], %struct.rule* } + %struct.__sFILEX = type opaque + %struct.__sbuf = type { i8*, i32 } + %struct.dimension = type { i16*, %struct.Index_Map, %struct.mapping*, i32, %struct.plankMap* } + %struct.item_set = type { i32, i32, %struct.operator*, [2 x %struct.item_set*], %struct.item_set*, i16*, %struct.Item*, %struct.Item* } + %struct.list = type { i8*, %struct.list* } + %struct.mapping = type { %struct.list**, i32, i32, i32, %struct.item_set** } + %struct.nonterminal = type { i8*, i32, i32, i32, %struct.plankMap*, %struct.rule* } + %struct.operator = type { i8*, i8, i32, i32, i32, i32, %struct.table* } + %struct.pattern = type { %struct.nonterminal*, %struct.operator*, [2 x %struct.nonterminal*] } + %struct.plank = type { i8*, %struct.list*, i32 } + %struct.plankMap = type { %struct.list*, i32, %struct.stateMap* } + %struct.rule = type { [4 x i16], i32, i32, i32, %struct.nonterminal*, %struct.pattern*, i8 } + %struct.stateMap = type { i8*, %struct.plank*, i32, i16* } + %struct.table = type { %struct.operator*, %struct.list*, i16*, [2 x %struct.dimension*], %struct.item_set** } +@outfile = external global %struct.FILE* ; <%struct.FILE**> [#uses=1] +@str1 = external global [11 x i8] ; <[11 x i8]*> [#uses=1] + +declare i32 @fprintf(%struct.FILE*, i8*, ...) + +define i16 @main_bb_2E_i9_2E_i_2E_i932_2E_ce(%struct.list* %l_addr.01.0.i2.i.i929, %struct.operator** %tmp66.i62.i.out) { +newFuncRoot: + br label %bb.i9.i.i932.ce + +NewDefault: ; preds = %LeafBlock, %LeafBlock1, %LeafBlock2, %LeafBlock3 + br label %bb36.i.i.exitStub + +bb36.i.i.exitStub: ; preds = %NewDefault + store %struct.operator* %tmp66.i62.i, %struct.operator** %tmp66.i62.i.out + ret i16 0 + +bb.i14.i.exitStub: ; preds = %LeafBlock + store %struct.operator* %tmp66.i62.i, %struct.operator** %tmp66.i62.i.out + ret i16 1 + +bb12.i.i935.exitStub: ; preds = %LeafBlock1 + store %struct.operator* %tmp66.i62.i, %struct.operator** %tmp66.i62.i.out + ret i16 2 + +bb20.i.i937.exitStub: ; preds = %LeafBlock2 + store %struct.operator* %tmp66.i62.i, %struct.operator** %tmp66.i62.i.out + ret i16 3 + +bb28.i.i938.exitStub: ; preds = %LeafBlock3 + store %struct.operator* %tmp66.i62.i, %struct.operator** %tmp66.i62.i.out + ret i16 4 + +bb.i9.i.i932.ce: ; preds = %newFuncRoot + %tmp1.i3.i.i930 = getelementptr %struct.list* %l_addr.01.0.i2.i.i929, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp2.i4.i.i931 = load i8** %tmp1.i3.i.i930 ; <i8*> [#uses=1] + %tmp66.i62.i = bitcast i8* %tmp2.i4.i.i931 to %struct.operator* ; <%struct.operator*> [#uses=7] + %tmp1.i6.i = getelementptr %struct.operator* %tmp66.i62.i, i32 0, i32 2 ; <i32*> [#uses=1] + %tmp2.i7.i = load i32* %tmp1.i6.i ; <i32> [#uses=1] + %tmp3.i8.i = load %struct.FILE** @outfile ; <%struct.FILE*> [#uses=1] + %tmp5.i9.i = call i32 (%struct.FILE*, i8*, ...)* @fprintf( %struct.FILE* %tmp3.i8.i, i8* getelementptr ([11 x i8]* @str1, i32 0, i32 0), i32 %tmp2.i7.i ) ; <i32> [#uses=0] + %tmp7.i10.i = getelementptr %struct.operator* %tmp66.i62.i, i32 0, i32 5 ; <i32*> [#uses=1] + %tmp8.i11.i = load i32* %tmp7.i10.i ; <i32> [#uses=7] + br label %NodeBlock5 + +NodeBlock5: ; preds = %bb.i9.i.i932.ce + icmp slt i32 %tmp8.i11.i, 1 ; <i1>:0 [#uses=1] + br i1 %0, label %NodeBlock, label %NodeBlock4 + +NodeBlock4: ; preds = %NodeBlock5 + icmp slt i32 %tmp8.i11.i, 2 ; <i1>:1 [#uses=1] + br i1 %1, label %LeafBlock2, label %LeafBlock3 + +LeafBlock3: ; preds = %NodeBlock4 + icmp eq i32 %tmp8.i11.i, 2 ; <i1>:2 [#uses=1] + br i1 %2, label %bb28.i.i938.exitStub, label %NewDefault + +LeafBlock2: ; preds = %NodeBlock4 + icmp eq i32 %tmp8.i11.i, 1 ; <i1>:3 [#uses=1] + br i1 %3, label %bb20.i.i937.exitStub, label %NewDefault + +NodeBlock: ; preds = %NodeBlock5 + icmp slt i32 %tmp8.i11.i, 0 ; <i1>:4 [#uses=1] + br i1 %4, label %LeafBlock, label %LeafBlock1 + +LeafBlock1: ; preds = %NodeBlock + icmp eq i32 %tmp8.i11.i, 0 ; <i1>:5 [#uses=1] + br i1 %5, label %bb12.i.i935.exitStub, label %NewDefault + +LeafBlock: ; preds = %NodeBlock + icmp eq i32 %tmp8.i11.i, -1 ; <i1>:6 [#uses=1] + br i1 %6, label %bb.i14.i.exitStub, label %NewDefault +} diff --git a/test/CodeGen/Generic/2007-02-23-DAGCombine-Miscompile.ll b/test/CodeGen/Generic/2007-02-23-DAGCombine-Miscompile.ll new file mode 100644 index 0000000..63a1498 --- /dev/null +++ b/test/CodeGen/Generic/2007-02-23-DAGCombine-Miscompile.ll @@ -0,0 +1,13 @@ +; PR1219 +; RUN: llvm-as < %s | llc -march=x86 | grep {movl \$1, %eax} + +define i32 @test(i1 %X) { +old_entry1: + %hvar2 = zext i1 %X to i32 + %C = icmp sgt i32 %hvar2, -1 + br i1 %C, label %cond_true15, label %cond_true +cond_true15: + ret i32 1 +cond_true: + ret i32 2 +} diff --git a/test/CodeGen/Generic/2007-02-25-invoke.ll b/test/CodeGen/Generic/2007-02-25-invoke.ll new file mode 100644 index 0000000..6dba99e --- /dev/null +++ b/test/CodeGen/Generic/2007-02-25-invoke.ll @@ -0,0 +1,12 @@ +; RUN: llvm-as < %s | llc + +; PR1224 + +declare i32 @test() +define i32 @test2() { + %A = invoke i32 @test() to label %invcont unwind label %blat +invcont: + ret i32 %A +blat: + ret i32 0 +} diff --git a/test/CodeGen/Generic/2007-04-08-MultipleFrameIndices.ll b/test/CodeGen/Generic/2007-04-08-MultipleFrameIndices.ll new file mode 100644 index 0000000..9cbf314 --- /dev/null +++ b/test/CodeGen/Generic/2007-04-08-MultipleFrameIndices.ll @@ -0,0 +1,11 @@ +; RUN: llvm-as < %s | llc +; XFAIL: sparc-sun-solaris2 +; PR1308 +; PR1557 + +define i32 @stuff(i32, ...) { + %foo = alloca i8* + %bar = alloca i32* + %A = call i32 asm sideeffect "inline asm $0 $2 $3 $4", "=r,0,i,m,m"( i32 0, i32 1, i8** %foo, i32** %bar ) + ret i32 %A +} diff --git a/test/CodeGen/Generic/2007-04-13-SwitchLowerBadPhi.ll b/test/CodeGen/Generic/2007-04-13-SwitchLowerBadPhi.ll new file mode 100644 index 0000000..b95a361 --- /dev/null +++ b/test/CodeGen/Generic/2007-04-13-SwitchLowerBadPhi.ll @@ -0,0 +1,27 @@ +; RUN: llvm-as < %s | llc -fast +; PR 1323 + +; ModuleID = 'test.bc' +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64" +target triple = "i686-apple-darwin8" + %struct.comp = type { i8*, i32, i8*, [3 x i8], i32 } + +define void @regbranch() { +cond_next240.i: + br i1 false, label %cond_true251.i, label %cond_next272.i + +cond_true251.i: ; preds = %cond_next240.i + switch i8 0, label %cond_next272.i [ + i8 42, label %bb268.i + i8 43, label %bb268.i + i8 63, label %bb268.i + ] + +bb268.i: ; preds = %cond_true251.i, %cond_true251.i, %cond_true251.i + br label %cond_next272.i + +cond_next272.i: ; preds = %bb268.i, %cond_true251.i, %cond_next240.i + %len.2.i = phi i32 [ 0, %bb268.i ], [ 0, %cond_next240.i ], [ 0, %cond_true251.i ] ; <i32> [#uses=1] + %tmp278.i = icmp eq i32 %len.2.i, 1 ; <i1> [#uses=0] + ret void +} diff --git a/test/CodeGen/Generic/2007-04-14-BitTestsBadMask.ll b/test/CodeGen/Generic/2007-04-14-BitTestsBadMask.ll new file mode 100644 index 0000000..5490687 --- /dev/null +++ b/test/CodeGen/Generic/2007-04-14-BitTestsBadMask.ll @@ -0,0 +1,160 @@ +; RUN: llvm-as < %s | llc -march=x86 | grep 8388635 +; RUN: llvm-as < %s | llc -march=x86-64 | grep 4294981120 +; PR 1325 + +; ModuleID = 'bugpoint.test.bc' +target datalayout = "E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64" +target triple = "powerpc-apple-darwin8.8.0" +;target triple = "i686-linux-gnu" + %struct.FILE = type { i8*, i32, i32, i16, i16, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, %struct.__sFILEX*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 } + %struct.__sFILEX = type opaque + %struct.__sbuf = type { i8*, i32 } +@PL_rsfp = external global %struct.FILE* ; <%struct.FILE**> [#uses=1] +@PL_bufend = external global i8* ; <i8**> [#uses=1] +@PL_in_eval = external global i32 ; <i32*> [#uses=1] + +declare fastcc void @incline(i8*) + +define i16 @Perl_skipspace_bb60(i8* %s, i8** %s_addr.4.out) { +newFuncRoot: + %tmp138.loc = alloca i8* ; <i8**> [#uses=2] + %s_addr.4.loc = alloca i8* ; <i8**> [#uses=2] + %tmp274.loc = alloca i8* ; <i8**> [#uses=2] + br label %bb60 + +cond_next154.UnifiedReturnBlock_crit_edge.exitStub: ; preds = %codeRepl + store i8* %s_addr.4.reload, i8** %s_addr.4.out + ret i16 0 + +cond_next161.UnifiedReturnBlock_crit_edge.exitStub: ; preds = %codeRepl + store i8* %s_addr.4.reload, i8** %s_addr.4.out + ret i16 1 + +cond_next167.UnifiedReturnBlock_crit_edge.exitStub: ; preds = %codeRepl + store i8* %s_addr.4.reload, i8** %s_addr.4.out + ret i16 2 + +cond_false29.i.cond_true190_crit_edge.exitStub: ; preds = %codeRepl + store i8* %s_addr.4.reload, i8** %s_addr.4.out + ret i16 3 + +cond_next.i.cond_true190_crit_edge.exitStub: ; preds = %codeRepl + store i8* %s_addr.4.reload, i8** %s_addr.4.out + ret i16 4 + +cond_true19.i.cond_true190_crit_edge.exitStub: ; preds = %codeRepl + store i8* %s_addr.4.reload, i8** %s_addr.4.out + ret i16 5 + +bb60: ; preds = %bb60.backedge, %newFuncRoot + %s_addr.2 = phi i8* [ %s, %newFuncRoot ], [ %s_addr.2.be, %bb60.backedge ] ; <i8*> [#uses=3] + %tmp61 = load i8** @PL_bufend ; <i8*> [#uses=1] + %tmp63 = icmp ult i8* %s_addr.2, %tmp61 ; <i1> [#uses=1] + br i1 %tmp63, label %bb60.cond_next67_crit_edge, label %bb60.bb101_crit_edge + +bb37: ; preds = %cond_next67.bb37_crit_edge5, %cond_next67.bb37_crit_edge4, %cond_next67.bb37_crit_edge3, %cond_next67.bb37_crit_edge2, %cond_next67.bb37_crit_edge + %tmp40 = icmp eq i8 %tmp69, 10 ; <i1> [#uses=1] + %tmp43 = getelementptr i8* %s_addr.27.2, i32 1 ; <i8*> [#uses=5] + br i1 %tmp40, label %cond_true45, label %bb37.bb60_crit_edge + +cond_true45: ; preds = %bb37 + %tmp46 = volatile load i32* @PL_in_eval ; <i32> [#uses=1] + %tmp47 = icmp eq i32 %tmp46, 0 ; <i1> [#uses=1] + br i1 %tmp47, label %cond_true45.bb60_crit_edge, label %cond_true50 + +cond_true50: ; preds = %cond_true45 + %tmp51 = volatile load %struct.FILE** @PL_rsfp ; <%struct.FILE*> [#uses=1] + %tmp52 = icmp eq %struct.FILE* %tmp51, null ; <i1> [#uses=1] + br i1 %tmp52, label %cond_true55, label %cond_true50.bb60_crit_edge + +cond_true55: ; preds = %cond_true50 + tail call fastcc void @incline( i8* %tmp43 ) + br label %bb60.backedge + +cond_next67: ; preds = %Perl_newSV.exit.cond_next67_crit_edge, %cond_true148.cond_next67_crit_edge, %bb60.cond_next67_crit_edge + %s_addr.27.2 = phi i8* [ %s_addr.2, %bb60.cond_next67_crit_edge ], [ %tmp274.reload, %Perl_newSV.exit.cond_next67_crit_edge ], [ %tmp138.reload, %cond_true148.cond_next67_crit_edge ] ; <i8*> [#uses=3] + %tmp69 = load i8* %s_addr.27.2 ; <i8> [#uses=2] + switch i8 %tmp69, label %cond_next67.bb101_crit_edge [ + i8 32, label %cond_next67.bb37_crit_edge + i8 9, label %cond_next67.bb37_crit_edge2 + i8 10, label %cond_next67.bb37_crit_edge3 + i8 13, label %cond_next67.bb37_crit_edge4 + i8 12, label %cond_next67.bb37_crit_edge5 + ] + +codeRepl: ; preds = %bb101.preheader + %targetBlock = call i16 @Perl_skipspace_bb60_bb101( i8* %s_addr.27.3.ph, i8** %tmp274.loc, i8** %s_addr.4.loc, i8** %tmp138.loc ) ; <i16> [#uses=1] + %tmp274.reload = load i8** %tmp274.loc ; <i8*> [#uses=4] + %s_addr.4.reload = load i8** %s_addr.4.loc ; <i8*> [#uses=6] + %tmp138.reload = load i8** %tmp138.loc ; <i8*> [#uses=1] + switch i16 %targetBlock, label %cond_true19.i.cond_true190_crit_edge.exitStub [ + i16 0, label %cond_next271.bb60_crit_edge + i16 1, label %cond_true290.bb60_crit_edge + i16 2, label %cond_true295.bb60_crit_edge + i16 3, label %Perl_newSV.exit.cond_next67_crit_edge + i16 4, label %cond_true148.cond_next67_crit_edge + i16 5, label %cond_next154.UnifiedReturnBlock_crit_edge.exitStub + i16 6, label %cond_next161.UnifiedReturnBlock_crit_edge.exitStub + i16 7, label %cond_next167.UnifiedReturnBlock_crit_edge.exitStub + i16 8, label %cond_false29.i.cond_true190_crit_edge.exitStub + i16 9, label %cond_next.i.cond_true190_crit_edge.exitStub + ] + +bb37.bb60_crit_edge: ; preds = %bb37 + br label %bb60.backedge + +cond_true45.bb60_crit_edge: ; preds = %cond_true45 + br label %bb60.backedge + +cond_true50.bb60_crit_edge: ; preds = %cond_true50 + br label %bb60.backedge + +bb60.cond_next67_crit_edge: ; preds = %bb60 + br label %cond_next67 + +bb60.bb101_crit_edge: ; preds = %bb60 + br label %bb101.preheader + +cond_next67.bb101_crit_edge: ; preds = %cond_next67 + br label %bb101.preheader + +cond_next67.bb37_crit_edge: ; preds = %cond_next67 + br label %bb37 + +cond_next67.bb37_crit_edge2: ; preds = %cond_next67 + br label %bb37 + +cond_next67.bb37_crit_edge3: ; preds = %cond_next67 + br label %bb37 + +cond_next67.bb37_crit_edge4: ; preds = %cond_next67 + br label %bb37 + +cond_next67.bb37_crit_edge5: ; preds = %cond_next67 + br label %bb37 + +cond_true148.cond_next67_crit_edge: ; preds = %codeRepl + br label %cond_next67 + +cond_next271.bb60_crit_edge: ; preds = %codeRepl + br label %bb60.backedge + +cond_true290.bb60_crit_edge: ; preds = %codeRepl + br label %bb60.backedge + +cond_true295.bb60_crit_edge: ; preds = %codeRepl + br label %bb60.backedge + +Perl_newSV.exit.cond_next67_crit_edge: ; preds = %codeRepl + br label %cond_next67 + +bb101.preheader: ; preds = %cond_next67.bb101_crit_edge, %bb60.bb101_crit_edge + %s_addr.27.3.ph = phi i8* [ %s_addr.27.2, %cond_next67.bb101_crit_edge ], [ %s_addr.2, %bb60.bb101_crit_edge ] ; <i8*> [#uses=1] + br label %codeRepl + +bb60.backedge: ; preds = %cond_true295.bb60_crit_edge, %cond_true290.bb60_crit_edge, %cond_next271.bb60_crit_edge, %cond_true50.bb60_crit_edge, %cond_true45.bb60_crit_edge, %bb37.bb60_crit_edge, %cond_true55 + %s_addr.2.be = phi i8* [ %tmp43, %cond_true55 ], [ %tmp43, %bb37.bb60_crit_edge ], [ %tmp43, %cond_true45.bb60_crit_edge ], [ %tmp43, %cond_true50.bb60_crit_edge ], [ %tmp274.reload, %cond_next271.bb60_crit_edge ], [ %tmp274.reload, %cond_true290.bb60_crit_edge ], [ %tmp274.reload, %cond_true295.bb60_crit_edge ] ; <i8*> [#uses=1] + br label %bb60 +} + +declare i16 @Perl_skipspace_bb60_bb101(i8*, i8**, i8**, i8**) diff --git a/test/CodeGen/Generic/2007-04-14-EHSelectorCrash.ll b/test/CodeGen/Generic/2007-04-14-EHSelectorCrash.ll new file mode 100644 index 0000000..be039bf --- /dev/null +++ b/test/CodeGen/Generic/2007-04-14-EHSelectorCrash.ll @@ -0,0 +1,18 @@ +; RUN: llvm-as < %s | llc -enable-eh +; RUN: llvm-as < %s | llc -enable-eh -march=x86-64 +; XFAIL: * +; Un-XFAIL this when PR1508 is fixed. + +; PR1326 + +@__gnat_others_value = external constant i32 ; <i32*> [#uses=1] + +define void @_ada_eh() { +entry: + %eh_select = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* null, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=0] + ret void +} + +declare i32 @llvm.eh.selector(i8*, i8*, ...) + +declare i32 @__gnat_eh_personality(...) diff --git a/test/CodeGen/Generic/2007-04-17-lsr-crash.ll b/test/CodeGen/Generic/2007-04-17-lsr-crash.ll new file mode 100644 index 0000000..4257e9f --- /dev/null +++ b/test/CodeGen/Generic/2007-04-17-lsr-crash.ll @@ -0,0 +1,35 @@ +; RUN: llvm-as < %s | llc + +define void @foo(i32 %inTextSize) { +entry: + br label %bb236.outer + +cond_next193: ; preds = %bb236 + %tmp211 = add i32 %inTextSize_addr.1.ph17, -2 ; <i32> [#uses=1] + br i1 false, label %cond_next232, label %cond_true227 + +cond_true227: ; preds = %cond_next193 + ret void + +cond_next232: ; preds = %cond_next193 + %indvar.next49 = add i32 %indvar48, 1 ; <i32> [#uses=1] + br label %bb236.outer + +bb236.outer: ; preds = %cond_next232, %entry + %indvar48 = phi i32 [ %indvar.next49, %cond_next232 ], [ 0, %entry ] ; <i32> [#uses=2] + %inTextSize_addr.1.ph17 = phi i32 [ %tmp211, %cond_next232 ], [ %inTextSize, %entry ] ; <i32> [#uses=3] + %tmp.50 = sub i32 0, %indvar48 ; <i32> [#uses=1] + %tmp219 = icmp eq i32 %tmp.50, 0 ; <i1> [#uses=1] + br i1 %tmp219, label %bb236.us, label %bb236 + +bb236.us: ; preds = %bb236.outer + %inTextSize_addr.1.us = add i32 0, %inTextSize_addr.1.ph17 ; <i32> [#uses=0] + ret void + +bb236: ; preds = %bb236.outer + %tmp238 = icmp eq i32 %inTextSize_addr.1.ph17, 0 ; <i1> [#uses=1] + br i1 %tmp238, label %exit, label %cond_next193 + +exit: ; preds = %bb236 + ret void +} diff --git a/test/CodeGen/Generic/2007-04-27-BitTestsBadMask.ll b/test/CodeGen/Generic/2007-04-27-BitTestsBadMask.ll new file mode 100644 index 0000000..f891599 --- /dev/null +++ b/test/CodeGen/Generic/2007-04-27-BitTestsBadMask.ll @@ -0,0 +1,18 @@ +; RUN: llvm-as < %s | llc -march=x86 | grep -c je | grep 3 +; RUN: llvm-as < %s | llc -march=x86-64 | grep 4297064449 +; PR 1325+ + +define i32 @foo(i8 %bar) { +entry: + switch i8 %bar, label %bb1203 [ + i8 117, label %bb1204 + i8 85, label %bb1204 + i8 106, label %bb1204 + ] + +bb1203: ; preds = %entry + ret i32 1 + +bb1204: ; preds = %entry, %entry, %entry + ret i32 2 +} diff --git a/test/CodeGen/Generic/2007-04-27-InlineAsm-X-Dest.ll b/test/CodeGen/Generic/2007-04-27-InlineAsm-X-Dest.ll new file mode 100644 index 0000000..6f8fbae --- /dev/null +++ b/test/CodeGen/Generic/2007-04-27-InlineAsm-X-Dest.ll @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s | llc +; XFAIL: sparc-sun-solaris2 +; PR1557 + +; Test that we can have an "X" output constraint. + +define void @test(i16 * %t) { + call void asm sideeffect "foo $0", "=*X,~{dirflag},~{fpsr},~{flags},~{memory}"( i16* %t ) + ret void +} diff --git a/test/CodeGen/Generic/2007-04-27-LargeMemObject.ll b/test/CodeGen/Generic/2007-04-27-LargeMemObject.ll new file mode 100644 index 0000000..cd72495 --- /dev/null +++ b/test/CodeGen/Generic/2007-04-27-LargeMemObject.ll @@ -0,0 +1,15 @@ +; RUN: llvm-as < %s | llc +; XFAIL: sparc-sun-solaris2 +; PR1557 + + %struct..0anon = type { [100 x i32] } + +define void @test() { +entry: + %currfpu = alloca %struct..0anon, align 16 ; <%struct..0anon*> [#uses=2] + %mxcsr = alloca %struct..0anon, align 16 ; <%struct..0anon*> [#uses=1] + call void asm sideeffect "fnstenv $0", "=*m,~{dirflag},~{fpsr},~{flags}"( %struct..0anon* %currfpu ) + call void asm sideeffect "$0 $1", "=*m,*m,~{dirflag},~{fpsr},~{flags}"( %struct..0anon* %mxcsr, %struct..0anon* %currfpu ) + ret void +} + diff --git a/test/CodeGen/Generic/2007-04-30-LandingPadBranchFolding.ll b/test/CodeGen/Generic/2007-04-30-LandingPadBranchFolding.ll new file mode 100644 index 0000000..71b4c85 --- /dev/null +++ b/test/CodeGen/Generic/2007-04-30-LandingPadBranchFolding.ll @@ -0,0 +1,59 @@ +; RUN: llvm-as < %s | llc +; PR1228 + + "struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Alloc_hider" = type { i8* } + "struct.std::locale" = type { "struct.std::locale::_Impl"* } + "struct.std::locale::_Impl" = type { i32, "struct.std::locale::facet"**, i32, "struct.std::locale::facet"**, i8** } + "struct.std::locale::facet" = type { i32 (...)**, i32 } + "struct.std::string" = type { "struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Alloc_hider" } + +define void @_ZNKSt6locale4nameEv("struct.std::string"* %agg.result) { +entry: + %tmp105 = icmp eq i8* null, null ; <i1> [#uses=1] + br i1 %tmp105, label %cond_true, label %cond_true222 + +cond_true: ; preds = %entry + invoke void @_ZNSs14_M_replace_auxEjjjc( ) + to label %cond_next1328 unwind label %cond_true1402 + +cond_true222: ; preds = %cond_true222, %entry + %tmp207 = call i32 @strcmp( ) ; <i32> [#uses=1] + %tmp208 = icmp eq i32 %tmp207, 0 ; <i1> [#uses=2] + %bothcond1480 = and i1 %tmp208, false ; <i1> [#uses=1] + br i1 %bothcond1480, label %cond_true222, label %cond_next226.loopexit + +cond_next226.loopexit: ; preds = %cond_true222 + %phitmp = xor i1 %tmp208, true ; <i1> [#uses=1] + br i1 %phitmp, label %cond_false280, label %cond_true235 + +cond_true235: ; preds = %cond_next226.loopexit + invoke void @_ZNSs6assignEPKcj( ) + to label %cond_next1328 unwind label %cond_true1402 + +cond_false280: ; preds = %cond_next226.loopexit + invoke void @_ZNSs7reserveEj( ) + to label %invcont282 unwind label %cond_true1402 + +invcont282: ; preds = %cond_false280 + invoke void @_ZNSs6appendEPKcj( ) + to label %invcont317 unwind label %cond_true1402 + +invcont317: ; preds = %invcont282 + ret void + +cond_next1328: ; preds = %cond_true235, %cond_true + ret void + +cond_true1402: ; preds = %invcont282, %cond_false280, %cond_true235, %cond_true + ret void +} + +declare void @_ZNSs14_M_replace_auxEjjjc() + +declare i32 @strcmp() + +declare void @_ZNSs6assignEPKcj() + +declare void @_ZNSs7reserveEj() + +declare void @_ZNSs6appendEPKcj() diff --git a/test/CodeGen/Generic/2007-05-03-EHTypeInfo.ll b/test/CodeGen/Generic/2007-05-03-EHTypeInfo.ll new file mode 100644 index 0000000..2efe939 --- /dev/null +++ b/test/CodeGen/Generic/2007-05-03-EHTypeInfo.ll @@ -0,0 +1,12 @@ +; RUN: llvm-as < %s | llc -enable-eh + + %struct.exception = type { i8, i8, i32, i8*, i8*, i32, i8* } +@program_error = external global %struct.exception ; <%struct.exception*> [#uses=1] + +define void @typeinfo() { +entry: + %eh_typeid = tail call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @program_error, i32 0, i32 0) ) ; <i32> [#uses=0] + ret void +} + +declare i32 @llvm.eh.typeid.for(i8*) diff --git a/test/CodeGen/Generic/2007-05-05-Personality.ll b/test/CodeGen/Generic/2007-05-05-Personality.ll new file mode 100644 index 0000000..8c3737c --- /dev/null +++ b/test/CodeGen/Generic/2007-05-05-Personality.ll @@ -0,0 +1,35 @@ +; RUN: llvm-as < %s | llc -mtriple=i686-pc-linux-gnu -enable-eh -o - | grep zPLR + +@error = external global i8 ; <i8*> [#uses=2] + +define void @_ada_x() { +entry: + invoke void @raise( ) + to label %eh_then unwind label %unwind + +unwind: ; preds = %entry + %eh_ptr = tail call i8* @llvm.eh.exception( ) ; <i8*> [#uses=2] + %eh_select = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i8* @error ) ; <i32> [#uses=1] + %eh_typeid = tail call i32 @llvm.eh.typeid.for( i8* @error ) ; <i32> [#uses=1] + %tmp2 = icmp eq i32 %eh_select, %eh_typeid ; <i1> [#uses=1] + br i1 %tmp2, label %eh_then, label %Unwind + +eh_then: ; preds = %unwind, %entry + ret void + +Unwind: ; preds = %unwind + tail call i32 (...)* @_Unwind_Resume( i8* %eh_ptr ) ; <i32>:0 [#uses=0] + unreachable +} + +declare void @raise() + +declare i8* @llvm.eh.exception() + +declare i32 @llvm.eh.selector(i8*, i8*, ...) + +declare i32 @llvm.eh.typeid.for(i8*) + +declare i32 @__gnat_eh_personality(...) + +declare i32 @_Unwind_Resume(...) diff --git a/test/CodeGen/Generic/2007-05-15-InfiniteRecursion.ll b/test/CodeGen/Generic/2007-05-15-InfiniteRecursion.ll new file mode 100644 index 0000000..7495795 --- /dev/null +++ b/test/CodeGen/Generic/2007-05-15-InfiniteRecursion.ll @@ -0,0 +1,90 @@ +; RUN: llvm-as < %s | llc + + %struct.AVClass = type { i8*, i8* (i8*)*, %struct.AVOption* } + %struct.AVCodec = type { i8*, i32, i32, i32, i32 (%struct.AVCodecContext*)*, i32 (%struct.AVCodecContext*, i8*, i32, i8*)*, i32 (%struct.AVCodecContext*)*, i32 (%struct.AVCodecContext*, i8*, i32*, i8*, i32)*, i32, %struct.AVCodec*, void (%struct.AVCodecContext*)*, %struct.AVRational*, i32* } + %struct.AVCodecContext = type { %struct.AVClass*, i32, i32, i32, i32, i32, i8*, i32, %struct.AVRational, i32, i32, i32, i32, i32, void (%struct.AVCodecContext*, %struct.AVFrame*, i32*, i32, i32, i32)*, i32, i32, i32, i32, i32, i32, i32, float, float, i32, i32, i32, i32, float, i32, i32, i32, %struct.AVCodec*, i8*, i32, i32, void (%struct.AVCodecContext*, i8*, i32, i32)*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8*, [32 x i8], i32, i32, i32, i32, i32, i32, i32, float, i32, i32 (%struct.AVCodecContext*, %struct.AVFrame*)*, void (%struct.AVCodecContext*, %struct.AVFrame*)*, i32, i32, i32, i32, i8*, i8*, float, float, i32, %struct.RcOverride*, i32, i8*, i32, i32, i32, float, float, float, float, i32, float, float, float, float, float, i32, i32, i32, i32*, i32, i32, i32, i32, %struct.AVRational, %struct.AVFrame*, i32, i32, [4 x i64], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 (%struct.AVCodecContext*, i32*)*, i32, i32, i32, i32, i32, i32, i8*, i32, i32, i32, i32, i32, i32, i16*, i16*, i32, i32, i32, i32, %struct.AVPaletteControl*, i32, i32 (%struct.AVCodecContext*, %struct.AVFrame*)*, i32, i32, i32, i32, i32, i32, i32, i32 (%struct.AVCodecContext*, i32 (%struct.AVCodecContext*, i8*)*, i8**, i32*, i32)*, i8*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, i32, i32, i32, i32, i32, i32, i32, i32, float, i32, i32, i32, i32, i32, i32, float, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64 } + %struct.AVEvalExpr = type opaque + %struct.AVFrame = type { [4 x i8*], [4 x i32], [4 x i8*], i32, i32, i64, i32, i32, i32, i32, i32, i8*, i32, i8*, [2 x [2 x i16]*], i32*, i8, i8*, [4 x i64], i32, i32, i32, i32, i32, %struct.AVPanScan*, i32, i32, i16*, [2 x i8*] } + %struct.AVOption = type opaque + %struct.AVPaletteControl = type { i32, [256 x i32] } + %struct.AVPanScan = type { i32, i32, i32, [3 x [2 x i16]] } + %struct.AVRational = type { i32, i32 } + %struct.DSPContext = type { void (i16*, i8*, i32)*, void (i16*, i8*, i8*, i32)*, void (i16*, i8*, i32)*, void (i16*, i8*, i32)*, void (i16*, i8*, i32)*, void (i8*, i16*, i32)*, void (i8*, i16*, i32)*, void (i8*, i8*, i32, i32, i32, i32, i32)*, void (i8*, i8*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32)*, void (i16*)*, i32 (i8*, i32)*, i32 (i8*, i32)*, [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], [5 x i32 (i8*, i8*, i8*, i32, i32)*], i32 (i8*, i16*, i32)*, [4 x [4 x void (i8*, i8*, i32, i32)*]], [4 x [4 x void (i8*, i8*, i32, i32)*]], [4 x [4 x void (i8*, i8*, i32, i32)*]], [4 x [4 x void (i8*, i8*, i32, i32)*]], [2 x void (i8*, i8*, i8*, i32, i32)*], [11 x void (i8*, i8*, i32, i32, i32)*], [11 x void (i8*, i8*, i32, i32, i32)*], [2 x [16 x void (i8*, i8*, i32)*]], [2 x [16 x void (i8*, i8*, i32)*]], [2 x [16 x void (i8*, i8*, i32)*]], [2 x [16 x void (i8*, i8*, i32)*]], [8 x void (i8*, i8*, i32)*], [3 x void (i8*, i8*, i32, i32, i32, i32)*], [3 x void (i8*, i8*, i32, i32, i32, i32)*], [3 x void (i8*, i8*, i32, i32, i32, i32)*], [4 x [16 x void (i8*, i8*, i32)*]], [4 x [16 x void (i8*, i8*, i32)*]], [4 x [16 x void (i8*, i8*, i32)*]], [4 x [16 x void (i8*, i8*, i32)*]], [10 x void (i8*, i32, i32, i32, i32)*], [10 x void (i8*, i8*, i32, i32, i32, i32, i32)*], [2 x [16 x void (i8*, i8*, i32)*]], [2 x [16 x void (i8*, i8*, i32)*]], void (i8*, i32, i32, i32, i32, i32, i32)*, void (i8*, i32, i32, i32, i32, i32, i32)*, void (i8*, i32, i32, i32, i32, i32, i32)*, void (i8*, i32, i32, i32, i32, i32, i32)*, void (i8*, i16*, i32)*, [2 x [4 x i32 (i8*, i8*, i8*, i32, i32)*]], void (i8*, i8*, i32)*, void (i8*, i8*, i8*, i32)*, void (i8*, i8*, i8*, i32, i32*, i32*)*, void (i32*, i32*, i32)*, void (i8*, i32, i32, i32, i8*)*, void (i8*, i32, i32, i32, i8*)*, void (i8*, i32, i32, i32, i8*)*, void (i8*, i32, i32, i32, i8*)*, void (i8*, i32, i32, i32)*, void (i8*, i32, i32, i32)*, void ([4 x [4 x i16]]*, i8*, [40 x i8]*, [40 x [2 x i16]]*, i32, i32, i32, i32, i32)*, void (i8*, i32, i32)*, void (i8*, i32, i32)*, void (i8*, i32)*, void (float*, float*, i32)*, void (float*, float*, i32)*, void (float*, float*, float*, i32)*, void (float*, float*, float*, float*, i32, i32, i32)*, void (i16*, float*, i32)*, void (i16*)*, void (i16*)*, void (i16*)*, void (i8*, i32, i16*)*, void (i8*, i32, i16*)*, [64 x i8], i32, i32 (i16*, i16*, i16*, i32)*, void (i16*, i16*, i32)*, void (i8*, i16*, i32)*, void (i8*, i16*, i32)*, void (i8*, i16*, i32)*, void (i8*, i16*, i32)*, void ([4 x i16]*)*, void (i32*, i32*, i32*, i32*, i32*, i32*, i32)*, void (i32*, i32)*, void (i8*, i32, i8**, i32, i32, i32, i32, i32, %struct.slice_buffer*, i32, i8*)*, void (i8*, i32, i32)*, [4 x void (i8*, i32, i8*, i32, i32, i32)*], void (i16*)*, void (i16*, i32)*, void (i16*, i32)*, void (i16*, i32)*, void (i8*, i32)*, void (i8*, i32)*, [16 x void (i8*, i8*, i32, i32)*] } + %struct.FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct.FILE*, i32, i32, i32, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i32, i32, [40 x i8] } + %struct.GetBitContext = type { i8*, i8*, i32*, i32, i32, i32, i32 } + %struct.MJpegContext = type opaque + %struct.MotionEstContext = type { %struct.AVCodecContext*, i32, [4 x [2 x i32]], [4 x [2 x i32]], i8*, i8*, [2 x i8*], i8*, i32, i32*, i32*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x [4 x i8*]], [4 x [4 x i8*]], i32, i32, i32, i32, i32, [4 x void (i8*, i8*, i32, i32)*]*, [4 x void (i8*, i8*, i32, i32)*]*, [16 x void (i8*, i8*, i32)*]*, [16 x void (i8*, i8*, i32)*]*, [4097 x i8]*, i8*, i32 (%struct.MpegEncContext*, i32*, i32*, i32, i32, i32, i32, i32)* } + %struct.MpegEncContext = type { %struct.AVCodecContext*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.PutBitContext, i32, i32, i32, i32, i32, i32, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.Picture*, %struct.Picture**, %struct.Picture**, i32, i32, [8 x %struct.MpegEncContext*], %struct.Picture, %struct.Picture, %struct.Picture, %struct.Picture, %struct.Picture*, %struct.Picture*, %struct.Picture*, [3 x i8*], [3 x i32], i16*, [3 x i16*], [20 x i16], i32, i32, i8*, i8*, i8*, i8*, i8*, [16 x i16]*, [3 x [16 x i16]*], i32, i8*, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i32, i32, i32, i32*, i32, i32, i32, i32, i32, i32, i32, [5 x i32], i32, i32, i32, i32, %struct.DSPContext, i32, i32, [2 x i16]*, [2 x i16]*, [2 x i16]*, [2 x i16]*, [2 x i16]*, [2 x i16]*, [2 x [2 x [2 x i16]*]], [2 x [2 x [2 x [2 x i16]*]]], [2 x i16]*, [2 x i16]*, [2 x i16]*, [2 x i16]*, [2 x i16]*, [2 x i16]*, [2 x [2 x [2 x i16]*]], [2 x [2 x [2 x [2 x i16]*]]], [2 x i8*], [2 x [2 x i8*]], i32, i32, i32, [2 x [4 x [2 x i32]]], [2 x [2 x i32]], [2 x [2 x [2 x i32]]], i8*, [2 x [64 x i16]], %struct.MotionEstContext, i32, i32, i32, i32, i32, i32, i16*, [6 x i32], [6 x i32], [3 x i8*], i32*, [64 x i16], [64 x i16], [64 x i16], [64 x i16], i32, i32, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, [8 x i32], [64 x i32]*, [64 x i32]*, [2 x [64 x i16]]*, [2 x [64 x i16]]*, [12 x i32], %struct.ScanTable, %struct.ScanTable, %struct.ScanTable, %struct.ScanTable, [64 x i32]*, [2 x i32], [64 x i16]*, i8*, i64, i64, i32, i32, %struct.RateControlContext, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8*, i32, i32, %struct.GetBitContext, i32, i32, i32, %struct.ParseContext, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i16, i16, i16, i16, i32, i32, i32, i32, i32, i32, i32, i32, i32, [2 x [2 x i32]], [2 x [2 x i32]], [2 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.PutBitContext, %struct.PutBitContext, i32, i32, i32, i32, i32, i32, i8*, i32, i32, i32, i32, i32, [3 x i32], %struct.MJpegContext*, [3 x i32], [3 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [2 x [65 x [65 x [2 x i32]]]]*, i32, i32, %struct.GetBitContext, i32, i32, i32, i8*, i32, [2 x [2 x i32]], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [2 x i32], i32, i32, i32, i32, i8*, i32, [12 x i16*], [64 x i16]*, [8 x [64 x i16]]*, i32 (%struct.MpegEncContext*, [64 x i16]*)*, void (%struct.MpegEncContext*, i16*, i32, i32)*, void (%struct.MpegEncContext*, i16*, i32, i32)*, void (%struct.MpegEncContext*, i16*, i32, i32)*, void (%struct.MpegEncContext*, i16*, i32, i32)*, void (%struct.MpegEncContext*, i16*, i32, i32)*, void (%struct.MpegEncContext*, i16*, i32, i32)*, void (%struct.MpegEncContext*, i16*, i32, i32)*, void (%struct.MpegEncContext*, i16*, i32, i32)*, void (%struct.MpegEncContext*, i16*, i32, i32)*, void (%struct.MpegEncContext*, i16*, i32, i32)*, i32 (%struct.MpegEncContext*, i16*, i32, i32, i32*)*, i32 (%struct.MpegEncContext*, i16*, i32, i32, i32*)*, void (%struct.MpegEncContext*, i16*)* } + %struct.ParseContext = type { i8*, i32, i32, i32, i32, i32, i32, i32 } + %struct.Picture = type { [4 x i8*], [4 x i32], [4 x i8*], i32, i32, i64, i32, i32, i32, i32, i32, i8*, i32, i8*, [2 x [2 x i16]*], i32*, i8, i8*, [4 x i64], i32, i32, i32, i32, i32, %struct.AVPanScan*, i32, i32, i16*, [2 x i8*], [3 x i8*], [2 x [2 x i16]*], i32*, [2 x i32], i32, i32, i32, i32, [2 x [16 x i32]], [2 x i32], i32, i32, i16*, i16*, i8*, i32*, i32 } + %struct.Predictor = type { double, double, double } + %struct.PutBitContext = type { i32, i32, i8*, i8*, i8* } + %struct.RateControlContext = type { %struct.FILE*, i32, %struct.RateControlEntry*, double, [5 x %struct.Predictor], double, double, double, double, double, [5 x double], i32, i32, [5 x i64], [5 x i64], [5 x i64], [5 x i64], [5 x i32], i32, i8*, float, i32, %struct.AVEvalExpr* } + %struct.RateControlEntry = type { i32, float, i32, i32, i32, i32, i32, i64, i32, float, i32, i32, i32, i32, i32, i32 } + %struct.RcOverride = type { i32, i32, i32, float } + %struct.ScanTable = type { i8*, [64 x i8], [64 x i8] } + %struct._IO_marker = type { %struct._IO_marker*, %struct.FILE*, i32 } + %struct.slice_buffer = type opaque + +define float @ff_rate_estimate_qscale(%struct.MpegEncContext* %s, i32 %dry_run) { +entry: + br i1 false, label %cond_false163, label %cond_true135 + +cond_true135: ; preds = %entry + ret float 0.000000e+00 + +cond_false163: ; preds = %entry + br i1 false, label %cond_true203, label %cond_next211 + +cond_true203: ; preds = %cond_false163 + ret float 0.000000e+00 + +cond_next211: ; preds = %cond_false163 + br i1 false, label %cond_false243, label %cond_true220 + +cond_true220: ; preds = %cond_next211 + br i1 false, label %cond_next237, label %cond_true225 + +cond_true225: ; preds = %cond_true220 + ret float 0.000000e+00 + +cond_next237: ; preds = %cond_true220 + br i1 false, label %cond_false785, label %cond_true735 + +cond_false243: ; preds = %cond_next211 + ret float 0.000000e+00 + +cond_true735: ; preds = %cond_next237 + ret float 0.000000e+00 + +cond_false785: ; preds = %cond_next237 + br i1 false, label %cond_true356.i.preheader, label %bb359.i + +cond_true356.i.preheader: ; preds = %cond_false785 + %tmp116117.i = zext i8 0 to i32 ; <i32> [#uses=1] + br i1 false, label %cond_false.i, label %cond_next159.i + +cond_false.i: ; preds = %cond_true356.i.preheader + ret float 0.000000e+00 + +cond_next159.i: ; preds = %cond_true356.i.preheader + %tmp178.i = add i32 %tmp116117.i, -128 ; <i32> [#uses=2] + %tmp181.i = mul i32 %tmp178.i, %tmp178.i ; <i32> [#uses=1] + %tmp181182.i = sitofp i32 %tmp181.i to float ; <float> [#uses=1] + %tmp199200.pn.in.i = mul float %tmp181182.i, 0.000000e+00 ; <float> [#uses=1] + %tmp199200.pn.i = fpext float %tmp199200.pn.in.i to double ; <double> [#uses=1] + %tmp201.pn.i = sub double 1.000000e+00, %tmp199200.pn.i ; <double> [#uses=1] + %factor.2.in.i = mul double 0.000000e+00, %tmp201.pn.i ; <double> [#uses=1] + %factor.2.i = fptrunc double %factor.2.in.i to float ; <float> [#uses=1] + br i1 false, label %cond_next312.i, label %cond_false222.i + +cond_false222.i: ; preds = %cond_next159.i + ret float 0.000000e+00 + +cond_next312.i: ; preds = %cond_next159.i + %tmp313314.i = fpext float %factor.2.i to double ; <double> [#uses=0] + ret float 0.000000e+00 + +bb359.i: ; preds = %cond_false785 + ret float 0.000000e+00 +} diff --git a/test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad.ll b/test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad.ll new file mode 100644 index 0000000..2ad0019 --- /dev/null +++ b/test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad.ll @@ -0,0 +1,2866 @@ +; RUN: llvm-as < %s | llc -enable-eh -asm-verbose -o - | \ +; RUN: grep -A 3 {Llabel137.*Region start} | grep {5.*Action} +; PR1422 +; PR1508 + +target triple = "i686-pc-linux-gnu" + %struct.exception = type { i8, i8, i32, i8*, i8*, i32, i8* } + %struct.string___XUB = type { i32, i32 } + %struct.string___XUP = type { i8*, %struct.string___XUB* } + %struct.system__secondary_stack__mark_id = type { i8*, i32 } +@weekS.154 = internal constant [28 x i8] c"SSUNSMONSTUESWEDSTHUSFRISSAT" ; <[28 x i8]*> [#uses=1] +@weekN.179 = internal constant [8 x i8] c"\01\05\09\0D\11\15\19\1D" ; <[8 x i8]*> [#uses=1] +@C.28.862 = internal constant %struct.string___XUB { i32 1, i32 85 } ; <%struct.string___XUB*> [#uses=1] +@C.29.865 = internal constant %struct.string___XUB { i32 1, i32 7 } ; <%struct.string___XUB*> [#uses=1] +@C.30.904 = internal constant %struct.string___XUB { i32 1, i32 30 } ; <%struct.string___XUB*> [#uses=1] +@C.32.910 = internal constant %struct.string___XUB { i32 1, i32 28 } ; <%struct.string___XUB*> [#uses=1] +@C.35.915 = internal constant %struct.string___XUB { i32 1, i32 24 } ; <%struct.string___XUB*> [#uses=1] +@C.36.923 = internal constant %struct.string___XUB { i32 1, i32 29 } ; <%struct.string___XUB*> [#uses=1] +@C.98.1466 = internal constant %struct.string___XUB { i32 1, i32 31 } ; <%struct.string___XUB*> [#uses=1] +@C.101.1473 = internal constant %struct.string___XUB { i32 1, i32 46 } ; <%struct.string___XUB*> [#uses=1] +@C.104.1478 = internal constant %struct.string___XUB { i32 1, i32 25 } ; <%struct.string___XUB*> [#uses=1] +@C.124.1606 = internal constant %struct.string___XUB { i32 1, i32 18 } ; <%struct.string___XUB*> [#uses=1] +@C.143.1720 = internal constant [2 x i32] [ i32 1, i32 2 ] ; <[2 x i32]*> [#uses=1] +@C.146.1725 = internal constant %struct.string___XUB { i32 1, i32 37 } ; <%struct.string___XUB*> [#uses=1] +@C.170.1990 = internal constant %struct.string___XUB { i32 1, i32 19 } ; <%struct.string___XUB*> [#uses=1] +@C.178.2066 = internal constant %struct.string___XUB { i32 1, i32 27 } ; <%struct.string___XUB*> [#uses=1] +@.str = internal constant [13 x i8] c"c36104b.adb\00\00" ; <[13 x i8]*> [#uses=1] +@.str1 = internal constant [85 x i8] c"CONSTRAINT_ERROR IS RAISED OR NOT IN DYNAMIC DISCRETE_RANGES WITH EXPLICIT TYPE_MARKS" ; <[85 x i8]*> [#uses=1] +@.str2 = internal constant [7 x i8] c"C36104B" ; <[7 x i8]*> [#uses=1] +@constraint_error = external global %struct.exception ; <%struct.exception*> [#uses=18] +@__gnat_others_value = external constant i32 ; <i32*> [#uses=37] +@.str3 = internal constant [30 x i8] c"CONSTRAINT_ERROR NOT RAISED 1 " ; <[30 x i8]*> [#uses=1] +@system__soft_links__abort_undefer = external global void ()* ; <void ()**> [#uses=30] +@.str4 = internal constant [28 x i8] c"UNHANDLED EXCEPTION RAISED 1" ; <[28 x i8]*> [#uses=1] +@.str5 = internal constant [24 x i8] c"WRONG EXCEPTION RAISED 1" ; <[24 x i8]*> [#uses=1] +@.str6 = internal constant [29 x i8] c"CONSTRAINT_ERROR NOT RAISED 3" ; <[29 x i8]*> [#uses=1] +@.str7 = internal constant [24 x i8] c"WRONG EXCEPTION RAISED 3" ; <[24 x i8]*> [#uses=1] +@.str10 = internal constant [24 x i8] c"WRONG EXCEPTION RAISED 4" ; <[24 x i8]*> [#uses=1] +@.str11 = internal constant [30 x i8] c"CONSTRAINT_ERROR NOT RAISED 7 " ; <[30 x i8]*> [#uses=1] +@.str12 = internal constant [28 x i8] c"UNHANDLED EXCEPTION RAISED 7" ; <[28 x i8]*> [#uses=1] +@.str13 = internal constant [24 x i8] c"WRONG EXCEPTION RAISED 7" ; <[24 x i8]*> [#uses=1] +@.str14 = internal constant [30 x i8] c"CONSTRAINT_ERROR NOT RAISED 8 " ; <[30 x i8]*> [#uses=1] +@.str15 = internal constant [28 x i8] c"UNHANDLED EXCEPTION RAISED 8" ; <[28 x i8]*> [#uses=1] +@.str16 = internal constant [24 x i8] c"WRONG EXCEPTION RAISED 8" ; <[24 x i8]*> [#uses=1] +@.str17 = internal constant [30 x i8] c"CONSTRAINT_ERROR NOT RAISED 9 " ; <[30 x i8]*> [#uses=1] +@.str18 = internal constant [24 x i8] c"WRONG EXCEPTION RAISED 9" ; <[24 x i8]*> [#uses=1] +@.str19 = internal constant [31 x i8] c"CONSTRAINT_ERROR NOT RAISED 10 " ; <[31 x i8]*> [#uses=1] +@.str20 = internal constant [46 x i8] c"DID NOT RAISE CONSTRAINT_ERROR AT PROPER PLACE" ; <[46 x i8]*> [#uses=1] +@.str21 = internal constant [25 x i8] c"WRONG EXCEPTION RAISED 10" ; <[25 x i8]*> [#uses=1] +@.str22 = internal constant [31 x i8] c"CONSTRAINT_ERROR NOT RAISED 11 " ; <[31 x i8]*> [#uses=1] +@.str23 = internal constant [25 x i8] c"WRONG EXCEPTION RAISED 11" ; <[25 x i8]*> [#uses=1] +@.str24 = internal constant [30 x i8] c"'FIRST OF NULL ARRAY INCORRECT" ; <[30 x i8]*> [#uses=1] +@.str25 = internal constant [18 x i8] c"EXCEPTION RAISED 1" ; <[18 x i8]*> [#uses=1] +@.str26 = internal constant [18 x i8] c"EXCEPTION RAISED 3" ; <[18 x i8]*> [#uses=1] +@.str27 = internal constant [31 x i8] c"'LENGTH OF NULL ARRAY INCORRECT" ; <[31 x i8]*> [#uses=1] +@.str28 = internal constant [18 x i8] c"EXCEPTION RAISED 5" ; <[18 x i8]*> [#uses=1] +@.str29 = internal constant [37 x i8] c"EVALUATION OF EXPRESSION IS INCORRECT" ; <[37 x i8]*> [#uses=1] +@.str30 = internal constant [18 x i8] c"EXCEPTION RAISED 7" ; <[18 x i8]*> [#uses=1] +@.str32 = internal constant [18 x i8] c"EXCEPTION RAISED 9" ; <[18 x i8]*> [#uses=1] +@.str33 = internal constant [19 x i8] c"EXCEPTION RAISED 10" ; <[19 x i8]*> [#uses=1] +@.str34 = internal constant [19 x i8] c"EXCEPTION RAISED 12" ; <[19 x i8]*> [#uses=1] +@.str35 = internal constant [27 x i8] c"INCORRECT 'IN' EVALUATION 1" ; <[27 x i8]*> [#uses=1] +@.str36 = internal constant [27 x i8] c"INCORRECT 'IN' EVALUATION 2" ; <[27 x i8]*> [#uses=1] +@.str37 = internal constant [29 x i8] c"INCORRECT 'NOT IN' EVALUATION" ; <[29 x i8]*> [#uses=1] +@.str38 = internal constant [19 x i8] c"EXCEPTION RAISED 52" ; <[19 x i8]*> [#uses=1] + +define void @_ada_c36104b() { +entry: + %tmp9 = alloca %struct.system__secondary_stack__mark_id, align 8 ; <%struct.system__secondary_stack__mark_id*> [#uses=3] + %tmp12 = alloca %struct.string___XUP, align 8 ; <%struct.string___XUP*> [#uses=3] + %tmp15 = alloca %struct.string___XUP, align 8 ; <%struct.string___XUP*> [#uses=3] + %tmp31 = alloca %struct.system__secondary_stack__mark_id, align 8 ; <%struct.system__secondary_stack__mark_id*> [#uses=3] + %tmp34 = alloca %struct.string___XUP, align 8 ; <%struct.string___XUP*> [#uses=3] + %tmp37 = alloca %struct.string___XUP, align 8 ; <%struct.string___XUP*> [#uses=3] + %tmp46 = alloca %struct.system__secondary_stack__mark_id, align 8 ; <%struct.system__secondary_stack__mark_id*> [#uses=3] + %tmp49 = alloca %struct.string___XUP, align 8 ; <%struct.string___XUP*> [#uses=3] + %tmp52 = alloca %struct.string___XUP, align 8 ; <%struct.string___XUP*> [#uses=3] + %tmp55 = alloca %struct.system__secondary_stack__mark_id, align 8 ; <%struct.system__secondary_stack__mark_id*> [#uses=3] + %tmp58 = alloca %struct.string___XUP, align 8 ; <%struct.string___XUP*> [#uses=3] + %tmp61 = alloca %struct.string___XUP, align 8 ; <%struct.string___XUP*> [#uses=3] + %tmp63 = alloca %struct.system__secondary_stack__mark_id, align 8 ; <%struct.system__secondary_stack__mark_id*> [#uses=3] + %tmp66 = alloca %struct.string___XUP, align 8 ; <%struct.string___XUP*> [#uses=3] + %tmp69 = alloca %struct.string___XUP, align 8 ; <%struct.string___XUP*> [#uses=3] + %tmp72 = alloca %struct.system__secondary_stack__mark_id, align 8 ; <%struct.system__secondary_stack__mark_id*> [#uses=3] + %tmp75 = alloca %struct.string___XUP, align 8 ; <%struct.string___XUP*> [#uses=3] + %tmp78 = alloca %struct.string___XUP, align 8 ; <%struct.string___XUP*> [#uses=3] + %tmp123 = call i32 @report__ident_int( i32 0 ) ; <i32> [#uses=3] + %tmp125 = icmp ugt i32 %tmp123, 6 ; <i1> [#uses=1] + br i1 %tmp125, label %cond_true, label %cond_next136 + +cond_true: ; preds = %entry + call void @__gnat_rcheck_10( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 50 ) + unreachable + +cond_next136: ; preds = %entry + %tmp137138 = trunc i32 %tmp123 to i8 ; <i8> [#uses=21] + %tmp139 = icmp ugt i8 %tmp137138, 6 ; <i1> [#uses=1] + br i1 %tmp139, label %bb, label %bb144 + +bb: ; preds = %cond_next136 + call void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 50 ) + unreachable + +bb144: ; preds = %cond_next136 + %tmp150 = call i32 @report__ident_int( i32 1 ) ; <i32> [#uses=4] + %tmp154 = icmp ugt i32 %tmp150, 6 ; <i1> [#uses=1] + br i1 %tmp154, label %cond_true157, label %cond_next169 + +cond_true157: ; preds = %bb144 + call void @__gnat_rcheck_10( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 51 ) + unreachable + +cond_next169: ; preds = %bb144 + %tmp170171 = trunc i32 %tmp150 to i8 ; <i8> [#uses=34] + %tmp172 = icmp ugt i8 %tmp170171, 6 ; <i1> [#uses=1] + br i1 %tmp172, label %bb175, label %bb178 + +bb175: ; preds = %cond_next169 + call void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 51 ) + unreachable + +bb178: ; preds = %cond_next169 + %tmp184 = call i32 @report__ident_int( i32 2 ) ; <i32> [#uses=3] + %tmp188 = icmp ugt i32 %tmp184, 6 ; <i1> [#uses=1] + br i1 %tmp188, label %cond_true191, label %cond_next203 + +cond_true191: ; preds = %bb178 + call void @__gnat_rcheck_10( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 52 ) + unreachable + +cond_next203: ; preds = %bb178 + %tmp204205 = trunc i32 %tmp184 to i8 ; <i8> [#uses=30] + %tmp206 = icmp ugt i8 %tmp204205, 6 ; <i1> [#uses=3] + br i1 %tmp206, label %bb209, label %bb212 + +bb209: ; preds = %cond_next203 + call void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 52 ) + unreachable + +bb212: ; preds = %cond_next203 + %tmp218 = call i32 @report__ident_int( i32 3 ) ; <i32> [#uses=4] + %tmp222 = icmp ugt i32 %tmp218, 6 ; <i1> [#uses=1] + br i1 %tmp222, label %cond_true225, label %cond_next237 + +cond_true225: ; preds = %bb212 + call void @__gnat_rcheck_10( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 53 ) + unreachable + +cond_next237: ; preds = %bb212 + %tmp238239 = trunc i32 %tmp218 to i8 ; <i8> [#uses=34] + %tmp240 = icmp ugt i8 %tmp238239, 6 ; <i1> [#uses=2] + br i1 %tmp240, label %bb243, label %bb246 + +bb243: ; preds = %cond_next237 + call void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 53 ) + unreachable + +bb246: ; preds = %cond_next237 + %tmp252 = call i32 @report__ident_int( i32 4 ) ; <i32> [#uses=3] + %tmp256 = icmp ugt i32 %tmp252, 6 ; <i1> [#uses=1] + br i1 %tmp256, label %cond_true259, label %cond_next271 + +cond_true259: ; preds = %bb246 + call void @__gnat_rcheck_10( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 54 ) + unreachable + +cond_next271: ; preds = %bb246 + %tmp272273 = trunc i32 %tmp252 to i8 ; <i8> [#uses=27] + %tmp274 = icmp ugt i8 %tmp272273, 6 ; <i1> [#uses=4] + br i1 %tmp274, label %bb277, label %bb280 + +bb277: ; preds = %cond_next271 + call void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 54 ) + unreachable + +bb280: ; preds = %cond_next271 + %tmp286 = call i32 @report__ident_int( i32 5 ) ; <i32> [#uses=3] + %tmp290 = icmp ugt i32 %tmp286, 6 ; <i1> [#uses=1] + br i1 %tmp290, label %cond_true293, label %cond_next305 + +cond_true293: ; preds = %bb280 + call void @__gnat_rcheck_10( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 55 ) + unreachable + +cond_next305: ; preds = %bb280 + %tmp306307 = trunc i32 %tmp286 to i8 ; <i8> [#uses=16] + %tmp308 = icmp ugt i8 %tmp306307, 6 ; <i1> [#uses=1] + br i1 %tmp308, label %bb311, label %bb314 + +bb311: ; preds = %cond_next305 + call void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 55 ) + unreachable + +bb314: ; preds = %cond_next305 + %tmp320 = call i32 @report__ident_int( i32 6 ) ; <i32> [#uses=2] + %tmp324 = icmp ugt i32 %tmp320, 6 ; <i1> [#uses=1] + br i1 %tmp324, label %cond_true327, label %cond_next339 + +cond_true327: ; preds = %bb314 + call void @__gnat_rcheck_10( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 56 ) + unreachable + +cond_next339: ; preds = %bb314 + %tmp340341 = trunc i32 %tmp320 to i8 ; <i8> [#uses=4] + %tmp342 = icmp ugt i8 %tmp340341, 6 ; <i1> [#uses=1] + br i1 %tmp342, label %bb345, label %bb348 + +bb345: ; preds = %cond_next339 + call void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 56 ) + unreachable + +bb348: ; preds = %cond_next339 + %tmp364 = icmp ult i8 %tmp272273, %tmp204205 ; <i1> [#uses=2] + br i1 %tmp364, label %cond_next383, label %cond_true367 + +cond_true367: ; preds = %bb348 + %tmp370 = icmp ult i8 %tmp204205, %tmp170171 ; <i1> [#uses=1] + %tmp374 = icmp ugt i8 %tmp272273, %tmp306307 ; <i1> [#uses=1] + %tmp378 = or i1 %tmp374, %tmp370 ; <i1> [#uses=1] + br i1 %tmp378, label %cond_true381, label %cond_next383 + +cond_true381: ; preds = %cond_true367 + call void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 59 ) + unreachable + +cond_next383: ; preds = %cond_true367, %bb348 + %tmp384 = call i32 @report__ident_int( i32 -5 ) ; <i32> [#uses=15] + %tmp388 = add i32 %tmp384, 10 ; <i32> [#uses=1] + %tmp389 = icmp ugt i32 %tmp388, 20 ; <i1> [#uses=1] + br i1 %tmp389, label %cond_true392, label %cond_next393 + +cond_true392: ; preds = %cond_next383 + call void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 63 ) + unreachable + +cond_next393: ; preds = %cond_next383 + %tmp394 = call i32 @report__ident_int( i32 5 ) ; <i32> [#uses=18] + %tmp398 = add i32 %tmp394, 10 ; <i32> [#uses=1] + %tmp399 = icmp ugt i32 %tmp398, 20 ; <i1> [#uses=1] + br i1 %tmp399, label %cond_true402, label %cond_next403 + +cond_true402: ; preds = %cond_next393 + call void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 64 ) + unreachable + +cond_next403: ; preds = %cond_next393 + %tmp416 = icmp slt i32 %tmp394, %tmp384 ; <i1> [#uses=1] + br i1 %tmp416, label %cond_next437, label %cond_true419 + +cond_true419: ; preds = %cond_next403 + %tmp423 = icmp slt i32 %tmp384, -10 ; <i1> [#uses=1] + %tmp428 = icmp sgt i32 %tmp394, 10 ; <i1> [#uses=1] + %tmp432 = or i1 %tmp428, %tmp423 ; <i1> [#uses=1] + br i1 %tmp432, label %cond_true435, label %cond_next437 + +cond_true435: ; preds = %cond_true419 + call void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 63 ) + unreachable + +cond_next437: ; preds = %cond_true419, %cond_next403 + call void @report__test( i64 or (i64 zext (i32 ptrtoint ([7 x i8]* @.str2 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.29.865 to i32) to i64), i64 32)), i64 or (i64 zext (i32 ptrtoint ([85 x i8]* @.str1 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.28.862 to i32) to i64), i64 32)) ) + %tmp453 = icmp sgt i32 %tmp384, 0 ; <i1> [#uses=1] + %tmp458 = icmp slt i32 %tmp394, 6 ; <i1> [#uses=1] + %tmp462 = or i1 %tmp458, %tmp453 ; <i1> [#uses=3] + br i1 %tmp462, label %cond_true465, label %cond_next467 + +cond_true465: ; preds = %cond_next437 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 80 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind + +unwind: ; preds = %cleanup798, %unwind783, %cond_true465 + %eh_ptr = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=2] + %eh_typeid8065921 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; <i32> [#uses=1] + %tmp8085923 = icmp eq i32 %eh_select, %eh_typeid8065921 ; <i1> [#uses=1] + br i1 %tmp8085923, label %eh_then809, label %eh_else823 + +cond_next467: ; preds = %cond_next437 + invoke void @system__secondary_stack__ss_mark( %struct.system__secondary_stack__mark_id* %tmp9 sret ) + to label %invcont472 unwind label %unwind468 + +unwind468: ; preds = %cleanup, %unwind480, %cond_next467 + %eh_ptr469 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select471 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr469, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=2] + %eh_typeid5928 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp7815929 = icmp eq i32 %eh_select471, %eh_typeid5928 ; <i1> [#uses=1] + br i1 %tmp7815929, label %eh_then, label %cleanup805 + +invcont472: ; preds = %cond_next467 + %tmp475 = getelementptr %struct.system__secondary_stack__mark_id* %tmp9, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp476 = load i8** %tmp475 ; <i8*> [#uses=2] + %tmp478 = getelementptr %struct.system__secondary_stack__mark_id* %tmp9, i32 0, i32 1 ; <i32*> [#uses=1] + %tmp479 = load i32* %tmp478 ; <i32> [#uses=2] + %tmp485 = invoke i32 @report__ident_int( i32 1 ) + to label %invcont484 unwind label %unwind480 ; <i32> [#uses=2] + +unwind480: ; preds = %invcont734, %invcont717, %cond_next665, %cond_true663, %cond_next639, %cond_true637, %cond_next613, %cond_true611, %cond_next587, %cond_true585, %cond_next561, %cond_true559, %cond_next535, %cond_true533, %cond_next509, %cond_true507, %invcont472 + %eh_ptr481 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select483 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr481, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=2] + %tmp7685575 = ptrtoint i8* %tmp476 to i32 ; <i32> [#uses=1] + %tmp76855755576 = zext i32 %tmp7685575 to i64 ; <i64> [#uses=1] + %tmp7715572 = zext i32 %tmp479 to i64 ; <i64> [#uses=1] + %tmp77155725573 = shl i64 %tmp7715572, 32 ; <i64> [#uses=1] + %tmp77155725573.ins = or i64 %tmp77155725573, %tmp76855755576 ; <i64> [#uses=1] + invoke void @system__secondary_stack__ss_release( i64 %tmp77155725573.ins ) + to label %cleanup779 unwind label %unwind468 + +invcont484: ; preds = %invcont472 + %tmp492 = icmp slt i32 %tmp485, %tmp384 ; <i1> [#uses=1] + %tmp500 = icmp sgt i32 %tmp485, %tmp394 ; <i1> [#uses=1] + %tmp504 = or i1 %tmp492, %tmp500 ; <i1> [#uses=1] + br i1 %tmp504, label %cond_true507, label %cond_next509 + +cond_true507: ; preds = %invcont484 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 86 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind480 + +cond_next509: ; preds = %invcont484 + %tmp511 = invoke i32 @report__ident_int( i32 1 ) + to label %invcont510 unwind label %unwind480 ; <i32> [#uses=3] + +invcont510: ; preds = %cond_next509 + %tmp518 = icmp slt i32 %tmp511, %tmp384 ; <i1> [#uses=1] + %tmp526 = icmp sgt i32 %tmp511, %tmp394 ; <i1> [#uses=1] + %tmp530 = or i1 %tmp518, %tmp526 ; <i1> [#uses=1] + br i1 %tmp530, label %cond_true533, label %cond_next535 + +cond_true533: ; preds = %invcont510 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 86 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind480 + +cond_next535: ; preds = %invcont510 + %tmp537 = invoke i32 @report__ident_int( i32 1 ) + to label %invcont536 unwind label %unwind480 ; <i32> [#uses=2] + +invcont536: ; preds = %cond_next535 + %tmp544 = icmp slt i32 %tmp537, %tmp384 ; <i1> [#uses=1] + %tmp552 = icmp sgt i32 %tmp537, %tmp394 ; <i1> [#uses=1] + %tmp556 = or i1 %tmp544, %tmp552 ; <i1> [#uses=1] + br i1 %tmp556, label %cond_true559, label %cond_next561 + +cond_true559: ; preds = %invcont536 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 86 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind480 + +cond_next561: ; preds = %invcont536 + %tmp563 = invoke i32 @report__ident_int( i32 1 ) + to label %invcont562 unwind label %unwind480 ; <i32> [#uses=2] + +invcont562: ; preds = %cond_next561 + %tmp570 = icmp slt i32 %tmp563, %tmp384 ; <i1> [#uses=1] + %tmp578 = icmp sgt i32 %tmp563, %tmp394 ; <i1> [#uses=1] + %tmp582 = or i1 %tmp570, %tmp578 ; <i1> [#uses=1] + br i1 %tmp582, label %cond_true585, label %cond_next587 + +cond_true585: ; preds = %invcont562 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 86 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind480 + +cond_next587: ; preds = %invcont562 + %tmp589 = invoke i32 @report__ident_int( i32 1 ) + to label %invcont588 unwind label %unwind480 ; <i32> [#uses=2] + +invcont588: ; preds = %cond_next587 + %tmp596 = icmp slt i32 %tmp589, %tmp384 ; <i1> [#uses=1] + %tmp604 = icmp sgt i32 %tmp589, %tmp394 ; <i1> [#uses=1] + %tmp608 = or i1 %tmp596, %tmp604 ; <i1> [#uses=1] + br i1 %tmp608, label %cond_true611, label %cond_next613 + +cond_true611: ; preds = %invcont588 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 86 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind480 + +cond_next613: ; preds = %invcont588 + %tmp615 = invoke i32 @report__ident_int( i32 1 ) + to label %invcont614 unwind label %unwind480 ; <i32> [#uses=2] + +invcont614: ; preds = %cond_next613 + %tmp622 = icmp slt i32 %tmp615, %tmp384 ; <i1> [#uses=1] + %tmp630 = icmp sgt i32 %tmp615, %tmp394 ; <i1> [#uses=1] + %tmp634 = or i1 %tmp622, %tmp630 ; <i1> [#uses=1] + br i1 %tmp634, label %cond_true637, label %cond_next639 + +cond_true637: ; preds = %invcont614 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 86 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind480 + +cond_next639: ; preds = %invcont614 + %tmp641 = invoke i32 @report__ident_int( i32 1 ) + to label %invcont640 unwind label %unwind480 ; <i32> [#uses=2] + +invcont640: ; preds = %cond_next639 + %tmp648 = icmp slt i32 %tmp641, %tmp384 ; <i1> [#uses=1] + %tmp656 = icmp sgt i32 %tmp641, %tmp394 ; <i1> [#uses=1] + %tmp660 = or i1 %tmp648, %tmp656 ; <i1> [#uses=1] + br i1 %tmp660, label %cond_true663, label %cond_next665 + +cond_true663: ; preds = %invcont640 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 86 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind480 + +cond_next665: ; preds = %invcont640 + invoke void @system__img_int__image_integer( %struct.string___XUP* %tmp12 sret , i32 %tmp511 ) + to label %invcont717 unwind label %unwind480 + +invcont717: ; preds = %cond_next665 + %tmp719 = getelementptr %struct.string___XUP* %tmp12, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp720 = load i8** %tmp719 ; <i8*> [#uses=1] + %tmp7205888 = ptrtoint i8* %tmp720 to i32 ; <i32> [#uses=1] + %tmp72058885889 = zext i32 %tmp7205888 to i64 ; <i64> [#uses=1] + %tmp722 = getelementptr %struct.string___XUP* %tmp12, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1] + %tmp723 = load %struct.string___XUB** %tmp722 ; <%struct.string___XUB*> [#uses=1] + %tmp7235884 = ptrtoint %struct.string___XUB* %tmp723 to i32 ; <i32> [#uses=1] + %tmp72358845885 = zext i32 %tmp7235884 to i64 ; <i64> [#uses=1] + %tmp723588458855886 = shl i64 %tmp72358845885, 32 ; <i64> [#uses=1] + %tmp723588458855886.ins = or i64 %tmp723588458855886, %tmp72058885889 ; <i64> [#uses=1] + invoke void @system__string_ops__str_concat( %struct.string___XUP* %tmp15 sret , i64 or (i64 zext (i32 ptrtoint ([30 x i8]* @.str3 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.30.904 to i32) to i64), i64 32)), i64 %tmp723588458855886.ins ) + to label %invcont734 unwind label %unwind480 + +invcont734: ; preds = %invcont717 + %tmp736 = getelementptr %struct.string___XUP* %tmp15, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp737 = load i8** %tmp736 ; <i8*> [#uses=1] + %tmp7375876 = ptrtoint i8* %tmp737 to i32 ; <i32> [#uses=1] + %tmp73758765877 = zext i32 %tmp7375876 to i64 ; <i64> [#uses=1] + %tmp739 = getelementptr %struct.string___XUP* %tmp15, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1] + %tmp740 = load %struct.string___XUB** %tmp739 ; <%struct.string___XUB*> [#uses=1] + %tmp7405872 = ptrtoint %struct.string___XUB* %tmp740 to i32 ; <i32> [#uses=1] + %tmp74058725873 = zext i32 %tmp7405872 to i64 ; <i64> [#uses=1] + %tmp740587258735874 = shl i64 %tmp74058725873, 32 ; <i64> [#uses=1] + %tmp740587258735874.ins = or i64 %tmp740587258735874, %tmp73758765877 ; <i64> [#uses=1] + invoke void @report__failed( i64 %tmp740587258735874.ins ) + to label %cleanup unwind label %unwind480 + +cleanup: ; preds = %invcont734 + %tmp7515581 = ptrtoint i8* %tmp476 to i32 ; <i32> [#uses=1] + %tmp75155815582 = zext i32 %tmp7515581 to i64 ; <i64> [#uses=1] + %tmp7545578 = zext i32 %tmp479 to i64 ; <i64> [#uses=1] + %tmp75455785579 = shl i64 %tmp7545578, 32 ; <i64> [#uses=1] + %tmp75455785579.ins = or i64 %tmp75455785579, %tmp75155815582 ; <i64> [#uses=1] + invoke void @system__secondary_stack__ss_release( i64 %tmp75455785579.ins ) + to label %cond_true856 unwind label %unwind468 + +cleanup779: ; preds = %unwind480 + %eh_typeid = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp781 = icmp eq i32 %eh_select483, %eh_typeid ; <i1> [#uses=1] + br i1 %tmp781, label %eh_then, label %cleanup805 + +eh_then: ; preds = %cleanup779, %unwind468 + %eh_exception.35924.0 = phi i8* [ %eh_ptr469, %unwind468 ], [ %eh_ptr481, %cleanup779 ] ; <i8*> [#uses=3] + invoke void @__gnat_begin_handler( i8* %eh_exception.35924.0 ) + to label %invcont787 unwind label %unwind783 + +unwind783: ; preds = %invcont789, %invcont787, %eh_then + %eh_ptr784 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=2] + %eh_select786 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr784, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=1] + invoke void @__gnat_end_handler( i8* %eh_exception.35924.0 ) + to label %cleanup805 unwind label %unwind + +invcont787: ; preds = %eh_then + %tmp788 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp788( ) + to label %invcont789 unwind label %unwind783 + +invcont789: ; preds = %invcont787 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([28 x i8]* @.str4 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.32.910 to i32) to i64), i64 32)) ) + to label %cleanup798 unwind label %unwind783 + +cleanup798: ; preds = %invcont789 + invoke void @__gnat_end_handler( i8* %eh_exception.35924.0 ) + to label %cond_true856 unwind label %unwind + +cleanup805: ; preds = %unwind783, %cleanup779, %unwind468 + %eh_selector.0 = phi i32 [ %eh_select471, %unwind468 ], [ %eh_select483, %cleanup779 ], [ %eh_select786, %unwind783 ] ; <i32> [#uses=2] + %eh_exception.0 = phi i8* [ %eh_ptr469, %unwind468 ], [ %eh_ptr481, %cleanup779 ], [ %eh_ptr784, %unwind783 ] ; <i8*> [#uses=2] + %eh_typeid806 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; <i32> [#uses=1] + %tmp808 = icmp eq i32 %eh_selector.0, %eh_typeid806 ; <i1> [#uses=1] + br i1 %tmp808, label %eh_then809, label %eh_else823 + +eh_then809: ; preds = %cleanup805, %unwind + %eh_exception.05914.0 = phi i8* [ %eh_ptr, %unwind ], [ %eh_exception.0, %cleanup805 ] ; <i8*> [#uses=3] + invoke void @__gnat_begin_handler( i8* %eh_exception.05914.0 ) + to label %invcont815 unwind label %unwind813 + +unwind813: ; preds = %invcont815, %eh_then809 + %eh_ptr814 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_exception.05914.0 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr814 ) ; <i32>:0 [#uses=0] + unreachable + +invcont815: ; preds = %eh_then809 + %tmp816 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp816( ) + to label %cleanup819 unwind label %unwind813 + +cleanup819: ; preds = %invcont815 + call void @__gnat_end_handler( i8* %eh_exception.05914.0 ) + %tmp8595931 = icmp ult i8 %tmp170171, %tmp204205 ; <i1> [#uses=1] + %tmp8635932 = icmp ugt i8 %tmp170171, %tmp272273 ; <i1> [#uses=1] + %tmp8675933 = or i1 %tmp8635932, %tmp8595931 ; <i1> [#uses=1] + br i1 %tmp8675933, label %cond_true870, label %bb887 + +eh_else823: ; preds = %cleanup805, %unwind + %eh_selector.05912.1 = phi i32 [ %eh_select, %unwind ], [ %eh_selector.0, %cleanup805 ] ; <i32> [#uses=1] + %eh_exception.05914.1 = phi i8* [ %eh_ptr, %unwind ], [ %eh_exception.0, %cleanup805 ] ; <i8*> [#uses=4] + %eh_typeid824 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp826 = icmp eq i32 %eh_selector.05912.1, %eh_typeid824 ; <i1> [#uses=1] + br i1 %tmp826, label %eh_then827, label %Unwind + +eh_then827: ; preds = %eh_else823 + invoke void @__gnat_begin_handler( i8* %eh_exception.05914.1 ) + to label %invcont833 unwind label %unwind831 + +unwind831: ; preds = %invcont835, %invcont833, %eh_then827 + %eh_ptr832 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_exception.05914.1 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr832 ) ; <i32>:1 [#uses=0] + unreachable + +invcont833: ; preds = %eh_then827 + %tmp834 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp834( ) + to label %invcont835 unwind label %unwind831 + +invcont835: ; preds = %invcont833 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([24 x i8]* @.str5 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.35.915 to i32) to i64), i64 32)) ) + to label %cleanup844 unwind label %unwind831 + +cleanup844: ; preds = %invcont835 + call void @__gnat_end_handler( i8* %eh_exception.05914.1 ) + br label %cond_true856 + +cond_true856: ; preds = %cleanup844, %cleanup798, %cleanup + %tmp859 = icmp ult i8 %tmp170171, %tmp204205 ; <i1> [#uses=1] + %tmp863 = icmp ugt i8 %tmp170171, %tmp272273 ; <i1> [#uses=1] + %tmp867 = or i1 %tmp863, %tmp859 ; <i1> [#uses=1] + br i1 %tmp867, label %cond_true870, label %bb887 + +cond_true870: ; preds = %cond_true856, %cleanup819 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 103 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind871 + +unwind871: ; preds = %cond_next905, %bb887, %cond_true870 + %sat.3 = phi i8 [ %tmp340341, %cond_true870 ], [ %sat.1, %bb887 ], [ %sat.0, %cond_next905 ] ; <i8> [#uses=2] + %eh_ptr872 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=8] + %eh_select874 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr872, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=2] + %eh_typeid915 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; <i32> [#uses=1] + %tmp917 = icmp eq i32 %eh_select874, %eh_typeid915 ; <i1> [#uses=1] + br i1 %tmp917, label %eh_then918, label %eh_else932 + +bb887: ; preds = %cond_next901, %cond_true856, %cleanup819 + %indvar = phi i8 [ %indvar.next10, %cond_next901 ], [ 0, %cond_true856 ], [ 0, %cleanup819 ] ; <i8> [#uses=2] + %sat.1 = phi i8 [ %sat.0, %cond_next901 ], [ %tmp340341, %cond_true856 ], [ %tmp340341, %cleanup819 ] ; <i8> [#uses=2] + %tmp889 = invoke i8 @report__equal( i32 2, i32 2 ) + to label %invcont888 unwind label %unwind871 ; <i8> [#uses=1] + +invcont888: ; preds = %bb887 + %i.4 = add i8 %indvar, %tmp170171 ; <i8> [#uses=1] + %tmp890 = icmp eq i8 %tmp889, 0 ; <i1> [#uses=1] + %sat.0 = select i1 %tmp890, i8 %sat.1, i8 6 ; <i8> [#uses=3] + %tmp897 = icmp eq i8 %i.4, %tmp170171 ; <i1> [#uses=1] + br i1 %tmp897, label %cond_next905, label %cond_next901 + +cond_next901: ; preds = %invcont888 + %indvar.next10 = add i8 %indvar, 1 ; <i8> [#uses=1] + br label %bb887 + +cond_next905: ; preds = %invcont888 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([29 x i8]* @.str6 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.36.923 to i32) to i64), i64 32)) ) + to label %finally913 unwind label %unwind871 + +eh_then918: ; preds = %unwind871 + invoke void @__gnat_begin_handler( i8* %eh_ptr872 ) + to label %invcont924 unwind label %unwind922 + +unwind922: ; preds = %invcont924, %eh_then918 + %eh_ptr923 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_ptr872 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr923 ) ; <i32>:2 [#uses=0] + unreachable + +invcont924: ; preds = %eh_then918 + %tmp925 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp925( ) + to label %cleanup928 unwind label %unwind922 + +cleanup928: ; preds = %invcont924 + call void @__gnat_end_handler( i8* %eh_ptr872 ) + br i1 %tmp462, label %cond_true973, label %UnifiedReturnBlock35 + +eh_else932: ; preds = %unwind871 + %eh_typeid933 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp935 = icmp eq i32 %eh_select874, %eh_typeid933 ; <i1> [#uses=1] + br i1 %tmp935, label %eh_then936, label %Unwind + +eh_then936: ; preds = %eh_else932 + invoke void @__gnat_begin_handler( i8* %eh_ptr872 ) + to label %invcont942 unwind label %unwind940 + +unwind940: ; preds = %invcont944, %invcont942, %eh_then936 + %eh_ptr941 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_ptr872 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr941 ) ; <i32>:3 [#uses=0] + unreachable + +invcont942: ; preds = %eh_then936 + %tmp943 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp943( ) + to label %invcont944 unwind label %unwind940 + +invcont944: ; preds = %invcont942 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([24 x i8]* @.str7 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.35.915 to i32) to i64), i64 32)) ) + to label %cleanup953 unwind label %unwind940 + +cleanup953: ; preds = %invcont944 + call void @__gnat_end_handler( i8* %eh_ptr872 ) + br label %finally913 + +finally913: ; preds = %cleanup953, %cond_next905 + %sat.4 = phi i8 [ %sat.3, %cleanup953 ], [ %sat.0, %cond_next905 ] ; <i8> [#uses=1] + br i1 %tmp462, label %cond_true973, label %UnifiedReturnBlock35 + +cond_true973: ; preds = %finally913, %cleanup928 + %sat.45934.0 = phi i8 [ %sat.3, %cleanup928 ], [ %sat.4, %finally913 ] ; <i8> [#uses=9] + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 119 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind974 + +unwind974: ; preds = %cond_true973 + %eh_ptr975 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=8] + %eh_select977 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr975, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=2] + %eh_typeid13135959 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; <i32> [#uses=1] + %tmp13155961 = icmp eq i32 %eh_select977, %eh_typeid13135959 ; <i1> [#uses=1] + br i1 %tmp13155961, label %eh_then1316, label %eh_else1330 + +eh_then1316: ; preds = %unwind974 + invoke void @__gnat_begin_handler( i8* %eh_ptr975 ) + to label %invcont1322 unwind label %unwind1320 + +unwind1320: ; preds = %invcont1322, %eh_then1316 + %eh_ptr1321 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_ptr975 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr1321 ) ; <i32>:4 [#uses=0] + unreachable + +invcont1322: ; preds = %eh_then1316 + %tmp1323 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp1323( ) + to label %cleanup1326 unwind label %unwind1320 + +cleanup1326: ; preds = %invcont1322 + call void @__gnat_end_handler( i8* %eh_ptr975 ) + br label %finally1311 + +eh_else1330: ; preds = %unwind974 + %eh_typeid1331 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp1333 = icmp eq i32 %eh_select977, %eh_typeid1331 ; <i1> [#uses=1] + br i1 %tmp1333, label %eh_then1334, label %Unwind + +eh_then1334: ; preds = %eh_else1330 + invoke void @__gnat_begin_handler( i8* %eh_ptr975 ) + to label %invcont1340 unwind label %unwind1338 + +unwind1338: ; preds = %invcont1342, %invcont1340, %eh_then1334 + %eh_ptr1339 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_ptr975 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr1339 ) ; <i32>:5 [#uses=0] + unreachable + +invcont1340: ; preds = %eh_then1334 + %tmp1341 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp1341( ) + to label %invcont1342 unwind label %unwind1338 + +invcont1342: ; preds = %invcont1340 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([24 x i8]* @.str10 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.35.915 to i32) to i64), i64 32)) ) + to label %cleanup1351 unwind label %unwind1338 + +cleanup1351: ; preds = %invcont1342 + call void @__gnat_end_handler( i8* %eh_ptr975 ) + br label %finally1311 + +finally1311: ; preds = %cleanup1351, %cleanup1326 + %tmp1356 = call i8* @llvm.stacksave( ) ; <i8*> [#uses=6] + %tmp13571358 = and i32 %tmp184, 255 ; <i32> [#uses=11] + %tmp13831384 = and i32 %tmp252, 255 ; <i32> [#uses=5] + %tmp1387 = add i32 %tmp13571358, -1 ; <i32> [#uses=2] + %tmp1388 = icmp sge i32 %tmp13831384, %tmp1387 ; <i1> [#uses=1] + %max1389 = select i1 %tmp1388, i32 %tmp13831384, i32 %tmp1387 ; <i32> [#uses=1] + %tmp1392 = sub i32 %max1389, %tmp13571358 ; <i32> [#uses=1] + %tmp1393 = add i32 %tmp1392, 1 ; <i32> [#uses=2] + %tmp1394 = icmp sgt i32 %tmp1393, -1 ; <i1> [#uses=1] + %max1395 = select i1 %tmp1394, i32 %tmp1393, i32 0 ; <i32> [#uses=5] + %tmp1397 = alloca i8, i32 %max1395 ; <i8*> [#uses=2] + %tmp1401 = icmp ult i8 %tmp238239, %tmp170171 ; <i1> [#uses=2] + br i1 %tmp1401, label %cond_next1425, label %cond_true1404 + +cond_true1404: ; preds = %finally1311 + %tmp1407 = icmp ult i8 %tmp170171, %tmp204205 ; <i1> [#uses=1] + %tmp1411 = icmp ugt i8 %tmp238239, %tmp272273 ; <i1> [#uses=1] + %tmp1415 = or i1 %tmp1411, %tmp1407 ; <i1> [#uses=1] + br i1 %tmp1415, label %cond_true1418, label %cond_next1425 + +cond_true1418: ; preds = %cond_true1404 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 144 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind1419 + +unwind1419: ; preds = %cleanup1702, %cleanup1686, %unwind1676, %cond_next1548, %cond_true1546, %cond_true1418 + %eh_ptr1420 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select1422 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr1420, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=2] + %eh_typeid17215981 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; <i32> [#uses=1] + %tmp17235983 = icmp eq i32 %eh_select1422, %eh_typeid17215981 ; <i1> [#uses=1] + br i1 %tmp17235983, label %eh_then1724, label %eh_else1742 + +cond_next1425: ; preds = %cond_true1404, %finally1311 + %tmp14281429 = and i32 %tmp150, 255 ; <i32> [#uses=3] + %tmp14841485 = and i32 %tmp218, 255 ; <i32> [#uses=3] + %tmp1488 = add i32 %tmp14281429, -1 ; <i32> [#uses=2] + %tmp1489 = icmp sge i32 %tmp14841485, %tmp1488 ; <i1> [#uses=1] + %max1490 = select i1 %tmp1489, i32 %tmp14841485, i32 %tmp1488 ; <i32> [#uses=1] + %tmp1493 = sub i32 %max1490, %tmp14281429 ; <i32> [#uses=1] + %tmp1494 = add i32 %tmp1493, 1 ; <i32> [#uses=2] + %tmp1495 = icmp sgt i32 %tmp1494, -1 ; <i1> [#uses=1] + %max1496 = select i1 %tmp1495, i32 %tmp1494, i32 0 ; <i32> [#uses=1] + %tmp1497 = alloca i8, i32 %max1496 ; <i8*> [#uses=3] + %tmp1504 = icmp ugt i8 %tmp170171, %tmp238239 ; <i1> [#uses=1] + br i1 %tmp1504, label %cond_next1526, label %bb1509 + +bb1509: ; preds = %cond_next1425 + store i8 %tmp238239, i8* %tmp1497 + %tmp1518 = icmp eq i8 %tmp238239, %tmp170171 ; <i1> [#uses=1] + br i1 %tmp1518, label %cond_next1526, label %cond_next1522.preheader + +cond_next1522.preheader: ; preds = %bb1509 + %J64b.55984.8 = add i8 %tmp170171, 1 ; <i8> [#uses=1] + br label %cond_next1522 + +cond_next1522: ; preds = %cond_next1522, %cond_next1522.preheader + %indvar6241 = phi i8 [ 0, %cond_next1522.preheader ], [ %indvar.next, %cond_next1522 ] ; <i8> [#uses=2] + %tmp1524 = add i8 %J64b.55984.8, %indvar6241 ; <i8> [#uses=2] + %tmp151015115988 = zext i8 %tmp1524 to i32 ; <i32> [#uses=1] + %tmp15135989 = sub i32 %tmp151015115988, %tmp14281429 ; <i32> [#uses=1] + %tmp15145990 = getelementptr i8* %tmp1497, i32 %tmp15135989 ; <i8*> [#uses=1] + store i8 %tmp238239, i8* %tmp15145990 + %tmp15185992 = icmp eq i8 %tmp238239, %tmp1524 ; <i1> [#uses=1] + %indvar.next = add i8 %indvar6241, 1 ; <i8> [#uses=1] + br i1 %tmp15185992, label %cond_next1526, label %cond_next1522 + +cond_next1526: ; preds = %cond_next1522, %bb1509, %cond_next1425 + %tmp15271528 = zext i8 %tmp272273 to i64 ; <i64> [#uses=1] + %tmp15291530 = zext i8 %tmp204205 to i64 ; <i64> [#uses=1] + %tmp1531 = sub i64 %tmp15271528, %tmp15291530 ; <i64> [#uses=1] + %tmp1532 = add i64 %tmp1531, 1 ; <i64> [#uses=2] + %tmp1533 = icmp sgt i64 %tmp1532, -1 ; <i1> [#uses=1] + %max1534 = select i1 %tmp1533, i64 %tmp1532, i64 0 ; <i64> [#uses=1] + %tmp15351536 = zext i8 %tmp238239 to i64 ; <i64> [#uses=1] + %tmp15371538 = zext i8 %tmp170171 to i64 ; <i64> [#uses=1] + %tmp1539 = sub i64 %tmp15351536, %tmp15371538 ; <i64> [#uses=1] + %tmp1540 = add i64 %tmp1539, 1 ; <i64> [#uses=2] + %tmp1541 = icmp sgt i64 %tmp1540, -1 ; <i1> [#uses=1] + %max1542 = select i1 %tmp1541, i64 %tmp1540, i64 0 ; <i64> [#uses=1] + %tmp1543 = icmp eq i64 %max1534, %max1542 ; <i1> [#uses=1] + br i1 %tmp1543, label %cond_next1548, label %cond_true1546 + +cond_true1546: ; preds = %cond_next1526 + invoke void @__gnat_rcheck_07( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 144 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind1419 + +cond_next1548: ; preds = %cond_next1526 + call void @llvm.memcpy.i32( i8* %tmp1397, i8* %tmp1497, i32 %max1395, i32 1 ) + invoke void @system__secondary_stack__ss_mark( %struct.system__secondary_stack__mark_id* %tmp31 sret ) + to label %invcont1552 unwind label %unwind1419 + +invcont1552: ; preds = %cond_next1548 + %tmp1555 = getelementptr %struct.system__secondary_stack__mark_id* %tmp31, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp1556 = load i8** %tmp1555 ; <i8*> [#uses=3] + %tmp1558 = getelementptr %struct.system__secondary_stack__mark_id* %tmp31, i32 0, i32 1 ; <i32*> [#uses=1] + %tmp1559 = load i32* %tmp1558 ; <i32> [#uses=3] + %tmp1562 = icmp ult i8 %tmp238239, %tmp204205 ; <i1> [#uses=1] + %tmp1566 = icmp ugt i8 %tmp238239, %tmp272273 ; <i1> [#uses=1] + %tmp1570 = or i1 %tmp1566, %tmp1562 ; <i1> [#uses=1] + br i1 %tmp1570, label %cond_true1573, label %cond_next1591 + +cond_true1573: ; preds = %invcont1552 + invoke void @__gnat_rcheck_05( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 148 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind1574 + +unwind1574: ; preds = %invcont1638, %invcont1621, %bb1607, %bb1605, %cond_true1573 + %eh_ptr1575 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=5] + %eh_select1577 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr1575, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=2] + %eh_typeid1652 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp1654 = icmp eq i32 %eh_select1577, %eh_typeid1652 ; <i1> [#uses=1] + br i1 %tmp1654, label %eh_then1655, label %cleanup1686 + +cond_next1591: ; preds = %invcont1552 + %tmp1595 = sub i32 %tmp14841485, %tmp13571358 ; <i32> [#uses=1] + %tmp1596 = getelementptr i8* %tmp1397, i32 %tmp1595 ; <i8*> [#uses=1] + %tmp1597 = load i8* %tmp1596 ; <i8> [#uses=2] + %tmp1599 = icmp ugt i8 %tmp1597, 6 ; <i1> [#uses=1] + br i1 %tmp1599, label %bb1605, label %bb1607 + +bb1605: ; preds = %cond_next1591 + invoke void @__gnat_rcheck_06( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 148 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind1574 + +bb1607: ; preds = %cond_next1591 + %tmp16151616 = zext i8 %tmp1597 to i32 ; <i32> [#uses=1] + invoke void @system__img_enum__image_enumeration_8( %struct.string___XUP* %tmp34 sret , i32 %tmp16151616, i64 or (i64 zext (i32 ptrtoint ([28 x i8]* @weekS.154 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.32.910 to i32) to i64), i64 32)), i8* getelementptr ([8 x i8]* @weekN.179, i32 0, i32 0) ) + to label %invcont1621 unwind label %unwind1574 + +invcont1621: ; preds = %bb1607 + %tmp1623 = getelementptr %struct.string___XUP* %tmp34, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp1624 = load i8** %tmp1623 ; <i8*> [#uses=1] + %tmp16245815 = ptrtoint i8* %tmp1624 to i32 ; <i32> [#uses=1] + %tmp162458155816 = zext i32 %tmp16245815 to i64 ; <i64> [#uses=1] + %tmp1626 = getelementptr %struct.string___XUP* %tmp34, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1] + %tmp1627 = load %struct.string___XUB** %tmp1626 ; <%struct.string___XUB*> [#uses=1] + %tmp16275811 = ptrtoint %struct.string___XUB* %tmp1627 to i32 ; <i32> [#uses=1] + %tmp162758115812 = zext i32 %tmp16275811 to i64 ; <i64> [#uses=1] + %tmp1627581158125813 = shl i64 %tmp162758115812, 32 ; <i64> [#uses=1] + %tmp1627581158125813.ins = or i64 %tmp1627581158125813, %tmp162458155816 ; <i64> [#uses=1] + invoke void @system__string_ops__str_concat( %struct.string___XUP* %tmp37 sret , i64 or (i64 zext (i32 ptrtoint ([30 x i8]* @.str11 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.30.904 to i32) to i64), i64 32)), i64 %tmp1627581158125813.ins ) + to label %invcont1638 unwind label %unwind1574 + +invcont1638: ; preds = %invcont1621 + %tmp1640 = getelementptr %struct.string___XUP* %tmp37, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp1641 = load i8** %tmp1640 ; <i8*> [#uses=1] + %tmp16415803 = ptrtoint i8* %tmp1641 to i32 ; <i32> [#uses=1] + %tmp164158035804 = zext i32 %tmp16415803 to i64 ; <i64> [#uses=1] + %tmp1643 = getelementptr %struct.string___XUP* %tmp37, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1] + %tmp1644 = load %struct.string___XUB** %tmp1643 ; <%struct.string___XUB*> [#uses=1] + %tmp16445799 = ptrtoint %struct.string___XUB* %tmp1644 to i32 ; <i32> [#uses=1] + %tmp164457995800 = zext i32 %tmp16445799 to i64 ; <i64> [#uses=1] + %tmp1644579958005801 = shl i64 %tmp164457995800, 32 ; <i64> [#uses=1] + %tmp1644579958005801.ins = or i64 %tmp1644579958005801, %tmp164158035804 ; <i64> [#uses=1] + invoke void @report__failed( i64 %tmp1644579958005801.ins ) + to label %cleanup1702 unwind label %unwind1574 + +eh_then1655: ; preds = %unwind1574 + invoke void @__gnat_begin_handler( i8* %eh_ptr1575 ) + to label %invcont1663 unwind label %unwind1659 + +unwind1659: ; preds = %invcont1665, %invcont1663, %eh_then1655 + %eh_ptr1660 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=2] + %eh_select1662 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr1660, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=1] + invoke void @__gnat_end_handler( i8* %eh_ptr1575 ) + to label %cleanup1686 unwind label %unwind1676 + +invcont1663: ; preds = %eh_then1655 + %tmp1664 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp1664( ) + to label %invcont1665 unwind label %unwind1659 + +invcont1665: ; preds = %invcont1663 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([28 x i8]* @.str12 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.32.910 to i32) to i64), i64 32)) ) + to label %cleanup1674 unwind label %unwind1659 + +cleanup1674: ; preds = %invcont1665 + invoke void @__gnat_end_handler( i8* %eh_ptr1575 ) + to label %cleanup1702 unwind label %unwind1676 + +unwind1676: ; preds = %cleanup1674, %unwind1659 + %eh_ptr1677 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=2] + %eh_select1679 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr1677, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=1] + %tmp169255575995 = ptrtoint i8* %tmp1556 to i32 ; <i32> [#uses=1] + %tmp1692555755585996 = zext i32 %tmp169255575995 to i64 ; <i64> [#uses=1] + %tmp169555545997 = zext i32 %tmp1559 to i64 ; <i64> [#uses=1] + %tmp1695555455555998 = shl i64 %tmp169555545997, 32 ; <i64> [#uses=1] + %tmp169555545555.ins5999 = or i64 %tmp1695555455555998, %tmp1692555755585996 ; <i64> [#uses=1] + invoke void @system__secondary_stack__ss_release( i64 %tmp169555545555.ins5999 ) + to label %cleanup1720 unwind label %unwind1419 + +cleanup1686: ; preds = %unwind1659, %unwind1574 + %eh_selector.18 = phi i32 [ %eh_select1577, %unwind1574 ], [ %eh_select1662, %unwind1659 ] ; <i32> [#uses=1] + %eh_exception.18 = phi i8* [ %eh_ptr1575, %unwind1574 ], [ %eh_ptr1660, %unwind1659 ] ; <i8*> [#uses=1] + %tmp16925557 = ptrtoint i8* %tmp1556 to i32 ; <i32> [#uses=1] + %tmp169255575558 = zext i32 %tmp16925557 to i64 ; <i64> [#uses=1] + %tmp16955554 = zext i32 %tmp1559 to i64 ; <i64> [#uses=1] + %tmp169555545555 = shl i64 %tmp16955554, 32 ; <i64> [#uses=1] + %tmp169555545555.ins = or i64 %tmp169555545555, %tmp169255575558 ; <i64> [#uses=1] + invoke void @system__secondary_stack__ss_release( i64 %tmp169555545555.ins ) + to label %cleanup1720 unwind label %unwind1419 + +cleanup1702: ; preds = %cleanup1674, %invcont1638 + %tmp17095551 = ptrtoint i8* %tmp1556 to i32 ; <i32> [#uses=1] + %tmp170955515552 = zext i32 %tmp17095551 to i64 ; <i64> [#uses=1] + %tmp17125548 = zext i32 %tmp1559 to i64 ; <i64> [#uses=1] + %tmp171255485549 = shl i64 %tmp17125548, 32 ; <i64> [#uses=1] + %tmp171255485549.ins = or i64 %tmp171255485549, %tmp170955515552 ; <i64> [#uses=1] + invoke void @system__secondary_stack__ss_release( i64 %tmp171255485549.ins ) + to label %cleanup1773 unwind label %unwind1419 + +cleanup1720: ; preds = %cleanup1686, %unwind1676 + %eh_selector.185993.1 = phi i32 [ %eh_select1679, %unwind1676 ], [ %eh_selector.18, %cleanup1686 ] ; <i32> [#uses=2] + %eh_exception.185994.1 = phi i8* [ %eh_ptr1677, %unwind1676 ], [ %eh_exception.18, %cleanup1686 ] ; <i8*> [#uses=2] + %eh_typeid1721 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; <i32> [#uses=1] + %tmp1723 = icmp eq i32 %eh_selector.185993.1, %eh_typeid1721 ; <i1> [#uses=1] + br i1 %tmp1723, label %eh_then1724, label %eh_else1742 + +eh_then1724: ; preds = %cleanup1720, %unwind1419 + %eh_exception.135974.0 = phi i8* [ %eh_ptr1420, %unwind1419 ], [ %eh_exception.185994.1, %cleanup1720 ] ; <i8*> [#uses=3] + invoke void @__gnat_begin_handler( i8* %eh_exception.135974.0 ) + to label %invcont1730 unwind label %unwind1728 + +unwind1728: ; preds = %invcont1730, %eh_then1724 + %eh_ptr1729 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + invoke void @__gnat_end_handler( i8* %eh_exception.135974.0 ) + to label %cleanup1771 unwind label %unwind1736 + +invcont1730: ; preds = %eh_then1724 + %tmp1731 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp1731( ) + to label %cleanup1734 unwind label %unwind1728 + +cleanup1734: ; preds = %invcont1730 + invoke void @__gnat_end_handler( i8* %eh_exception.135974.0 ) + to label %cleanup1773 unwind label %unwind1736 + +unwind1736: ; preds = %cleanup1763, %unwind1750, %cleanup1734, %unwind1728 + %eh_ptr1737 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @llvm.stackrestore( i8* %tmp1356 ) + call void @llvm.stackrestore( i8* %tmp1356 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr1737 ) ; <i32>:6 [#uses=0] + unreachable + +eh_else1742: ; preds = %cleanup1720, %unwind1419 + %eh_selector.135972.1 = phi i32 [ %eh_select1422, %unwind1419 ], [ %eh_selector.185993.1, %cleanup1720 ] ; <i32> [#uses=1] + %eh_exception.135974.1 = phi i8* [ %eh_ptr1420, %unwind1419 ], [ %eh_exception.185994.1, %cleanup1720 ] ; <i8*> [#uses=4] + %eh_typeid1743 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp1745 = icmp eq i32 %eh_selector.135972.1, %eh_typeid1743 ; <i1> [#uses=1] + br i1 %tmp1745, label %eh_then1746, label %cleanup1771 + +eh_then1746: ; preds = %eh_else1742 + invoke void @__gnat_begin_handler( i8* %eh_exception.135974.1 ) + to label %invcont1752 unwind label %unwind1750 + +unwind1750: ; preds = %invcont1754, %invcont1752, %eh_then1746 + %eh_ptr1751 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + invoke void @__gnat_end_handler( i8* %eh_exception.135974.1 ) + to label %cleanup1771 unwind label %unwind1736 + +invcont1752: ; preds = %eh_then1746 + %tmp1753 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp1753( ) + to label %invcont1754 unwind label %unwind1750 + +invcont1754: ; preds = %invcont1752 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([24 x i8]* @.str13 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.35.915 to i32) to i64), i64 32)) ) + to label %cleanup1763 unwind label %unwind1750 + +cleanup1763: ; preds = %invcont1754 + invoke void @__gnat_end_handler( i8* %eh_exception.135974.1 ) + to label %cleanup1773 unwind label %unwind1736 + +cleanup1771: ; preds = %unwind1750, %eh_else1742, %unwind1728 + %eh_exception.20 = phi i8* [ %eh_ptr1729, %unwind1728 ], [ %eh_exception.135974.1, %eh_else1742 ], [ %eh_ptr1751, %unwind1750 ] ; <i8*> [#uses=1] + call void @llvm.stackrestore( i8* %tmp1356 ) + call void @llvm.stackrestore( i8* %tmp1356 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_exception.20 ) ; <i32>:7 [#uses=0] + unreachable + +cleanup1773: ; preds = %cleanup1763, %cleanup1734, %cleanup1702 + call void @llvm.stackrestore( i8* %tmp1356 ) + call void @llvm.stackrestore( i8* %tmp1356 ) + %tmp1780 = call i8* @llvm.stacksave( ) ; <i8*> [#uses=6] + %tmp17811782 = and i32 %tmp150, 255 ; <i32> [#uses=4] + %tmp18071808 = and i32 %tmp286, 255 ; <i32> [#uses=2] + %tmp1811 = add i32 %tmp17811782, -1 ; <i32> [#uses=2] + %tmp1812 = icmp sge i32 %tmp18071808, %tmp1811 ; <i1> [#uses=1] + %max1813 = select i1 %tmp1812, i32 %tmp18071808, i32 %tmp1811 ; <i32> [#uses=1] + %tmp1816 = sub i32 %max1813, %tmp17811782 ; <i32> [#uses=1] + %tmp1817 = add i32 %tmp1816, 1 ; <i32> [#uses=2] + %tmp1818 = icmp sgt i32 %tmp1817, -1 ; <i1> [#uses=1] + %max1819 = select i1 %tmp1818, i32 %tmp1817, i32 0 ; <i32> [#uses=3] + %tmp1821 = alloca i8, i32 %max1819 ; <i8*> [#uses=2] + %tmp1863 = alloca i8, i32 %max1819 ; <i8*> [#uses=3] + %tmp1870 = icmp ugt i8 %tmp170171, %tmp306307 ; <i1> [#uses=1] + br i1 %tmp1870, label %cond_next1900, label %bb1875 + +bb1875: ; preds = %cleanup1773 + store i8 %tmp238239, i8* %tmp1863 + %tmp1884 = icmp eq i8 %tmp306307, %tmp170171 ; <i1> [#uses=1] + br i1 %tmp1884, label %cond_next1900, label %cond_next1888.preheader + +cond_next1888.preheader: ; preds = %bb1875 + %J77b.26000.2 = add i8 %tmp170171, 1 ; <i8> [#uses=1] + br label %cond_next1888 + +cond_next1888: ; preds = %cond_next1888, %cond_next1888.preheader + %indvar6245 = phi i8 [ 0, %cond_next1888.preheader ], [ %indvar.next14, %cond_next1888 ] ; <i8> [#uses=2] + %tmp1890 = add i8 %J77b.26000.2, %indvar6245 ; <i8> [#uses=2] + %tmp187618776004 = zext i8 %tmp1890 to i32 ; <i32> [#uses=1] + %tmp18796005 = sub i32 %tmp187618776004, %tmp17811782 ; <i32> [#uses=1] + %tmp18806006 = getelementptr i8* %tmp1863, i32 %tmp18796005 ; <i8*> [#uses=1] + store i8 %tmp238239, i8* %tmp18806006 + %tmp18846008 = icmp eq i8 %tmp306307, %tmp1890 ; <i1> [#uses=1] + %indvar.next14 = add i8 %indvar6245, 1 ; <i8> [#uses=1] + br i1 %tmp18846008, label %cond_next1900, label %cond_next1888 + +unwind1895: ; preds = %cleanup2300, %cleanup2284, %unwind2274, %cond_next2149, %cond_true1946 + %eh_ptr1896 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select1898 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr1896, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=2] + %eh_typeid23196018 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; <i32> [#uses=1] + %tmp23216020 = icmp eq i32 %eh_select1898, %eh_typeid23196018 ; <i1> [#uses=1] + br i1 %tmp23216020, label %eh_then2322, label %eh_else2340 + +cond_next1900: ; preds = %cond_next1888, %bb1875, %cleanup1773 + call void @llvm.memcpy.i32( i8* %tmp1821, i8* %tmp1863, i32 %max1819, i32 1 ) + ret void + +cond_true1909: ; No predecessors! + %tmp1912 = icmp ult i8 %tmp170171, %tmp204205 ; <i1> [#uses=1] + %tmp1916 = icmp ugt i8 %tmp238239, %tmp272273 ; <i1> [#uses=1] + %tmp1920 = or i1 %tmp1916, %tmp1912 ; <i1> [#uses=0] + ret void + +cond_true1923: ; No predecessors! + ret void + +cond_next1926: ; No predecessors! + %tmp1929.not = icmp uge i8 %tmp238239, %tmp170171 ; <i1> [#uses=1] + %tmp1939 = icmp ugt i8 %tmp238239, %tmp306307 ; <i1> [#uses=2] + %bothcond = and i1 %tmp1939, %tmp1929.not ; <i1> [#uses=0] + ret void + +cond_true1946: ; No predecessors! + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 162 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind1895 + +cond_next2149: ; No predecessors! + invoke void @system__secondary_stack__ss_mark( %struct.system__secondary_stack__mark_id* %tmp46 sret ) + to label %invcont2150 unwind label %unwind1895 + +invcont2150: ; preds = %cond_next2149 + %tmp2153 = getelementptr %struct.system__secondary_stack__mark_id* %tmp46, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp2154 = load i8** %tmp2153 ; <i8*> [#uses=3] + %tmp2156 = getelementptr %struct.system__secondary_stack__mark_id* %tmp46, i32 0, i32 1 ; <i32*> [#uses=1] + %tmp2157 = load i32* %tmp2156 ; <i32> [#uses=3] + %tmp2168 = or i1 %tmp1939, %tmp1401 ; <i1> [#uses=1] + br i1 %tmp2168, label %cond_true2171, label %cond_next2189 + +cond_true2171: ; preds = %invcont2150 + invoke void @__gnat_rcheck_05( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 165 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind2172 + +unwind2172: ; preds = %invcont2236, %invcont2219, %bb2205, %bb2203, %cond_true2171 + %eh_ptr2173 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=5] + %eh_select2175 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2173, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=2] + %eh_typeid2250 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp2252 = icmp eq i32 %eh_select2175, %eh_typeid2250 ; <i1> [#uses=1] + br i1 %tmp2252, label %eh_then2253, label %cleanup2284 + +cond_next2189: ; preds = %invcont2150 + %tmp21902191 = and i32 %tmp218, 255 ; <i32> [#uses=1] + %tmp2193 = sub i32 %tmp21902191, %tmp17811782 ; <i32> [#uses=1] + %tmp2194 = getelementptr i8* %tmp1821, i32 %tmp2193 ; <i8*> [#uses=1] + %tmp2195 = load i8* %tmp2194 ; <i8> [#uses=2] + %tmp2197 = icmp ugt i8 %tmp2195, 6 ; <i1> [#uses=1] + br i1 %tmp2197, label %bb2203, label %bb2205 + +bb2203: ; preds = %cond_next2189 + invoke void @__gnat_rcheck_06( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 165 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind2172 + +bb2205: ; preds = %cond_next2189 + %tmp22132214 = zext i8 %tmp2195 to i32 ; <i32> [#uses=1] + invoke void @system__img_enum__image_enumeration_8( %struct.string___XUP* %tmp49 sret , i32 %tmp22132214, i64 or (i64 zext (i32 ptrtoint ([28 x i8]* @weekS.154 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.32.910 to i32) to i64), i64 32)), i8* getelementptr ([8 x i8]* @weekN.179, i32 0, i32 0) ) + to label %invcont2219 unwind label %unwind2172 + +invcont2219: ; preds = %bb2205 + %tmp2221 = getelementptr %struct.string___XUP* %tmp49, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp2222 = load i8** %tmp2221 ; <i8*> [#uses=1] + %tmp22225781 = ptrtoint i8* %tmp2222 to i32 ; <i32> [#uses=1] + %tmp222257815782 = zext i32 %tmp22225781 to i64 ; <i64> [#uses=1] + %tmp2224 = getelementptr %struct.string___XUP* %tmp49, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1] + %tmp2225 = load %struct.string___XUB** %tmp2224 ; <%struct.string___XUB*> [#uses=1] + %tmp22255777 = ptrtoint %struct.string___XUB* %tmp2225 to i32 ; <i32> [#uses=1] + %tmp222557775778 = zext i32 %tmp22255777 to i64 ; <i64> [#uses=1] + %tmp2225577757785779 = shl i64 %tmp222557775778, 32 ; <i64> [#uses=1] + %tmp2225577757785779.ins = or i64 %tmp2225577757785779, %tmp222257815782 ; <i64> [#uses=1] + invoke void @system__string_ops__str_concat( %struct.string___XUP* %tmp52 sret , i64 or (i64 zext (i32 ptrtoint ([30 x i8]* @.str14 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.30.904 to i32) to i64), i64 32)), i64 %tmp2225577757785779.ins ) + to label %invcont2236 unwind label %unwind2172 + +invcont2236: ; preds = %invcont2219 + %tmp2238 = getelementptr %struct.string___XUP* %tmp52, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp2239 = load i8** %tmp2238 ; <i8*> [#uses=1] + %tmp22395769 = ptrtoint i8* %tmp2239 to i32 ; <i32> [#uses=1] + %tmp223957695770 = zext i32 %tmp22395769 to i64 ; <i64> [#uses=1] + %tmp2241 = getelementptr %struct.string___XUP* %tmp52, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1] + %tmp2242 = load %struct.string___XUB** %tmp2241 ; <%struct.string___XUB*> [#uses=1] + %tmp22425765 = ptrtoint %struct.string___XUB* %tmp2242 to i32 ; <i32> [#uses=1] + %tmp224257655766 = zext i32 %tmp22425765 to i64 ; <i64> [#uses=1] + %tmp2242576557665767 = shl i64 %tmp224257655766, 32 ; <i64> [#uses=1] + %tmp2242576557665767.ins = or i64 %tmp2242576557665767, %tmp223957695770 ; <i64> [#uses=1] + invoke void @report__failed( i64 %tmp2242576557665767.ins ) + to label %cleanup2300 unwind label %unwind2172 + +eh_then2253: ; preds = %unwind2172 + invoke void @__gnat_begin_handler( i8* %eh_ptr2173 ) + to label %invcont2261 unwind label %unwind2257 + +unwind2257: ; preds = %invcont2263, %invcont2261, %eh_then2253 + %eh_ptr2258 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=2] + %eh_select2260 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2258, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=1] + invoke void @__gnat_end_handler( i8* %eh_ptr2173 ) + to label %cleanup2284 unwind label %unwind2274 + +invcont2261: ; preds = %eh_then2253 + %tmp2262 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp2262( ) + to label %invcont2263 unwind label %unwind2257 + +invcont2263: ; preds = %invcont2261 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([28 x i8]* @.str15 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.32.910 to i32) to i64), i64 32)) ) + to label %cleanup2272 unwind label %unwind2257 + +cleanup2272: ; preds = %invcont2263 + invoke void @__gnat_end_handler( i8* %eh_ptr2173 ) + to label %cleanup2300 unwind label %unwind2274 + +unwind2274: ; preds = %cleanup2272, %unwind2257 + %eh_ptr2275 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=2] + %eh_select2277 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2275, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=1] + %tmp229055456023 = ptrtoint i8* %tmp2154 to i32 ; <i32> [#uses=1] + %tmp2290554555466024 = zext i32 %tmp229055456023 to i64 ; <i64> [#uses=1] + %tmp229355426025 = zext i32 %tmp2157 to i64 ; <i64> [#uses=1] + %tmp2293554255436026 = shl i64 %tmp229355426025, 32 ; <i64> [#uses=1] + %tmp229355425543.ins6027 = or i64 %tmp2293554255436026, %tmp2290554555466024 ; <i64> [#uses=1] + invoke void @system__secondary_stack__ss_release( i64 %tmp229355425543.ins6027 ) + to label %cleanup2318 unwind label %unwind1895 + +cleanup2284: ; preds = %unwind2257, %unwind2172 + %eh_selector.24 = phi i32 [ %eh_select2175, %unwind2172 ], [ %eh_select2260, %unwind2257 ] ; <i32> [#uses=1] + %eh_exception.26 = phi i8* [ %eh_ptr2173, %unwind2172 ], [ %eh_ptr2258, %unwind2257 ] ; <i8*> [#uses=1] + %tmp22905545 = ptrtoint i8* %tmp2154 to i32 ; <i32> [#uses=1] + %tmp229055455546 = zext i32 %tmp22905545 to i64 ; <i64> [#uses=1] + %tmp22935542 = zext i32 %tmp2157 to i64 ; <i64> [#uses=1] + %tmp229355425543 = shl i64 %tmp22935542, 32 ; <i64> [#uses=1] + %tmp229355425543.ins = or i64 %tmp229355425543, %tmp229055455546 ; <i64> [#uses=1] + invoke void @system__secondary_stack__ss_release( i64 %tmp229355425543.ins ) + to label %cleanup2318 unwind label %unwind1895 + +cleanup2300: ; preds = %cleanup2272, %invcont2236 + %tmp23075539 = ptrtoint i8* %tmp2154 to i32 ; <i32> [#uses=1] + %tmp230755395540 = zext i32 %tmp23075539 to i64 ; <i64> [#uses=1] + %tmp23105536 = zext i32 %tmp2157 to i64 ; <i64> [#uses=1] + %tmp231055365537 = shl i64 %tmp23105536, 32 ; <i64> [#uses=1] + %tmp231055365537.ins = or i64 %tmp231055365537, %tmp230755395540 ; <i64> [#uses=1] + invoke void @system__secondary_stack__ss_release( i64 %tmp231055365537.ins ) + to label %cleanup2371 unwind label %unwind1895 + +cleanup2318: ; preds = %cleanup2284, %unwind2274 + %eh_selector.246021.1 = phi i32 [ %eh_select2277, %unwind2274 ], [ %eh_selector.24, %cleanup2284 ] ; <i32> [#uses=2] + %eh_exception.266022.1 = phi i8* [ %eh_ptr2275, %unwind2274 ], [ %eh_exception.26, %cleanup2284 ] ; <i8*> [#uses=2] + %eh_typeid2319 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; <i32> [#uses=1] + %tmp2321 = icmp eq i32 %eh_selector.246021.1, %eh_typeid2319 ; <i1> [#uses=1] + br i1 %tmp2321, label %eh_then2322, label %eh_else2340 + +eh_then2322: ; preds = %cleanup2318, %unwind1895 + %eh_exception.216011.0 = phi i8* [ %eh_ptr1896, %unwind1895 ], [ %eh_exception.266022.1, %cleanup2318 ] ; <i8*> [#uses=3] + invoke void @__gnat_begin_handler( i8* %eh_exception.216011.0 ) + to label %invcont2328 unwind label %unwind2326 + +unwind2326: ; preds = %invcont2328, %eh_then2322 + %eh_ptr2327 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + invoke void @__gnat_end_handler( i8* %eh_exception.216011.0 ) + to label %cleanup2369 unwind label %unwind2334 + +invcont2328: ; preds = %eh_then2322 + %tmp2329 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp2329( ) + to label %cleanup2332 unwind label %unwind2326 + +cleanup2332: ; preds = %invcont2328 + invoke void @__gnat_end_handler( i8* %eh_exception.216011.0 ) + to label %cleanup2371 unwind label %unwind2334 + +unwind2334: ; preds = %cleanup2361, %unwind2348, %cleanup2332, %unwind2326 + %eh_ptr2335 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @llvm.stackrestore( i8* %tmp1780 ) + call void @llvm.stackrestore( i8* %tmp1780 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr2335 ) ; <i32>:8 [#uses=0] + unreachable + +eh_else2340: ; preds = %cleanup2318, %unwind1895 + %eh_selector.196009.1 = phi i32 [ %eh_select1898, %unwind1895 ], [ %eh_selector.246021.1, %cleanup2318 ] ; <i32> [#uses=1] + %eh_exception.216011.1 = phi i8* [ %eh_ptr1896, %unwind1895 ], [ %eh_exception.266022.1, %cleanup2318 ] ; <i8*> [#uses=4] + %eh_typeid2341 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp2343 = icmp eq i32 %eh_selector.196009.1, %eh_typeid2341 ; <i1> [#uses=1] + br i1 %tmp2343, label %eh_then2344, label %cleanup2369 + +eh_then2344: ; preds = %eh_else2340 + invoke void @__gnat_begin_handler( i8* %eh_exception.216011.1 ) + to label %invcont2350 unwind label %unwind2348 + +unwind2348: ; preds = %invcont2352, %invcont2350, %eh_then2344 + %eh_ptr2349 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + invoke void @__gnat_end_handler( i8* %eh_exception.216011.1 ) + to label %cleanup2369 unwind label %unwind2334 + +invcont2350: ; preds = %eh_then2344 + %tmp2351 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp2351( ) + to label %invcont2352 unwind label %unwind2348 + +invcont2352: ; preds = %invcont2350 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([24 x i8]* @.str16 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.35.915 to i32) to i64), i64 32)) ) + to label %cleanup2361 unwind label %unwind2348 + +cleanup2361: ; preds = %invcont2352 + invoke void @__gnat_end_handler( i8* %eh_exception.216011.1 ) + to label %cleanup2371 unwind label %unwind2334 + +cleanup2369: ; preds = %unwind2348, %eh_else2340, %unwind2326 + %eh_exception.28 = phi i8* [ %eh_ptr2327, %unwind2326 ], [ %eh_exception.216011.1, %eh_else2340 ], [ %eh_ptr2349, %unwind2348 ] ; <i8*> [#uses=1] + call void @llvm.stackrestore( i8* %tmp1780 ) + call void @llvm.stackrestore( i8* %tmp1780 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_exception.28 ) ; <i32>:9 [#uses=0] + unreachable + +cleanup2371: ; preds = %cleanup2361, %cleanup2332, %cleanup2300 + call void @llvm.stackrestore( i8* %tmp1780 ) + call void @llvm.stackrestore( i8* %tmp1780 ) + invoke void @system__secondary_stack__ss_mark( %struct.system__secondary_stack__mark_id* %tmp55 sret ) + to label %invcont2382 unwind label %unwind2378 + +unwind2378: ; preds = %cleanup2371 + %eh_ptr2379 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select2381 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2379, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=2] + %eh_typeid26496037 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; <i32> [#uses=1] + %tmp26516039 = icmp eq i32 %eh_select2381, %eh_typeid26496037 ; <i1> [#uses=1] + br i1 %tmp26516039, label %eh_then2652, label %eh_else2666 + +invcont2382: ; preds = %cleanup2371 + %tmp2385 = getelementptr %struct.system__secondary_stack__mark_id* %tmp55, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp2386 = load i8** %tmp2385 ; <i8*> [#uses=2] + %tmp2388 = getelementptr %struct.system__secondary_stack__mark_id* %tmp55, i32 0, i32 1 ; <i32*> [#uses=1] + %tmp2389 = load i32* %tmp2388 ; <i32> [#uses=2] + %tmp2390 = call i8* @llvm.stacksave( ) ; <i8*> [#uses=3] + %tmp2393 = icmp ult i8 %tmp306307, %tmp170171 ; <i1> [#uses=1] + br i1 %tmp2393, label %cond_next2417, label %cond_true2396 + +cond_true2396: ; preds = %invcont2382 + %tmp2399 = icmp ult i8 %tmp170171, %tmp204205 ; <i1> [#uses=1] + %tmp2403 = icmp ugt i8 %tmp306307, %tmp272273 ; <i1> [#uses=1] + %tmp2407 = or i1 %tmp2403, %tmp2399 ; <i1> [#uses=1] + br i1 %tmp2407, label %cond_true2410, label %cond_next2417 + +cond_true2410: ; preds = %cond_true2396 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 177 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind2411 + +unwind2411: ; preds = %invcont2591, %invcont2574, %bb2560, %bb2558, %bb2524, %bb2506, %cond_true2410 + %eh_ptr2412 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select2414 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2412, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=2] + %tmp26315527 = ptrtoint i8* %tmp2386 to i32 ; <i32> [#uses=1] + %tmp263155275528 = zext i32 %tmp26315527 to i64 ; <i64> [#uses=1] + %tmp26345524 = zext i32 %tmp2389 to i64 ; <i64> [#uses=1] + %tmp263455245525 = shl i64 %tmp26345524, 32 ; <i64> [#uses=1] + %tmp263455245525.ins = or i64 %tmp263455245525, %tmp263155275528 ; <i64> [#uses=1] + invoke void @system__secondary_stack__ss_release( i64 %tmp263455245525.ins ) + to label %cleanup2644 unwind label %unwind2618 + +cond_next2417: ; preds = %cond_true2396, %invcont2382 + %tmp2493 = icmp ugt i8 %tmp170171, %tmp238239 ; <i1> [#uses=1] + %tmp2500 = icmp ugt i8 %tmp238239, %tmp306307 ; <i1> [#uses=1] + %bothcond5903 = or i1 %tmp2500, %tmp2493 ; <i1> [#uses=1] + br i1 %bothcond5903, label %bb2506, label %cond_next2515 + +bb2506: ; preds = %cond_next2417 + invoke void @__gnat_rcheck_05( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 180 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind2411 + +cond_next2515: ; preds = %cond_next2417 + br i1 %tmp240, label %bb2524, label %bb2526 + +bb2524: ; preds = %cond_next2515 + invoke void @__gnat_rcheck_06( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 180 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind2411 + +bb2526: ; preds = %cond_next2515 + br i1 %tmp274, label %bb2558, label %bb2560 + +bb2558: ; preds = %bb2526 + invoke void @__gnat_rcheck_06( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 182 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind2411 + +bb2560: ; preds = %bb2526 + invoke void @system__img_enum__image_enumeration_8( %struct.string___XUP* %tmp58 sret , i32 %tmp13831384, i64 or (i64 zext (i32 ptrtoint ([28 x i8]* @weekS.154 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.32.910 to i32) to i64), i64 32)), i8* getelementptr ([8 x i8]* @weekN.179, i32 0, i32 0) ) + to label %invcont2574 unwind label %unwind2411 + +invcont2574: ; preds = %bb2560 + %tmp2576 = getelementptr %struct.string___XUP* %tmp58, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp2577 = load i8** %tmp2576 ; <i8*> [#uses=1] + %tmp25775747 = ptrtoint i8* %tmp2577 to i32 ; <i32> [#uses=1] + %tmp257757475748 = zext i32 %tmp25775747 to i64 ; <i64> [#uses=1] + %tmp2579 = getelementptr %struct.string___XUP* %tmp58, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1] + %tmp2580 = load %struct.string___XUB** %tmp2579 ; <%struct.string___XUB*> [#uses=1] + %tmp25805743 = ptrtoint %struct.string___XUB* %tmp2580 to i32 ; <i32> [#uses=1] + %tmp258057435744 = zext i32 %tmp25805743 to i64 ; <i64> [#uses=1] + %tmp2580574357445745 = shl i64 %tmp258057435744, 32 ; <i64> [#uses=1] + %tmp2580574357445745.ins = or i64 %tmp2580574357445745, %tmp257757475748 ; <i64> [#uses=1] + invoke void @system__string_ops__str_concat( %struct.string___XUP* %tmp61 sret , i64 or (i64 zext (i32 ptrtoint ([30 x i8]* @.str17 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.30.904 to i32) to i64), i64 32)), i64 %tmp2580574357445745.ins ) + to label %invcont2591 unwind label %unwind2411 + +invcont2591: ; preds = %invcont2574 + %tmp2593 = getelementptr %struct.string___XUP* %tmp61, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp2594 = load i8** %tmp2593 ; <i8*> [#uses=1] + %tmp25945735 = ptrtoint i8* %tmp2594 to i32 ; <i32> [#uses=1] + %tmp259457355736 = zext i32 %tmp25945735 to i64 ; <i64> [#uses=1] + %tmp2596 = getelementptr %struct.string___XUP* %tmp61, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1] + %tmp2597 = load %struct.string___XUB** %tmp2596 ; <%struct.string___XUB*> [#uses=1] + %tmp25975731 = ptrtoint %struct.string___XUB* %tmp2597 to i32 ; <i32> [#uses=1] + %tmp259757315732 = zext i32 %tmp25975731 to i64 ; <i64> [#uses=1] + %tmp2597573157325733 = shl i64 %tmp259757315732, 32 ; <i64> [#uses=1] + %tmp2597573157325733.ins = or i64 %tmp2597573157325733, %tmp259457355736 ; <i64> [#uses=1] + invoke void @report__failed( i64 %tmp2597573157325733.ins ) + to label %cleanup2604 unwind label %unwind2411 + +cleanup2604: ; preds = %invcont2591 + %tmp26105533 = ptrtoint i8* %tmp2386 to i32 ; <i32> [#uses=1] + %tmp261055335534 = zext i32 %tmp26105533 to i64 ; <i64> [#uses=1] + %tmp26135530 = zext i32 %tmp2389 to i64 ; <i64> [#uses=1] + %tmp261355305531 = shl i64 %tmp26135530, 32 ; <i64> [#uses=1] + %tmp261355305531.ins = or i64 %tmp261355305531, %tmp261055335534 ; <i64> [#uses=1] + invoke void @system__secondary_stack__ss_release( i64 %tmp261355305531.ins ) + to label %cleanup2642 unwind label %unwind2618 + +unwind2618: ; preds = %cleanup2604, %unwind2411 + %eh_ptr2619 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select2621 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2619, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=2] + call void @llvm.stackrestore( i8* %tmp2390 ) + %eh_typeid26493 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; <i32> [#uses=1] + %tmp26514 = icmp eq i32 %eh_select2621, %eh_typeid26493 ; <i1> [#uses=1] + br i1 %tmp26514, label %eh_then2652, label %eh_else2666 + +cleanup2642: ; preds = %cleanup2604 + call void @llvm.stackrestore( i8* %tmp2390 ) + %tmp26946042 = icmp ult i8 %tmp238239, %tmp137138 ; <i1> [#uses=1] + br i1 %tmp26946042, label %cond_next2718, label %cond_true2697 + +cleanup2644: ; preds = %unwind2411 + call void @llvm.stackrestore( i8* %tmp2390 ) + %eh_typeid2649 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; <i32> [#uses=1] + %tmp2651 = icmp eq i32 %eh_select2414, %eh_typeid2649 ; <i1> [#uses=1] + br i1 %tmp2651, label %eh_then2652, label %eh_else2666 + +eh_then2652: ; preds = %cleanup2644, %unwind2618, %unwind2378 + %eh_exception.296030.0 = phi i8* [ %eh_ptr2379, %unwind2378 ], [ %eh_ptr2619, %unwind2618 ], [ %eh_ptr2412, %cleanup2644 ] ; <i8*> [#uses=3] + invoke void @__gnat_begin_handler( i8* %eh_exception.296030.0 ) + to label %invcont2658 unwind label %unwind2656 + +unwind2656: ; preds = %invcont2658, %eh_then2652 + %eh_ptr2657 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_exception.296030.0 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr2657 ) ; <i32>:10 [#uses=0] + unreachable + +invcont2658: ; preds = %eh_then2652 + %tmp2659 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp2659( ) + to label %cleanup2662 unwind label %unwind2656 + +cleanup2662: ; preds = %invcont2658 + call void @__gnat_end_handler( i8* %eh_exception.296030.0 ) + %tmp26946043 = icmp ult i8 %tmp238239, %tmp137138 ; <i1> [#uses=1] + br i1 %tmp26946043, label %cond_next2718, label %cond_true2697 + +eh_else2666: ; preds = %cleanup2644, %unwind2618, %unwind2378 + %eh_selector.256028.1 = phi i32 [ %eh_select2381, %unwind2378 ], [ %eh_select2621, %unwind2618 ], [ %eh_select2414, %cleanup2644 ] ; <i32> [#uses=1] + %eh_exception.296030.1 = phi i8* [ %eh_ptr2379, %unwind2378 ], [ %eh_ptr2619, %unwind2618 ], [ %eh_ptr2412, %cleanup2644 ] ; <i8*> [#uses=4] + %eh_typeid2667 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp2669 = icmp eq i32 %eh_selector.256028.1, %eh_typeid2667 ; <i1> [#uses=1] + br i1 %tmp2669, label %eh_then2670, label %Unwind + +eh_then2670: ; preds = %eh_else2666 + invoke void @__gnat_begin_handler( i8* %eh_exception.296030.1 ) + to label %invcont2676 unwind label %unwind2674 + +unwind2674: ; preds = %invcont2678, %invcont2676, %eh_then2670 + %eh_ptr2675 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_exception.296030.1 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr2675 ) ; <i32>:11 [#uses=0] + unreachable + +invcont2676: ; preds = %eh_then2670 + %tmp2677 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp2677( ) + to label %invcont2678 unwind label %unwind2674 + +invcont2678: ; preds = %invcont2676 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([24 x i8]* @.str18 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.35.915 to i32) to i64), i64 32)) ) + to label %cleanup2687 unwind label %unwind2674 + +cleanup2687: ; preds = %invcont2678 + call void @__gnat_end_handler( i8* %eh_exception.296030.1 ) + %tmp2694 = icmp ult i8 %tmp238239, %tmp137138 ; <i1> [#uses=1] + br i1 %tmp2694, label %cond_next2718, label %cond_true2697 + +cond_true2697: ; preds = %cleanup2687, %cleanup2662, %cleanup2642 + %tmp2700 = icmp ult i8 %tmp137138, %tmp204205 ; <i1> [#uses=1] + %tmp2704 = icmp ugt i8 %tmp238239, %tmp272273 ; <i1> [#uses=1] + %tmp2708 = or i1 %tmp2704, %tmp2700 ; <i1> [#uses=1] + br i1 %tmp2708, label %cond_true2711, label %cond_next2718 + +cond_true2711: ; preds = %cond_true2697 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 192 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind2712 + +unwind2712: ; preds = %cleanup2990, %unwind2975, %cond_true2711 + %eh_ptr2713 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select2715 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2713, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=2] + %eh_typeid29996053 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; <i32> [#uses=1] + %tmp30016055 = icmp eq i32 %eh_select2715, %eh_typeid29996053 ; <i1> [#uses=1] + br i1 %tmp30016055, label %eh_then3002, label %eh_else3016 + +cond_next2718: ; preds = %cond_true2697, %cleanup2687, %cleanup2662, %cleanup2642 + invoke void @system__secondary_stack__ss_mark( %struct.system__secondary_stack__mark_id* %tmp63 sret ) + to label %invcont2766 unwind label %unwind2762 + +unwind2762: ; preds = %cond_next2718 + %eh_ptr2763 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select2765 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2763, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=2] + %eh_typeid29686060 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp29706061 = icmp eq i32 %eh_select2765, %eh_typeid29686060 ; <i1> [#uses=1] + br i1 %tmp29706061, label %eh_then2971, label %cleanup2998 + +invcont2766: ; preds = %cond_next2718 + %tmp2769 = getelementptr %struct.system__secondary_stack__mark_id* %tmp63, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp2770 = load i8** %tmp2769 ; <i8*> [#uses=2] + %tmp2772 = getelementptr %struct.system__secondary_stack__mark_id* %tmp63, i32 0, i32 1 ; <i32*> [#uses=1] + %tmp2773 = load i32* %tmp2772 ; <i32> [#uses=2] + %tmp2774 = call i8* @llvm.stacksave( ) ; <i8*> [#uses=3] + %tmp2808 = icmp ugt i8 %tmp137138, %tmp204205 ; <i1> [#uses=1] + %tmp2815 = icmp ult i8 %tmp238239, %tmp204205 ; <i1> [#uses=1] + %bothcond5904 = or i1 %tmp2815, %tmp2808 ; <i1> [#uses=1] + br i1 %bothcond5904, label %bb2821, label %cond_next2834 + +bb2821: ; preds = %invcont2766 + invoke void @__gnat_rcheck_05( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 198 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind2822 + +unwind2822: ; preds = %invcont2910, %invcont2893, %bb2879, %bb2877, %bb2843, %bb2821 + %eh_ptr2823 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select2825 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2823, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=2] + %tmp29295521 = ptrtoint i8* %tmp2770 to i32 ; <i32> [#uses=1] + %tmp292955215522 = zext i32 %tmp29295521 to i64 ; <i64> [#uses=1] + %tmp29325518 = zext i32 %tmp2773 to i64 ; <i64> [#uses=1] + %tmp293255185519 = shl i64 %tmp29325518, 32 ; <i64> [#uses=1] + %tmp293255185519.ins = or i64 %tmp293255185519, %tmp292955215522 ; <i64> [#uses=1] + invoke void @system__secondary_stack__ss_release( i64 %tmp293255185519.ins ) + to label %cleanup2963 unwind label %unwind2937 + +cond_next2834: ; preds = %invcont2766 + br i1 %tmp206, label %bb2843, label %bb2845 + +bb2843: ; preds = %cond_next2834 + invoke void @__gnat_rcheck_06( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 198 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind2822 + +bb2845: ; preds = %cond_next2834 + br i1 %tmp274, label %bb2877, label %bb2879 + +bb2877: ; preds = %bb2845 + invoke void @__gnat_rcheck_06( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 200 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind2822 + +bb2879: ; preds = %bb2845 + invoke void @system__img_enum__image_enumeration_8( %struct.string___XUP* %tmp66 sret , i32 %tmp13831384, i64 or (i64 zext (i32 ptrtoint ([28 x i8]* @weekS.154 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.32.910 to i32) to i64), i64 32)), i8* getelementptr ([8 x i8]* @weekN.179, i32 0, i32 0) ) + to label %invcont2893 unwind label %unwind2822 + +invcont2893: ; preds = %bb2879 + %tmp2895 = getelementptr %struct.string___XUP* %tmp66, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp2896 = load i8** %tmp2895 ; <i8*> [#uses=1] + %tmp28965718 = ptrtoint i8* %tmp2896 to i32 ; <i32> [#uses=1] + %tmp289657185719 = zext i32 %tmp28965718 to i64 ; <i64> [#uses=1] + %tmp2898 = getelementptr %struct.string___XUP* %tmp66, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1] + %tmp2899 = load %struct.string___XUB** %tmp2898 ; <%struct.string___XUB*> [#uses=1] + %tmp28995714 = ptrtoint %struct.string___XUB* %tmp2899 to i32 ; <i32> [#uses=1] + %tmp289957145715 = zext i32 %tmp28995714 to i64 ; <i64> [#uses=1] + %tmp2899571457155716 = shl i64 %tmp289957145715, 32 ; <i64> [#uses=1] + %tmp2899571457155716.ins = or i64 %tmp2899571457155716, %tmp289657185719 ; <i64> [#uses=1] + invoke void @system__string_ops__str_concat( %struct.string___XUP* %tmp69 sret , i64 or (i64 zext (i32 ptrtoint ([31 x i8]* @.str19 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.98.1466 to i32) to i64), i64 32)), i64 %tmp2899571457155716.ins ) + to label %invcont2910 unwind label %unwind2822 + +invcont2910: ; preds = %invcont2893 + %tmp2912 = getelementptr %struct.string___XUP* %tmp69, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp2913 = load i8** %tmp2912 ; <i8*> [#uses=1] + %tmp29135706 = ptrtoint i8* %tmp2913 to i32 ; <i32> [#uses=1] + %tmp291357065707 = zext i32 %tmp29135706 to i64 ; <i64> [#uses=1] + %tmp2915 = getelementptr %struct.string___XUP* %tmp69, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1] + %tmp2916 = load %struct.string___XUB** %tmp2915 ; <%struct.string___XUB*> [#uses=1] + %tmp29165702 = ptrtoint %struct.string___XUB* %tmp2916 to i32 ; <i32> [#uses=1] + %tmp291657025703 = zext i32 %tmp29165702 to i64 ; <i64> [#uses=1] + %tmp2916570257035704 = shl i64 %tmp291657025703, 32 ; <i64> [#uses=1] + %tmp2916570257035704.ins = or i64 %tmp2916570257035704, %tmp291357065707 ; <i64> [#uses=1] + invoke void @report__failed( i64 %tmp2916570257035704.ins ) + to label %cleanup2943 unwind label %unwind2822 + +unwind2937: ; preds = %cleanup2943, %unwind2822 + %eh_ptr2938 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select2940 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2938, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=2] + call void @llvm.stackrestore( i8* %tmp2774 ) + %eh_typeid29685 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp29706 = icmp eq i32 %eh_select2940, %eh_typeid29685 ; <i1> [#uses=1] + br i1 %tmp29706, label %eh_then2971, label %cleanup2998 + +cleanup2943: ; preds = %invcont2910 + %tmp29505515 = ptrtoint i8* %tmp2770 to i32 ; <i32> [#uses=1] + %tmp295055155516 = zext i32 %tmp29505515 to i64 ; <i64> [#uses=1] + %tmp29535512 = zext i32 %tmp2773 to i64 ; <i64> [#uses=1] + %tmp295355125513 = shl i64 %tmp29535512, 32 ; <i64> [#uses=1] + %tmp295355125513.ins = or i64 %tmp295355125513, %tmp295055155516 ; <i64> [#uses=1] + invoke void @system__secondary_stack__ss_release( i64 %tmp295355125513.ins ) + to label %cleanup2961 unwind label %unwind2937 + +cleanup2961: ; preds = %cleanup2943 + call void @llvm.stackrestore( i8* %tmp2774 ) + %tmp3044.not6066 = icmp uge i8 %tmp272273, %tmp170171 ; <i1> [#uses=1] + %tmp30506067 = icmp ult i8 %tmp170171, %tmp204205 ; <i1> [#uses=1] + %bothcond59056068 = and i1 %tmp3044.not6066, %tmp30506067 ; <i1> [#uses=1] + br i1 %bothcond59056068, label %cond_true3061, label %cond_next3068 + +cleanup2963: ; preds = %unwind2822 + call void @llvm.stackrestore( i8* %tmp2774 ) + %eh_typeid2968 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp2970 = icmp eq i32 %eh_select2825, %eh_typeid2968 ; <i1> [#uses=1] + br i1 %tmp2970, label %eh_then2971, label %cleanup2998 + +eh_then2971: ; preds = %cleanup2963, %unwind2937, %unwind2762 + %eh_exception.356056.0 = phi i8* [ %eh_ptr2763, %unwind2762 ], [ %eh_ptr2938, %unwind2937 ], [ %eh_ptr2823, %cleanup2963 ] ; <i8*> [#uses=3] + invoke void @__gnat_begin_handler( i8* %eh_exception.356056.0 ) + to label %invcont2979 unwind label %unwind2975 + +unwind2975: ; preds = %invcont2981, %invcont2979, %eh_then2971 + %eh_ptr2976 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=2] + %eh_select2978 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr2976, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=1] + invoke void @__gnat_end_handler( i8* %eh_exception.356056.0 ) + to label %cleanup2998 unwind label %unwind2712 + +invcont2979: ; preds = %eh_then2971 + %tmp2980 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp2980( ) + to label %invcont2981 unwind label %unwind2975 + +invcont2981: ; preds = %invcont2979 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([46 x i8]* @.str20 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.101.1473 to i32) to i64), i64 32)) ) + to label %cleanup2990 unwind label %unwind2975 + +cleanup2990: ; preds = %invcont2981 + invoke void @__gnat_end_handler( i8* %eh_exception.356056.0 ) + to label %finally2997 unwind label %unwind2712 + +cleanup2998: ; preds = %unwind2975, %cleanup2963, %unwind2937, %unwind2762 + %eh_selector.29 = phi i32 [ %eh_select2765, %unwind2762 ], [ %eh_select2940, %unwind2937 ], [ %eh_select2825, %cleanup2963 ], [ %eh_select2978, %unwind2975 ] ; <i32> [#uses=2] + %eh_exception.33 = phi i8* [ %eh_ptr2763, %unwind2762 ], [ %eh_ptr2938, %unwind2937 ], [ %eh_ptr2823, %cleanup2963 ], [ %eh_ptr2976, %unwind2975 ] ; <i8*> [#uses=2] + %eh_typeid2999 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; <i32> [#uses=1] + %tmp3001 = icmp eq i32 %eh_selector.29, %eh_typeid2999 ; <i1> [#uses=1] + br i1 %tmp3001, label %eh_then3002, label %eh_else3016 + +eh_then3002: ; preds = %cleanup2998, %unwind2712 + %eh_exception.336046.0 = phi i8* [ %eh_ptr2713, %unwind2712 ], [ %eh_exception.33, %cleanup2998 ] ; <i8*> [#uses=3] + invoke void @__gnat_begin_handler( i8* %eh_exception.336046.0 ) + to label %invcont3008 unwind label %unwind3006 + +unwind3006: ; preds = %invcont3008, %eh_then3002 + %eh_ptr3007 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_exception.336046.0 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr3007 ) ; <i32>:12 [#uses=0] + unreachable + +invcont3008: ; preds = %eh_then3002 + %tmp3009 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp3009( ) + to label %cleanup3012 unwind label %unwind3006 + +cleanup3012: ; preds = %invcont3008 + call void @__gnat_end_handler( i8* %eh_exception.336046.0 ) + %tmp3044.not6069 = icmp uge i8 %tmp272273, %tmp170171 ; <i1> [#uses=1] + %tmp30506070 = icmp ult i8 %tmp170171, %tmp204205 ; <i1> [#uses=1] + %bothcond59056071 = and i1 %tmp3044.not6069, %tmp30506070 ; <i1> [#uses=1] + br i1 %bothcond59056071, label %cond_true3061, label %cond_next3068 + +eh_else3016: ; preds = %cleanup2998, %unwind2712 + %eh_selector.296044.1 = phi i32 [ %eh_select2715, %unwind2712 ], [ %eh_selector.29, %cleanup2998 ] ; <i32> [#uses=1] + %eh_exception.336046.1 = phi i8* [ %eh_ptr2713, %unwind2712 ], [ %eh_exception.33, %cleanup2998 ] ; <i8*> [#uses=4] + %eh_typeid3017 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp3019 = icmp eq i32 %eh_selector.296044.1, %eh_typeid3017 ; <i1> [#uses=1] + br i1 %tmp3019, label %eh_then3020, label %Unwind + +eh_then3020: ; preds = %eh_else3016 + invoke void @__gnat_begin_handler( i8* %eh_exception.336046.1 ) + to label %invcont3026 unwind label %unwind3024 + +unwind3024: ; preds = %invcont3028, %invcont3026, %eh_then3020 + %eh_ptr3025 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_exception.336046.1 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr3025 ) ; <i32>:13 [#uses=0] + unreachable + +invcont3026: ; preds = %eh_then3020 + %tmp3027 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp3027( ) + to label %invcont3028 unwind label %unwind3024 + +invcont3028: ; preds = %invcont3026 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([25 x i8]* @.str21 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.104.1478 to i32) to i64), i64 32)) ) + to label %cleanup3037 unwind label %unwind3024 + +cleanup3037: ; preds = %invcont3028 + call void @__gnat_end_handler( i8* %eh_exception.336046.1 ) + br label %finally2997 + +finally2997: ; preds = %cleanup3037, %cleanup2990 + %tmp3044.not = icmp uge i8 %tmp272273, %tmp170171 ; <i1> [#uses=1] + %tmp3050 = icmp ult i8 %tmp170171, %tmp204205 ; <i1> [#uses=1] + %bothcond5905 = and i1 %tmp3044.not, %tmp3050 ; <i1> [#uses=1] + br i1 %bothcond5905, label %cond_true3061, label %cond_next3068 + +cond_true3061: ; preds = %finally2997, %cleanup3012, %cleanup2961 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 214 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind3062 + +unwind3062: ; preds = %cleanup3340, %unwind3325, %cond_true3061 + %eh_ptr3063 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select3065 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3063, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=2] + %eh_typeid33496081 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; <i32> [#uses=1] + %tmp33516083 = icmp eq i32 %eh_select3065, %eh_typeid33496081 ; <i1> [#uses=1] + br i1 %tmp33516083, label %eh_then3352, label %eh_else3366 + +cond_next3068: ; preds = %finally2997, %cleanup3012, %cleanup2961 + invoke void @system__secondary_stack__ss_mark( %struct.system__secondary_stack__mark_id* %tmp72 sret ) + to label %invcont3116 unwind label %unwind3112 + +unwind3112: ; preds = %cond_next3068 + %eh_ptr3113 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select3115 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3113, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=2] + %eh_typeid33186088 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp33206089 = icmp eq i32 %eh_select3115, %eh_typeid33186088 ; <i1> [#uses=1] + br i1 %tmp33206089, label %eh_then3321, label %cleanup3348 + +invcont3116: ; preds = %cond_next3068 + %tmp3119 = getelementptr %struct.system__secondary_stack__mark_id* %tmp72, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp3120 = load i8** %tmp3119 ; <i8*> [#uses=2] + %tmp3122 = getelementptr %struct.system__secondary_stack__mark_id* %tmp72, i32 0, i32 1 ; <i32*> [#uses=1] + %tmp3123 = load i32* %tmp3122 ; <i32> [#uses=2] + %tmp3124 = call i8* @llvm.stacksave( ) ; <i8*> [#uses=3] + %tmp3158 = icmp ugt i8 %tmp170171, %tmp204205 ; <i1> [#uses=1] + %bothcond5906 = or i1 %tmp364, %tmp3158 ; <i1> [#uses=1] + br i1 %bothcond5906, label %bb3171, label %cond_next3184 + +bb3171: ; preds = %invcont3116 + invoke void @__gnat_rcheck_05( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 220 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind3172 + +unwind3172: ; preds = %invcont3260, %invcont3243, %bb3229, %bb3227, %bb3193, %bb3171 + %eh_ptr3173 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select3175 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3173, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=2] + %tmp32795509 = ptrtoint i8* %tmp3120 to i32 ; <i32> [#uses=1] + %tmp327955095510 = zext i32 %tmp32795509 to i64 ; <i64> [#uses=1] + %tmp32825506 = zext i32 %tmp3123 to i64 ; <i64> [#uses=1] + %tmp328255065507 = shl i64 %tmp32825506, 32 ; <i64> [#uses=1] + %tmp328255065507.ins = or i64 %tmp328255065507, %tmp327955095510 ; <i64> [#uses=1] + invoke void @system__secondary_stack__ss_release( i64 %tmp328255065507.ins ) + to label %cleanup3313 unwind label %unwind3287 + +cond_next3184: ; preds = %invcont3116 + br i1 %tmp206, label %bb3193, label %bb3195 + +bb3193: ; preds = %cond_next3184 + invoke void @__gnat_rcheck_06( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 220 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind3172 + +bb3195: ; preds = %cond_next3184 + br i1 %tmp274, label %bb3227, label %bb3229 + +bb3227: ; preds = %bb3195 + invoke void @__gnat_rcheck_06( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 222 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind3172 + +bb3229: ; preds = %bb3195 + invoke void @system__img_enum__image_enumeration_8( %struct.string___XUP* %tmp75 sret , i32 %tmp13831384, i64 or (i64 zext (i32 ptrtoint ([28 x i8]* @weekS.154 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.32.910 to i32) to i64), i64 32)), i8* getelementptr ([8 x i8]* @weekN.179, i32 0, i32 0) ) + to label %invcont3243 unwind label %unwind3172 + +invcont3243: ; preds = %bb3229 + %tmp3245 = getelementptr %struct.string___XUP* %tmp75, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp3246 = load i8** %tmp3245 ; <i8*> [#uses=1] + %tmp32465684 = ptrtoint i8* %tmp3246 to i32 ; <i32> [#uses=1] + %tmp324656845685 = zext i32 %tmp32465684 to i64 ; <i64> [#uses=1] + %tmp3248 = getelementptr %struct.string___XUP* %tmp75, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1] + %tmp3249 = load %struct.string___XUB** %tmp3248 ; <%struct.string___XUB*> [#uses=1] + %tmp32495680 = ptrtoint %struct.string___XUB* %tmp3249 to i32 ; <i32> [#uses=1] + %tmp324956805681 = zext i32 %tmp32495680 to i64 ; <i64> [#uses=1] + %tmp3249568056815682 = shl i64 %tmp324956805681, 32 ; <i64> [#uses=1] + %tmp3249568056815682.ins = or i64 %tmp3249568056815682, %tmp324656845685 ; <i64> [#uses=1] + invoke void @system__string_ops__str_concat( %struct.string___XUP* %tmp78 sret , i64 or (i64 zext (i32 ptrtoint ([31 x i8]* @.str22 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.98.1466 to i32) to i64), i64 32)), i64 %tmp3249568056815682.ins ) + to label %invcont3260 unwind label %unwind3172 + +invcont3260: ; preds = %invcont3243 + %tmp3262 = getelementptr %struct.string___XUP* %tmp78, i32 0, i32 0 ; <i8**> [#uses=1] + %tmp3263 = load i8** %tmp3262 ; <i8*> [#uses=1] + %tmp32635672 = ptrtoint i8* %tmp3263 to i32 ; <i32> [#uses=1] + %tmp326356725673 = zext i32 %tmp32635672 to i64 ; <i64> [#uses=1] + %tmp3265 = getelementptr %struct.string___XUP* %tmp78, i32 0, i32 1 ; <%struct.string___XUB**> [#uses=1] + %tmp3266 = load %struct.string___XUB** %tmp3265 ; <%struct.string___XUB*> [#uses=1] + %tmp32665668 = ptrtoint %struct.string___XUB* %tmp3266 to i32 ; <i32> [#uses=1] + %tmp326656685669 = zext i32 %tmp32665668 to i64 ; <i64> [#uses=1] + %tmp3266566856695670 = shl i64 %tmp326656685669, 32 ; <i64> [#uses=1] + %tmp3266566856695670.ins = or i64 %tmp3266566856695670, %tmp326356725673 ; <i64> [#uses=1] + invoke void @report__failed( i64 %tmp3266566856695670.ins ) + to label %cleanup3293 unwind label %unwind3172 + +unwind3287: ; preds = %cleanup3293, %unwind3172 + %eh_ptr3288 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select3290 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3288, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=2] + call void @llvm.stackrestore( i8* %tmp3124 ) + %eh_typeid33187 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp33208 = icmp eq i32 %eh_select3290, %eh_typeid33187 ; <i1> [#uses=1] + br i1 %tmp33208, label %eh_then3321, label %cleanup3348 + +cleanup3293: ; preds = %invcont3260 + %tmp33005503 = ptrtoint i8* %tmp3120 to i32 ; <i32> [#uses=1] + %tmp330055035504 = zext i32 %tmp33005503 to i64 ; <i64> [#uses=1] + %tmp33035500 = zext i32 %tmp3123 to i64 ; <i64> [#uses=1] + %tmp330355005501 = shl i64 %tmp33035500, 32 ; <i64> [#uses=1] + %tmp330355005501.ins = or i64 %tmp330355005501, %tmp330055035504 ; <i64> [#uses=1] + invoke void @system__secondary_stack__ss_release( i64 %tmp330355005501.ins ) + to label %cleanup3311 unwind label %unwind3287 + +cleanup3311: ; preds = %cleanup3293 + call void @llvm.stackrestore( i8* %tmp3124 ) + br label %finally3347 + +cleanup3313: ; preds = %unwind3172 + call void @llvm.stackrestore( i8* %tmp3124 ) + %eh_typeid3318 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp3320 = icmp eq i32 %eh_select3175, %eh_typeid3318 ; <i1> [#uses=1] + br i1 %tmp3320, label %eh_then3321, label %cleanup3348 + +eh_then3321: ; preds = %cleanup3313, %unwind3287, %unwind3112 + %eh_exception.416084.0 = phi i8* [ %eh_ptr3113, %unwind3112 ], [ %eh_ptr3288, %unwind3287 ], [ %eh_ptr3173, %cleanup3313 ] ; <i8*> [#uses=3] + invoke void @__gnat_begin_handler( i8* %eh_exception.416084.0 ) + to label %invcont3329 unwind label %unwind3325 + +unwind3325: ; preds = %invcont3331, %invcont3329, %eh_then3321 + %eh_ptr3326 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=2] + %eh_select3328 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3326, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), %struct.exception* @constraint_error, i32* @__gnat_others_value ) ; <i32> [#uses=1] + invoke void @__gnat_end_handler( i8* %eh_exception.416084.0 ) + to label %cleanup3348 unwind label %unwind3062 + +invcont3329: ; preds = %eh_then3321 + %tmp3330 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp3330( ) + to label %invcont3331 unwind label %unwind3325 + +invcont3331: ; preds = %invcont3329 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([46 x i8]* @.str20 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.101.1473 to i32) to i64), i64 32)) ) + to label %cleanup3340 unwind label %unwind3325 + +cleanup3340: ; preds = %invcont3331 + invoke void @__gnat_end_handler( i8* %eh_exception.416084.0 ) + to label %finally3347 unwind label %unwind3062 + +cleanup3348: ; preds = %unwind3325, %cleanup3313, %unwind3287, %unwind3112 + %eh_selector.35 = phi i32 [ %eh_select3115, %unwind3112 ], [ %eh_select3290, %unwind3287 ], [ %eh_select3175, %cleanup3313 ], [ %eh_select3328, %unwind3325 ] ; <i32> [#uses=2] + %eh_exception.39 = phi i8* [ %eh_ptr3113, %unwind3112 ], [ %eh_ptr3288, %unwind3287 ], [ %eh_ptr3173, %cleanup3313 ], [ %eh_ptr3326, %unwind3325 ] ; <i8*> [#uses=2] + %eh_typeid3349 = call i32 @llvm.eh.typeid.for( i8* getelementptr (%struct.exception* @constraint_error, i32 0, i32 0) ) ; <i32> [#uses=1] + %tmp3351 = icmp eq i32 %eh_selector.35, %eh_typeid3349 ; <i1> [#uses=1] + br i1 %tmp3351, label %eh_then3352, label %eh_else3366 + +eh_then3352: ; preds = %cleanup3348, %unwind3062 + %eh_exception.396074.0 = phi i8* [ %eh_ptr3063, %unwind3062 ], [ %eh_exception.39, %cleanup3348 ] ; <i8*> [#uses=3] + invoke void @__gnat_begin_handler( i8* %eh_exception.396074.0 ) + to label %invcont3358 unwind label %unwind3356 + +unwind3356: ; preds = %invcont3358, %eh_then3352 + %eh_ptr3357 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_exception.396074.0 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr3357 ) ; <i32>:14 [#uses=0] + unreachable + +invcont3358: ; preds = %eh_then3352 + %tmp3359 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp3359( ) + to label %cleanup3362 unwind label %unwind3356 + +cleanup3362: ; preds = %invcont3358 + call void @__gnat_end_handler( i8* %eh_exception.396074.0 ) + br label %finally3347 + +eh_else3366: ; preds = %cleanup3348, %unwind3062 + %eh_selector.356072.1 = phi i32 [ %eh_select3065, %unwind3062 ], [ %eh_selector.35, %cleanup3348 ] ; <i32> [#uses=1] + %eh_exception.396074.1 = phi i8* [ %eh_ptr3063, %unwind3062 ], [ %eh_exception.39, %cleanup3348 ] ; <i8*> [#uses=4] + %eh_typeid3367 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp3369 = icmp eq i32 %eh_selector.356072.1, %eh_typeid3367 ; <i1> [#uses=1] + br i1 %tmp3369, label %eh_then3370, label %Unwind + +eh_then3370: ; preds = %eh_else3366 + invoke void @__gnat_begin_handler( i8* %eh_exception.396074.1 ) + to label %invcont3376 unwind label %unwind3374 + +unwind3374: ; preds = %invcont3378, %invcont3376, %eh_then3370 + %eh_ptr3375 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_exception.396074.1 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr3375 ) ; <i32>:15 [#uses=0] + unreachable + +invcont3376: ; preds = %eh_then3370 + %tmp3377 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp3377( ) + to label %invcont3378 unwind label %unwind3374 + +invcont3378: ; preds = %invcont3376 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([25 x i8]* @.str23 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.104.1478 to i32) to i64), i64 32)) ) + to label %cleanup3387 unwind label %unwind3374 + +cleanup3387: ; preds = %invcont3378 + call void @__gnat_end_handler( i8* %eh_exception.396074.1 ) + br label %finally3347 + +finally3347: ; preds = %cleanup3387, %cleanup3362, %cleanup3340, %cleanup3311 + %tmp3392 = call i8* @llvm.stacksave( ) ; <i8*> [#uses=2] + %tmp3398 = invoke i32 @report__ident_int( i32 -5 ) + to label %invcont3397 unwind label %unwind3393 ; <i32> [#uses=4] + +unwind3393: ; preds = %cond_true3555, %cond_true3543, %cond_next3451, %cond_true3448, %cond_true3420, %finally3347 + %eh_ptr3394 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=5] + %eh_select3396 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3394, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=1] + call void @llvm.stackrestore( i8* %tmp3392 ) + %eh_typeid3571 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp3573 = icmp eq i32 %eh_select3396, %eh_typeid3571 ; <i1> [#uses=1] + br i1 %tmp3573, label %eh_then3574, label %Unwind + +invcont3397: ; preds = %finally3347 + %tmp3405 = icmp slt i32 %tmp3398, %tmp384 ; <i1> [#uses=2] + %tmp3413 = icmp sgt i32 %tmp3398, %tmp394 ; <i1> [#uses=1] + %tmp3417 = or i1 %tmp3405, %tmp3413 ; <i1> [#uses=1] + br i1 %tmp3417, label %cond_true3420, label %cond_next3422 + +cond_true3420: ; preds = %invcont3397 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 238 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind3393 + +cond_next3422: ; preds = %invcont3397 + %tmp3426 = icmp slt i32 %tmp3398, -5 ; <i1> [#uses=1] + br i1 %tmp3426, label %cond_true3429, label %cond_next3451 + +cond_true3429: ; preds = %cond_next3422 + %tmp3441 = icmp slt i32 %tmp394, -6 ; <i1> [#uses=1] + %tmp3445 = or i1 %tmp3405, %tmp3441 ; <i1> [#uses=1] + br i1 %tmp3445, label %cond_true3448, label %cond_next3451 + +cond_true3448: ; preds = %cond_true3429 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 238 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind3393 + +cond_next3451: ; preds = %cond_true3429, %cond_next3422 + %tmp3521 = invoke i32 @report__ident_int( i32 -5 ) + to label %invcont3520 unwind label %unwind3393 ; <i32> [#uses=3] + +invcont3520: ; preds = %cond_next3451 + %tmp3528 = icmp slt i32 %tmp3521, %tmp384 ; <i1> [#uses=1] + %tmp3536 = icmp sgt i32 %tmp3521, %tmp394 ; <i1> [#uses=1] + %tmp3540 = or i1 %tmp3528, %tmp3536 ; <i1> [#uses=1] + br i1 %tmp3540, label %cond_true3543, label %cond_next3545 + +cond_true3543: ; preds = %invcont3520 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 241 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind3393 + +cond_next3545: ; preds = %invcont3520 + %tmp3552 = icmp eq i32 %tmp3398, %tmp3521 ; <i1> [#uses=1] + br i1 %tmp3552, label %cleanup3565, label %cond_true3555 + +cond_true3555: ; preds = %cond_next3545 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([30 x i8]* @.str24 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.30.904 to i32) to i64), i64 32)) ) + to label %cleanup3565 unwind label %unwind3393 + +cleanup3565: ; preds = %cond_true3555, %cond_next3545 + call void @llvm.stackrestore( i8* %tmp3392 ) + %tmp36006095 = icmp ult i8 %tmp137138, %sat.45934.0 ; <i1> [#uses=1] + br i1 %tmp36006095, label %cond_next3624, label %cond_true3603 + +eh_then3574: ; preds = %unwind3393 + invoke void @__gnat_begin_handler( i8* %eh_ptr3394 ) + to label %invcont3580 unwind label %unwind3578 + +unwind3578: ; preds = %invcont3582, %invcont3580, %eh_then3574 + %eh_ptr3579 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_ptr3394 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr3579 ) ; <i32>:16 [#uses=0] + unreachable + +invcont3580: ; preds = %eh_then3574 + %tmp3581 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp3581( ) + to label %invcont3582 unwind label %unwind3578 + +invcont3582: ; preds = %invcont3580 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([18 x i8]* @.str25 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.124.1606 to i32) to i64), i64 32)) ) + to label %cleanup3591 unwind label %unwind3578 + +cleanup3591: ; preds = %invcont3582 + call void @__gnat_end_handler( i8* %eh_ptr3394 ) + %tmp3600 = icmp ult i8 %tmp137138, %sat.45934.0 ; <i1> [#uses=1] + br i1 %tmp3600, label %cond_next3624, label %cond_true3603 + +cond_true3603: ; preds = %cleanup3591, %cleanup3565 + %tmp3606 = icmp ult i8 %sat.45934.0, %tmp204205 ; <i1> [#uses=1] + %tmp3610 = icmp ugt i8 %tmp137138, %tmp272273 ; <i1> [#uses=1] + %tmp3614 = or i1 %tmp3606, %tmp3610 ; <i1> [#uses=1] + br i1 %tmp3614, label %cond_true3617, label %cond_next3624 + +cond_true3617: ; preds = %cond_true3603 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 250 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind3618 + +unwind3618: ; preds = %bb3743, %cond_true3729, %bb3689, %cond_true3675, %bb3635, %cond_true3617 + %wed.3 = phi i8 [ %tmp238239, %cond_true3617 ], [ %wed.1, %bb3743 ], [ %tmp238239, %bb3689 ], [ %tmp238239, %bb3635 ], [ %tmp238239, %cond_true3675 ], [ %tmp238239, %cond_true3729 ] ; <i8> [#uses=1] + %tue.3 = phi i8 [ %tmp204205, %cond_true3617 ], [ %tue.2, %bb3743 ], [ %tue.2, %bb3689 ], [ %tue.1, %bb3635 ], [ %tue.2, %cond_true3675 ], [ %tue.2, %cond_true3729 ] ; <i8> [#uses=1] + %mon.3 = phi i8 [ %tmp170171, %cond_true3617 ], [ %mon.2, %bb3743 ], [ %mon.1, %bb3689 ], [ %tmp170171, %bb3635 ], [ %tmp170171, %cond_true3675 ], [ %mon.2, %cond_true3729 ] ; <i8> [#uses=1] + %eh_ptr3619 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=5] + %eh_select3621 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3619, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=1] + %eh_typeid3854 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp3856 = icmp eq i32 %eh_select3621, %eh_typeid3854 ; <i1> [#uses=1] + br i1 %tmp3856, label %eh_then3857, label %Unwind + +cond_next3624: ; preds = %cond_true3603, %cleanup3591, %cleanup3565 + %tmp3629 = icmp ugt i8 %sat.45934.0, %tmp137138 ; <i1> [#uses=1] + br i1 %tmp3629, label %cond_next3653, label %bb3635 + +bb3635: ; preds = %cond_next3649, %cond_next3624 + %indvar6258 = phi i8 [ %indvar.next16, %cond_next3649 ], [ 0, %cond_next3624 ] ; <i8> [#uses=2] + %tue.1 = phi i8 [ %tue.0, %cond_next3649 ], [ %tmp204205, %cond_next3624 ] ; <i8> [#uses=2] + %tmp3637 = invoke i8 @report__equal( i32 2, i32 2 ) + to label %invcont3636 unwind label %unwind3618 ; <i8> [#uses=1] + +invcont3636: ; preds = %bb3635 + %i3633.4 = add i8 %indvar6258, %sat.45934.0 ; <i8> [#uses=1] + %tmp3638 = icmp eq i8 %tmp3637, 0 ; <i1> [#uses=1] + %tue.0 = select i1 %tmp3638, i8 %tue.1, i8 2 ; <i8> [#uses=2] + %tmp3645 = icmp eq i8 %i3633.4, %tmp137138 ; <i1> [#uses=1] + br i1 %tmp3645, label %cond_next3653, label %cond_next3649 + +cond_next3649: ; preds = %invcont3636 + %indvar.next16 = add i8 %indvar6258, 1 ; <i8> [#uses=1] + br label %bb3635 + +cond_next3653: ; preds = %invcont3636, %cond_next3624 + %tue.2 = phi i8 [ %tmp204205, %cond_next3624 ], [ %tue.0, %invcont3636 ] ; <i8> [#uses=6] + %tmp3658 = icmp ult i8 %tmp238239, %tmp306307 ; <i1> [#uses=1] + br i1 %tmp3658, label %cond_next3678, label %cond_true3661 + +cond_true3661: ; preds = %cond_next3653 + %tmp3664 = icmp ult i8 %tmp306307, %tmp204205 ; <i1> [#uses=1] + %tmp3668 = icmp ugt i8 %tmp238239, %tmp272273 ; <i1> [#uses=1] + %tmp3672 = or i1 %tmp3664, %tmp3668 ; <i1> [#uses=1] + br i1 %tmp3672, label %cond_true3675, label %cond_next3678 + +cond_true3675: ; preds = %cond_true3661 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 257 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind3618 + +cond_next3678: ; preds = %cond_true3661, %cond_next3653 + %tmp3683 = icmp ugt i8 %tmp306307, %tmp238239 ; <i1> [#uses=1] + br i1 %tmp3683, label %cond_next3707, label %bb3689 + +bb3689: ; preds = %cond_next3703, %cond_next3678 + %indvar6261 = phi i8 [ %indvar.next18, %cond_next3703 ], [ 0, %cond_next3678 ] ; <i8> [#uses=2] + %mon.1 = phi i8 [ %mon.0, %cond_next3703 ], [ %tmp170171, %cond_next3678 ] ; <i8> [#uses=2] + %tmp3691 = invoke i8 @report__equal( i32 2, i32 2 ) + to label %invcont3690 unwind label %unwind3618 ; <i8> [#uses=1] + +invcont3690: ; preds = %bb3689 + %i3687.4 = add i8 %indvar6261, %tmp306307 ; <i8> [#uses=1] + %tmp3692 = icmp eq i8 %tmp3691, 0 ; <i1> [#uses=1] + %mon.0 = select i1 %tmp3692, i8 %mon.1, i8 1 ; <i8> [#uses=2] + %tmp3699 = icmp eq i8 %i3687.4, %tmp238239 ; <i1> [#uses=1] + br i1 %tmp3699, label %cond_next3707, label %cond_next3703 + +cond_next3703: ; preds = %invcont3690 + %indvar.next18 = add i8 %indvar6261, 1 ; <i8> [#uses=1] + br label %bb3689 + +cond_next3707: ; preds = %invcont3690, %cond_next3678 + %mon.2 = phi i8 [ %tmp170171, %cond_next3678 ], [ %mon.0, %invcont3690 ] ; <i8> [#uses=8] + %tmp3712 = icmp ult i8 %tmp137138, %mon.2 ; <i1> [#uses=1] + br i1 %tmp3712, label %cond_next3732, label %cond_true3715 + +cond_true3715: ; preds = %cond_next3707 + %tmp3718 = icmp ult i8 %mon.2, %tmp204205 ; <i1> [#uses=1] + %tmp3722 = icmp ugt i8 %tmp137138, %tmp272273 ; <i1> [#uses=1] + %tmp3726 = or i1 %tmp3718, %tmp3722 ; <i1> [#uses=1] + br i1 %tmp3726, label %cond_true3729, label %cond_next3732 + +cond_true3729: ; preds = %cond_true3715 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 264 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind3618 + +cond_next3732: ; preds = %cond_true3715, %cond_next3707 + %tmp3737 = icmp ugt i8 %mon.2, %tmp137138 ; <i1> [#uses=1] + br i1 %tmp3737, label %finally3852, label %bb3743 + +bb3743: ; preds = %cond_next3757, %cond_next3732 + %indvar6265 = phi i8 [ %indvar.next20, %cond_next3757 ], [ 0, %cond_next3732 ] ; <i8> [#uses=2] + %wed.1 = phi i8 [ %wed.0, %cond_next3757 ], [ %tmp238239, %cond_next3732 ] ; <i8> [#uses=2] + %tmp3745 = invoke i8 @report__equal( i32 3, i32 3 ) + to label %invcont3744 unwind label %unwind3618 ; <i8> [#uses=1] + +invcont3744: ; preds = %bb3743 + %i3741.4 = add i8 %indvar6265, %mon.2 ; <i8> [#uses=1] + %tmp3746 = icmp eq i8 %tmp3745, 0 ; <i1> [#uses=1] + %wed.0 = select i1 %tmp3746, i8 %wed.1, i8 3 ; <i8> [#uses=2] + %tmp3753 = icmp eq i8 %i3741.4, %tmp137138 ; <i1> [#uses=1] + br i1 %tmp3753, label %finally3852, label %cond_next3757 + +cond_next3757: ; preds = %invcont3744 + %indvar.next20 = add i8 %indvar6265, 1 ; <i8> [#uses=1] + br label %bb3743 + +eh_then3857: ; preds = %unwind3618 + invoke void @__gnat_begin_handler( i8* %eh_ptr3619 ) + to label %invcont3863 unwind label %unwind3861 + +unwind3861: ; preds = %invcont3865, %invcont3863, %eh_then3857 + %eh_ptr3862 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_ptr3619 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr3862 ) ; <i32>:17 [#uses=0] + unreachable + +invcont3863: ; preds = %eh_then3857 + %tmp3864 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp3864( ) + to label %invcont3865 unwind label %unwind3861 + +invcont3865: ; preds = %invcont3863 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([18 x i8]* @.str26 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.124.1606 to i32) to i64), i64 32)) ) + to label %cleanup3874 unwind label %unwind3861 + +cleanup3874: ; preds = %invcont3865 + call void @__gnat_end_handler( i8* %eh_ptr3619 ) + br label %finally3852 + +finally3852: ; preds = %cleanup3874, %invcont3744, %cond_next3732 + %wed.4 = phi i8 [ %wed.3, %cleanup3874 ], [ %tmp238239, %cond_next3732 ], [ %wed.0, %invcont3744 ] ; <i8> [#uses=4] + %tue.4 = phi i8 [ %tue.3, %cleanup3874 ], [ %tue.2, %cond_next3732 ], [ %tue.2, %invcont3744 ] ; <i8> [#uses=13] + %mon.4 = phi i8 [ %mon.3, %cleanup3874 ], [ %mon.2, %cond_next3732 ], [ %mon.2, %invcont3744 ] ; <i8> [#uses=18] + %tmp3885 = invoke i32 @report__ident_int( i32 -5 ) + to label %invcont3884 unwind label %unwind3880 ; <i32> [#uses=4] + +unwind3880: ; preds = %cond_true4138, %invcont4122, %cond_next4120, %cond_true4117, %cond_true4027, %cond_next3938, %cond_true3935, %cond_true3907, %finally3852 + %eh_ptr3881 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=5] + %eh_select3883 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr3881, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=1] + %eh_typeid4149 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp4151 = icmp eq i32 %eh_select3883, %eh_typeid4149 ; <i1> [#uses=1] + br i1 %tmp4151, label %eh_then4152, label %Unwind + +invcont3884: ; preds = %finally3852 + %tmp3892 = icmp slt i32 %tmp3885, %tmp384 ; <i1> [#uses=2] + %tmp3900 = icmp sgt i32 %tmp3885, %tmp394 ; <i1> [#uses=1] + %tmp3904 = or i1 %tmp3892, %tmp3900 ; <i1> [#uses=1] + br i1 %tmp3904, label %cond_true3907, label %cond_next3909 + +cond_true3907: ; preds = %invcont3884 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 312 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind3880 + +cond_next3909: ; preds = %invcont3884 + %tmp3913 = icmp slt i32 %tmp3885, -5 ; <i1> [#uses=1] + br i1 %tmp3913, label %cond_true3916, label %cond_next3938 + +cond_true3916: ; preds = %cond_next3909 + %tmp3928 = icmp slt i32 %tmp394, -6 ; <i1> [#uses=1] + %tmp3932 = or i1 %tmp3892, %tmp3928 ; <i1> [#uses=1] + br i1 %tmp3932, label %cond_true3935, label %cond_next3938 + +cond_true3935: ; preds = %cond_true3916 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 312 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind3880 + +cond_next3938: ; preds = %cond_true3916, %cond_next3909 + %tmp4005 = invoke i32 @report__ident_int( i32 -5 ) + to label %invcont4004 unwind label %unwind3880 ; <i32> [#uses=6] + +invcont4004: ; preds = %cond_next3938 + %tmp4012 = icmp slt i32 %tmp4005, %tmp384 ; <i1> [#uses=2] + %tmp4020 = icmp sgt i32 %tmp4005, %tmp394 ; <i1> [#uses=1] + %tmp4024 = or i1 %tmp4012, %tmp4020 ; <i1> [#uses=1] + br i1 %tmp4024, label %cond_true4027, label %cond_next4029 + +cond_true4027: ; preds = %invcont4004 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 313 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind3880 + +cond_next4029: ; preds = %invcont4004 + %tmp4071 = icmp sgt i32 %tmp4005, -6 ; <i1> [#uses=1] + %tmp4078 = add i32 %tmp4005, 1073741823 ; <i32> [#uses=1] + %iftmp.132.0 = select i1 %tmp4071, i32 %tmp4078, i32 1073741818 ; <i32> [#uses=1] + %tmp4085 = sub i32 %iftmp.132.0, %tmp4005 ; <i32> [#uses=1] + %tmp4086 = shl i32 %tmp4085, 2 ; <i32> [#uses=2] + %tmp4087 = add i32 %tmp4086, 4 ; <i32> [#uses=1] + %tmp4088 = icmp sgt i32 %tmp4087, -1 ; <i1> [#uses=1] + %tmp4087.op = add i32 %tmp4086, 7 ; <i32> [#uses=1] + %tmp4087.op.op = and i32 %tmp4087.op, -4 ; <i32> [#uses=1] + %tmp4091 = select i1 %tmp4088, i32 %tmp4087.op.op, i32 0 ; <i32> [#uses=1] + %tmp4095 = icmp slt i32 %tmp4005, -5 ; <i1> [#uses=1] + br i1 %tmp4095, label %cond_true4098, label %cond_next4120 + +cond_true4098: ; preds = %cond_next4029 + %tmp4110 = icmp slt i32 %tmp394, -6 ; <i1> [#uses=1] + %tmp4114 = or i1 %tmp4012, %tmp4110 ; <i1> [#uses=1] + br i1 %tmp4114, label %cond_true4117, label %cond_next4120 + +cond_true4117: ; preds = %cond_true4098 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 313 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind3880 + +cond_next4120: ; preds = %cond_true4098, %cond_next4029 + %tmp4123 = invoke i8* @__gnat_malloc( i32 %tmp4091 ) + to label %invcont4122 unwind label %unwind3880 ; <i8*> [#uses=0] + +invcont4122: ; preds = %cond_next4120 + %tmp41254128 = sext i32 %tmp3885 to i64 ; <i64> [#uses=1] + %tmp4129 = sub i64 -5, %tmp41254128 ; <i64> [#uses=2] + %tmp4134 = invoke i32 @report__ident_int( i32 0 ) + to label %invcont4133 unwind label %unwind3880 ; <i32> [#uses=1] + +invcont4133: ; preds = %invcont4122 + %tmp4130 = icmp sgt i64 %tmp4129, -1 ; <i1> [#uses=1] + %tmp4129.cast = trunc i64 %tmp4129 to i32 ; <i32> [#uses=1] + %max41314132 = select i1 %tmp4130, i32 %tmp4129.cast, i32 0 ; <i32> [#uses=1] + %tmp4135 = icmp eq i32 %max41314132, %tmp4134 ; <i1> [#uses=1] + br i1 %tmp4135, label %finally4147, label %cond_true4138 + +cond_true4138: ; preds = %invcont4133 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([31 x i8]* @.str27 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.98.1466 to i32) to i64), i64 32)) ) + to label %finally4147 unwind label %unwind3880 + +eh_then4152: ; preds = %unwind3880 + invoke void @__gnat_begin_handler( i8* %eh_ptr3881 ) + to label %invcont4158 unwind label %unwind4156 + +unwind4156: ; preds = %invcont4160, %invcont4158, %eh_then4152 + %eh_ptr4157 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_ptr3881 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr4157 ) ; <i32>:18 [#uses=0] + unreachable + +invcont4158: ; preds = %eh_then4152 + %tmp4159 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp4159( ) + to label %invcont4160 unwind label %unwind4156 + +invcont4160: ; preds = %invcont4158 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([18 x i8]* @.str28 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.124.1606 to i32) to i64), i64 32)) ) + to label %cleanup4169 unwind label %unwind4156 + +cleanup4169: ; preds = %invcont4160 + call void @__gnat_end_handler( i8* %eh_ptr3881 ) + br label %finally4147 + +finally4147: ; preds = %cleanup4169, %cond_true4138, %invcont4133 + %tmp4174 = call i8* @llvm.stacksave( ) ; <i8*> [#uses=3] + %tmp4180 = invoke i32 @report__ident_int( i32 4 ) + to label %invcont4179 unwind label %unwind4175 ; <i32> [#uses=6] + +unwind4175: ; preds = %cond_true4292, %cond_true4187, %finally4147 + %eh_ptr4176 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=5] + %eh_select4178 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr4176, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=1] + %eh_typeid4304 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp4306 = icmp eq i32 %eh_select4178, %eh_typeid4304 ; <i1> [#uses=1] + br i1 %tmp4306, label %eh_then4307, label %cleanup4334 + +invcont4179: ; preds = %finally4147 + %tmp4184 = icmp slt i32 %tmp4180, 1 ; <i1> [#uses=1] + br i1 %tmp4184, label %cond_true4187, label %cond_next4189 + +cond_true4187: ; preds = %invcont4179 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 329 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind4175 + +cond_next4189: ; preds = %invcont4179 + %tmp4231 = icmp sgt i32 %tmp4180, 2 ; <i1> [#uses=2] + %tmp4238 = add i32 %tmp4180, 1073741823 ; <i32> [#uses=1] + %iftmp.138.0 = select i1 %tmp4231, i32 %tmp4238, i32 2 ; <i32> [#uses=1] + %tmp4245 = sub i32 %iftmp.138.0, %tmp4180 ; <i32> [#uses=1] + %tmp4246 = shl i32 %tmp4245, 2 ; <i32> [#uses=2] + %tmp4247 = add i32 %tmp4246, 4 ; <i32> [#uses=1] + %tmp4248 = icmp sgt i32 %tmp4247, -1 ; <i1> [#uses=1] + %tmp4247.op = add i32 %tmp4246, 7 ; <i32> [#uses=1] + %tmp4247.op.op = and i32 %tmp4247.op, -4 ; <i32> [#uses=1] + %tmp4251 = select i1 %tmp4248, i32 %tmp4247.op.op, i32 0 ; <i32> [#uses=1] + %tmp4253 = alloca i8, i32 %tmp4251 ; <i8*> [#uses=2] + %tmp42534254 = bitcast i8* %tmp4253 to i32* ; <i32*> [#uses=1] + br i1 %tmp4231, label %bb4276, label %cond_next4266.preheader + +cond_next4266.preheader: ; preds = %cond_next4189 + %J152b.36147.3 = add i32 %tmp4180, 1 ; <i32> [#uses=1] + br label %cond_next4266 + +cond_next4266: ; preds = %cond_next4266, %cond_next4266.preheader + %indvar6268 = phi i32 [ 0, %cond_next4266.preheader ], [ %indvar.next22, %cond_next4266 ] ; <i32> [#uses=3] + %tmp4273 = getelementptr i32* %tmp42534254, i32 %indvar6268 ; <i32*> [#uses=1] + store i32 5, i32* %tmp4273 + %tmp4275 = add i32 %J152b.36147.3, %indvar6268 ; <i32> [#uses=1] + %tmp42626151 = icmp sgt i32 %tmp4275, 2 ; <i1> [#uses=1] + %indvar.next22 = add i32 %indvar6268, 1 ; <i32> [#uses=1] + br i1 %tmp42626151, label %bb4276, label %cond_next4266 + +bb4276: ; preds = %cond_next4266, %cond_next4189 + %tmp4280 = sub i32 2, %tmp4180 ; <i32> [#uses=1] + %tmp4281 = icmp eq i32 %tmp4280, 1 ; <i1> [#uses=1] + br i1 %tmp4281, label %cond_true4284, label %cleanup4336 + +cond_true4284: ; preds = %bb4276 + %tmp4288 = call i32 (i8*, i8*, i32, ...)* @memcmp( i8* %tmp4253, i8* bitcast ([2 x i32]* @C.143.1720 to i8*), i32 8 ) ; <i32> [#uses=1] + %tmp4289 = icmp eq i32 %tmp4288, 0 ; <i1> [#uses=1] + br i1 %tmp4289, label %cond_true4292, label %cleanup4336 + +cond_true4292: ; preds = %cond_true4284 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([37 x i8]* @.str29 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.146.1725 to i32) to i64), i64 32)) ) + to label %cleanup4336 unwind label %unwind4175 + +eh_then4307: ; preds = %unwind4175 + invoke void @__gnat_begin_handler( i8* %eh_ptr4176 ) + to label %invcont4313 unwind label %unwind4311 + +unwind4311: ; preds = %invcont4315, %invcont4313, %eh_then4307 + %eh_ptr4312 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + invoke void @__gnat_end_handler( i8* %eh_ptr4176 ) + to label %cleanup4334 unwind label %unwind4326 + +invcont4313: ; preds = %eh_then4307 + %tmp4314 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp4314( ) + to label %invcont4315 unwind label %unwind4311 + +invcont4315: ; preds = %invcont4313 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([18 x i8]* @.str30 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.124.1606 to i32) to i64), i64 32)) ) + to label %cleanup4324 unwind label %unwind4311 + +cleanup4324: ; preds = %invcont4315 + invoke void @__gnat_end_handler( i8* %eh_ptr4176 ) + to label %cleanup4336 unwind label %unwind4326 + +unwind4326: ; preds = %cleanup4324, %unwind4311 + %eh_ptr4327 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @llvm.stackrestore( i8* %tmp4174 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr4327 ) ; <i32>:19 [#uses=0] + unreachable + +cleanup4334: ; preds = %unwind4311, %unwind4175 + %eh_exception.50 = phi i8* [ %eh_ptr4176, %unwind4175 ], [ %eh_ptr4312, %unwind4311 ] ; <i8*> [#uses=1] + call void @llvm.stackrestore( i8* %tmp4174 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_exception.50 ) ; <i32>:20 [#uses=0] + unreachable + +cleanup4336: ; preds = %cleanup4324, %cond_true4292, %cond_true4284, %bb4276 + call void @llvm.stackrestore( i8* %tmp4174 ) + %tmp4338 = call i8* @llvm.stacksave( ) ; <i8*> [#uses=6] + %tmp4379 = alloca i8, i32 %max1395 ; <i8*> [#uses=9] + %tmp4421 = alloca i8, i32 %max1395 ; <i8*> [#uses=3] + %tmp4428 = icmp ugt i8 %tmp204205, %tmp272273 ; <i1> [#uses=1] + br i1 %tmp4428, label %cond_next4458, label %bb4433 + +bb4433: ; preds = %cleanup4336 + store i8 %wed.4, i8* %tmp4421 + %tmp4442 = icmp eq i8 %tmp272273, %tmp204205 ; <i1> [#uses=1] + br i1 %tmp4442, label %cond_next4458, label %cond_next4446.preheader + +cond_next4446.preheader: ; preds = %bb4433 + %J161b.26152.2 = add i8 %tmp204205, 1 ; <i8> [#uses=1] + br label %cond_next4446 + +cond_next4446: ; preds = %cond_next4446, %cond_next4446.preheader + %indvar6271 = phi i8 [ 0, %cond_next4446.preheader ], [ %indvar.next24, %cond_next4446 ] ; <i8> [#uses=2] + %tmp4448 = add i8 %J161b.26152.2, %indvar6271 ; <i8> [#uses=2] + %tmp443444356156 = zext i8 %tmp4448 to i32 ; <i32> [#uses=1] + %tmp44376157 = sub i32 %tmp443444356156, %tmp13571358 ; <i32> [#uses=1] + %tmp44386158 = getelementptr i8* %tmp4421, i32 %tmp44376157 ; <i8*> [#uses=1] + store i8 %wed.4, i8* %tmp44386158 + %tmp44426160 = icmp eq i8 %tmp272273, %tmp4448 ; <i1> [#uses=1] + %indvar.next24 = add i8 %indvar6271, 1 ; <i8> [#uses=1] + br i1 %tmp44426160, label %cond_next4458, label %cond_next4446 + +unwind4453: ; preds = %cond_true4609, %cond_true4504, %cond_true4481 + %eh_ptr4454 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=4] + %eh_select4456 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr4454, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=1] + %eh_typeid4710 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp4712 = icmp eq i32 %eh_select4456, %eh_typeid4710 ; <i1> [#uses=1] + br i1 %tmp4712, label %eh_then4713, label %cleanup4740 + +cond_next4458: ; preds = %cond_next4446, %bb4433, %cleanup4336 + call void @llvm.memcpy.i32( i8* %tmp4379, i8* %tmp4421, i32 %max1395, i32 1 ) + %tmp4464 = icmp ult i8 %tmp137138, %mon.4 ; <i1> [#uses=2] + br i1 %tmp4464, label %cond_next4484, label %cond_true4467 + +cond_true4467: ; preds = %cond_next4458 + %tmp4470 = icmp ult i8 %mon.4, %tmp204205 ; <i1> [#uses=1] + %tmp4474 = icmp ugt i8 %tmp137138, %tmp272273 ; <i1> [#uses=1] + %tmp4478 = or i1 %tmp4470, %tmp4474 ; <i1> [#uses=1] + br i1 %tmp4478, label %cond_true4481, label %cond_next4484 + +cond_true4481: ; preds = %cond_true4467 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 340 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind4453 + +cond_next4484: ; preds = %cond_true4467, %cond_next4458 + %tmp4487 = icmp ult i8 %mon.4, %tue.4 ; <i1> [#uses=2] + br i1 %tmp4487, label %cond_next4507, label %cond_true4490 + +cond_true4490: ; preds = %cond_next4484 + %tmp4493 = icmp ult i8 %tue.4, %tmp204205 ; <i1> [#uses=1] + %tmp4497 = icmp ugt i8 %mon.4, %tmp272273 ; <i1> [#uses=1] + %tmp4501 = or i1 %tmp4497, %tmp4493 ; <i1> [#uses=1] + br i1 %tmp4501, label %cond_true4504, label %cond_next4507 + +cond_true4504: ; preds = %cond_true4490 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 340 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind4453 + +cond_next4507: ; preds = %cond_true4490, %cond_next4484 + %tmp45904591 = zext i8 %mon.4 to i64 ; <i64> [#uses=3] + %tmp45924593 = zext i8 %tue.4 to i64 ; <i64> [#uses=1] + %tmp4594 = sub i64 %tmp45904591, %tmp45924593 ; <i64> [#uses=1] + %tmp4595 = add i64 %tmp4594, 1 ; <i64> [#uses=2] + %tmp4596 = icmp sgt i64 %tmp4595, -1 ; <i1> [#uses=1] + %max4597 = select i1 %tmp4596, i64 %tmp4595, i64 0 ; <i64> [#uses=1] + %tmp45984599 = zext i8 %tmp137138 to i64 ; <i64> [#uses=1] + %tmp4602 = sub i64 %tmp45984599, %tmp45904591 ; <i64> [#uses=1] + %tmp4603 = add i64 %tmp4602, 1 ; <i64> [#uses=3] + %tmp4604 = icmp sgt i64 %tmp4603, -1 ; <i1> [#uses=2] + %max4605 = select i1 %tmp4604, i64 %tmp4603, i64 0 ; <i64> [#uses=1] + %tmp4606 = icmp eq i64 %max4597, %max4605 ; <i1> [#uses=1] + br i1 %tmp4606, label %cond_next4611, label %cond_true4609 + +cond_true4609: ; preds = %cond_next4507 + invoke void @__gnat_rcheck_07( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 340 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind4453 + +cond_next4611: ; preds = %cond_next4507 + %tmp46124613 = zext i8 %tue.4 to i32 ; <i32> [#uses=1] + %tmp4616 = sub i32 %tmp46124613, %tmp13571358 ; <i32> [#uses=2] + %tmp46244625 = zext i8 %mon.4 to i32 ; <i32> [#uses=1] + %tmp4628 = sub i32 %tmp46244625, %tmp13571358 ; <i32> [#uses=3] + %tmp4636 = icmp slt i32 %tmp4628, %tmp4616 ; <i1> [#uses=1] + %tmp4677 = icmp ugt i8 %tue.4, %mon.4 ; <i1> [#uses=2] + br i1 %tmp4636, label %cond_false4673, label %cond_true4639 + +cond_true4639: ; preds = %cond_next4611 + br i1 %tmp4677, label %cleanup4742, label %bb4648.preheader + +bb4648.preheader: ; preds = %cond_true4639 + %tmp46556217 = getelementptr i8* %tmp4379, i32 %tmp4628 ; <i8*> [#uses=1] + %tmp46566218 = load i8* %tmp46556217 ; <i8> [#uses=1] + %tmp46596220 = getelementptr i8* %tmp4379, i32 %tmp4616 ; <i8*> [#uses=1] + store i8 %tmp46566218, i8* %tmp46596220 + %tmp46646223 = icmp eq i8 %tue.4, %mon.4 ; <i1> [#uses=1] + br i1 %tmp46646223, label %cleanup4742, label %cond_next4668.preheader + +cond_next4668.preheader: ; preds = %bb4648.preheader + %tmp46616222.in = add i8 %mon.4, 1 ; <i8> [#uses=1] + %L174b.26213 = add i8 %tue.4, 1 ; <i8> [#uses=1] + %tmp.27 = sub i8 %mon.4, %tue.4 ; <i8> [#uses=1] + br label %cond_next4668 + +cond_next4668: ; preds = %cond_next4668, %cond_next4668.preheader + %indvar6275 = phi i8 [ 0, %cond_next4668.preheader ], [ %indvar.next26, %cond_next4668 ] ; <i8> [#uses=3] + %tmp46616222 = add i8 %tmp46616222.in, %indvar6275 ; <i8> [#uses=1] + %tmp4670 = add i8 %L174b.26213, %indvar6275 ; <i8> [#uses=1] + %tmp46494650 = zext i8 %tmp4670 to i32 ; <i32> [#uses=1] + %tmp46514652 = zext i8 %tmp46616222 to i32 ; <i32> [#uses=1] + %tmp4654 = sub i32 %tmp46514652, %tmp13571358 ; <i32> [#uses=1] + %tmp4655 = getelementptr i8* %tmp4379, i32 %tmp4654 ; <i8*> [#uses=1] + %tmp4656 = load i8* %tmp4655 ; <i8> [#uses=1] + %tmp4658 = sub i32 %tmp46494650, %tmp13571358 ; <i32> [#uses=1] + %tmp4659 = getelementptr i8* %tmp4379, i32 %tmp4658 ; <i8*> [#uses=1] + store i8 %tmp4656, i8* %tmp4659 + %indvar.next26 = add i8 %indvar6275, 1 ; <i8> [#uses=2] + %exitcond28 = icmp eq i8 %indvar.next26, %tmp.27 ; <i1> [#uses=1] + br i1 %exitcond28, label %cleanup4742, label %cond_next4668 + +cond_false4673: ; preds = %cond_next4611 + br i1 %tmp4677, label %cleanup4742, label %bb4682.preheader + +bb4682.preheader: ; preds = %cond_false4673 + %tmp468546866228 = and i32 %tmp123, 255 ; <i32> [#uses=1] + %tmp46886229 = sub i32 %tmp468546866228, %tmp13571358 ; <i32> [#uses=1] + %tmp46896230 = getelementptr i8* %tmp4379, i32 %tmp46886229 ; <i8*> [#uses=1] + %tmp46906231 = load i8* %tmp46896230 ; <i8> [#uses=1] + %tmp46936233 = getelementptr i8* %tmp4379, i32 %tmp4628 ; <i8*> [#uses=1] + store i8 %tmp46906231, i8* %tmp46936233 + %tmp46986236 = icmp eq i8 %mon.4, %tue.4 ; <i1> [#uses=1] + br i1 %tmp46986236, label %cleanup4742, label %cond_next4702.preheader + +cond_next4702.preheader: ; preds = %bb4682.preheader + %tmp46956235.in = add i8 %tmp137138, -1 ; <i8> [#uses=1] + %L172b.26226 = add i8 %mon.4, -1 ; <i8> [#uses=1] + %tmp.32 = sub i8 %mon.4, %tue.4 ; <i8> [#uses=1] + br label %cond_next4702 + +cond_next4702: ; preds = %cond_next4702, %cond_next4702.preheader + %indvar6278 = phi i8 [ 0, %cond_next4702.preheader ], [ %indvar.next30, %cond_next4702 ] ; <i8> [#uses=3] + %tmp46956235 = sub i8 %tmp46956235.in, %indvar6278 ; <i8> [#uses=1] + %tmp4704 = sub i8 %L172b.26226, %indvar6278 ; <i8> [#uses=1] + %tmp46834684 = zext i8 %tmp4704 to i32 ; <i32> [#uses=1] + %tmp46854686 = zext i8 %tmp46956235 to i32 ; <i32> [#uses=1] + %tmp4688 = sub i32 %tmp46854686, %tmp13571358 ; <i32> [#uses=1] + %tmp4689 = getelementptr i8* %tmp4379, i32 %tmp4688 ; <i8*> [#uses=1] + %tmp4690 = load i8* %tmp4689 ; <i8> [#uses=1] + %tmp4692 = sub i32 %tmp46834684, %tmp13571358 ; <i32> [#uses=1] + %tmp4693 = getelementptr i8* %tmp4379, i32 %tmp4692 ; <i8*> [#uses=1] + store i8 %tmp4690, i8* %tmp4693 + %indvar.next30 = add i8 %indvar6278, 1 ; <i8> [#uses=2] + %exitcond33 = icmp eq i8 %indvar.next30, %tmp.32 ; <i1> [#uses=1] + br i1 %exitcond33, label %cleanup4742, label %cond_next4702 + +eh_then4713: ; preds = %unwind4453 + invoke void @__gnat_begin_handler( i8* %eh_ptr4454 ) + to label %invcont4719 unwind label %unwind4717 + +unwind4717: ; preds = %invcont4719, %eh_then4713 + %eh_ptr4718 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + invoke void @__gnat_end_handler( i8* %eh_ptr4454 ) + to label %cleanup4740 unwind label %unwind4732 + +invcont4719: ; preds = %eh_then4713 + %tmp4720 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp4720( ) + to label %UnifiedReturnBlock35 unwind label %unwind4717 + +unwind4732: ; preds = %unwind4717 + %eh_ptr4733 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @llvm.stackrestore( i8* %tmp4338 ) + call void @llvm.stackrestore( i8* %tmp4338 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr4733 ) ; <i32>:21 [#uses=0] + unreachable + +cleanup4740: ; preds = %unwind4717, %unwind4453 + %eh_exception.53 = phi i8* [ %eh_ptr4454, %unwind4453 ], [ %eh_ptr4718, %unwind4717 ] ; <i8*> [#uses=1] + call void @llvm.stackrestore( i8* %tmp4338 ) + call void @llvm.stackrestore( i8* %tmp4338 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_exception.53 ) ; <i32>:22 [#uses=0] + unreachable + +cleanup4742: ; preds = %cond_next4702, %bb4682.preheader, %cond_false4673, %cond_next4668, %bb4648.preheader, %cond_true4639 + call void @llvm.stackrestore( i8* %tmp4338 ) + call void @llvm.stackrestore( i8* %tmp4338 ) + %tmp4749 = call i8* @llvm.stacksave( ) ; <i8*> [#uses=2] + br i1 %tmp4464, label %cond_next4776, label %UnifiedReturnBlock35 + +unwind4770: ; preds = %cond_next4776 + %eh_ptr4771 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=5] + %eh_select4773 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr4771, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=1] + call void @llvm.stackrestore( i8* %tmp4749 ) + %eh_typeid4874 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp4876 = icmp eq i32 %eh_select4773, %eh_typeid4874 ; <i1> [#uses=1] + br i1 %tmp4876, label %eh_then4877, label %Unwind + +cond_next4776: ; preds = %cleanup4742 + %tmp4856.cast = trunc i64 %tmp4603 to i32 ; <i32> [#uses=1] + %max48584859 = select i1 %tmp4604, i32 %tmp4856.cast, i32 0 ; <i32> [#uses=1] + %tmp4861 = invoke i8 @report__equal( i32 %max48584859, i32 0 ) + to label %invcont4860 unwind label %unwind4770 ; <i8> [#uses=1] + +invcont4860: ; preds = %cond_next4776 + %tmp4862 = icmp eq i8 %tmp4861, 0 ; <i1> [#uses=1] + %tue.8 = select i1 %tmp4862, i8 %tue.4, i8 2 ; <i8> [#uses=3] + call void @llvm.stackrestore( i8* %tmp4749 ) + %tmp49016170 = icmp ult i8 %mon.4, %tue.8 ; <i1> [#uses=1] + br i1 %tmp49016170, label %cond_next4925, label %cond_true4904 + +eh_then4877: ; preds = %unwind4770 + invoke void @__gnat_begin_handler( i8* %eh_ptr4771 ) + to label %invcont4883 unwind label %unwind4881 + +unwind4881: ; preds = %invcont4885, %invcont4883, %eh_then4877 + %eh_ptr4882 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_ptr4771 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr4882 ) ; <i32>:23 [#uses=0] + unreachable + +invcont4883: ; preds = %eh_then4877 + %tmp4884 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp4884( ) + to label %invcont4885 unwind label %unwind4881 + +invcont4885: ; preds = %invcont4883 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([18 x i8]* @.str32 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.124.1606 to i32) to i64), i64 32)) ) + to label %cleanup4894 unwind label %unwind4881 + +cleanup4894: ; preds = %invcont4885 + call void @__gnat_end_handler( i8* %eh_ptr4771 ) + br i1 %tmp4487, label %cond_next4925, label %cond_true4904 + +cond_true4904: ; preds = %cleanup4894, %invcont4860 + %tue.96161.0 = phi i8 [ %tue.8, %invcont4860 ], [ %tue.4, %cleanup4894 ] ; <i8> [#uses=3] + %tmp4907 = icmp ult i8 %tue.96161.0, %tmp204205 ; <i1> [#uses=1] + %tmp4911 = icmp ugt i8 %mon.4, %tmp272273 ; <i1> [#uses=1] + %tmp4915 = or i1 %tmp4907, %tmp4911 ; <i1> [#uses=1] + br i1 %tmp4915, label %cond_true4918, label %cond_next4925 + +cond_true4918: ; preds = %cond_true4904 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 361 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind4919 + +unwind4919: ; preds = %cond_next4925, %cond_true4918 + %tue.96161.2 = phi i8 [ %tue.96161.0, %cond_true4918 ], [ %tue.96161.1, %cond_next4925 ] ; <i8> [#uses=1] + %eh_ptr4920 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=5] + %eh_select4922 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr4920, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=1] + %eh_typeid4987 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp4989 = icmp eq i32 %eh_select4922, %eh_typeid4987 ; <i1> [#uses=1] + br i1 %tmp4989, label %eh_then4990, label %Unwind + +cond_next4925: ; preds = %cond_true4904, %cleanup4894, %invcont4860 + %tue.96161.1 = phi i8 [ %tue.8, %invcont4860 ], [ %tue.4, %cleanup4894 ], [ %tue.96161.0, %cond_true4904 ] ; <i8> [#uses=6] + %tmp49714972 = zext i8 %tue.96161.1 to i64 ; <i64> [#uses=1] + %tmp4973 = sub i64 %tmp45904591, %tmp49714972 ; <i64> [#uses=1] + %tmp4974 = add i64 %tmp4973, 1 ; <i64> [#uses=2] + %tmp4975 = icmp sgt i64 %tmp4974, -1 ; <i1> [#uses=1] + %tmp4974.cast = trunc i64 %tmp4974 to i32 ; <i32> [#uses=1] + %max49764977 = select i1 %tmp4975, i32 %tmp4974.cast, i32 0 ; <i32> [#uses=1] + %tmp4979 = invoke i8 @report__equal( i32 %max49764977, i32 0 ) + to label %invcont4978 unwind label %unwind4919 ; <i8> [#uses=1] + +invcont4978: ; preds = %cond_next4925 + %tmp4980 = icmp eq i8 %tmp4979, 0 ; <i1> [#uses=1] + br i1 %tmp4980, label %finally4985, label %cond_true4983 + +cond_true4983: ; preds = %invcont4978 + %tmp50146178 = icmp ugt i8 %tue.96161.1, 1 ; <i1> [#uses=1] + br i1 %tmp50146178, label %cond_next5038, label %cond_true5017 + +eh_then4990: ; preds = %unwind4919 + invoke void @__gnat_begin_handler( i8* %eh_ptr4920 ) + to label %invcont4996 unwind label %unwind4994 + +unwind4994: ; preds = %invcont4998, %invcont4996, %eh_then4990 + %eh_ptr4995 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_ptr4920 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr4995 ) ; <i32>:24 [#uses=0] + unreachable + +invcont4996: ; preds = %eh_then4990 + %tmp4997 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp4997( ) + to label %invcont4998 unwind label %unwind4994 + +invcont4998: ; preds = %invcont4996 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([19 x i8]* @.str33 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.170.1990 to i32) to i64), i64 32)) ) + to label %cleanup5007 unwind label %unwind4994 + +cleanup5007: ; preds = %invcont4998 + call void @__gnat_end_handler( i8* %eh_ptr4920 ) + br label %finally4985 + +finally4985: ; preds = %cleanup5007, %invcont4978 + %tue.96161.3 = phi i8 [ %tue.96161.2, %cleanup5007 ], [ %tue.96161.1, %invcont4978 ] ; <i8> [#uses=3] + %tmp5014 = icmp ult i8 %mon.4, %tue.96161.3 ; <i1> [#uses=1] + br i1 %tmp5014, label %cond_next5038, label %cond_true5017 + +cond_true5017: ; preds = %finally4985, %cond_true4983 + %tue.96161.4 = phi i8 [ %tue.96161.1, %cond_true4983 ], [ %tue.96161.3, %finally4985 ] ; <i8> [#uses=3] + %mon.86171.0 = phi i8 [ 1, %cond_true4983 ], [ %mon.4, %finally4985 ] ; <i8> [#uses=3] + %tmp5020 = icmp ult i8 %tue.96161.4, %tmp204205 ; <i1> [#uses=1] + %tmp5024 = icmp ugt i8 %mon.86171.0, %tmp272273 ; <i1> [#uses=1] + %tmp5028 = or i1 %tmp5024, %tmp5020 ; <i1> [#uses=1] + br i1 %tmp5028, label %cond_true5031, label %cond_next5038 + +cond_true5031: ; preds = %cond_true5017 + invoke void @__gnat_rcheck_12( i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i32 375 ) + to label %UnifiedUnreachableBlock34 unwind label %unwind5032 + +unwind5032: ; preds = %cond_next5038, %cond_true5031 + %tue.96161.6 = phi i8 [ %tue.96161.4, %cond_true5031 ], [ %tue.96161.5, %cond_next5038 ] ; <i8> [#uses=1] + %mon.86171.2 = phi i8 [ %mon.86171.0, %cond_true5031 ], [ %mon.86171.1, %cond_next5038 ] ; <i8> [#uses=1] + %eh_ptr5033 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=5] + %eh_select5035 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr5033, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=1] + %eh_typeid5100 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp5102 = icmp eq i32 %eh_select5035, %eh_typeid5100 ; <i1> [#uses=1] + br i1 %tmp5102, label %eh_then5103, label %Unwind + +cond_next5038: ; preds = %cond_true5017, %finally4985, %cond_true4983 + %tue.96161.5 = phi i8 [ %tue.96161.1, %cond_true4983 ], [ %tue.96161.3, %finally4985 ], [ %tue.96161.4, %cond_true5017 ] ; <i8> [#uses=4] + %mon.86171.1 = phi i8 [ 1, %cond_true4983 ], [ %mon.4, %finally4985 ], [ %mon.86171.0, %cond_true5017 ] ; <i8> [#uses=4] + %tmp50825083 = zext i8 %mon.86171.1 to i64 ; <i64> [#uses=1] + %tmp50845085 = zext i8 %tue.96161.5 to i64 ; <i64> [#uses=1] + %tmp5086 = sub i64 %tmp50825083, %tmp50845085 ; <i64> [#uses=1] + %tmp5087 = add i64 %tmp5086, 1 ; <i64> [#uses=2] + %tmp5088 = icmp sgt i64 %tmp5087, -1 ; <i1> [#uses=1] + %tmp5087.cast = trunc i64 %tmp5087 to i32 ; <i32> [#uses=1] + %max50895090 = select i1 %tmp5088, i32 %tmp5087.cast, i32 0 ; <i32> [#uses=1] + %tmp5092 = invoke i8 @report__equal( i32 %max50895090, i32 0 ) + to label %invcont5091 unwind label %unwind5032 ; <i8> [#uses=1] + +invcont5091: ; preds = %cond_next5038 + %tmp5093 = icmp eq i8 %tmp5092, 0 ; <i1> [#uses=1] + br i1 %tmp5093, label %finally5098, label %cond_true5096 + +cond_true5096: ; preds = %invcont5091 + br label %finally5098 + +eh_then5103: ; preds = %unwind5032 + invoke void @__gnat_begin_handler( i8* %eh_ptr5033 ) + to label %invcont5109 unwind label %unwind5107 + +unwind5107: ; preds = %invcont5111, %invcont5109, %eh_then5103 + %eh_ptr5108 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_ptr5033 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr5108 ) ; <i32>:25 [#uses=0] + unreachable + +invcont5109: ; preds = %eh_then5103 + %tmp5110 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp5110( ) + to label %invcont5111 unwind label %unwind5107 + +invcont5111: ; preds = %invcont5109 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([19 x i8]* @.str34 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.170.1990 to i32) to i64), i64 32)) ) + to label %cleanup5120 unwind label %unwind5107 + +cleanup5120: ; preds = %invcont5111 + call void @__gnat_end_handler( i8* %eh_ptr5033 ) + br label %finally5098 + +finally5098: ; preds = %cleanup5120, %cond_true5096, %invcont5091 + %tue.96161.7 = phi i8 [ %tue.96161.6, %cleanup5120 ], [ %tue.96161.5, %cond_true5096 ], [ %tue.96161.5, %invcont5091 ] ; <i8> [#uses=1] + %mon.86171.3 = phi i8 [ %mon.86171.2, %cleanup5120 ], [ %mon.86171.1, %cond_true5096 ], [ %mon.86171.1, %invcont5091 ] ; <i8> [#uses=2] + %wed.6 = phi i8 [ %wed.4, %cleanup5120 ], [ 3, %cond_true5096 ], [ %wed.4, %invcont5091 ] ; <i8> [#uses=5] + %not.tmp5135 = icmp uge i8 %tmp137138, %sat.45934.0 ; <i1> [#uses=1] + %tmp5151 = icmp uge i8 %sat.45934.0, %tmp306307 ; <i1> [#uses=1] + %tmp5155 = icmp ule i8 %sat.45934.0, %wed.6 ; <i1> [#uses=1] + %tmp5159 = and i1 %tmp5155, %tmp5151 ; <i1> [#uses=1] + %tmp5177 = icmp ult i8 %wed.6, %tmp272273 ; <i1> [#uses=1] + %tmp5184 = icmp ugt i8 %wed.6, %tue.96161.7 ; <i1> [#uses=1] + %bothcond5907 = or i1 %tmp5177, %tmp5184 ; <i1> [#uses=2] + %not.bothcond5907 = xor i1 %bothcond5907, true ; <i1> [#uses=1] + %tmp5198 = icmp uge i8 %tmp272273, %mon.86171.3 ; <i1> [#uses=1] + %tmp5202 = icmp ule i8 %tmp272273, %tmp137138 ; <i1> [#uses=1] + %tmp5206 = and i1 %tmp5198, %tmp5202 ; <i1> [#uses=1] + %not.bothcond5908 = icmp uge i8 %tmp306307, %sat.45934.0 ; <i1> [#uses=1] + %tmp5244 = icmp uge i8 %wed.6, %tmp306307 ; <i1> [#uses=1] + %tmp5248 = icmp ule i8 %wed.6, %mon.86171.3 ; <i1> [#uses=1] + %tmp5252 = and i1 %tmp5244, %tmp5248 ; <i1> [#uses=1] + %tmp5164 = or i1 %not.tmp5135, %not.bothcond5908 ; <i1> [#uses=1] + %tmp5194 = or i1 %tmp5164, %tmp5206 ; <i1> [#uses=1] + %tmp5210 = or i1 %tmp5194, %tmp5159 ; <i1> [#uses=1] + %tmp5240 = or i1 %tmp5210, %not.bothcond5907 ; <i1> [#uses=1] + %tmp5256 = or i1 %tmp5240, %tmp5252 ; <i1> [#uses=1] + br i1 %tmp5256, label %cond_true5259, label %cond_next5271 + +cond_true5259: ; preds = %finally5098 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([27 x i8]* @.str35 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.178.2066 to i32) to i64), i64 32)) ) + to label %cond_next5271 unwind label %unwind5266 + +unwind5266: ; preds = %cond_true5462, %invcont5429, %cond_next5401, %cond_true5393, %cond_next5374, %bb5359, %cond_next5347, %invcont5330, %invcont5305, %invcont5303, %invcont5294, %bb5293, %cond_next5281, %cond_next5271, %cond_true5259 + %eh_ptr5267 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=5] + %eh_select5269 = call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr5267, i8* bitcast (i32 (...)* @__gnat_eh_personality to i8*), i32* @__gnat_others_value ) ; <i32> [#uses=1] + %eh_typeid5473 = call i32 @llvm.eh.typeid.for( i8* bitcast (i32* @__gnat_others_value to i8*) ) ; <i32> [#uses=1] + %tmp5475 = icmp eq i32 %eh_select5269, %eh_typeid5473 ; <i1> [#uses=1] + br i1 %tmp5475, label %eh_then5476, label %Unwind + +cond_next5271: ; preds = %cond_true5259, %finally5098 + %tmp5273 = invoke i32 @report__ident_int( i32 0 ) + to label %invcont5272 unwind label %unwind5266 ; <i32> [#uses=2] + +invcont5272: ; preds = %cond_next5271 + %tmp5277 = icmp slt i32 %tmp5273, 10 ; <i1> [#uses=1] + br i1 %tmp5277, label %bb5292, label %cond_next5281 + +cond_next5281: ; preds = %invcont5272 + %tmp5283 = invoke i32 @report__ident_int( i32 -10 ) + to label %invcont5282 unwind label %unwind5266 ; <i32> [#uses=1] + +invcont5282: ; preds = %cond_next5281 + %tmp5287 = icmp sgt i32 %tmp5273, %tmp5283 ; <i1> [#uses=1] + br i1 %tmp5287, label %bb5292, label %bb5293 + +bb5292: ; preds = %invcont5282, %invcont5272 + br label %bb5293 + +bb5293: ; preds = %bb5292, %invcont5282 + %iftmp.179.0 = phi i1 [ false, %bb5292 ], [ true, %invcont5282 ] ; <i1> [#uses=1] + %tmp5295 = invoke i32 @report__ident_int( i32 10 ) + to label %invcont5294 unwind label %unwind5266 ; <i32> [#uses=1] + +invcont5294: ; preds = %bb5293 + %tmp5296 = icmp slt i32 %tmp5295, 1 ; <i1> [#uses=1] + %tmp5304 = invoke i32 @report__ident_int( i32 0 ) + to label %invcont5303 unwind label %unwind5266 ; <i32> [#uses=2] + +invcont5303: ; preds = %invcont5294 + %tmp5306 = invoke i32 @report__ident_int( i32 -10 ) + to label %invcont5305 unwind label %unwind5266 ; <i32> [#uses=1] + +invcont5305: ; preds = %invcont5303 + %tmp5331 = invoke i32 @report__ident_int( i32 -20 ) + to label %invcont5330 unwind label %unwind5266 ; <i32> [#uses=1] + +invcont5330: ; preds = %invcont5305 + %tmp5310 = icmp slt i32 %tmp5304, %tmp5306 ; <i1> [#uses=1] + %tmp5318 = icmp sgt i32 %tmp5304, -11 ; <i1> [#uses=1] + %bothcond5909 = or i1 %tmp5310, %tmp5318 ; <i1> [#uses=1] + %not.bothcond5909 = xor i1 %bothcond5909, true ; <i1> [#uses=1] + %tmp5332 = icmp sgt i32 %tmp5331, -1 ; <i1> [#uses=1] + %tmp5339 = invoke i32 @report__ident_int( i32 0 ) + to label %invcont5338 unwind label %unwind5266 ; <i32> [#uses=2] + +invcont5338: ; preds = %invcont5330 + %tmp5343 = icmp slt i32 %tmp5339, 6 ; <i1> [#uses=1] + br i1 %tmp5343, label %bb5358, label %cond_next5347 + +cond_next5347: ; preds = %invcont5338 + %tmp5349 = invoke i32 @report__ident_int( i32 5 ) + to label %invcont5348 unwind label %unwind5266 ; <i32> [#uses=1] + +invcont5348: ; preds = %cond_next5347 + %tmp5353 = icmp sgt i32 %tmp5339, %tmp5349 ; <i1> [#uses=1] + br i1 %tmp5353, label %bb5358, label %bb5359 + +bb5358: ; preds = %invcont5348, %invcont5338 + br label %bb5359 + +bb5359: ; preds = %bb5358, %invcont5348 + %iftmp.181.0 = phi i1 [ false, %bb5358 ], [ true, %invcont5348 ] ; <i1> [#uses=1] + %tmp5366 = invoke i32 @report__ident_int( i32 0 ) + to label %invcont5365 unwind label %unwind5266 ; <i32> [#uses=2] + +invcont5365: ; preds = %bb5359 + %tmp5370 = icmp slt i32 %tmp5366, 7 ; <i1> [#uses=1] + br i1 %tmp5370, label %bb5385, label %cond_next5374 + +cond_next5374: ; preds = %invcont5365 + %tmp5376 = invoke i32 @report__ident_int( i32 3 ) + to label %invcont5375 unwind label %unwind5266 ; <i32> [#uses=1] + +invcont5375: ; preds = %cond_next5374 + %tmp5380 = icmp sgt i32 %tmp5366, %tmp5376 ; <i1> [#uses=1] + br i1 %tmp5380, label %bb5385, label %bb5386 + +bb5385: ; preds = %invcont5375, %invcont5365 + br label %bb5386 + +bb5386: ; preds = %bb5385, %invcont5375 + %iftmp.182.0 = phi i1 [ false, %bb5385 ], [ true, %invcont5375 ] ; <i1> [#uses=1] + %tmp5301 = or i1 %tmp5296, %iftmp.179.0 ; <i1> [#uses=1] + %tmp5328 = or i1 %tmp5301, %not.bothcond5909 ; <i1> [#uses=1] + %tmp5336 = or i1 %tmp5328, %tmp5332 ; <i1> [#uses=1] + %tmp5363 = or i1 %tmp5336, %iftmp.181.0 ; <i1> [#uses=1] + %tmp5390 = or i1 %tmp5363, %iftmp.182.0 ; <i1> [#uses=1] + br i1 %tmp5390, label %cond_true5393, label %cond_next5401 + +cond_true5393: ; preds = %bb5386 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([27 x i8]* @.str36 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.178.2066 to i32) to i64), i64 32)) ) + to label %cond_next5401 unwind label %unwind5266 + +cond_next5401: ; preds = %cond_true5393, %bb5386 + %tmp5430 = invoke i32 @report__ident_int( i32 0 ) + to label %invcont5429 unwind label %unwind5266 ; <i32> [#uses=2] + +invcont5429: ; preds = %cond_next5401 + %tmp5432 = invoke i32 @report__ident_int( i32 4 ) + to label %invcont5431 unwind label %unwind5266 ; <i32> [#uses=1] + +invcont5431: ; preds = %invcont5429 + %tmp5436 = icmp slt i32 %tmp5430, %tmp5432 ; <i1> [#uses=1] + %tmp5444 = icmp sgt i32 %tmp5430, -4 ; <i1> [#uses=1] + %bothcond5911 = or i1 %tmp5436, %tmp5444 ; <i1> [#uses=1] + %tmp5457 = and i1 %bothcond5911, %bothcond5907 ; <i1> [#uses=1] + br i1 %tmp5457, label %finally5471, label %cond_true5462 + +cond_true5462: ; preds = %invcont5431 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([29 x i8]* @.str37 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.36.923 to i32) to i64), i64 32)) ) + to label %finally5471 unwind label %unwind5266 + +eh_then5476: ; preds = %unwind5266 + invoke void @__gnat_begin_handler( i8* %eh_ptr5267 ) + to label %invcont5482 unwind label %unwind5480 + +unwind5480: ; preds = %invcont5484, %invcont5482, %eh_then5476 + %eh_ptr5481 = call i8* @llvm.eh.exception( ) ; <i8*> [#uses=1] + call void @__gnat_end_handler( i8* %eh_ptr5267 ) + call i32 (...)* @_Unwind_Resume( i8* %eh_ptr5481 ) ; <i32>:26 [#uses=0] + unreachable + +invcont5482: ; preds = %eh_then5476 + %tmp5483 = load void ()** @system__soft_links__abort_undefer ; <void ()*> [#uses=1] + invoke void %tmp5483( ) + to label %invcont5484 unwind label %unwind5480 + +invcont5484: ; preds = %invcont5482 + invoke void @report__failed( i64 or (i64 zext (i32 ptrtoint ([19 x i8]* @.str38 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.string___XUB* @C.170.1990 to i32) to i64), i64 32)) ) + to label %cleanup5493 unwind label %unwind5480 + +cleanup5493: ; preds = %invcont5484 + call void @__gnat_end_handler( i8* %eh_ptr5267 ) + call void @report__result( ) + ret void + +finally5471: ; preds = %cond_true5462, %invcont5431 + call void @report__result( ) + ret void + +Unwind: ; preds = %unwind5266, %unwind5032, %unwind4919, %unwind4770, %unwind3880, %unwind3618, %unwind3393, %eh_else3366, %eh_else3016, %eh_else2666, %eh_else1330, %eh_else932, %eh_else823 + %eh_exception.2 = phi i8* [ %eh_exception.05914.1, %eh_else823 ], [ %eh_ptr872, %eh_else932 ], [ %eh_ptr975, %eh_else1330 ], [ %eh_exception.296030.1, %eh_else2666 ], [ %eh_exception.336046.1, %eh_else3016 ], [ %eh_exception.396074.1, %eh_else3366 ], [ %eh_ptr3394, %unwind3393 ], [ %eh_ptr3619, %unwind3618 ], [ %eh_ptr3881, %unwind3880 ], [ %eh_ptr4771, %unwind4770 ], [ %eh_ptr4920, %unwind4919 ], [ %eh_ptr5033, %unwind5032 ], [ %eh_ptr5267, %unwind5266 ] ; <i8*> [#uses=1] + call i32 (...)* @_Unwind_Resume( i8* %eh_exception.2 ) ; <i32>:27 [#uses=0] + unreachable + +UnifiedUnreachableBlock34: ; preds = %cond_true5031, %cond_true4918, %cond_true4609, %cond_true4504, %cond_true4481, %cond_true4187, %cond_true4117, %cond_true4027, %cond_true3935, %cond_true3907, %cond_true3729, %cond_true3675, %cond_true3617, %cond_true3543, %cond_true3448, %cond_true3420, %bb3227, %bb3193, %bb3171, %cond_true3061, %bb2877, %bb2843, %bb2821, %cond_true2711, %bb2558, %bb2524, %bb2506, %cond_true2410, %bb2203, %cond_true2171, %cond_true1946, %bb1605, %cond_true1573, %cond_true1546, %cond_true1418, %cond_true973, %cond_true870, %cond_true663, %cond_true637, %cond_true611, %cond_true585, %cond_true559, %cond_true533, %cond_true507, %cond_true465 + unreachable + +UnifiedReturnBlock35: ; preds = %cleanup4742, %invcont4719, %finally913, %cleanup928 + ret void +} + +declare i32 @report__ident_int(i32) + +declare void @__gnat_rcheck_10(i8*, i32) + +declare void @__gnat_rcheck_12(i8*, i32) + +declare void @report__test(i64, i64) + +declare i8* @llvm.eh.exception() + +declare i32 @llvm.eh.selector(i8*, i8*, ...) + +declare i32 @llvm.eh.typeid.for(i8*) + +declare i32 @__gnat_eh_personality(...) + +declare i32 @_Unwind_Resume(...) + +declare void @system__secondary_stack__ss_mark(%struct.system__secondary_stack__mark_id* sret ) + +declare void @system__img_int__image_integer(%struct.string___XUP* sret , i32) + +declare void @system__string_ops__str_concat(%struct.string___XUP* sret , i64, i64) + +declare void @report__failed(i64) + +declare void @system__secondary_stack__ss_release(i64) + +declare void @__gnat_begin_handler(i8*) + +declare void @__gnat_end_handler(i8*) + +declare i8 @report__equal(i32, i32) + +declare i8* @llvm.stacksave() + +declare void @__gnat_rcheck_07(i8*, i32) + +declare i8* @__gnat_malloc(i32) + +declare void @llvm.stackrestore(i8*) + +declare void @llvm.memcpy.i32(i8*, i8*, i32, i32) + +declare void @__gnat_rcheck_05(i8*, i32) + +declare void @__gnat_rcheck_06(i8*, i32) + +declare void @system__img_enum__image_enumeration_8(%struct.string___XUP* sret , i32, i64, i8*) + +declare i32 @memcmp(i8*, i8*, i32, ...) + +declare void @report__result() diff --git a/test/CodeGen/Generic/2007-07-06-FilterOffset.ll b/test/CodeGen/Generic/2007-07-06-FilterOffset.ll new file mode 100644 index 0000000..252ba1c --- /dev/null +++ b/test/CodeGen/Generic/2007-07-06-FilterOffset.ll @@ -0,0 +1,1621 @@ +; RUN: llvm-as < %s | llc -enable-eh -asm-verbose -o - | \ +; RUN: grep {\\-4.*TypeInfo index} + +target triple = "i686-pc-linux-gnu" + %struct.__class_type_info_pseudo = type { %struct.__type_info_pseudo } + %struct.__type_info_pseudo = type { i8*, i8* } +@_ZTI4a000 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a000, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a001 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a001, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a002 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a002, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a003 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a003, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a004 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a004, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a005 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a005, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a006 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a006, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a007 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a007, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a008 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a008, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a009 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a009, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a010 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a010, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a011 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a011, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a012 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a012, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a013 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a013, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a014 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a014, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a015 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a015, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a016 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a016, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a017 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a017, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a018 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a018, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a019 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a019, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a020 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a020, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a021 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a021, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a022 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a022, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a023 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a023, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a024 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a024, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a025 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a025, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a026 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a026, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a027 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a027, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a028 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a028, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a029 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a029, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a030 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a030, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a031 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a031, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a032 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a032, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a033 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a033, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a034 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a034, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a035 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a035, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a036 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a036, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a037 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a037, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a038 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a038, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a039 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a039, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a040 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a040, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a041 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a041, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a042 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a042, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a043 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a043, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a044 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a044, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a045 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a045, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a046 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a046, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a047 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a047, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a048 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a048, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a049 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a049, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a050 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a050, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a051 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a051, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a052 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a052, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a053 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a053, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a054 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a054, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a055 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a055, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a056 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a056, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a057 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a057, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a058 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a058, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a059 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a059, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a060 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a060, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a061 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a061, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a062 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a062, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a063 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a063, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a064 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a064, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a065 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a065, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a066 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a066, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a067 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a067, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a068 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a068, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a069 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a069, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a070 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a070, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a071 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a071, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a072 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a072, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a073 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a073, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a074 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a074, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a075 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a075, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a076 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a076, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a077 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a077, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a078 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a078, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a079 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a079, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a080 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a080, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a081 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a081, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a082 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a082, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a083 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a083, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a084 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a084, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a085 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a085, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a086 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a086, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a087 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a087, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a088 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a088, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a089 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a089, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a090 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a090, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a091 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a091, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a092 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a092, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a093 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a093, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a094 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a094, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a095 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a095, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a096 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a096, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a097 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a097, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a098 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a098, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a099 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a099, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a100 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a100, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a101 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a101, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a102 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a102, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a103 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a103, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a104 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a104, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a105 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a105, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a106 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a106, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a107 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a107, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a108 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a108, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a109 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a109, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a110 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a110, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a111 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a111, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a112 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a112, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a113 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a113, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a114 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a114, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a115 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a115, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a116 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a116, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a117 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a117, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a118 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a118, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a119 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a119, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a120 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a120, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a121 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a121, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a122 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a122, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a123 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a123, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a124 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a124, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a125 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a125, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a126 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a126, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a127 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a127, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTI4a128 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a128, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] +@_ZTVN10__cxxabiv117__class_type_infoE = external constant [0 x i32 (...)*] ; <[0 x i32 (...)*]*> [#uses=1] +@_ZTS4a128 = weak constant [6 x i8] c"4a128\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a127 = weak constant [6 x i8] c"4a127\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a126 = weak constant [6 x i8] c"4a126\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a125 = weak constant [6 x i8] c"4a125\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a124 = weak constant [6 x i8] c"4a124\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a123 = weak constant [6 x i8] c"4a123\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a122 = weak constant [6 x i8] c"4a122\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a121 = weak constant [6 x i8] c"4a121\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a120 = weak constant [6 x i8] c"4a120\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a119 = weak constant [6 x i8] c"4a119\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a118 = weak constant [6 x i8] c"4a118\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a117 = weak constant [6 x i8] c"4a117\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a116 = weak constant [6 x i8] c"4a116\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a115 = weak constant [6 x i8] c"4a115\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a114 = weak constant [6 x i8] c"4a114\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a113 = weak constant [6 x i8] c"4a113\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a112 = weak constant [6 x i8] c"4a112\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a111 = weak constant [6 x i8] c"4a111\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a110 = weak constant [6 x i8] c"4a110\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a109 = weak constant [6 x i8] c"4a109\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a108 = weak constant [6 x i8] c"4a108\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a107 = weak constant [6 x i8] c"4a107\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a106 = weak constant [6 x i8] c"4a106\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a105 = weak constant [6 x i8] c"4a105\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a104 = weak constant [6 x i8] c"4a104\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a103 = weak constant [6 x i8] c"4a103\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a102 = weak constant [6 x i8] c"4a102\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a101 = weak constant [6 x i8] c"4a101\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a100 = weak constant [6 x i8] c"4a100\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a099 = weak constant [6 x i8] c"4a099\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a098 = weak constant [6 x i8] c"4a098\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a097 = weak constant [6 x i8] c"4a097\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a096 = weak constant [6 x i8] c"4a096\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a095 = weak constant [6 x i8] c"4a095\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a094 = weak constant [6 x i8] c"4a094\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a093 = weak constant [6 x i8] c"4a093\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a092 = weak constant [6 x i8] c"4a092\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a091 = weak constant [6 x i8] c"4a091\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a090 = weak constant [6 x i8] c"4a090\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a089 = weak constant [6 x i8] c"4a089\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a088 = weak constant [6 x i8] c"4a088\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a087 = weak constant [6 x i8] c"4a087\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a086 = weak constant [6 x i8] c"4a086\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a085 = weak constant [6 x i8] c"4a085\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a084 = weak constant [6 x i8] c"4a084\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a083 = weak constant [6 x i8] c"4a083\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a082 = weak constant [6 x i8] c"4a082\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a081 = weak constant [6 x i8] c"4a081\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a080 = weak constant [6 x i8] c"4a080\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a079 = weak constant [6 x i8] c"4a079\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a078 = weak constant [6 x i8] c"4a078\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a077 = weak constant [6 x i8] c"4a077\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a076 = weak constant [6 x i8] c"4a076\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a075 = weak constant [6 x i8] c"4a075\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a074 = weak constant [6 x i8] c"4a074\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a073 = weak constant [6 x i8] c"4a073\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a072 = weak constant [6 x i8] c"4a072\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a071 = weak constant [6 x i8] c"4a071\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a070 = weak constant [6 x i8] c"4a070\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a069 = weak constant [6 x i8] c"4a069\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a068 = weak constant [6 x i8] c"4a068\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a067 = weak constant [6 x i8] c"4a067\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a066 = weak constant [6 x i8] c"4a066\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a065 = weak constant [6 x i8] c"4a065\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a064 = weak constant [6 x i8] c"4a064\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a063 = weak constant [6 x i8] c"4a063\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a062 = weak constant [6 x i8] c"4a062\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a061 = weak constant [6 x i8] c"4a061\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a060 = weak constant [6 x i8] c"4a060\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a059 = weak constant [6 x i8] c"4a059\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a058 = weak constant [6 x i8] c"4a058\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a057 = weak constant [6 x i8] c"4a057\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a056 = weak constant [6 x i8] c"4a056\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a055 = weak constant [6 x i8] c"4a055\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a054 = weak constant [6 x i8] c"4a054\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a053 = weak constant [6 x i8] c"4a053\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a052 = weak constant [6 x i8] c"4a052\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a051 = weak constant [6 x i8] c"4a051\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a050 = weak constant [6 x i8] c"4a050\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a049 = weak constant [6 x i8] c"4a049\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a048 = weak constant [6 x i8] c"4a048\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a047 = weak constant [6 x i8] c"4a047\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a046 = weak constant [6 x i8] c"4a046\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a045 = weak constant [6 x i8] c"4a045\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a044 = weak constant [6 x i8] c"4a044\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a043 = weak constant [6 x i8] c"4a043\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a042 = weak constant [6 x i8] c"4a042\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a041 = weak constant [6 x i8] c"4a041\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a040 = weak constant [6 x i8] c"4a040\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a039 = weak constant [6 x i8] c"4a039\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a038 = weak constant [6 x i8] c"4a038\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a037 = weak constant [6 x i8] c"4a037\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a036 = weak constant [6 x i8] c"4a036\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a035 = weak constant [6 x i8] c"4a035\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a034 = weak constant [6 x i8] c"4a034\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a033 = weak constant [6 x i8] c"4a033\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a032 = weak constant [6 x i8] c"4a032\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a031 = weak constant [6 x i8] c"4a031\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a030 = weak constant [6 x i8] c"4a030\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a029 = weak constant [6 x i8] c"4a029\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a028 = weak constant [6 x i8] c"4a028\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a027 = weak constant [6 x i8] c"4a027\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a026 = weak constant [6 x i8] c"4a026\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a025 = weak constant [6 x i8] c"4a025\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a024 = weak constant [6 x i8] c"4a024\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a023 = weak constant [6 x i8] c"4a023\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a022 = weak constant [6 x i8] c"4a022\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a021 = weak constant [6 x i8] c"4a021\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a020 = weak constant [6 x i8] c"4a020\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a019 = weak constant [6 x i8] c"4a019\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a018 = weak constant [6 x i8] c"4a018\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a017 = weak constant [6 x i8] c"4a017\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a016 = weak constant [6 x i8] c"4a016\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a015 = weak constant [6 x i8] c"4a015\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a014 = weak constant [6 x i8] c"4a014\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a013 = weak constant [6 x i8] c"4a013\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a012 = weak constant [6 x i8] c"4a012\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a011 = weak constant [6 x i8] c"4a011\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a010 = weak constant [6 x i8] c"4a010\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a009 = weak constant [6 x i8] c"4a009\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a008 = weak constant [6 x i8] c"4a008\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a007 = weak constant [6 x i8] c"4a007\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a006 = weak constant [6 x i8] c"4a006\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a005 = weak constant [6 x i8] c"4a005\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a004 = weak constant [6 x i8] c"4a004\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a003 = weak constant [6 x i8] c"4a003\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a002 = weak constant [6 x i8] c"4a002\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a001 = weak constant [6 x i8] c"4a001\00" ; <[6 x i8]*> [#uses=1] +@_ZTS4a000 = weak constant [6 x i8] c"4a000\00" ; <[6 x i8]*> [#uses=1] + +declare void @_Z1Nv() + +declare i8* @llvm.eh.exception() + +declare i32 @llvm.eh.selector(i8*, i8*, ...) + +declare i32 @llvm.eh.typeid.for(i8*) + +declare i32 @__gxx_personality_v0(...) + +declare i32 @_Unwind_Resume(...) + +declare void @__cxa_call_unexpected(i8*) + +define void @_Z1Qv() { +entry: + invoke void @_Z1Nv( ) + to label %UnifiedReturnBlock2 unwind label %unwind + +unwind: ; preds = %entry + %eh_ptr = tail call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1, i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a000 to i8*), i32 1, i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a001 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a000 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a001 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a002 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a003 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a004 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a005 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a006 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a007 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a008 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a009 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a010 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a011 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a012 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a013 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a014 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a015 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a016 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a017 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a018 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a019 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a020 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a021 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a022 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a023 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a024 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a025 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a026 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a027 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a028 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a029 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a030 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a031 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a032 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a033 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a034 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a035 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a036 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a037 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a038 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a039 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a040 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a041 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a042 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a043 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a044 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a045 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a046 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a047 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a048 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a049 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a050 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a051 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a052 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a053 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a054 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a055 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a056 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a057 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a058 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a059 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a060 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a061 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a062 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a063 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a064 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a065 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a066 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a067 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a068 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a069 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a070 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a071 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a072 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a073 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a074 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a075 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a076 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a077 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a078 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a079 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a080 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a081 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a082 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a083 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a084 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a085 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a086 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a087 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a088 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a089 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a090 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a091 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a092 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a093 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a094 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a095 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a096 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a097 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a098 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a099 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a100 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a101 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a102 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a103 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a104 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a105 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a106 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a107 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a108 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a109 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a110 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a111 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a112 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a113 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a114 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a115 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a116 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a117 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a118 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a119 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a120 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a121 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a122 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a123 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a124 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a125 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a126 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a127 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a128 to i8*) ) ; <i32> [#uses=2] + %tmp260 = icmp slt i32 %eh_select, 0 ; <i1> [#uses=1] + br i1 %tmp260, label %filter, label %cleanup279 + +filter: ; preds = %unwind + invoke void @__cxa_call_unexpected( i8* %eh_ptr ) + to label %UnifiedUnreachableBlock1 unwind label %unwind261 + +unwind261: ; preds = %filter + %eh_ptr262 = tail call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select264 = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr262, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1, i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a001 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a000 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a001 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a002 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a003 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a004 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a005 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a006 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a007 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a008 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a009 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a010 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a011 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a012 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a013 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a014 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a015 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a016 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a017 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a018 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a019 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a020 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a021 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a022 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a023 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a024 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a025 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a026 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a027 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a028 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a029 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a030 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a031 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a032 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a033 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a034 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a035 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a036 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a037 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a038 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a039 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a040 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a041 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a042 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a043 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a044 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a045 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a046 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a047 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a048 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a049 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a050 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a051 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a052 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a053 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a054 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a055 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a056 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a057 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a058 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a059 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a060 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a061 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a062 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a063 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a064 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a065 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a066 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a067 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a068 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a069 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a070 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a071 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a072 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a073 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a074 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a075 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a076 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a077 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a078 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a079 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a080 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a081 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a082 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a083 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a084 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a085 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a086 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a087 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a088 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a089 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a090 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a091 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a092 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a093 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a094 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a095 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a096 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a097 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a098 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a099 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a100 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a101 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a102 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a103 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a104 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a105 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a106 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a107 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a108 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a109 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a110 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a111 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a112 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a113 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a114 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a115 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a116 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a117 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a118 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a119 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a120 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a121 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a122 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a123 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a124 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a125 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a126 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a127 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a128 to i8*) ) ; <i32> [#uses=2] + %tmp2692602 = icmp slt i32 %eh_select264, 0 ; <i1> [#uses=1] + br i1 %tmp2692602, label %filter270, label %cleanup279 + +filter270: ; preds = %unwind261 + invoke void @__cxa_call_unexpected( i8* %eh_ptr262 ) + to label %UnifiedUnreachableBlock1 unwind label %unwind272 + +unwind272: ; preds = %filter270 + %eh_ptr273 = tail call i8* @llvm.eh.exception( ) ; <i8*> [#uses=3] + %eh_select275 = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr273, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a000 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a001 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a002 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a003 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a004 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a005 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a006 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a007 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a008 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a009 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a010 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a011 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a012 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a013 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a014 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a015 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a016 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a017 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a018 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a019 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a020 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a021 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a022 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a023 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a024 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a025 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a026 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a027 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a028 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a029 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a030 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a031 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a032 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a033 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a034 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a035 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a036 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a037 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a038 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a039 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a040 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a041 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a042 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a043 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a044 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a045 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a046 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a047 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a048 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a049 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a050 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a051 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a052 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a053 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a054 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a055 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a056 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a057 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a058 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a059 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a060 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a061 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a062 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a063 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a064 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a065 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a066 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a067 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a068 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a069 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a070 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a071 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a072 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a073 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a074 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a075 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a076 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a077 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a078 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a079 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a080 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a081 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a082 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a083 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a084 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a085 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a086 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a087 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a088 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a089 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a090 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a091 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a092 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a093 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a094 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a095 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a096 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a097 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a098 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a099 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a100 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a101 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a102 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a103 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a104 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a105 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a106 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a107 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a108 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a109 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a110 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a111 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a112 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a113 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a114 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a115 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a116 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a117 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a118 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a119 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a120 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a121 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a122 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a123 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a124 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a125 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a126 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a127 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a128 to i8*) ) ; <i32> [#uses=2] + %eh_typeid2863 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a000 to i8*) ) ; <i32> [#uses=1] + %tmp2812865 = icmp eq i32 %eh_select275, %eh_typeid2863 ; <i1> [#uses=1] + br i1 %tmp2812865, label %eh_then, label %eh_else + +cleanup279: ; preds = %unwind261, %unwind + %eh_exception.1 = phi i8* [ %eh_ptr, %unwind ], [ %eh_ptr262, %unwind261 ] ; <i8*> [#uses=2] + %eh_selector.1 = phi i32 [ %eh_select, %unwind ], [ %eh_select264, %unwind261 ] ; <i32> [#uses=2] + %eh_typeid = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a000 to i8*) ) ; <i32> [#uses=1] + %tmp281 = icmp eq i32 %eh_selector.1, %eh_typeid ; <i1> [#uses=1] + br i1 %tmp281, label %eh_then, label %eh_else + +eh_then: ; preds = %cleanup279, %unwind272 + %eh_exception.12604.0 = phi i8* [ %eh_ptr273, %unwind272 ], [ %eh_exception.1, %cleanup279 ] ; <i8*> [#uses=1] + %tmp284 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.0 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else: ; preds = %cleanup279, %unwind272 + %eh_exception.12604.1 = phi i8* [ %eh_ptr273, %unwind272 ], [ %eh_exception.1, %cleanup279 ] ; <i8*> [#uses=129] + %eh_selector.12734.1 = phi i32 [ %eh_select275, %unwind272 ], [ %eh_selector.1, %cleanup279 ] ; <i32> [#uses=128] + %eh_typeid295 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a001 to i8*) ) ; <i32> [#uses=1] + %tmp297 = icmp eq i32 %eh_selector.12734.1, %eh_typeid295 ; <i1> [#uses=1] + br i1 %tmp297, label %eh_then298, label %eh_else312 + +eh_then298: ; preds = %eh_else + %tmp301 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else312: ; preds = %eh_else + %eh_typeid313 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a002 to i8*) ) ; <i32> [#uses=1] + %tmp315 = icmp eq i32 %eh_selector.12734.1, %eh_typeid313 ; <i1> [#uses=1] + br i1 %tmp315, label %eh_then316, label %eh_else330 + +eh_then316: ; preds = %eh_else312 + %tmp319 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else330: ; preds = %eh_else312 + %eh_typeid331 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a003 to i8*) ) ; <i32> [#uses=1] + %tmp333 = icmp eq i32 %eh_selector.12734.1, %eh_typeid331 ; <i1> [#uses=1] + br i1 %tmp333, label %eh_then334, label %eh_else348 + +eh_then334: ; preds = %eh_else330 + %tmp337 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else348: ; preds = %eh_else330 + %eh_typeid349 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a004 to i8*) ) ; <i32> [#uses=1] + %tmp351 = icmp eq i32 %eh_selector.12734.1, %eh_typeid349 ; <i1> [#uses=1] + br i1 %tmp351, label %eh_then352, label %eh_else366 + +eh_then352: ; preds = %eh_else348 + %tmp355 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else366: ; preds = %eh_else348 + %eh_typeid367 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a005 to i8*) ) ; <i32> [#uses=1] + %tmp369 = icmp eq i32 %eh_selector.12734.1, %eh_typeid367 ; <i1> [#uses=1] + br i1 %tmp369, label %eh_then370, label %eh_else384 + +eh_then370: ; preds = %eh_else366 + %tmp373 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else384: ; preds = %eh_else366 + %eh_typeid385 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a006 to i8*) ) ; <i32> [#uses=1] + %tmp387 = icmp eq i32 %eh_selector.12734.1, %eh_typeid385 ; <i1> [#uses=1] + br i1 %tmp387, label %eh_then388, label %eh_else402 + +eh_then388: ; preds = %eh_else384 + %tmp391 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else402: ; preds = %eh_else384 + %eh_typeid403 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a007 to i8*) ) ; <i32> [#uses=1] + %tmp405 = icmp eq i32 %eh_selector.12734.1, %eh_typeid403 ; <i1> [#uses=1] + br i1 %tmp405, label %eh_then406, label %eh_else420 + +eh_then406: ; preds = %eh_else402 + %tmp409 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else420: ; preds = %eh_else402 + %eh_typeid421 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a008 to i8*) ) ; <i32> [#uses=1] + %tmp423 = icmp eq i32 %eh_selector.12734.1, %eh_typeid421 ; <i1> [#uses=1] + br i1 %tmp423, label %eh_then424, label %eh_else438 + +eh_then424: ; preds = %eh_else420 + %tmp427 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else438: ; preds = %eh_else420 + %eh_typeid439 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a009 to i8*) ) ; <i32> [#uses=1] + %tmp441 = icmp eq i32 %eh_selector.12734.1, %eh_typeid439 ; <i1> [#uses=1] + br i1 %tmp441, label %eh_then442, label %eh_else456 + +eh_then442: ; preds = %eh_else438 + %tmp445 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else456: ; preds = %eh_else438 + %eh_typeid457 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a010 to i8*) ) ; <i32> [#uses=1] + %tmp459 = icmp eq i32 %eh_selector.12734.1, %eh_typeid457 ; <i1> [#uses=1] + br i1 %tmp459, label %eh_then460, label %eh_else474 + +eh_then460: ; preds = %eh_else456 + %tmp463 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else474: ; preds = %eh_else456 + %eh_typeid475 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a011 to i8*) ) ; <i32> [#uses=1] + %tmp477 = icmp eq i32 %eh_selector.12734.1, %eh_typeid475 ; <i1> [#uses=1] + br i1 %tmp477, label %eh_then478, label %eh_else492 + +eh_then478: ; preds = %eh_else474 + %tmp481 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else492: ; preds = %eh_else474 + %eh_typeid493 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a012 to i8*) ) ; <i32> [#uses=1] + %tmp495 = icmp eq i32 %eh_selector.12734.1, %eh_typeid493 ; <i1> [#uses=1] + br i1 %tmp495, label %eh_then496, label %eh_else510 + +eh_then496: ; preds = %eh_else492 + %tmp499 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else510: ; preds = %eh_else492 + %eh_typeid511 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a013 to i8*) ) ; <i32> [#uses=1] + %tmp513 = icmp eq i32 %eh_selector.12734.1, %eh_typeid511 ; <i1> [#uses=1] + br i1 %tmp513, label %eh_then514, label %eh_else528 + +eh_then514: ; preds = %eh_else510 + %tmp517 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else528: ; preds = %eh_else510 + %eh_typeid529 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a014 to i8*) ) ; <i32> [#uses=1] + %tmp531 = icmp eq i32 %eh_selector.12734.1, %eh_typeid529 ; <i1> [#uses=1] + br i1 %tmp531, label %eh_then532, label %eh_else546 + +eh_then532: ; preds = %eh_else528 + %tmp535 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else546: ; preds = %eh_else528 + %eh_typeid547 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a015 to i8*) ) ; <i32> [#uses=1] + %tmp549 = icmp eq i32 %eh_selector.12734.1, %eh_typeid547 ; <i1> [#uses=1] + br i1 %tmp549, label %eh_then550, label %eh_else564 + +eh_then550: ; preds = %eh_else546 + %tmp553 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else564: ; preds = %eh_else546 + %eh_typeid565 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a016 to i8*) ) ; <i32> [#uses=1] + %tmp567 = icmp eq i32 %eh_selector.12734.1, %eh_typeid565 ; <i1> [#uses=1] + br i1 %tmp567, label %eh_then568, label %eh_else582 + +eh_then568: ; preds = %eh_else564 + %tmp571 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else582: ; preds = %eh_else564 + %eh_typeid583 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a017 to i8*) ) ; <i32> [#uses=1] + %tmp585 = icmp eq i32 %eh_selector.12734.1, %eh_typeid583 ; <i1> [#uses=1] + br i1 %tmp585, label %eh_then586, label %eh_else600 + +eh_then586: ; preds = %eh_else582 + %tmp589 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else600: ; preds = %eh_else582 + %eh_typeid601 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a018 to i8*) ) ; <i32> [#uses=1] + %tmp603 = icmp eq i32 %eh_selector.12734.1, %eh_typeid601 ; <i1> [#uses=1] + br i1 %tmp603, label %eh_then604, label %eh_else618 + +eh_then604: ; preds = %eh_else600 + %tmp607 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else618: ; preds = %eh_else600 + %eh_typeid619 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a019 to i8*) ) ; <i32> [#uses=1] + %tmp621 = icmp eq i32 %eh_selector.12734.1, %eh_typeid619 ; <i1> [#uses=1] + br i1 %tmp621, label %eh_then622, label %eh_else636 + +eh_then622: ; preds = %eh_else618 + %tmp625 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else636: ; preds = %eh_else618 + %eh_typeid637 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a020 to i8*) ) ; <i32> [#uses=1] + %tmp639 = icmp eq i32 %eh_selector.12734.1, %eh_typeid637 ; <i1> [#uses=1] + br i1 %tmp639, label %eh_then640, label %eh_else654 + +eh_then640: ; preds = %eh_else636 + %tmp643 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else654: ; preds = %eh_else636 + %eh_typeid655 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a021 to i8*) ) ; <i32> [#uses=1] + %tmp657 = icmp eq i32 %eh_selector.12734.1, %eh_typeid655 ; <i1> [#uses=1] + br i1 %tmp657, label %eh_then658, label %eh_else672 + +eh_then658: ; preds = %eh_else654 + %tmp661 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else672: ; preds = %eh_else654 + %eh_typeid673 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a022 to i8*) ) ; <i32> [#uses=1] + %tmp675 = icmp eq i32 %eh_selector.12734.1, %eh_typeid673 ; <i1> [#uses=1] + br i1 %tmp675, label %eh_then676, label %eh_else690 + +eh_then676: ; preds = %eh_else672 + %tmp679 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else690: ; preds = %eh_else672 + %eh_typeid691 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a023 to i8*) ) ; <i32> [#uses=1] + %tmp693 = icmp eq i32 %eh_selector.12734.1, %eh_typeid691 ; <i1> [#uses=1] + br i1 %tmp693, label %eh_then694, label %eh_else708 + +eh_then694: ; preds = %eh_else690 + %tmp697 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else708: ; preds = %eh_else690 + %eh_typeid709 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a024 to i8*) ) ; <i32> [#uses=1] + %tmp711 = icmp eq i32 %eh_selector.12734.1, %eh_typeid709 ; <i1> [#uses=1] + br i1 %tmp711, label %eh_then712, label %eh_else726 + +eh_then712: ; preds = %eh_else708 + %tmp715 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else726: ; preds = %eh_else708 + %eh_typeid727 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a025 to i8*) ) ; <i32> [#uses=1] + %tmp729 = icmp eq i32 %eh_selector.12734.1, %eh_typeid727 ; <i1> [#uses=1] + br i1 %tmp729, label %eh_then730, label %eh_else744 + +eh_then730: ; preds = %eh_else726 + %tmp733 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else744: ; preds = %eh_else726 + %eh_typeid745 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a026 to i8*) ) ; <i32> [#uses=1] + %tmp747 = icmp eq i32 %eh_selector.12734.1, %eh_typeid745 ; <i1> [#uses=1] + br i1 %tmp747, label %eh_then748, label %eh_else762 + +eh_then748: ; preds = %eh_else744 + %tmp751 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else762: ; preds = %eh_else744 + %eh_typeid763 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a027 to i8*) ) ; <i32> [#uses=1] + %tmp765 = icmp eq i32 %eh_selector.12734.1, %eh_typeid763 ; <i1> [#uses=1] + br i1 %tmp765, label %eh_then766, label %eh_else780 + +eh_then766: ; preds = %eh_else762 + %tmp769 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else780: ; preds = %eh_else762 + %eh_typeid781 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a028 to i8*) ) ; <i32> [#uses=1] + %tmp783 = icmp eq i32 %eh_selector.12734.1, %eh_typeid781 ; <i1> [#uses=1] + br i1 %tmp783, label %eh_then784, label %eh_else798 + +eh_then784: ; preds = %eh_else780 + %tmp787 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else798: ; preds = %eh_else780 + %eh_typeid799 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a029 to i8*) ) ; <i32> [#uses=1] + %tmp801 = icmp eq i32 %eh_selector.12734.1, %eh_typeid799 ; <i1> [#uses=1] + br i1 %tmp801, label %eh_then802, label %eh_else816 + +eh_then802: ; preds = %eh_else798 + %tmp805 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else816: ; preds = %eh_else798 + %eh_typeid817 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a030 to i8*) ) ; <i32> [#uses=1] + %tmp819 = icmp eq i32 %eh_selector.12734.1, %eh_typeid817 ; <i1> [#uses=1] + br i1 %tmp819, label %eh_then820, label %eh_else834 + +eh_then820: ; preds = %eh_else816 + %tmp823 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else834: ; preds = %eh_else816 + %eh_typeid835 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a031 to i8*) ) ; <i32> [#uses=1] + %tmp837 = icmp eq i32 %eh_selector.12734.1, %eh_typeid835 ; <i1> [#uses=1] + br i1 %tmp837, label %eh_then838, label %eh_else852 + +eh_then838: ; preds = %eh_else834 + %tmp841 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else852: ; preds = %eh_else834 + %eh_typeid853 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a032 to i8*) ) ; <i32> [#uses=1] + %tmp855 = icmp eq i32 %eh_selector.12734.1, %eh_typeid853 ; <i1> [#uses=1] + br i1 %tmp855, label %eh_then856, label %eh_else870 + +eh_then856: ; preds = %eh_else852 + %tmp859 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else870: ; preds = %eh_else852 + %eh_typeid871 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a033 to i8*) ) ; <i32> [#uses=1] + %tmp873 = icmp eq i32 %eh_selector.12734.1, %eh_typeid871 ; <i1> [#uses=1] + br i1 %tmp873, label %eh_then874, label %eh_else888 + +eh_then874: ; preds = %eh_else870 + %tmp877 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else888: ; preds = %eh_else870 + %eh_typeid889 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a034 to i8*) ) ; <i32> [#uses=1] + %tmp891 = icmp eq i32 %eh_selector.12734.1, %eh_typeid889 ; <i1> [#uses=1] + br i1 %tmp891, label %eh_then892, label %eh_else906 + +eh_then892: ; preds = %eh_else888 + %tmp895 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else906: ; preds = %eh_else888 + %eh_typeid907 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a035 to i8*) ) ; <i32> [#uses=1] + %tmp909 = icmp eq i32 %eh_selector.12734.1, %eh_typeid907 ; <i1> [#uses=1] + br i1 %tmp909, label %eh_then910, label %eh_else924 + +eh_then910: ; preds = %eh_else906 + %tmp913 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else924: ; preds = %eh_else906 + %eh_typeid925 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a036 to i8*) ) ; <i32> [#uses=1] + %tmp927 = icmp eq i32 %eh_selector.12734.1, %eh_typeid925 ; <i1> [#uses=1] + br i1 %tmp927, label %eh_then928, label %eh_else942 + +eh_then928: ; preds = %eh_else924 + %tmp931 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else942: ; preds = %eh_else924 + %eh_typeid943 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a037 to i8*) ) ; <i32> [#uses=1] + %tmp945 = icmp eq i32 %eh_selector.12734.1, %eh_typeid943 ; <i1> [#uses=1] + br i1 %tmp945, label %eh_then946, label %eh_else960 + +eh_then946: ; preds = %eh_else942 + %tmp949 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else960: ; preds = %eh_else942 + %eh_typeid961 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a038 to i8*) ) ; <i32> [#uses=1] + %tmp963 = icmp eq i32 %eh_selector.12734.1, %eh_typeid961 ; <i1> [#uses=1] + br i1 %tmp963, label %eh_then964, label %eh_else978 + +eh_then964: ; preds = %eh_else960 + %tmp967 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else978: ; preds = %eh_else960 + %eh_typeid979 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a039 to i8*) ) ; <i32> [#uses=1] + %tmp981 = icmp eq i32 %eh_selector.12734.1, %eh_typeid979 ; <i1> [#uses=1] + br i1 %tmp981, label %eh_then982, label %eh_else996 + +eh_then982: ; preds = %eh_else978 + %tmp985 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else996: ; preds = %eh_else978 + %eh_typeid997 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a040 to i8*) ) ; <i32> [#uses=1] + %tmp999 = icmp eq i32 %eh_selector.12734.1, %eh_typeid997 ; <i1> [#uses=1] + br i1 %tmp999, label %eh_then1000, label %eh_else1014 + +eh_then1000: ; preds = %eh_else996 + %tmp1003 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1014: ; preds = %eh_else996 + %eh_typeid1015 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a041 to i8*) ) ; <i32> [#uses=1] + %tmp1017 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1015 ; <i1> [#uses=1] + br i1 %tmp1017, label %eh_then1018, label %eh_else1032 + +eh_then1018: ; preds = %eh_else1014 + %tmp1021 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1032: ; preds = %eh_else1014 + %eh_typeid1033 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a042 to i8*) ) ; <i32> [#uses=1] + %tmp1035 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1033 ; <i1> [#uses=1] + br i1 %tmp1035, label %eh_then1036, label %eh_else1050 + +eh_then1036: ; preds = %eh_else1032 + %tmp1039 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1050: ; preds = %eh_else1032 + %eh_typeid1051 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a043 to i8*) ) ; <i32> [#uses=1] + %tmp1053 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1051 ; <i1> [#uses=1] + br i1 %tmp1053, label %eh_then1054, label %eh_else1068 + +eh_then1054: ; preds = %eh_else1050 + %tmp1057 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1068: ; preds = %eh_else1050 + %eh_typeid1069 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a044 to i8*) ) ; <i32> [#uses=1] + %tmp1071 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1069 ; <i1> [#uses=1] + br i1 %tmp1071, label %eh_then1072, label %eh_else1086 + +eh_then1072: ; preds = %eh_else1068 + %tmp1075 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1086: ; preds = %eh_else1068 + %eh_typeid1087 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a045 to i8*) ) ; <i32> [#uses=1] + %tmp1089 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1087 ; <i1> [#uses=1] + br i1 %tmp1089, label %eh_then1090, label %eh_else1104 + +eh_then1090: ; preds = %eh_else1086 + %tmp1093 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1104: ; preds = %eh_else1086 + %eh_typeid1105 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a046 to i8*) ) ; <i32> [#uses=1] + %tmp1107 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1105 ; <i1> [#uses=1] + br i1 %tmp1107, label %eh_then1108, label %eh_else1122 + +eh_then1108: ; preds = %eh_else1104 + %tmp1111 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1122: ; preds = %eh_else1104 + %eh_typeid1123 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a047 to i8*) ) ; <i32> [#uses=1] + %tmp1125 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1123 ; <i1> [#uses=1] + br i1 %tmp1125, label %eh_then1126, label %eh_else1140 + +eh_then1126: ; preds = %eh_else1122 + %tmp1129 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1140: ; preds = %eh_else1122 + %eh_typeid1141 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a048 to i8*) ) ; <i32> [#uses=1] + %tmp1143 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1141 ; <i1> [#uses=1] + br i1 %tmp1143, label %eh_then1144, label %eh_else1158 + +eh_then1144: ; preds = %eh_else1140 + %tmp1147 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1158: ; preds = %eh_else1140 + %eh_typeid1159 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a049 to i8*) ) ; <i32> [#uses=1] + %tmp1161 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1159 ; <i1> [#uses=1] + br i1 %tmp1161, label %eh_then1162, label %eh_else1176 + +eh_then1162: ; preds = %eh_else1158 + %tmp1165 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1176: ; preds = %eh_else1158 + %eh_typeid1177 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a050 to i8*) ) ; <i32> [#uses=1] + %tmp1179 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1177 ; <i1> [#uses=1] + br i1 %tmp1179, label %eh_then1180, label %eh_else1194 + +eh_then1180: ; preds = %eh_else1176 + %tmp1183 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1194: ; preds = %eh_else1176 + %eh_typeid1195 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a051 to i8*) ) ; <i32> [#uses=1] + %tmp1197 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1195 ; <i1> [#uses=1] + br i1 %tmp1197, label %eh_then1198, label %eh_else1212 + +eh_then1198: ; preds = %eh_else1194 + %tmp1201 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1212: ; preds = %eh_else1194 + %eh_typeid1213 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a052 to i8*) ) ; <i32> [#uses=1] + %tmp1215 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1213 ; <i1> [#uses=1] + br i1 %tmp1215, label %eh_then1216, label %eh_else1230 + +eh_then1216: ; preds = %eh_else1212 + %tmp1219 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1230: ; preds = %eh_else1212 + %eh_typeid1231 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a053 to i8*) ) ; <i32> [#uses=1] + %tmp1233 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1231 ; <i1> [#uses=1] + br i1 %tmp1233, label %eh_then1234, label %eh_else1248 + +eh_then1234: ; preds = %eh_else1230 + %tmp1237 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1248: ; preds = %eh_else1230 + %eh_typeid1249 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a054 to i8*) ) ; <i32> [#uses=1] + %tmp1251 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1249 ; <i1> [#uses=1] + br i1 %tmp1251, label %eh_then1252, label %eh_else1266 + +eh_then1252: ; preds = %eh_else1248 + %tmp1255 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1266: ; preds = %eh_else1248 + %eh_typeid1267 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a055 to i8*) ) ; <i32> [#uses=1] + %tmp1269 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1267 ; <i1> [#uses=1] + br i1 %tmp1269, label %eh_then1270, label %eh_else1284 + +eh_then1270: ; preds = %eh_else1266 + %tmp1273 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1284: ; preds = %eh_else1266 + %eh_typeid1285 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a056 to i8*) ) ; <i32> [#uses=1] + %tmp1287 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1285 ; <i1> [#uses=1] + br i1 %tmp1287, label %eh_then1288, label %eh_else1302 + +eh_then1288: ; preds = %eh_else1284 + %tmp1291 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1302: ; preds = %eh_else1284 + %eh_typeid1303 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a057 to i8*) ) ; <i32> [#uses=1] + %tmp1305 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1303 ; <i1> [#uses=1] + br i1 %tmp1305, label %eh_then1306, label %eh_else1320 + +eh_then1306: ; preds = %eh_else1302 + %tmp1309 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1320: ; preds = %eh_else1302 + %eh_typeid1321 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a058 to i8*) ) ; <i32> [#uses=1] + %tmp1323 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1321 ; <i1> [#uses=1] + br i1 %tmp1323, label %eh_then1324, label %eh_else1338 + +eh_then1324: ; preds = %eh_else1320 + %tmp1327 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1338: ; preds = %eh_else1320 + %eh_typeid1339 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a059 to i8*) ) ; <i32> [#uses=1] + %tmp1341 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1339 ; <i1> [#uses=1] + br i1 %tmp1341, label %eh_then1342, label %eh_else1356 + +eh_then1342: ; preds = %eh_else1338 + %tmp1345 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1356: ; preds = %eh_else1338 + %eh_typeid1357 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a060 to i8*) ) ; <i32> [#uses=1] + %tmp1359 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1357 ; <i1> [#uses=1] + br i1 %tmp1359, label %eh_then1360, label %eh_else1374 + +eh_then1360: ; preds = %eh_else1356 + %tmp1363 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1374: ; preds = %eh_else1356 + %eh_typeid1375 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a061 to i8*) ) ; <i32> [#uses=1] + %tmp1377 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1375 ; <i1> [#uses=1] + br i1 %tmp1377, label %eh_then1378, label %eh_else1392 + +eh_then1378: ; preds = %eh_else1374 + %tmp1381 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1392: ; preds = %eh_else1374 + %eh_typeid1393 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a062 to i8*) ) ; <i32> [#uses=1] + %tmp1395 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1393 ; <i1> [#uses=1] + br i1 %tmp1395, label %eh_then1396, label %eh_else1410 + +eh_then1396: ; preds = %eh_else1392 + %tmp1399 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1410: ; preds = %eh_else1392 + %eh_typeid1411 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a063 to i8*) ) ; <i32> [#uses=1] + %tmp1413 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1411 ; <i1> [#uses=1] + br i1 %tmp1413, label %eh_then1414, label %eh_else1428 + +eh_then1414: ; preds = %eh_else1410 + %tmp1417 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1428: ; preds = %eh_else1410 + %eh_typeid1429 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a064 to i8*) ) ; <i32> [#uses=1] + %tmp1431 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1429 ; <i1> [#uses=1] + br i1 %tmp1431, label %eh_then1432, label %eh_else1446 + +eh_then1432: ; preds = %eh_else1428 + %tmp1435 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1446: ; preds = %eh_else1428 + %eh_typeid1447 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a065 to i8*) ) ; <i32> [#uses=1] + %tmp1449 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1447 ; <i1> [#uses=1] + br i1 %tmp1449, label %eh_then1450, label %eh_else1464 + +eh_then1450: ; preds = %eh_else1446 + %tmp1453 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1464: ; preds = %eh_else1446 + %eh_typeid1465 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a066 to i8*) ) ; <i32> [#uses=1] + %tmp1467 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1465 ; <i1> [#uses=1] + br i1 %tmp1467, label %eh_then1468, label %eh_else1482 + +eh_then1468: ; preds = %eh_else1464 + %tmp1471 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1482: ; preds = %eh_else1464 + %eh_typeid1483 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a067 to i8*) ) ; <i32> [#uses=1] + %tmp1485 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1483 ; <i1> [#uses=1] + br i1 %tmp1485, label %eh_then1486, label %eh_else1500 + +eh_then1486: ; preds = %eh_else1482 + %tmp1489 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1500: ; preds = %eh_else1482 + %eh_typeid1501 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a068 to i8*) ) ; <i32> [#uses=1] + %tmp1503 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1501 ; <i1> [#uses=1] + br i1 %tmp1503, label %eh_then1504, label %eh_else1518 + +eh_then1504: ; preds = %eh_else1500 + %tmp1507 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1518: ; preds = %eh_else1500 + %eh_typeid1519 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a069 to i8*) ) ; <i32> [#uses=1] + %tmp1521 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1519 ; <i1> [#uses=1] + br i1 %tmp1521, label %eh_then1522, label %eh_else1536 + +eh_then1522: ; preds = %eh_else1518 + %tmp1525 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1536: ; preds = %eh_else1518 + %eh_typeid1537 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a070 to i8*) ) ; <i32> [#uses=1] + %tmp1539 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1537 ; <i1> [#uses=1] + br i1 %tmp1539, label %eh_then1540, label %eh_else1554 + +eh_then1540: ; preds = %eh_else1536 + %tmp1543 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1554: ; preds = %eh_else1536 + %eh_typeid1555 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a071 to i8*) ) ; <i32> [#uses=1] + %tmp1557 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1555 ; <i1> [#uses=1] + br i1 %tmp1557, label %eh_then1558, label %eh_else1572 + +eh_then1558: ; preds = %eh_else1554 + %tmp1561 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1572: ; preds = %eh_else1554 + %eh_typeid1573 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a072 to i8*) ) ; <i32> [#uses=1] + %tmp1575 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1573 ; <i1> [#uses=1] + br i1 %tmp1575, label %eh_then1576, label %eh_else1590 + +eh_then1576: ; preds = %eh_else1572 + %tmp1579 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1590: ; preds = %eh_else1572 + %eh_typeid1591 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a073 to i8*) ) ; <i32> [#uses=1] + %tmp1593 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1591 ; <i1> [#uses=1] + br i1 %tmp1593, label %eh_then1594, label %eh_else1608 + +eh_then1594: ; preds = %eh_else1590 + %tmp1597 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1608: ; preds = %eh_else1590 + %eh_typeid1609 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a074 to i8*) ) ; <i32> [#uses=1] + %tmp1611 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1609 ; <i1> [#uses=1] + br i1 %tmp1611, label %eh_then1612, label %eh_else1626 + +eh_then1612: ; preds = %eh_else1608 + %tmp1615 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1626: ; preds = %eh_else1608 + %eh_typeid1627 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a075 to i8*) ) ; <i32> [#uses=1] + %tmp1629 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1627 ; <i1> [#uses=1] + br i1 %tmp1629, label %eh_then1630, label %eh_else1644 + +eh_then1630: ; preds = %eh_else1626 + %tmp1633 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1644: ; preds = %eh_else1626 + %eh_typeid1645 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a076 to i8*) ) ; <i32> [#uses=1] + %tmp1647 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1645 ; <i1> [#uses=1] + br i1 %tmp1647, label %eh_then1648, label %eh_else1662 + +eh_then1648: ; preds = %eh_else1644 + %tmp1651 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1662: ; preds = %eh_else1644 + %eh_typeid1663 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a077 to i8*) ) ; <i32> [#uses=1] + %tmp1665 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1663 ; <i1> [#uses=1] + br i1 %tmp1665, label %eh_then1666, label %eh_else1680 + +eh_then1666: ; preds = %eh_else1662 + %tmp1669 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1680: ; preds = %eh_else1662 + %eh_typeid1681 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a078 to i8*) ) ; <i32> [#uses=1] + %tmp1683 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1681 ; <i1> [#uses=1] + br i1 %tmp1683, label %eh_then1684, label %eh_else1698 + +eh_then1684: ; preds = %eh_else1680 + %tmp1687 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1698: ; preds = %eh_else1680 + %eh_typeid1699 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a079 to i8*) ) ; <i32> [#uses=1] + %tmp1701 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1699 ; <i1> [#uses=1] + br i1 %tmp1701, label %eh_then1702, label %eh_else1716 + +eh_then1702: ; preds = %eh_else1698 + %tmp1705 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1716: ; preds = %eh_else1698 + %eh_typeid1717 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a080 to i8*) ) ; <i32> [#uses=1] + %tmp1719 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1717 ; <i1> [#uses=1] + br i1 %tmp1719, label %eh_then1720, label %eh_else1734 + +eh_then1720: ; preds = %eh_else1716 + %tmp1723 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1734: ; preds = %eh_else1716 + %eh_typeid1735 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a081 to i8*) ) ; <i32> [#uses=1] + %tmp1737 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1735 ; <i1> [#uses=1] + br i1 %tmp1737, label %eh_then1738, label %eh_else1752 + +eh_then1738: ; preds = %eh_else1734 + %tmp1741 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1752: ; preds = %eh_else1734 + %eh_typeid1753 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a082 to i8*) ) ; <i32> [#uses=1] + %tmp1755 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1753 ; <i1> [#uses=1] + br i1 %tmp1755, label %eh_then1756, label %eh_else1770 + +eh_then1756: ; preds = %eh_else1752 + %tmp1759 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1770: ; preds = %eh_else1752 + %eh_typeid1771 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a083 to i8*) ) ; <i32> [#uses=1] + %tmp1773 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1771 ; <i1> [#uses=1] + br i1 %tmp1773, label %eh_then1774, label %eh_else1788 + +eh_then1774: ; preds = %eh_else1770 + %tmp1777 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1788: ; preds = %eh_else1770 + %eh_typeid1789 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a084 to i8*) ) ; <i32> [#uses=1] + %tmp1791 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1789 ; <i1> [#uses=1] + br i1 %tmp1791, label %eh_then1792, label %eh_else1806 + +eh_then1792: ; preds = %eh_else1788 + %tmp1795 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1806: ; preds = %eh_else1788 + %eh_typeid1807 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a085 to i8*) ) ; <i32> [#uses=1] + %tmp1809 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1807 ; <i1> [#uses=1] + br i1 %tmp1809, label %eh_then1810, label %eh_else1824 + +eh_then1810: ; preds = %eh_else1806 + %tmp1813 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1824: ; preds = %eh_else1806 + %eh_typeid1825 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a086 to i8*) ) ; <i32> [#uses=1] + %tmp1827 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1825 ; <i1> [#uses=1] + br i1 %tmp1827, label %eh_then1828, label %eh_else1842 + +eh_then1828: ; preds = %eh_else1824 + %tmp1831 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1842: ; preds = %eh_else1824 + %eh_typeid1843 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a087 to i8*) ) ; <i32> [#uses=1] + %tmp1845 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1843 ; <i1> [#uses=1] + br i1 %tmp1845, label %eh_then1846, label %eh_else1860 + +eh_then1846: ; preds = %eh_else1842 + %tmp1849 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1860: ; preds = %eh_else1842 + %eh_typeid1861 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a088 to i8*) ) ; <i32> [#uses=1] + %tmp1863 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1861 ; <i1> [#uses=1] + br i1 %tmp1863, label %eh_then1864, label %eh_else1878 + +eh_then1864: ; preds = %eh_else1860 + %tmp1867 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1878: ; preds = %eh_else1860 + %eh_typeid1879 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a089 to i8*) ) ; <i32> [#uses=1] + %tmp1881 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1879 ; <i1> [#uses=1] + br i1 %tmp1881, label %eh_then1882, label %eh_else1896 + +eh_then1882: ; preds = %eh_else1878 + %tmp1885 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1896: ; preds = %eh_else1878 + %eh_typeid1897 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a090 to i8*) ) ; <i32> [#uses=1] + %tmp1899 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1897 ; <i1> [#uses=1] + br i1 %tmp1899, label %eh_then1900, label %eh_else1914 + +eh_then1900: ; preds = %eh_else1896 + %tmp1903 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1914: ; preds = %eh_else1896 + %eh_typeid1915 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a091 to i8*) ) ; <i32> [#uses=1] + %tmp1917 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1915 ; <i1> [#uses=1] + br i1 %tmp1917, label %eh_then1918, label %eh_else1932 + +eh_then1918: ; preds = %eh_else1914 + %tmp1921 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1932: ; preds = %eh_else1914 + %eh_typeid1933 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a092 to i8*) ) ; <i32> [#uses=1] + %tmp1935 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1933 ; <i1> [#uses=1] + br i1 %tmp1935, label %eh_then1936, label %eh_else1950 + +eh_then1936: ; preds = %eh_else1932 + %tmp1939 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1950: ; preds = %eh_else1932 + %eh_typeid1951 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a093 to i8*) ) ; <i32> [#uses=1] + %tmp1953 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1951 ; <i1> [#uses=1] + br i1 %tmp1953, label %eh_then1954, label %eh_else1968 + +eh_then1954: ; preds = %eh_else1950 + %tmp1957 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1968: ; preds = %eh_else1950 + %eh_typeid1969 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a094 to i8*) ) ; <i32> [#uses=1] + %tmp1971 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1969 ; <i1> [#uses=1] + br i1 %tmp1971, label %eh_then1972, label %eh_else1986 + +eh_then1972: ; preds = %eh_else1968 + %tmp1975 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else1986: ; preds = %eh_else1968 + %eh_typeid1987 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a095 to i8*) ) ; <i32> [#uses=1] + %tmp1989 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1987 ; <i1> [#uses=1] + br i1 %tmp1989, label %eh_then1990, label %eh_else2004 + +eh_then1990: ; preds = %eh_else1986 + %tmp1993 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2004: ; preds = %eh_else1986 + %eh_typeid2005 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a096 to i8*) ) ; <i32> [#uses=1] + %tmp2007 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2005 ; <i1> [#uses=1] + br i1 %tmp2007, label %eh_then2008, label %eh_else2022 + +eh_then2008: ; preds = %eh_else2004 + %tmp2011 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2022: ; preds = %eh_else2004 + %eh_typeid2023 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a097 to i8*) ) ; <i32> [#uses=1] + %tmp2025 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2023 ; <i1> [#uses=1] + br i1 %tmp2025, label %eh_then2026, label %eh_else2040 + +eh_then2026: ; preds = %eh_else2022 + %tmp2029 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2040: ; preds = %eh_else2022 + %eh_typeid2041 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a098 to i8*) ) ; <i32> [#uses=1] + %tmp2043 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2041 ; <i1> [#uses=1] + br i1 %tmp2043, label %eh_then2044, label %eh_else2058 + +eh_then2044: ; preds = %eh_else2040 + %tmp2047 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2058: ; preds = %eh_else2040 + %eh_typeid2059 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a099 to i8*) ) ; <i32> [#uses=1] + %tmp2061 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2059 ; <i1> [#uses=1] + br i1 %tmp2061, label %eh_then2062, label %eh_else2076 + +eh_then2062: ; preds = %eh_else2058 + %tmp2065 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2076: ; preds = %eh_else2058 + %eh_typeid2077 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a100 to i8*) ) ; <i32> [#uses=1] + %tmp2079 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2077 ; <i1> [#uses=1] + br i1 %tmp2079, label %eh_then2080, label %eh_else2094 + +eh_then2080: ; preds = %eh_else2076 + %tmp2083 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2094: ; preds = %eh_else2076 + %eh_typeid2095 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a101 to i8*) ) ; <i32> [#uses=1] + %tmp2097 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2095 ; <i1> [#uses=1] + br i1 %tmp2097, label %eh_then2098, label %eh_else2112 + +eh_then2098: ; preds = %eh_else2094 + %tmp2101 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2112: ; preds = %eh_else2094 + %eh_typeid2113 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a102 to i8*) ) ; <i32> [#uses=1] + %tmp2115 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2113 ; <i1> [#uses=1] + br i1 %tmp2115, label %eh_then2116, label %eh_else2130 + +eh_then2116: ; preds = %eh_else2112 + %tmp2119 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2130: ; preds = %eh_else2112 + %eh_typeid2131 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a103 to i8*) ) ; <i32> [#uses=1] + %tmp2133 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2131 ; <i1> [#uses=1] + br i1 %tmp2133, label %eh_then2134, label %eh_else2148 + +eh_then2134: ; preds = %eh_else2130 + %tmp2137 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2148: ; preds = %eh_else2130 + %eh_typeid2149 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a104 to i8*) ) ; <i32> [#uses=1] + %tmp2151 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2149 ; <i1> [#uses=1] + br i1 %tmp2151, label %eh_then2152, label %eh_else2166 + +eh_then2152: ; preds = %eh_else2148 + %tmp2155 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2166: ; preds = %eh_else2148 + %eh_typeid2167 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a105 to i8*) ) ; <i32> [#uses=1] + %tmp2169 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2167 ; <i1> [#uses=1] + br i1 %tmp2169, label %eh_then2170, label %eh_else2184 + +eh_then2170: ; preds = %eh_else2166 + %tmp2173 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2184: ; preds = %eh_else2166 + %eh_typeid2185 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a106 to i8*) ) ; <i32> [#uses=1] + %tmp2187 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2185 ; <i1> [#uses=1] + br i1 %tmp2187, label %eh_then2188, label %eh_else2202 + +eh_then2188: ; preds = %eh_else2184 + %tmp2191 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2202: ; preds = %eh_else2184 + %eh_typeid2203 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a107 to i8*) ) ; <i32> [#uses=1] + %tmp2205 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2203 ; <i1> [#uses=1] + br i1 %tmp2205, label %eh_then2206, label %eh_else2220 + +eh_then2206: ; preds = %eh_else2202 + %tmp2209 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2220: ; preds = %eh_else2202 + %eh_typeid2221 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a108 to i8*) ) ; <i32> [#uses=1] + %tmp2223 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2221 ; <i1> [#uses=1] + br i1 %tmp2223, label %eh_then2224, label %eh_else2238 + +eh_then2224: ; preds = %eh_else2220 + %tmp2227 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2238: ; preds = %eh_else2220 + %eh_typeid2239 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a109 to i8*) ) ; <i32> [#uses=1] + %tmp2241 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2239 ; <i1> [#uses=1] + br i1 %tmp2241, label %eh_then2242, label %eh_else2256 + +eh_then2242: ; preds = %eh_else2238 + %tmp2245 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2256: ; preds = %eh_else2238 + %eh_typeid2257 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a110 to i8*) ) ; <i32> [#uses=1] + %tmp2259 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2257 ; <i1> [#uses=1] + br i1 %tmp2259, label %eh_then2260, label %eh_else2274 + +eh_then2260: ; preds = %eh_else2256 + %tmp2263 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2274: ; preds = %eh_else2256 + %eh_typeid2275 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a111 to i8*) ) ; <i32> [#uses=1] + %tmp2277 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2275 ; <i1> [#uses=1] + br i1 %tmp2277, label %eh_then2278, label %eh_else2292 + +eh_then2278: ; preds = %eh_else2274 + %tmp2281 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2292: ; preds = %eh_else2274 + %eh_typeid2293 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a112 to i8*) ) ; <i32> [#uses=1] + %tmp2295 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2293 ; <i1> [#uses=1] + br i1 %tmp2295, label %eh_then2296, label %eh_else2310 + +eh_then2296: ; preds = %eh_else2292 + %tmp2299 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2310: ; preds = %eh_else2292 + %eh_typeid2311 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a113 to i8*) ) ; <i32> [#uses=1] + %tmp2313 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2311 ; <i1> [#uses=1] + br i1 %tmp2313, label %eh_then2314, label %eh_else2328 + +eh_then2314: ; preds = %eh_else2310 + %tmp2317 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2328: ; preds = %eh_else2310 + %eh_typeid2329 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a114 to i8*) ) ; <i32> [#uses=1] + %tmp2331 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2329 ; <i1> [#uses=1] + br i1 %tmp2331, label %eh_then2332, label %eh_else2346 + +eh_then2332: ; preds = %eh_else2328 + %tmp2335 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2346: ; preds = %eh_else2328 + %eh_typeid2347 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a115 to i8*) ) ; <i32> [#uses=1] + %tmp2349 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2347 ; <i1> [#uses=1] + br i1 %tmp2349, label %eh_then2350, label %eh_else2364 + +eh_then2350: ; preds = %eh_else2346 + %tmp2353 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2364: ; preds = %eh_else2346 + %eh_typeid2365 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a116 to i8*) ) ; <i32> [#uses=1] + %tmp2367 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2365 ; <i1> [#uses=1] + br i1 %tmp2367, label %eh_then2368, label %eh_else2382 + +eh_then2368: ; preds = %eh_else2364 + %tmp2371 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2382: ; preds = %eh_else2364 + %eh_typeid2383 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a117 to i8*) ) ; <i32> [#uses=1] + %tmp2385 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2383 ; <i1> [#uses=1] + br i1 %tmp2385, label %eh_then2386, label %eh_else2400 + +eh_then2386: ; preds = %eh_else2382 + %tmp2389 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2400: ; preds = %eh_else2382 + %eh_typeid2401 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a118 to i8*) ) ; <i32> [#uses=1] + %tmp2403 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2401 ; <i1> [#uses=1] + br i1 %tmp2403, label %eh_then2404, label %eh_else2418 + +eh_then2404: ; preds = %eh_else2400 + %tmp2407 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2418: ; preds = %eh_else2400 + %eh_typeid2419 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a119 to i8*) ) ; <i32> [#uses=1] + %tmp2421 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2419 ; <i1> [#uses=1] + br i1 %tmp2421, label %eh_then2422, label %eh_else2436 + +eh_then2422: ; preds = %eh_else2418 + %tmp2425 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2436: ; preds = %eh_else2418 + %eh_typeid2437 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a120 to i8*) ) ; <i32> [#uses=1] + %tmp2439 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2437 ; <i1> [#uses=1] + br i1 %tmp2439, label %eh_then2440, label %eh_else2454 + +eh_then2440: ; preds = %eh_else2436 + %tmp2443 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2454: ; preds = %eh_else2436 + %eh_typeid2455 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a121 to i8*) ) ; <i32> [#uses=1] + %tmp2457 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2455 ; <i1> [#uses=1] + br i1 %tmp2457, label %eh_then2458, label %eh_else2472 + +eh_then2458: ; preds = %eh_else2454 + %tmp2461 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2472: ; preds = %eh_else2454 + %eh_typeid2473 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a122 to i8*) ) ; <i32> [#uses=1] + %tmp2475 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2473 ; <i1> [#uses=1] + br i1 %tmp2475, label %eh_then2476, label %eh_else2490 + +eh_then2476: ; preds = %eh_else2472 + %tmp2479 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2490: ; preds = %eh_else2472 + %eh_typeid2491 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a123 to i8*) ) ; <i32> [#uses=1] + %tmp2493 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2491 ; <i1> [#uses=1] + br i1 %tmp2493, label %eh_then2494, label %eh_else2508 + +eh_then2494: ; preds = %eh_else2490 + %tmp2497 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2508: ; preds = %eh_else2490 + %eh_typeid2509 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a124 to i8*) ) ; <i32> [#uses=1] + %tmp2511 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2509 ; <i1> [#uses=1] + br i1 %tmp2511, label %eh_then2512, label %eh_else2526 + +eh_then2512: ; preds = %eh_else2508 + %tmp2515 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2526: ; preds = %eh_else2508 + %eh_typeid2527 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a125 to i8*) ) ; <i32> [#uses=1] + %tmp2529 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2527 ; <i1> [#uses=1] + br i1 %tmp2529, label %eh_then2530, label %eh_else2544 + +eh_then2530: ; preds = %eh_else2526 + %tmp2533 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2544: ; preds = %eh_else2526 + %eh_typeid2545 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a126 to i8*) ) ; <i32> [#uses=1] + %tmp2547 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2545 ; <i1> [#uses=1] + br i1 %tmp2547, label %eh_then2548, label %eh_else2562 + +eh_then2548: ; preds = %eh_else2544 + %tmp2551 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2562: ; preds = %eh_else2544 + %eh_typeid2563 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a127 to i8*) ) ; <i32> [#uses=1] + %tmp2565 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2563 ; <i1> [#uses=1] + br i1 %tmp2565, label %eh_then2566, label %eh_else2580 + +eh_then2566: ; preds = %eh_else2562 + %tmp2569 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +eh_else2580: ; preds = %eh_else2562 + %eh_typeid2581 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a128 to i8*) ) ; <i32> [#uses=1] + %tmp2583 = icmp eq i32 %eh_selector.12734.1, %eh_typeid2581 ; <i1> [#uses=1] + br i1 %tmp2583, label %eh_then2584, label %Unwind + +eh_then2584: ; preds = %eh_else2580 + %tmp2587 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; <i8*> [#uses=0] + tail call void @__cxa_end_catch( ) + ret void + +Unwind: ; preds = %eh_else2580 + tail call i32 (...)* @_Unwind_Resume( i8* %eh_exception.12604.1 ) ; <i32>:0 [#uses=0] + unreachable + +UnifiedUnreachableBlock1: ; preds = %filter270, %filter + unreachable + +UnifiedReturnBlock2: ; preds = %entry + ret void +} + +declare i8* @__cxa_begin_catch(i8*) + +declare void @__cxa_end_catch() diff --git a/test/CodeGen/Generic/BasicInstrs.llx b/test/CodeGen/Generic/BasicInstrs.llx new file mode 100644 index 0000000..8260609 --- /dev/null +++ b/test/CodeGen/Generic/BasicInstrs.llx @@ -0,0 +1,54 @@ +; New testcase, this contains a bunch of simple instructions that should be +; handled by a code generator. + +; RUN: llvm-upgrade < %s | llvm-as | llc + +int %add(int %A, int %B) { + %R = add int %A, %B + ret int %R +} + +int %sub(int %A, int %B) { + %R = sub int %A, %B + ret int %R +} + +int %mul(int %A, int %B) { + %R = mul int %A, %B + ret int %R +} + +int %sdiv(int %A, int %B) { + %R = div int %A, %B + ret int %R +} + +uint %udiv(uint %A, uint %B) { + %R = div uint %A, %B + ret uint %R +} + +int %srem(int %A, int %B) { + %R = rem int %A, %B + ret int %R +} + +uint %urem(uint %A, uint %B) { + %R = rem uint %A, %B + ret uint %R +} + +int %and(int %A, int %B) { + %R = and int %A, %B + ret int %R +} + +int %or(int %A, int %B) { + %R = or int %A, %B + ret int %R +} + +int %xor(int %A, int %B) { + %R = xor int %A, %B + ret int %R +} diff --git a/test/CodeGen/Generic/BurgBadRegAlloc.ll b/test/CodeGen/Generic/BurgBadRegAlloc.ll new file mode 100644 index 0000000..af74a81 --- /dev/null +++ b/test/CodeGen/Generic/BurgBadRegAlloc.ll @@ -0,0 +1,831 @@ +; RUN: llvm-upgrade %s | llvm-as | llc + +;; Register allocation is doing a very poor job on this routine from yyparse +;; in Burg: +;; -- at least two long-lived values are being allocated to %o? registers +;; -- even worse, those registers are being saved and restored repeatedly +;; at function calls, even though there are no intervening uses. +;; -- outgoing args of some function calls have to be swapped, causing +;; another write/read from stack to do the exchange (use -dregalloc=y). +;; + %Arity = type %struct.arity* + %Binding = type %struct.binding* + %DeltaCost = type [4 x short] + %Dimension = type %struct.dimension* + %Index_Map = type { int, %Item_Set* } + %IntList = type %struct.intlist* + %Item = type { %DeltaCost, %Rule } + %ItemArray = type %Item* + %Item_Set = type %struct.item_set* + %List = type %struct.list* + %Mapping = type %struct.mapping* + %NonTerminal = type %struct.nonterminal* + %Operator = type %struct.operator* + %Pattern = type %struct.pattern* + %PatternAST = type %struct.patternAST* + %Plank = type %struct.plank* + %PlankMap = type %struct.plankMap* + %ReadFn = type int ()* + %Rule = type %struct.rule* + %RuleAST = type %struct.ruleAST* + %StateMap = type %struct.stateMap* + %StrTableElement = type %struct.strTableElement* + %Symbol = type %struct.symbol* + %Table = type %struct.table* + %YYSTYPE = type { %IntList } + %struct.arity = type { int, %List } + %struct.binding = type { sbyte*, int } + %struct.dimension = type { short*, %Index_Map, %Mapping, int, %PlankMap } + %struct.index_map = type { int, %Item_Set* } + %struct.intlist = type { int, %IntList } + %struct.item = type { %DeltaCost, %Rule } + %struct.item_set = type { int, int, %Operator, [2 x %Item_Set], %Item_Set, short*, %ItemArray, %ItemArray } + %struct.list = type { sbyte*, %List } + %struct.mapping = type { %List*, int, int, int, %Item_Set* } + %struct.nonterminal = type { sbyte*, int, int, int, %PlankMap, %Rule } + %struct.operator = type { sbyte*, uint, int, int, int, int, %Table } + %struct.pattern = type { %NonTerminal, %Operator, [2 x %NonTerminal] } + %struct.patternAST = type { %Symbol, sbyte*, %List } + %struct.plank = type { sbyte*, %List, int } + %struct.plankMap = type { %List, int, %StateMap } + %struct.rule = type { %DeltaCost, int, int, int, %NonTerminal, %Pattern, uint } + %struct.ruleAST = type { sbyte*, %PatternAST, int, %IntList, %Rule, %StrTableElement, %StrTableElement } + %struct.stateMap = type { sbyte*, %Plank, int, short* } + %struct.strTableElement = type { sbyte*, %IntList, sbyte* } + %struct.symbol = type { sbyte*, int, { %Operator } } + %struct.table = type { %Operator, %List, short*, [2 x %Dimension], %Item_Set* } +%yylval = external global %YYSTYPE ; <%YYSTYPE*> [#uses=1] +%yylhs = external global [25 x short] ; <[25 x short]*> [#uses=1] +%yylen = external global [25 x short] ; <[25 x short]*> [#uses=1] +%yydefred = external global [43 x short] ; <[43 x short]*> [#uses=1] +%yydgoto = external global [12 x short] ; <[12 x short]*> [#uses=1] +%yysindex = external global [43 x short] ; <[43 x short]*> [#uses=2] +%yyrindex = external global [43 x short] ; <[43 x short]*> [#uses=1] +%yygindex = external global [12 x short] ; <[12 x short]*> [#uses=1] +%yytable = external global [263 x short] ; <[263 x short]*> [#uses=4] +%yycheck = external global [263 x short] ; <[263 x short]*> [#uses=4] +%yynerrs = external global int ; <int*> [#uses=3] +%yyerrflag = external global int ; <int*> [#uses=6] +%yychar = external global int ; <int*> [#uses=15] +%yyssp = external global short* ; <short**> [#uses=15] +%yyvsp = external global %YYSTYPE* ; <%YYSTYPE**> [#uses=30] +%yyval = external global %YYSTYPE ; <%YYSTYPE*> [#uses=1] +%yyss = external global short* ; <short**> [#uses=3] +%yysslim = external global short* ; <short**> [#uses=3] +%yyvs = external global %YYSTYPE* ; <%YYSTYPE**> [#uses=1] +%.LC01 = external global [13 x sbyte] ; <[13 x sbyte]*> [#uses=1] +%.LC1 = external global [20 x sbyte] ; <[20 x sbyte]*> [#uses=1] + +implementation ; Functions: + +int %yyparse() { +bb0: ; No predecessors! + store int 0, int* %yynerrs + store int 0, int* %yyerrflag + store int -1, int* %yychar + %reg113 = load short** %yyss ; <short*> [#uses=1] + %cond581 = setne short* %reg113, null ; <bool> [#uses=1] + br bool %cond581, label %bb3, label %bb2 + +bb2: ; preds = %bb0 + %reg584 = call int %yygrowstack( ) ; <int> [#uses=1] + %cond584 = setne int %reg584, 0 ; <bool> [#uses=1] + br bool %cond584, label %bb113, label %bb3 + +bb3: ; preds = %bb2, %bb0 + %reg115 = load short** %yyss ; <short*> [#uses=1] + store short* %reg115, short** %yyssp + %reg116 = load %YYSTYPE** %yyvs ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg116, %YYSTYPE** %yyvsp + %reg117 = load short** %yyssp ; <short*> [#uses=1] + store short 0, short* %reg117 + br label %bb4 + +bb4: ; preds = %bb14, %bb15, %bb31, %bb35, %bb102, %bb112, %bb3 + %reg458 = phi uint [ %reg476, %bb112 ], [ 1, %bb102 ], [ %reg458, %bb35 ], [ %cast768, %bb31 ], [ %cast658, %bb15 ], [ %cast658, %bb14 ], [ 0, %bb3 ] ; <uint> [#uses=2] + %reg458-idxcast = cast uint %reg458 to long ; <long> [#uses=3] + %reg594 = getelementptr [43 x short]* %yydefred, long 0, long %reg458-idxcast ; <short*> [#uses=1] + %reg125 = load short* %reg594 ; <short> [#uses=1] + %cast599 = cast short %reg125 to int ; <int> [#uses=2] + %cond600 = setne int %cast599, 0 ; <bool> [#uses=1] + br bool %cond600, label %bb36, label %bb5 + +bb5: ; preds = %bb4 + %reg127 = load int* %yychar ; <int> [#uses=1] + %cond603 = setge int %reg127, 0 ; <bool> [#uses=1] + br bool %cond603, label %bb8, label %bb6 + +bb6: ; preds = %bb5 + %reg607 = call int %yylex( ) ; <int> [#uses=1] + store int %reg607, int* %yychar + %reg129 = load int* %yychar ; <int> [#uses=1] + %cond609 = setge int %reg129, 0 ; <bool> [#uses=1] + br bool %cond609, label %bb8, label %bb7 + +bb7: ; preds = %bb6 + store int 0, int* %yychar + br label %bb8 + +bb8: ; preds = %bb7, %bb6, %bb5 + %reg615 = getelementptr [43 x short]* %yysindex, long 0, long %reg458-idxcast ; <short*> [#uses=1] + %reg137 = load short* %reg615 ; <short> [#uses=1] + %cast620 = cast short %reg137 to int ; <int> [#uses=2] + %cond621 = seteq int %cast620, 0 ; <bool> [#uses=1] + br bool %cond621, label %bb16, label %bb9 + +bb9: ; preds = %bb8 + %reg139 = load int* %yychar ; <int> [#uses=2] + %reg460 = add int %cast620, %reg139 ; <int> [#uses=3] + %cond624 = setlt int %reg460, 0 ; <bool> [#uses=1] + br bool %cond624, label %bb16, label %bb10 + +bb10: ; preds = %bb9 + %cond627 = setgt int %reg460, 262 ; <bool> [#uses=1] + br bool %cond627, label %bb16, label %bb11 + +bb11: ; preds = %bb10 + %reg460-idxcast = cast int %reg460 to long ; <long> [#uses=2] + %reg632 = getelementptr [263 x short]* %yycheck, long 0, long %reg460-idxcast ; <short*> [#uses=1] + %reg148 = load short* %reg632 ; <short> [#uses=1] + %cast637 = cast short %reg148 to int ; <int> [#uses=1] + %cond639 = setne int %cast637, %reg139 ; <bool> [#uses=1] + br bool %cond639, label %bb16, label %bb12 + +bb12: ; preds = %bb11 + %reg150 = load short** %yyssp ; <short*> [#uses=1] + %cast640 = cast short* %reg150 to sbyte* ; <sbyte*> [#uses=1] + %reg151 = load short** %yysslim ; <short*> [#uses=1] + %cast641 = cast short* %reg151 to sbyte* ; <sbyte*> [#uses=1] + %cond642 = setlt sbyte* %cast640, %cast641 ; <bool> [#uses=1] + br bool %cond642, label %bb14, label %bb13 + +bb13: ; preds = %bb12 + %reg644 = call int %yygrowstack( ) ; <int> [#uses=1] + %cond644 = setne int %reg644, 0 ; <bool> [#uses=1] + br bool %cond644, label %bb113, label %bb14 + +bb14: ; preds = %bb13, %bb12 + %reg153 = load short** %yyssp ; <short*> [#uses=1] + %reg647 = getelementptr short* %reg153, long 1 ; <short*> [#uses=2] + store short* %reg647, short** %yyssp + %reg653 = getelementptr [263 x short]* %yytable, long 0, long %reg460-idxcast ; <short*> [#uses=1] + %reg162 = load short* %reg653 ; <short> [#uses=2] + %cast658 = cast short %reg162 to uint ; <uint> [#uses=2] + store short %reg162, short* %reg647 + %reg164 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg661 = getelementptr %YYSTYPE* %reg164, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg661, %YYSTYPE** %yyvsp + %reg167 = load %IntList* getelementptr (%YYSTYPE* %yylval, long 0, uint 0) ; <%IntList> [#uses=1] + %reg661.idx1 = getelementptr %YYSTYPE* %reg164, long 1, uint 0 ; <%IntList*> [#uses=1] + store %IntList %reg167, %IntList* %reg661.idx1 + store int -1, int* %yychar + %reg169 = load int* %yyerrflag ; <int> [#uses=2] + %cond669 = setle int %reg169, 0 ; <bool> [#uses=1] + br bool %cond669, label %bb4, label %bb15 + +bb15: ; preds = %bb14 + %reg171 = add int %reg169, -1 ; <int> [#uses=1] + store int %reg171, int* %yyerrflag + br label %bb4 + +bb16: ; preds = %bb11, %bb10, %bb9, %bb8 + %reg677 = getelementptr [43 x short]* %yyrindex, long 0, long %reg458-idxcast ; <short*> [#uses=1] + %reg178 = load short* %reg677 ; <short> [#uses=1] + %cast682 = cast short %reg178 to int ; <int> [#uses=2] + %cond683 = seteq int %cast682, 0 ; <bool> [#uses=1] + br bool %cond683, label %bb21, label %bb17 + +bb17: ; preds = %bb16 + %reg180 = load int* %yychar ; <int> [#uses=2] + %reg463 = add int %cast682, %reg180 ; <int> [#uses=3] + %cond686 = setlt int %reg463, 0 ; <bool> [#uses=1] + br bool %cond686, label %bb21, label %bb18 + +bb18: ; preds = %bb17 + %cond689 = setgt int %reg463, 262 ; <bool> [#uses=1] + br bool %cond689, label %bb21, label %bb19 + +bb19: ; preds = %bb18 + %reg463-idxcast = cast int %reg463 to long ; <long> [#uses=2] + %reg694 = getelementptr [263 x short]* %yycheck, long 0, long %reg463-idxcast ; <short*> [#uses=1] + %reg189 = load short* %reg694 ; <short> [#uses=1] + %cast699 = cast short %reg189 to int ; <int> [#uses=1] + %cond701 = setne int %cast699, %reg180 ; <bool> [#uses=1] + br bool %cond701, label %bb21, label %bb20 + +bb20: ; preds = %bb19 + %reg704 = getelementptr [263 x short]* %yytable, long 0, long %reg463-idxcast ; <short*> [#uses=1] + %reg197 = load short* %reg704 ; <short> [#uses=1] + %cast709 = cast short %reg197 to int ; <int> [#uses=1] + br label %bb36 + +bb21: ; preds = %bb19, %bb18, %bb17, %bb16 + %reg198 = load int* %yyerrflag ; <int> [#uses=1] + %cond711 = setne int %reg198, 0 ; <bool> [#uses=1] + br bool %cond711, label %bb23, label %bb22 + +bb22: ; preds = %bb21 + call void %yyerror( sbyte* getelementptr ([13 x sbyte]* %.LC01, long 0, long 0) ) + %reg200 = load int* %yynerrs ; <int> [#uses=1] + %reg201 = add int %reg200, 1 ; <int> [#uses=1] + store int %reg201, int* %yynerrs + br label %bb23 + +bb23: ; preds = %bb22, %bb21 + %reg202 = load int* %yyerrflag ; <int> [#uses=1] + %cond719 = setgt int %reg202, 2 ; <bool> [#uses=1] + br bool %cond719, label %bb34, label %bb24 + +bb24: ; preds = %bb23 + store int 3, int* %yyerrflag + %reg241 = load short** %yyss ; <short*> [#uses=1] + %cast778 = cast short* %reg241 to sbyte* ; <sbyte*> [#uses=1] + br label %bb25 + +bb25: ; preds = %bb33, %bb24 + %reg204 = load short** %yyssp ; <short*> [#uses=4] + %reg206 = load short* %reg204 ; <short> [#uses=1] + %reg206-idxcast = cast short %reg206 to long ; <long> [#uses=1] + %reg727 = getelementptr [43 x short]* %yysindex, long 0, long %reg206-idxcast ; <short*> [#uses=1] + %reg212 = load short* %reg727 ; <short> [#uses=2] + %cast732 = cast short %reg212 to int ; <int> [#uses=2] + %cond733 = seteq int %cast732, 0 ; <bool> [#uses=1] + br bool %cond733, label %bb32, label %bb26 + +bb26: ; preds = %bb25 + %reg466 = add int %cast732, 256 ; <int> [#uses=2] + %cond736 = setlt int %reg466, 0 ; <bool> [#uses=1] + br bool %cond736, label %bb32, label %bb27 + +bb27: ; preds = %bb26 + %cond739 = setgt int %reg466, 262 ; <bool> [#uses=1] + br bool %cond739, label %bb32, label %bb28 + +bb28: ; preds = %bb27 + %reg212-idxcast = cast short %reg212 to long ; <long> [#uses=1] + %reg212-idxcast-offset = add long %reg212-idxcast, 256 ; <long> [#uses=2] + %reg744 = getelementptr [263 x short]* %yycheck, long 0, long %reg212-idxcast-offset ; <short*> [#uses=1] + %reg221 = load short* %reg744 ; <short> [#uses=1] + %cond748 = setne short %reg221, 256 ; <bool> [#uses=1] + br bool %cond748, label %bb32, label %bb29 + +bb29: ; preds = %bb28 + %cast750 = cast short* %reg204 to sbyte* ; <sbyte*> [#uses=1] + %reg223 = load short** %yysslim ; <short*> [#uses=1] + %cast751 = cast short* %reg223 to sbyte* ; <sbyte*> [#uses=1] + %cond752 = setlt sbyte* %cast750, %cast751 ; <bool> [#uses=1] + br bool %cond752, label %bb31, label %bb30 + +bb30: ; preds = %bb29 + %reg754 = call int %yygrowstack( ) ; <int> [#uses=1] + %cond754 = setne int %reg754, 0 ; <bool> [#uses=1] + br bool %cond754, label %bb113, label %bb31 + +bb31: ; preds = %bb30, %bb29 + %reg225 = load short** %yyssp ; <short*> [#uses=1] + %reg757 = getelementptr short* %reg225, long 1 ; <short*> [#uses=2] + store short* %reg757, short** %yyssp + %reg763 = getelementptr [263 x short]* %yytable, long 0, long %reg212-idxcast-offset ; <short*> [#uses=1] + %reg234 = load short* %reg763 ; <short> [#uses=2] + %cast768 = cast short %reg234 to uint ; <uint> [#uses=1] + store short %reg234, short* %reg757 + %reg236 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg771 = getelementptr %YYSTYPE* %reg236, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg771, %YYSTYPE** %yyvsp + %reg239 = load %IntList* getelementptr (%YYSTYPE* %yylval, long 0, uint 0) ; <%IntList> [#uses=1] + %reg771.idx1 = getelementptr %YYSTYPE* %reg236, long 1, uint 0 ; <%IntList*> [#uses=1] + store %IntList %reg239, %IntList* %reg771.idx1 + br label %bb4 + +bb32: ; preds = %bb28, %bb27, %bb26, %bb25 + %cast777 = cast short* %reg204 to sbyte* ; <sbyte*> [#uses=1] + %cond779 = setle sbyte* %cast777, %cast778 ; <bool> [#uses=1] + br bool %cond779, label %UnifiedExitNode, label %bb33 + +bb33: ; preds = %bb32 + %reg781 = getelementptr short* %reg204, long -1 ; <short*> [#uses=1] + store short* %reg781, short** %yyssp + %reg244 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %reg786 = getelementptr %YYSTYPE* %reg244, long -1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg786, %YYSTYPE** %yyvsp + br label %bb25 + +bb34: ; preds = %bb23 + %reg246 = load int* %yychar ; <int> [#uses=1] + %cond791 = seteq int %reg246, 0 ; <bool> [#uses=1] + br bool %cond791, label %UnifiedExitNode, label %bb35 + +bb35: ; preds = %bb34 + store int -1, int* %yychar + br label %bb4 + +bb36: ; preds = %bb20, %bb4 + %reg468 = phi int [ %cast709, %bb20 ], [ %cast599, %bb4 ] ; <int> [#uses=31] + %reg468-idxcast = cast int %reg468 to long ; <long> [#uses=2] + %reg796 = getelementptr [25 x short]* %yylen, long 0, long %reg468-idxcast ; <short*> [#uses=1] + %reg254 = load short* %reg796 ; <short> [#uses=2] + %reg259 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %reg254-idxcast = cast short %reg254 to long ; <long> [#uses=1] + %reg254-idxcast-scale = mul long %reg254-idxcast, -1 ; <long> [#uses=1] + %reg254-idxcast-scale-offset = add long %reg254-idxcast-scale, 1 ; <long> [#uses=1] + %reg261.idx1 = getelementptr %YYSTYPE* %reg259, long %reg254-idxcast-scale-offset, uint 0 ; <%IntList*> [#uses=1] + %reg261 = load %IntList* %reg261.idx1 ; <%IntList> [#uses=1] + store %IntList %reg261, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + %cond812 = seteq int %reg468, 13 ; <bool> [#uses=1] + br bool %cond812, label %bb85, label %bb37 + +bb37: ; preds = %bb36 + %cond814 = setgt int %reg468, 13 ; <bool> [#uses=1] + br bool %cond814, label %bb56, label %bb38 + +bb38: ; preds = %bb37 + %cond817 = seteq int %reg468, 7 ; <bool> [#uses=1] + br bool %cond817, label %bb79, label %bb39 + +bb39: ; preds = %bb38 + %cond819 = setgt int %reg468, 7 ; <bool> [#uses=1] + br bool %cond819, label %bb48, label %bb40 + +bb40: ; preds = %bb39 + %cond822 = seteq int %reg468, 4 ; <bool> [#uses=1] + br bool %cond822, label %bb76, label %bb41 + +bb41: ; preds = %bb40 + %cond824 = setgt int %reg468, 4 ; <bool> [#uses=1] + br bool %cond824, label %bb45, label %bb42 + +bb42: ; preds = %bb41 + %cond827 = seteq int %reg468, 2 ; <bool> [#uses=1] + br bool %cond827, label %bb74, label %bb43 + +bb43: ; preds = %bb42 + %cond829 = seteq int %reg468, 3 ; <bool> [#uses=1] + br bool %cond829, label %bb75, label %bb97 + +bb45: ; preds = %bb41 + %cond831 = seteq int %reg468, 5 ; <bool> [#uses=1] + br bool %cond831, label %bb77, label %bb46 + +bb46: ; preds = %bb45 + %cond833 = seteq int %reg468, 6 ; <bool> [#uses=1] + br bool %cond833, label %bb78, label %bb97 + +bb48: ; preds = %bb39 + %cond835 = seteq int %reg468, 10 ; <bool> [#uses=1] + br bool %cond835, label %bb82, label %bb49 + +bb49: ; preds = %bb48 + %cond837 = setgt int %reg468, 10 ; <bool> [#uses=1] + br bool %cond837, label %bb53, label %bb50 + +bb50: ; preds = %bb49 + %cond840 = seteq int %reg468, 8 ; <bool> [#uses=1] + br bool %cond840, label %bb80, label %bb51 + +bb51: ; preds = %bb50 + %cond842 = seteq int %reg468, 9 ; <bool> [#uses=1] + br bool %cond842, label %bb81, label %bb97 + +bb53: ; preds = %bb49 + %cond844 = seteq int %reg468, 11 ; <bool> [#uses=1] + br bool %cond844, label %bb83, label %bb54 + +bb54: ; preds = %bb53 + %cond846 = seteq int %reg468, 12 ; <bool> [#uses=1] + br bool %cond846, label %bb84, label %bb97 + +bb56: ; preds = %bb37 + %cond848 = seteq int %reg468, 19 ; <bool> [#uses=1] + br bool %cond848, label %bb91, label %bb57 + +bb57: ; preds = %bb56 + %cond850 = setgt int %reg468, 19 ; <bool> [#uses=1] + br bool %cond850, label %bb66, label %bb58 + +bb58: ; preds = %bb57 + %cond853 = seteq int %reg468, 16 ; <bool> [#uses=1] + br bool %cond853, label %bb88, label %bb59 + +bb59: ; preds = %bb58 + %cond855 = setgt int %reg468, 16 ; <bool> [#uses=1] + br bool %cond855, label %bb63, label %bb60 + +bb60: ; preds = %bb59 + %cond858 = seteq int %reg468, 14 ; <bool> [#uses=1] + br bool %cond858, label %bb86, label %bb61 + +bb61: ; preds = %bb60 + %cond860 = seteq int %reg468, 15 ; <bool> [#uses=1] + br bool %cond860, label %bb87, label %bb97 + +bb63: ; preds = %bb59 + %cond862 = seteq int %reg468, 17 ; <bool> [#uses=1] + br bool %cond862, label %bb89, label %bb64 + +bb64: ; preds = %bb63 + %cond864 = seteq int %reg468, 18 ; <bool> [#uses=1] + br bool %cond864, label %bb90, label %bb97 + +bb66: ; preds = %bb57 + %cond866 = seteq int %reg468, 22 ; <bool> [#uses=1] + br bool %cond866, label %bb94, label %bb67 + +bb67: ; preds = %bb66 + %cond868 = setgt int %reg468, 22 ; <bool> [#uses=1] + br bool %cond868, label %bb71, label %bb68 + +bb68: ; preds = %bb67 + %cond871 = seteq int %reg468, 20 ; <bool> [#uses=1] + br bool %cond871, label %bb92, label %bb69 + +bb69: ; preds = %bb68 + %cond873 = seteq int %reg468, 21 ; <bool> [#uses=1] + br bool %cond873, label %bb93, label %bb97 + +bb71: ; preds = %bb67 + %cond875 = seteq int %reg468, 23 ; <bool> [#uses=1] + br bool %cond875, label %bb95, label %bb72 + +bb72: ; preds = %bb71 + %cond877 = seteq int %reg468, 24 ; <bool> [#uses=1] + br bool %cond877, label %bb96, label %bb97 + +bb74: ; preds = %bb42 + call void %yyfinished( ) + br label %bb97 + +bb75: ; preds = %bb43 + %reg262 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg264.idx1 = getelementptr %YYSTYPE* %reg262, long -2, uint 0 ; <%IntList*> [#uses=1] + %reg264 = load %IntList* %reg264.idx1 ; <%IntList> [#uses=1] + %reg265.idx = getelementptr %YYSTYPE* %reg262, long 0, uint 0 ; <%IntList*> [#uses=1] + %reg265 = load %IntList* %reg265.idx ; <%IntList> [#uses=1] + %cast889 = cast %IntList %reg265 to %List ; <%List> [#uses=1] + %cast890 = cast %IntList %reg264 to %List ; <%List> [#uses=1] + call void %doSpec( %List %cast890, %List %cast889 ) + br label %bb97 + +bb76: ; preds = %bb40 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb77: ; preds = %bb45 + %reg269 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast894 = getelementptr %YYSTYPE* %reg269, long 0, uint 0 ; <%IntList*> [#uses=1] + %reg271 = load %IntList* %cast894 ; <%IntList> [#uses=1] + %reg271 = cast %IntList %reg271 to sbyte* ; <sbyte*> [#uses=1] + %reg272.idx1 = getelementptr %YYSTYPE* %reg269, long -1, uint 0 ; <%IntList*> [#uses=1] + %reg272 = load %IntList* %reg272.idx1 ; <%IntList> [#uses=1] + %cast901 = cast %IntList %reg272 to %List ; <%List> [#uses=1] + %reg901 = call %List %newList( sbyte* %reg271, %List %cast901 ) ; <%List> [#uses=1] + cast %List %reg901 to %IntList ; <%IntList>:0 [#uses=1] + store %IntList %0, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb78: ; preds = %bb46 + %reg275 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %reg277.idx = getelementptr %YYSTYPE* %reg275, long 0, uint 0 ; <%IntList*> [#uses=1] + %reg277 = load %IntList* %reg277.idx ; <%IntList> [#uses=1] + %cast907 = cast %IntList %reg277 to %List ; <%List> [#uses=1] + %reg907 = call %Arity %newArity( int -1, %List %cast907 ) ; <%Arity> [#uses=1] + cast %Arity %reg907 to %IntList ; <%IntList>:1 [#uses=1] + store %IntList %1, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb79: ; preds = %bb38 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + %reg281 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast912 = getelementptr %YYSTYPE* %reg281, long 0, uint 0 ; <%IntList*> [#uses=1] + %reg282 = load %IntList* %cast912 ; <%IntList> [#uses=1] + %reg282 = cast %IntList %reg282 to %List ; <%List> [#uses=1] + call void %doGram( %List %reg282 ) + br label %bb97 + +bb80: ; preds = %bb50 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + %reg285 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast917 = getelementptr %YYSTYPE* %reg285, long 0, uint 0 ; <%IntList*> [#uses=1] + %reg286 = load %IntList* %cast917 ; <%IntList> [#uses=1] + %reg286 = cast %IntList %reg286 to sbyte* ; <sbyte*> [#uses=1] + call void %doStart( sbyte* %reg286 ) + br label %bb97 + +bb81: ; preds = %bb51 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb82: ; preds = %bb48 + %reg290 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast923 = getelementptr %YYSTYPE* %reg290, long 0, uint 0 ; <%IntList*> [#uses=1] + %reg292 = load %IntList* %cast923 ; <%IntList> [#uses=1] + %reg292 = cast %IntList %reg292 to sbyte* ; <sbyte*> [#uses=1] + %reg293.idx1 = getelementptr %YYSTYPE* %reg290, long -1, uint 0 ; <%IntList*> [#uses=1] + %reg293 = load %IntList* %reg293.idx1 ; <%IntList> [#uses=1] + %cast930 = cast %IntList %reg293 to %List ; <%List> [#uses=1] + %reg930 = call %List %newList( sbyte* %reg292, %List %cast930 ) ; <%List> [#uses=1] + cast %List %reg930 to %IntList ; <%IntList>:2 [#uses=1] + store %IntList %2, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb83: ; preds = %bb53 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb84: ; preds = %bb54 + %reg298 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast936 = getelementptr %YYSTYPE* %reg298, long 0, uint 0 ; <%IntList*> [#uses=1] + %reg300 = load %IntList* %cast936 ; <%IntList> [#uses=1] + %reg300 = cast %IntList %reg300 to sbyte* ; <sbyte*> [#uses=1] + %reg301.idx1 = getelementptr %YYSTYPE* %reg298, long -1, uint 0 ; <%IntList*> [#uses=1] + %reg301 = load %IntList* %reg301.idx1 ; <%IntList> [#uses=1] + %cast943 = cast %IntList %reg301 to %List ; <%List> [#uses=1] + %reg943 = call %List %newList( sbyte* %reg300, %List %cast943 ) ; <%List> [#uses=1] + cast %List %reg943 to %IntList ; <%IntList>:3 [#uses=1] + store %IntList %3, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb85: ; preds = %bb36 + %reg304 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast9521 = getelementptr %YYSTYPE* %reg304, long -2, uint 0 ; <%IntList*> [#uses=1] + %reg306 = load %IntList* %cast9521 ; <%IntList> [#uses=1] + %reg306 = cast %IntList %reg306 to sbyte* ; <sbyte*> [#uses=1] + %cast953 = cast %YYSTYPE* %reg304 to int* ; <int*> [#uses=1] + %reg307 = load int* %cast953 ; <int> [#uses=1] + %reg955 = call %Binding %newBinding( sbyte* %reg306, int %reg307 ) ; <%Binding> [#uses=1] + cast %Binding %reg955 to %IntList ; <%IntList>:4 [#uses=1] + store %IntList %4, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb86: ; preds = %bb60 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb87: ; preds = %bb61 + %reg312 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast961 = getelementptr %YYSTYPE* %reg312, long 0, uint 0 ; <%IntList*> [#uses=1] + %reg314 = load %IntList* %cast961 ; <%IntList> [#uses=1] + %reg314 = cast %IntList %reg314 to sbyte* ; <sbyte*> [#uses=1] + %reg315.idx1 = getelementptr %YYSTYPE* %reg312, long -1, uint 0 ; <%IntList*> [#uses=1] + %reg315 = load %IntList* %reg315.idx1 ; <%IntList> [#uses=1] + %cast968 = cast %IntList %reg315 to %List ; <%List> [#uses=1] + %reg968 = call %List %newList( sbyte* %reg314, %List %cast968 ) ; <%List> [#uses=1] + cast %List %reg968 to %IntList ; <%IntList>:5 [#uses=1] + store %IntList %5, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb88: ; preds = %bb58 + %reg318 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=4] + %cast9791 = getelementptr %YYSTYPE* %reg318, long -6, uint 0 ; <%IntList*> [#uses=1] + %reg322 = load %IntList* %cast9791 ; <%IntList> [#uses=1] + %reg322 = cast %IntList %reg322 to sbyte* ; <sbyte*> [#uses=1] + %reg323.idx1 = getelementptr %YYSTYPE* %reg318, long -4, uint 0 ; <%IntList*> [#uses=1] + %reg323 = load %IntList* %reg323.idx1 ; <%IntList> [#uses=1] + %reg987 = getelementptr %YYSTYPE* %reg318, long -2 ; <%YYSTYPE*> [#uses=1] + %cast989 = cast %YYSTYPE* %reg987 to int* ; <int*> [#uses=1] + %reg324 = load int* %cast989 ; <int> [#uses=1] + %reg325.idx1 = getelementptr %YYSTYPE* %reg318, long -1, uint 0 ; <%IntList*> [#uses=1] + %reg325 = load %IntList* %reg325.idx1 ; <%IntList> [#uses=1] + %cast998 = cast %IntList %reg323 to %PatternAST ; <%PatternAST> [#uses=1] + %reg996 = call %RuleAST %newRuleAST( sbyte* %reg322, %PatternAST %cast998, int %reg324, %IntList %reg325 ) ; <%RuleAST> [#uses=1] + cast %RuleAST %reg996 to %IntList ; <%IntList>:6 [#uses=1] + store %IntList %6, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb89: ; preds = %bb63 + %reg328 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast1002 = getelementptr %YYSTYPE* %reg328, long 0, uint 0 ; <%IntList*> [#uses=1] + %reg329 = load %IntList* %cast1002 ; <%IntList> [#uses=1] + %reg329 = cast %IntList %reg329 to sbyte* ; <sbyte*> [#uses=1] + %reg1004 = call %PatternAST %newPatternAST( sbyte* %reg329, %List null ) ; <%PatternAST> [#uses=1] + cast %PatternAST %reg1004 to %IntList ; <%IntList>:7 [#uses=1] + store %IntList %7, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb90: ; preds = %bb64 + %reg333 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast10131 = getelementptr %YYSTYPE* %reg333, long -1, uint 0 ; <%IntList*> [#uses=1] + %reg335 = load %IntList* %cast10131 ; <%IntList> [#uses=1] + %reg335 = cast %IntList %reg335 to sbyte* ; <sbyte*> [#uses=1] + %reg1015 = call %List %newList( sbyte* %reg335, %List null ) ; <%List> [#uses=1] + %cast10211 = getelementptr %YYSTYPE* %reg333, long -3, uint 0 ; <%IntList*> [#uses=1] + %reg338 = load %IntList* %cast10211 ; <%IntList> [#uses=1] + %reg338 = cast %IntList %reg338 to sbyte* ; <sbyte*> [#uses=1] + %reg1023 = call %PatternAST %newPatternAST( sbyte* %reg338, %List %reg1015 ) ; <%PatternAST> [#uses=1] + cast %PatternAST %reg1023 to %IntList ; <%IntList>:8 [#uses=1] + store %IntList %8, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb91: ; preds = %bb56 + %reg341 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=3] + %cast10331 = getelementptr %YYSTYPE* %reg341, long -1, uint 0 ; <%IntList*> [#uses=1] + %reg344 = load %IntList* %cast10331 ; <%IntList> [#uses=1] + %reg344 = cast %IntList %reg344 to sbyte* ; <sbyte*> [#uses=1] + %reg1035 = call %List %newList( sbyte* %reg344, %List null ) ; <%List> [#uses=1] + %cast10411 = getelementptr %YYSTYPE* %reg341, long -3, uint 0 ; <%IntList*> [#uses=1] + %reg347 = load %IntList* %cast10411 ; <%IntList> [#uses=1] + %reg347 = cast %IntList %reg347 to sbyte* ; <sbyte*> [#uses=1] + %reg1043 = call %List %newList( sbyte* %reg347, %List %reg1035 ) ; <%List> [#uses=1] + %cast10491 = getelementptr %YYSTYPE* %reg341, long -5, uint 0 ; <%IntList*> [#uses=1] + %reg349 = load %IntList* %cast10491 ; <%IntList> [#uses=1] + %reg349 = cast %IntList %reg349 to sbyte* ; <sbyte*> [#uses=1] + %reg1051 = call %PatternAST %newPatternAST( sbyte* %reg349, %List %reg1043 ) ; <%PatternAST> [#uses=1] + cast %PatternAST %reg1051 to %IntList ; <%IntList>:9 [#uses=1] + store %IntList %9, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb92: ; preds = %bb68 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb93: ; preds = %bb69 + %reg354 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1059 = getelementptr %YYSTYPE* %reg354, long -2 ; <%YYSTYPE*> [#uses=1] + %cast1061 = cast %YYSTYPE* %reg1059 to int* ; <int*> [#uses=1] + %reg356 = load int* %cast1061 ; <int> [#uses=1] + %reg357.idx1 = getelementptr %YYSTYPE* %reg354, long -1, uint 0 ; <%IntList*> [#uses=1] + %reg357 = load %IntList* %reg357.idx1 ; <%IntList> [#uses=1] + %reg1068 = call %IntList %newIntList( int %reg356, %IntList %reg357 ) ; <%IntList> [#uses=1] + store %IntList %reg1068, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb94: ; preds = %bb66 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb95: ; preds = %bb71 + %reg362 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1076 = getelementptr %YYSTYPE* %reg362, long -1 ; <%YYSTYPE*> [#uses=1] + %cast1078 = cast %YYSTYPE* %reg1076 to int* ; <int*> [#uses=1] + %reg364 = load int* %cast1078 ; <int> [#uses=1] + %reg365.idx = getelementptr %YYSTYPE* %reg362, long 0, uint 0 ; <%IntList*> [#uses=1] + %reg365 = load %IntList* %reg365.idx ; <%IntList> [#uses=1] + %reg1081 = call %IntList %newIntList( int %reg364, %IntList %reg365 ) ; <%IntList> [#uses=1] + store %IntList %reg1081, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb96: ; preds = %bb72 + %reg368 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1088 = getelementptr %YYSTYPE* %reg368, long -1 ; <%YYSTYPE*> [#uses=1] + %cast1090 = cast %YYSTYPE* %reg1088 to int* ; <int*> [#uses=1] + %reg370 = load int* %cast1090 ; <int> [#uses=1] + %reg371.idx = getelementptr %YYSTYPE* %reg368, long 0, uint 0 ; <%IntList*> [#uses=1] + %reg371 = load %IntList* %reg371.idx ; <%IntList> [#uses=1] + %reg1093 = call %IntList %newIntList( int %reg370, %IntList %reg371 ) ; <%IntList> [#uses=1] + store %IntList %reg1093, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) + br label %bb97 + +bb97: ; preds = %bb96, %bb95, %bb94, %bb93, %bb92, %bb91, %bb90, %bb89, %bb88, %bb87, %bb86, %bb85, %bb84, %bb83, %bb82, %bb81, %bb80, %bb79, %bb78, %bb77, %bb76, %bb75, %bb74, %bb72, %bb69, %bb64, %bb61, %bb54, %bb51, %bb46, %bb43 + %cast1097 = cast short %reg254 to ulong ; <ulong> [#uses=3] + %reg375 = add ulong %cast1097, %cast1097 ; <ulong> [#uses=1] + %reg377 = load short** %yyssp ; <short*> [#uses=1] + %cast379 = cast short* %reg377 to ulong ; <ulong> [#uses=1] + %reg381 = sub ulong %cast379, %reg375 ; <ulong> [#uses=1] + %cast1099 = cast ulong %reg381 to short* ; <short*> [#uses=1] + store short* %cast1099, short** %yyssp + %reg382 = load short** %yyssp ; <short*> [#uses=3] + %reg383 = load short* %reg382 ; <short> [#uses=1] + %cast1103 = cast short %reg383 to int ; <int> [#uses=3] + %reg385 = mul ulong %cast1097, 8 ; <ulong> [#uses=1] + %reg387 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast389 = cast %YYSTYPE* %reg387 to ulong ; <ulong> [#uses=1] + %reg391 = sub ulong %cast389, %reg385 ; <ulong> [#uses=1] + %cast1108 = cast ulong %reg391 to %YYSTYPE* ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %cast1108, %YYSTYPE** %yyvsp + %reg1111 = getelementptr [25 x short]* %yylhs, long 0, long %reg468-idxcast ; <short*> [#uses=1] + %reg398 = load short* %reg1111 ; <short> [#uses=2] + %cast1116 = cast short %reg398 to int ; <int> [#uses=1] + %cond1117 = setne int %cast1103, 0 ; <bool> [#uses=1] + br bool %cond1117, label %bb104, label %bb98 + +bb98: ; preds = %bb97 + %cond1119 = setne int %cast1116, 0 ; <bool> [#uses=1] + br bool %cond1119, label %bb104, label %bb99 + +bb99: ; preds = %bb98 + %reg1122 = getelementptr short* %reg382, long 1 ; <short*> [#uses=2] + store short* %reg1122, short** %yyssp + store short 1, short* %reg1122 + %reg403 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1128 = getelementptr %YYSTYPE* %reg403, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg1128, %YYSTYPE** %yyvsp + %reg406 = load %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) ; <%IntList> [#uses=1] + %reg1128.idx1 = getelementptr %YYSTYPE* %reg403, long 1, uint 0 ; <%IntList*> [#uses=1] + store %IntList %reg406, %IntList* %reg1128.idx1 + %reg407 = load int* %yychar ; <int> [#uses=1] + %cond1135 = setge int %reg407, 0 ; <bool> [#uses=1] + br bool %cond1135, label %bb102, label %bb100 + +bb100: ; preds = %bb99 + %reg1139 = call int %yylex( ) ; <int> [#uses=1] + store int %reg1139, int* %yychar + %reg409 = load int* %yychar ; <int> [#uses=1] + %cond1141 = setge int %reg409, 0 ; <bool> [#uses=1] + br bool %cond1141, label %bb102, label %bb101 + +bb101: ; preds = %bb100 + store int 0, int* %yychar + br label %bb102 + +bb102: ; preds = %bb101, %bb100, %bb99 + %reg411 = load int* %yychar ; <int> [#uses=1] + %cond1146 = setne int %reg411, 0 ; <bool> [#uses=1] + br bool %cond1146, label %bb4, label %UnifiedExitNode + +bb104: ; preds = %bb98, %bb97 + %reg398-idxcast = cast short %reg398 to long ; <long> [#uses=2] + %reg1150 = getelementptr [12 x short]* %yygindex, long 0, long %reg398-idxcast ; <short*> [#uses=1] + %reg418 = load short* %reg1150 ; <short> [#uses=1] + %cast1155 = cast short %reg418 to int ; <int> [#uses=2] + %cond1156 = seteq int %cast1155, 0 ; <bool> [#uses=1] + br bool %cond1156, label %bb109, label %bb105 + +bb105: ; preds = %bb104 + %reg473 = add int %cast1155, %cast1103 ; <int> [#uses=3] + %cond1158 = setlt int %reg473, 0 ; <bool> [#uses=1] + br bool %cond1158, label %bb109, label %bb106 + +bb106: ; preds = %bb105 + %cond1161 = setgt int %reg473, 262 ; <bool> [#uses=1] + br bool %cond1161, label %bb109, label %bb107 + +bb107: ; preds = %bb106 + %reg473-idxcast = cast int %reg473 to long ; <long> [#uses=2] + %reg1166 = getelementptr [263 x short]* %yycheck, long 0, long %reg473-idxcast ; <short*> [#uses=1] + %reg428 = load short* %reg1166 ; <short> [#uses=1] + %cast1171 = cast short %reg428 to int ; <int> [#uses=1] + %cond1172 = setne int %cast1171, %cast1103 ; <bool> [#uses=1] + br bool %cond1172, label %bb109, label %bb108 + +bb108: ; preds = %bb107 + %reg1175 = getelementptr [263 x short]* %yytable, long 0, long %reg473-idxcast ; <short*> [#uses=1] + %reg435 = load short* %reg1175 ; <short> [#uses=1] + %cast1180 = cast short %reg435 to uint ; <uint> [#uses=1] + br label %bb110 + +bb109: ; preds = %bb107, %bb106, %bb105, %bb104 + %reg1183 = getelementptr [12 x short]* %yydgoto, long 0, long %reg398-idxcast ; <short*> [#uses=1] + %reg442 = load short* %reg1183 ; <short> [#uses=1] + %cast1188 = cast short %reg442 to uint ; <uint> [#uses=1] + br label %bb110 + +bb110: ; preds = %bb109, %bb108 + %reg476 = phi uint [ %cast1188, %bb109 ], [ %cast1180, %bb108 ] ; <uint> [#uses=2] + %cast1189 = cast short* %reg382 to sbyte* ; <sbyte*> [#uses=1] + %reg444 = load short** %yysslim ; <short*> [#uses=1] + %cast1190 = cast short* %reg444 to sbyte* ; <sbyte*> [#uses=1] + %cond1191 = setlt sbyte* %cast1189, %cast1190 ; <bool> [#uses=1] + br bool %cond1191, label %bb112, label %bb111 + +bb111: ; preds = %bb110 + %reg1193 = call int %yygrowstack( ) ; <int> [#uses=1] + %cond1193 = setne int %reg1193, 0 ; <bool> [#uses=1] + br bool %cond1193, label %bb113, label %bb112 + +bb112: ; preds = %bb111, %bb110 + %reg446 = load short** %yyssp ; <short*> [#uses=1] + %reg1196 = getelementptr short* %reg446, long 1 ; <short*> [#uses=2] + store short* %reg1196, short** %yyssp + %cast1357 = cast uint %reg476 to short ; <short> [#uses=1] + store short %cast1357, short* %reg1196 + %reg449 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1202 = getelementptr %YYSTYPE* %reg449, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg1202, %YYSTYPE** %yyvsp + %reg452 = load %IntList* getelementptr (%YYSTYPE* %yyval, long 0, uint 0) ; <%IntList> [#uses=1] + %reg1202.idx1 = getelementptr %YYSTYPE* %reg449, long 1, uint 0 ; <%IntList*> [#uses=1] + store %IntList %reg452, %IntList* %reg1202.idx1 + br label %bb4 + +bb113: ; preds = %bb111, %bb30, %bb13, %bb2 + call void %yyerror( sbyte* getelementptr ([20 x sbyte]* %.LC1, long 0, long 0) ) + br label %UnifiedExitNode + +UnifiedExitNode: ; preds = %bb113, %bb102, %bb34, %bb32 + %UnifiedRetVal = phi int [ 1, %bb113 ], [ 1, %bb34 ], [ 1, %bb32 ], [ 0, %bb102 ] ; <int> [#uses=1] + ret int %UnifiedRetVal +} + +declare %List %newList(sbyte*, %List) + +declare %IntList %newIntList(int, %IntList) + +declare void %doStart(sbyte*) + +declare void %yyerror(sbyte*) + +declare void %doSpec(%List, %List) + +declare %Arity %newArity(int, %List) + +declare %Binding %newBinding(sbyte*, int) + +declare %PatternAST %newPatternAST(sbyte*, %List) + +declare %RuleAST %newRuleAST(sbyte*, %PatternAST, int, %IntList) + +declare void %yyfinished() + +declare int %yylex() + +declare void %doGram(%List) + +declare int %yygrowstack() diff --git a/test/CodeGen/Generic/ConstantExprLowering.llx b/test/CodeGen/Generic/ConstantExprLowering.llx new file mode 100644 index 0000000..afb6530 --- /dev/null +++ b/test/CodeGen/Generic/ConstantExprLowering.llx @@ -0,0 +1,26 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +%.str_1 = internal constant [16 x sbyte] c"%d %d %d %d %d\0A\00" + +%XA = external global int +%XB = external global int + +implementation ; Functions: + +declare int %printf(sbyte*, ...) + +void %test(int %A, int %B, int %C, int %D) { +entry: + %t1 = setlt int %A, 0 + br bool %t1, label %less, label %not_less +less: + br label %not_less +not_less: + %t2 = phi int [ sub ( int cast (int* %XA to int), + int cast (int* %XB to int) ), %less], + [ sub ( int cast (int* %XA to int), + int cast (int* %XB to int) ), %entry] + %tmp.39 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([16 x sbyte]* %.str_1, long 0, long 0), int %t2 ) + ret void +} + diff --git a/test/CodeGen/Generic/GC/alloc_loop.ll b/test/CodeGen/Generic/GC/alloc_loop.ll new file mode 100644 index 0000000..11294e1 --- /dev/null +++ b/test/CodeGen/Generic/GC/alloc_loop.ll @@ -0,0 +1,54 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +implementation + +declare sbyte* %llvm_gc_allocate(uint) +declare void %llvm_gc_initialize(uint) + +declare void %llvm.gcroot(sbyte**, sbyte*) +declare void %llvm.gcwrite(sbyte*, sbyte*, sbyte**) + +int %main() { +entry: + %A = alloca sbyte* + %B = alloca sbyte** + + call void %llvm_gc_initialize(uint 1048576) ; Start with 1MB heap + + ;; void *A; + call void %llvm.gcroot(sbyte** %A, sbyte* null) + + ;; A = gcalloc(10); + %Aptr = call sbyte* %llvm_gc_allocate(uint 10) + store sbyte* %Aptr, sbyte** %A + + ;; void **B; + %tmp.1 = cast sbyte*** %B to sbyte ** + call void %llvm.gcroot(sbyte** %tmp.1, sbyte* null) + + ;; B = gcalloc(4); + %B = call sbyte* %llvm_gc_allocate(uint 8) + %tmp.2 = cast sbyte* %B to sbyte** + store sbyte** %tmp.2, sbyte*** %B + + ;; *B = A; + %B.1 = load sbyte*** %B + %A.1 = load sbyte** %A + call void %llvm.gcwrite(sbyte* %A.1, sbyte* %B, sbyte** %B.1) + + br label %AllocLoop + +AllocLoop: + %i = phi uint [ 0, %entry ], [ %indvar.next, %AllocLoop ] + ;; Allocated mem: allocated memory is immediately dead. + call sbyte* %llvm_gc_allocate(uint 100) + + %indvar.next = add uint %i, 1 + %exitcond = seteq uint %indvar.next, 10000000 + br bool %exitcond, label %Exit, label %AllocLoop + +Exit: + ret int 0 +} + +declare void %__main() diff --git a/test/CodeGen/Generic/GC/dg.exp b/test/CodeGen/Generic/GC/dg.exp new file mode 100644 index 0000000..879685c --- /dev/null +++ b/test/CodeGen/Generic/GC/dg.exp @@ -0,0 +1,3 @@ +load_lib llvm.exp + +RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,llx,c,cpp,tr}]] diff --git a/test/CodeGen/Generic/Makefile b/test/CodeGen/Generic/Makefile new file mode 100644 index 0000000..d228f69 --- /dev/null +++ b/test/CodeGen/Generic/Makefile @@ -0,0 +1,23 @@ +# Makefile for running ad-hoc custom LLVM tests +# +%.bc: %.ll + llvm-as -f $< + +%.llc.s: %.bc + llc -f $< -o $@ + +%.gcc.s: %.c + gcc -O0 -S $< -o $@ + +%.nat: %.s + gcc -O0 -lm $< -o $@ + +%.cbe.out: %.cbe.nat + ./$< > $@ + +%.out: %.nat + ./$< > $@ + +%.clean: + rm -f $(patsubst %.clean,%.bc,$@) $(patsubst %.clean,%.*.s,$@) \ + $(patsubst %.clean,%.*.nat,$@) $(patsubst %.clean,%.*.out,$@) diff --git a/test/CodeGen/Generic/SwitchLowering.ll b/test/CodeGen/Generic/SwitchLowering.ll new file mode 100644 index 0000000..37bfffa --- /dev/null +++ b/test/CodeGen/Generic/SwitchLowering.ll @@ -0,0 +1,27 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -march=x86 | grep cmp | wc -l | grep 1 +; PR964 + +sbyte* %FindChar(sbyte* %CurPtr) { +entry: + br label %bb + +bb: ; preds = %bb, %entry + %indvar = phi uint [ 0, %entry ], [ %indvar.next, %bb ] ; <uint> [#uses=3] + %CurPtr_addr.0.rec = cast uint %indvar to int ; <int> [#uses=1] + %CurPtr_addr.0 = getelementptr sbyte* %CurPtr, uint %indvar ; <sbyte*> [#uses=1] + %tmp = load sbyte* %CurPtr_addr.0 ; <sbyte> [#uses=2] + %tmp2.rec = add int %CurPtr_addr.0.rec, 1 ; <int> [#uses=1] + %tmp2 = getelementptr sbyte* %CurPtr, int %tmp2.rec ; <sbyte*> [#uses=1] + %indvar.next = add uint %indvar, 1 ; <uint> [#uses=1] + switch sbyte %tmp, label %bb [ + sbyte 0, label %bb7 + sbyte 120, label %bb7 + ] + +bb7: ; preds = %bb, %bb + %tmp = cast sbyte %tmp to ubyte ; <ubyte> [#uses=1] + tail call void %foo( ubyte %tmp ) + ret sbyte* %tmp2 +} + +declare void %foo(ubyte) diff --git a/test/CodeGen/Generic/addc-fold2.ll b/test/CodeGen/Generic/addc-fold2.ll new file mode 100644 index 0000000..8f3cdd07 --- /dev/null +++ b/test/CodeGen/Generic/addc-fold2.ll @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s | llc -march=x86 | grep add +; RUN: llvm-as < %s | llc -march=x86 | not grep adc + +define i64 @test(i64 %A, i32 %B) { + %tmp12 = zext i32 %B to i64 ; <i64> [#uses=1] + %tmp3 = shl i64 %tmp12, 32 ; <i64> [#uses=1] + %tmp5 = add i64 %tmp3, %A ; <i64> [#uses=1] + ret i64 %tmp5 +} + diff --git a/test/CodeGen/Generic/badCallArgLRLLVM.ll b/test/CodeGen/Generic/badCallArgLRLLVM.ll new file mode 100644 index 0000000..734d2b2 --- /dev/null +++ b/test/CodeGen/Generic/badCallArgLRLLVM.ll @@ -0,0 +1,32 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +; This caused a problem because the argument of a call was defined by +; the return value of another call that appears later in the code. +; When processing the first call, the second call has not yet been processed +; so no LiveRange has been created for its return value. +; +; llc dies in UltraSparcRegInfo::suggestRegs4CallArgs() with: +; ERROR: In call instr, no LR for arg: 0x1009e0740 +; +implementation ; Functions: + +declare int %getInt(int) + +int %main(int %argc, sbyte** %argv) { +bb0: ;[#uses=0] + br label %bb2 + +bb1: + %reg222 = call int (int)* %getInt(int %reg218) ;; ARG #1 HAS NO LR + %reg110 = add int %reg222, 1 + %b = setle int %reg110, 0 + br bool %b, label %bb2, label %bb3 + +bb2: + %reg218 = call int (int)* %getInt(int %argc) ;; THIS CALL NOT YET SEEN + br label %bb1 + +bb3: + ret int %reg110 +} + diff --git a/test/CodeGen/Generic/badFoldGEP.ll b/test/CodeGen/Generic/badFoldGEP.ll new file mode 100644 index 0000000..63acd46 --- /dev/null +++ b/test/CodeGen/Generic/badFoldGEP.ll @@ -0,0 +1,29 @@ +; RUN: llvm-upgrade %s | llvm-as | llc + +;; GetMemInstArgs() folded the two getElementPtr instructions together, +;; producing an illegal getElementPtr. That's because the type generated +;; by the last index for the first one is a structure field, not an array +;; element, and the second one indexes off that structure field. +;; The code is legal but not type-safe and the two GEPs should not be folded. +;; +;; This code fragment is from Spec/CINT2000/197.parser/197.parser.bc, +;; file post_process.c, function build_domain(). +;; (Modified to replace store with load and return load value.) +;; + +%Domain = type { sbyte*, int, int*, int, int, int*, %Domain* } +%domain_array = uninitialized global [497 x %Domain] + +implementation; Functions: + +declare void %opaque([497 x %Domain]*) + +int %main(int %argc, sbyte** %argv) { +bb0: ;[#uses=0] + call void %opaque([497 x %Domain]* %domain_array) + %cann-indvar-idxcast = cast int %argc to long + %reg841 = getelementptr [497 x %Domain]* %domain_array, long 0, long %cann-indvar-idxcast, uint 3 + %reg846 = getelementptr int* %reg841, long 1 + %reg820 = load int* %reg846 + ret int %reg820 +} diff --git a/test/CodeGen/Generic/badarg6.ll b/test/CodeGen/Generic/badarg6.ll new file mode 100644 index 0000000..542e6b3 --- /dev/null +++ b/test/CodeGen/Generic/badarg6.ll @@ -0,0 +1,38 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +; On this code, llc did not pass the sixth argument (%reg321) to printf. +; It passed the first five in %o0 - %o4, but never initialized %o5. + +%.LC12 = internal global [44 x sbyte] c"\09\09M = %g, I = %g, V = %g\0A\09\09O = %g, E = %g\0A\0A\00" ; <[44 x sbyte]*> + +implementation; + +declare int %printf(sbyte*, ...) + +declare double %opaque(double) + +int %main(int %argc, sbyte** %argv) { + +bb25: + %b = setle int %argc, 2 + br bool %b, label %bb42, label %bb43 + +bb42: + %reg315 = call double (double)* %opaque(double 3.0) + %reg316 = call double (double)* %opaque(double 3.1) + %reg317 = call double (double)* %opaque(double 3.2) + %reg318 = call double (double)* %opaque(double 3.3) + %reg319 = call double (double)* %opaque(double 3.4) + br label %bb43 + +bb43: + %reg321 = phi double [ 2.000000e-01, %bb25 ], [ %reg315, %bb42 ] + %reg322 = phi double [ 6.000000e+00, %bb25 ], [ %reg316, %bb42 ] + %reg323 = phi double [ 0xBFF0000000000000, %bb25 ], [ %reg317, %bb42 ] + %reg324 = phi double [ 0xBFF0000000000000, %bb25 ], [ %reg318, %bb42 ] + %reg325 = phi double [ 1.000000e+00, %bb25 ], [ %reg319, %bb42 ] + + %reg609 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([44 x sbyte]* %.LC12, long 0, long 0), double %reg325, double %reg324, double %reg323, double %reg322, double %reg321 ) + + ret int 0 +} diff --git a/test/CodeGen/Generic/badlive.ll b/test/CodeGen/Generic/badlive.ll new file mode 100644 index 0000000..8c08153 --- /dev/null +++ b/test/CodeGen/Generic/badlive.ll @@ -0,0 +1,30 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +implementation + +int "main"() +begin +bb0: + %reg109 = malloc int, uint 100 + br label %bb2 + +bb2: + %cann-indvar1 = phi int [ 0, %bb0 ], [ %add1-indvar1, %bb2 ] + %reg127 = mul int %cann-indvar1, 2 + %add1-indvar1 = add int %cann-indvar1, 1 + store int 999, int * %reg109 + %cond1015 = setle int 1, 99 + %reg128 = add int %reg127, 2 + br bool %cond1015, label %bb2, label %bb4 + +bb4: ;[#uses=3] + %cann-indvar = phi uint [ %add1-indvar, %bb4 ], [ 0, %bb2 ] + %add1-indvar = add uint %cann-indvar, 1 ; <uint> [#uses=1] + store int 333, int * %reg109 + %reg131 = add uint %add1-indvar, 3 ; <int> [#uses=1] + %cond1017 = setle uint %reg131, 99 ; <bool> [#uses=1] + br bool %cond1017, label %bb4, label %bb5 + +bb5: + ret int 0 +end diff --git a/test/CodeGen/Generic/bit-intrinsics.ll b/test/CodeGen/Generic/bit-intrinsics.ll new file mode 100644 index 0000000..427387f --- /dev/null +++ b/test/CodeGen/Generic/bit-intrinsics.ll @@ -0,0 +1,32 @@ +; Make sure this testcase is supported by all code generators. Either the +; intrinsic is supported natively or IntrinsicLowering provides it. +; RUN: llvm-as < %s > %t.bc +; RUN: lli --force-interpreter=true %t.bc + +declare i32 @llvm.part.set.i32.i32.i32(i32 %x, i32 %rep, i32 %hi, i32 %lo) +declare i16 @llvm.part.set.i16.i16.i16(i16 %x, i16 %rep, i32 %hi, i32 %lo) +define i32 @test_part_set(i32 %A, i16 %B) { + %a = call i32 @llvm.part.set.i32.i32.i32(i32 %A, i32 27, i32 8, i32 0) + %b = call i16 @llvm.part.set.i16.i16.i16(i16 %B, i16 27, i32 8, i32 0) + %c = zext i16 %b to i32 + %d = add i32 %a, %c + ret i32 %d +} + +declare i32 @llvm.part.select.i32.i32(i32 %x, i32 %hi, i32 %lo) +declare i16 @llvm.part.select.i16.i16(i16 %x, i32 %hi, i32 %lo) +define i32 @test_part_select(i32 %A, i16 %B) { + %a = call i32 @llvm.part.select.i32.i32(i32 %A, i32 8, i32 0) + %b = call i16 @llvm.part.select.i16.i16(i16 %B, i32 8, i32 0) + %c = zext i16 %b to i32 + %d = add i32 %a, %c + ret i32 %d +} + +define i32 @main(i32 %argc, i8** %argv) { + %a = call i32 @test_part_set(i32 23, i16 57) + %b = call i32 @test_part_select(i32 23, i16 57) + %c = add i32 %a, %b + %d = urem i32 %c, 1 + ret i32 %d +} diff --git a/test/CodeGen/Generic/bool-to-double.ll b/test/CodeGen/Generic/bool-to-double.ll new file mode 100644 index 0000000..ad9bc8e --- /dev/null +++ b/test/CodeGen/Generic/bool-to-double.ll @@ -0,0 +1,5 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc +double %test(bool %X) { + %Y = cast bool %X to double + ret double %Y +} diff --git a/test/CodeGen/Generic/call-ret0.ll b/test/CodeGen/Generic/call-ret0.ll new file mode 100644 index 0000000..44c30d3 --- /dev/null +++ b/test/CodeGen/Generic/call-ret0.ll @@ -0,0 +1,10 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +int %foo(int %x) { + ret int %x +} + +int %main() { + %r = call int %foo(int 0) + ret int %r +} diff --git a/test/CodeGen/Generic/call-ret42.ll b/test/CodeGen/Generic/call-ret42.ll new file mode 100644 index 0000000..b0a480f --- /dev/null +++ b/test/CodeGen/Generic/call-ret42.ll @@ -0,0 +1,10 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +int %foo(int %x) { + ret int 42 +} + +int %main() { + %r = call int %foo(int 15) + ret int %r +} diff --git a/test/CodeGen/Generic/call-void.ll b/test/CodeGen/Generic/call-void.ll new file mode 100644 index 0000000..64e6336 --- /dev/null +++ b/test/CodeGen/Generic/call-void.ll @@ -0,0 +1,10 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +void %foo() { + ret void +} + +int %main() { + call void ()* %foo() + ret int 0 +} diff --git a/test/CodeGen/Generic/call2-ret0.ll b/test/CodeGen/Generic/call2-ret0.ll new file mode 100644 index 0000000..55be5c6 --- /dev/null +++ b/test/CodeGen/Generic/call2-ret0.ll @@ -0,0 +1,15 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +int %bar(int %x) { + ret int 0 +} + +int %foo(int %x) { + %q = call int %bar(int 1) + ret int %q +} + +int %main() { + %r = call int %foo(int 2) + ret int %r +} diff --git a/test/CodeGen/Generic/cast-fp.ll b/test/CodeGen/Generic/cast-fp.ll new file mode 100644 index 0000000..8359329 --- /dev/null +++ b/test/CodeGen/Generic/cast-fp.ll @@ -0,0 +1,49 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +%a_fstr = internal constant [8 x sbyte] c"a = %f\0A\00" +%a_lstr = internal constant [10 x sbyte] c"a = %lld\0A\00" +%a_dstr = internal constant [8 x sbyte] c"a = %d\0A\00" + +%b_dstr = internal constant [8 x sbyte] c"b = %d\0A\00" +%b_fstr = internal constant [8 x sbyte] c"b = %f\0A\00" + +declare int %printf(sbyte*, ...) +%A = global double 2.0 +%B = global int 2 + +int %main() { + ;; A + %a = load double* %A + %a_fs = getelementptr [8 x sbyte]* %a_fstr, long 0, long 0 + call int (sbyte*, ...)* %printf(sbyte* %a_fs, double %a) + + ;; cast double to long + %a_d2l = cast double %a to long + %a_ls = getelementptr [10 x sbyte]* %a_lstr, long 0, long 0 + call int (sbyte*, ...)* %printf(sbyte* %a_ls, long %a_d2l) + + ;; cast double to int + %a_d2i = cast double %a to int + %a_ds = getelementptr [8 x sbyte]* %a_dstr, long 0, long 0 + call int (sbyte*, ...)* %printf(sbyte* %a_ds, int %a_d2i) + + ;; cast double to sbyte + %a_d2sb = cast double %a to sbyte + call int (sbyte*, ...)* %printf(sbyte* %a_ds, sbyte %a_d2sb) + + ;; cast int to sbyte + %a_d2i2sb = cast int %a_d2i to sbyte + call int (sbyte*, ...)* %printf(sbyte* %a_ds, sbyte %a_d2i2sb) + + ;; B + %b = load int* %B + %b_ds = getelementptr [8 x sbyte]* %b_dstr, long 0, long 0 + call int (sbyte*, ...)* %printf(sbyte* %b_ds, int %b) + + ;; cast int to double + %b_i2d = cast int %b to double + %b_fs = getelementptr [8 x sbyte]* %b_fstr, long 0, long 0 + call int (sbyte*, ...)* %printf(sbyte* %b_fs, double %b_i2d) + + ret int 0 +} diff --git a/test/CodeGen/Generic/constindices.ll b/test/CodeGen/Generic/constindices.ll new file mode 100644 index 0000000..b176144 --- /dev/null +++ b/test/CodeGen/Generic/constindices.ll @@ -0,0 +1,56 @@ +; RUN: llvm-upgrade %s | llvm-as | llc + +; Test that a sequence of constant indices are folded correctly +; into the equivalent offset at compile-time. + +%MixedA = type { float, [15 x int], sbyte, float } + +%MixedB = type { float, %MixedA, float } + +%fmtArg = internal global [44 x sbyte] c"sqrt(2) = %g\0Aexp(1) = %g\0Api = %g\0Afive = %g\0A\00"; <[44 x sbyte]*> [#uses=1] + +implementation + +declare int "printf"(sbyte*, ...) + +int "main"() +begin + %ScalarA = alloca %MixedA + %ScalarB = alloca %MixedB + %ArrayA = alloca %MixedA, uint 4 + %ArrayB = alloca %MixedB, uint 3 + + %I1 = getelementptr %MixedA* %ScalarA, long 0, uint 0 + store float 1.4142, float *%I1 + %I2 = getelementptr %MixedB* %ScalarB, long 0, uint 1, uint 0 + store float 2.7183, float *%I2 + + %fptrA = getelementptr %MixedA* %ArrayA, long 1, uint 0 + %fptrB = getelementptr %MixedB* %ArrayB, long 2, uint 1, uint 0 + + store float 3.1415, float* %fptrA + store float 5.0, float* %fptrB + + ;; Test that a sequence of GEPs with constant indices are folded right + %fptrA1 = getelementptr %MixedA* %ArrayA, long 3 ; &ArrayA[3] + %fptrA2 = getelementptr %MixedA* %fptrA1, long 0, uint 1 ; &(*fptrA1).1 + %fptrA3 = getelementptr [15 x int]* %fptrA2, long 0, long 8 ; &(*fptrA2)[8] + store int 5, int* %fptrA3 ; ArrayA[3].1[8] = 5 + + %sqrtTwo = load float *%I1 + %exp = load float *%I2 + %I3 = getelementptr %MixedA* %ArrayA, long 1, uint 0 + %pi = load float* %I3 + %I4 = getelementptr %MixedB* %ArrayB, long 2, uint 1, uint 0 + %five = load float* %I4 + + %dsqrtTwo = cast float %sqrtTwo to double + %dexp = cast float %exp to double + %dpi = cast float %pi to double + %dfive = cast float %five to double + + %castFmt = getelementptr [44 x sbyte]* %fmtArg, long 0, long 0 + call int (sbyte*, ...)* %printf(sbyte* %castFmt, double %dsqrtTwo, double %dexp, double %dpi, double %dfive) + + ret int 0 +end diff --git a/test/CodeGen/Generic/debug-info.ll b/test/CodeGen/Generic/debug-info.ll new file mode 100644 index 0000000..49f693a --- /dev/null +++ b/test/CodeGen/Generic/debug-info.ll @@ -0,0 +1,19 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc +%lldb.compile_unit = type { uint, ushort, ushort, sbyte*, sbyte*, sbyte*, { }* } +%d.compile_unit7 = external global %lldb.compile_unit ; <%lldb.compile_unit*> [#uses=1] + +implementation ; Functions: + +declare void %llvm.dbg.stoppoint(uint, uint, %lldb.compile_unit*) + +void %rb_raise(int, ...) { +entry: + br bool false, label %strlen.exit, label %no_exit.i + +no_exit.i: ; preds = %entry + ret void + +strlen.exit: ; preds = %entry + call void %llvm.dbg.stoppoint(uint 4358, uint 0, %lldb.compile_unit* %d.compile_unit7 ) ; <{ }*> [#uses=0] + unreachable +} diff --git a/test/CodeGen/Generic/dg.exp b/test/CodeGen/Generic/dg.exp new file mode 100644 index 0000000..879685c --- /dev/null +++ b/test/CodeGen/Generic/dg.exp @@ -0,0 +1,3 @@ +load_lib llvm.exp + +RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,llx,c,cpp,tr}]] diff --git a/test/CodeGen/Generic/div-neg-power-2.ll b/test/CodeGen/Generic/div-neg-power-2.ll new file mode 100644 index 0000000..7452c7e --- /dev/null +++ b/test/CodeGen/Generic/div-neg-power-2.ll @@ -0,0 +1,6 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +int %test(int %X) { + %Y = div int %X, -2 + ret int %Y +} diff --git a/test/CodeGen/Generic/fneg-fabs.ll b/test/CodeGen/Generic/fneg-fabs.ll new file mode 100644 index 0000000..3dc4588 --- /dev/null +++ b/test/CodeGen/Generic/fneg-fabs.ll @@ -0,0 +1,26 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +double %fneg(double %X) { + %Y = sub double -0.0, %X + ret double %Y +} + +float %fnegf(float %X) { + %Y = sub float -0.0, %X + ret float %Y +} + +declare double %fabs(double) +declare float %fabsf(float) + + +double %fabstest(double %X) { + %Y = call double %fabs(double %X) + ret double %Y +} + +float %fabsftest(float %X) { + %Y = call float %fabsf(float %X) + ret float %Y +} + diff --git a/test/CodeGen/Generic/fp_to_int.ll b/test/CodeGen/Generic/fp_to_int.ll new file mode 100644 index 0000000..a99c5b5 --- /dev/null +++ b/test/CodeGen/Generic/fp_to_int.ll @@ -0,0 +1,67 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +sbyte %test1(double %X) { + %tmp.1 = cast double %X to sbyte + ret sbyte %tmp.1 +} +short %test2(double %X) { + %tmp.1 = cast double %X to short + ret short %tmp.1 +} +int %test3(double %X) { + %tmp.1 = cast double %X to int + ret int %tmp.1 +} +long %test4(double %X) { + %tmp.1 = cast double %X to long + ret long %tmp.1 +} +ubyte %test1u(double %X) { + %tmp.1 = cast double %X to ubyte + ret ubyte %tmp.1 +} +ushort %test2u(double %X) { + %tmp.1 = cast double %X to ushort + ret ushort %tmp.1 +} +uint %test3u(double %X) { + %tmp.1 = cast double %X to uint + ret uint %tmp.1 +} +ulong %test4u(double %X) { + %tmp.1 = cast double %X to ulong + ret ulong %tmp.1 +} + +sbyte %test1f(float %X) { + %tmp.1 = cast float %X to sbyte + ret sbyte %tmp.1 +} +short %test2f(float %X) { + %tmp.1 = cast float %X to short + ret short %tmp.1 +} +int %test3f(float %X) { + %tmp.1 = cast float %X to int + ret int %tmp.1 +} +long %test4f(float %X) { + %tmp.1 = cast float %X to long + ret long %tmp.1 +} +ubyte %test1uf(float %X) { + %tmp.1 = cast float %X to ubyte + ret ubyte %tmp.1 +} +ushort %test2uf(float %X) { + %tmp.1 = cast float %X to ushort + ret ushort %tmp.1 +} +uint %test3uf(float %X) { + %tmp.1 = cast float %X to uint + ret uint %tmp.1 +} +ulong %test4uf(float %X) { + %tmp.1 = cast float %X to ulong + ret ulong %tmp.1 +} diff --git a/test/CodeGen/Generic/fpowi-promote.ll b/test/CodeGen/Generic/fpowi-promote.ll new file mode 100644 index 0000000..55c2d2a --- /dev/null +++ b/test/CodeGen/Generic/fpowi-promote.ll @@ -0,0 +1,12 @@ +; RUN: llvm-as < %s | llc +; RUN: llvm-as < %s | llc -march=x86 -mcpu=i386 + +; PR1239 + +define float @test(float %tmp23302331, i32 %tmp23282329 ) { + +%tmp2339 = call float @llvm.powi.f32( float %tmp23302331, i32 %tmp23282329 ) + ret float %tmp2339 +} + +declare float @llvm.powi.f32(float,i32) diff --git a/test/CodeGen/Generic/fwdtwice.ll b/test/CodeGen/Generic/fwdtwice.ll new file mode 100644 index 0000000..ec085ec --- /dev/null +++ b/test/CodeGen/Generic/fwdtwice.ll @@ -0,0 +1,28 @@ +; RUN: llvm-upgrade %s | llvm-as | llc + +;; +;; Test the sequence: +;; cast -> setle 0, %cast -> br %cond +;; This sequence should cause the cast value to be forwarded twice, +;; i.e., cast is forwarded to the setle and teh setle is forwarded +;; to the branch. +;; register argument of the "branch-on-register" instruction, i.e., +;; +;; This produces the bogus output instruction: +;; brlez <NULL VALUE>, .L_SumArray_bb3. +;; This came from %bb1 of sumarrray.ll generated from sumarray.c. + + +int %SumArray(int %Num) { + %Num = alloca int + br label %Top +Top: + store int %Num, int * %Num + %reg108 = load int * %Num + %cast1006 = cast int %reg108 to uint + %cond1001 = setle uint %cast1006, 0 + br bool %cond1001, label %bb6, label %Top + +bb6: + ret int 42 +} diff --git a/test/CodeGen/Generic/global-ret0.ll b/test/CodeGen/Generic/global-ret0.ll new file mode 100644 index 0000000..dfe6aef --- /dev/null +++ b/test/CodeGen/Generic/global-ret0.ll @@ -0,0 +1,8 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +%g = global int 0 + +int %main() { + %h = load int* %g + ret int %h +} diff --git a/test/CodeGen/Generic/hello.ll b/test/CodeGen/Generic/hello.ll new file mode 100644 index 0000000..d9e9d58 --- /dev/null +++ b/test/CodeGen/Generic/hello.ll @@ -0,0 +1,11 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +%.str_1 = internal constant [7 x sbyte] c"hello\0A\00" + +declare int %printf(sbyte*, ...) + +int %main() { + %s = getelementptr [7 x sbyte]* %.str_1, long 0, long 0 + call int (sbyte*, ...)* %printf(sbyte* %s) + ret int 0 +} diff --git a/test/CodeGen/Generic/i128-addsub.ll b/test/CodeGen/Generic/i128-addsub.ll new file mode 100644 index 0000000..10f0acc --- /dev/null +++ b/test/CodeGen/Generic/i128-addsub.ll @@ -0,0 +1,39 @@ +; RUN: llvm-as < %s | llc + +define void @test_add(i64 %AL, i64 %AH, i64 %BL, i64 %BH, i64* %RL, i64* %RH) { +entry: + %tmp1 = zext i64 %AL to i128 ; <i128> [#uses=1] + %tmp23 = zext i64 %AH to i128 ; <i128> [#uses=1] + %tmp4 = shl i128 %tmp23, 64 ; <i128> [#uses=1] + %tmp5 = or i128 %tmp4, %tmp1 ; <i128> [#uses=1] + %tmp67 = zext i64 %BL to i128 ; <i128> [#uses=1] + %tmp89 = zext i64 %BH to i128 ; <i128> [#uses=1] + %tmp11 = shl i128 %tmp89, 64 ; <i128> [#uses=1] + %tmp12 = or i128 %tmp11, %tmp67 ; <i128> [#uses=1] + %tmp15 = add i128 %tmp12, %tmp5 ; <i128> [#uses=2] + %tmp1617 = trunc i128 %tmp15 to i64 ; <i64> [#uses=1] + store i64 %tmp1617, i64* %RL + %tmp21 = lshr i128 %tmp15, 64 ; <i128> [#uses=1] + %tmp2122 = trunc i128 %tmp21 to i64 ; <i64> [#uses=1] + store i64 %tmp2122, i64* %RH + ret void +} + +define void @test_sub(i64 %AL, i64 %AH, i64 %BL, i64 %BH, i64* %RL, i64* %RH) { +entry: + %tmp1 = zext i64 %AL to i128 ; <i128> [#uses=1] + %tmp23 = zext i64 %AH to i128 ; <i128> [#uses=1] + %tmp4 = shl i128 %tmp23, 64 ; <i128> [#uses=1] + %tmp5 = or i128 %tmp4, %tmp1 ; <i128> [#uses=1] + %tmp67 = zext i64 %BL to i128 ; <i128> [#uses=1] + %tmp89 = zext i64 %BH to i128 ; <i128> [#uses=1] + %tmp11 = shl i128 %tmp89, 64 ; <i128> [#uses=1] + %tmp12 = or i128 %tmp11, %tmp67 ; <i128> [#uses=1] + %tmp15 = sub i128 %tmp5, %tmp12 ; <i128> [#uses=2] + %tmp1617 = trunc i128 %tmp15 to i64 ; <i64> [#uses=1] + store i64 %tmp1617, i64* %RL + %tmp21 = lshr i128 %tmp15, 64 ; <i128> [#uses=1] + %tmp2122 = trunc i128 %tmp21 to i64 ; <i64> [#uses=1] + store i64 %tmp2122, i64* %RH + ret void +} diff --git a/test/CodeGen/Generic/i128-arith.ll b/test/CodeGen/Generic/i128-arith.ll new file mode 100644 index 0000000..9a67084 --- /dev/null +++ b/test/CodeGen/Generic/i128-arith.ll @@ -0,0 +1,11 @@ +; RUN: llvm-as < %s | llc + +define i64 @foo(i64 %x, i64 %y, i32 %amt) { + %tmp0 = zext i64 %x to i128 + %tmp1 = sext i64 %y to i128 + %tmp2 = or i128 %tmp0, %tmp1 + %tmp7 = zext i32 13 to i128 + %tmp3 = lshr i128 %tmp2, %tmp7 + %tmp4 = trunc i128 %tmp3 to i64 + ret i64 %tmp4 +} diff --git a/test/CodeGen/Generic/intrinsics.ll b/test/CodeGen/Generic/intrinsics.ll new file mode 100644 index 0000000..eb3148a --- /dev/null +++ b/test/CodeGen/Generic/intrinsics.ll @@ -0,0 +1,31 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +;; SQRT +declare float %llvm.sqrt.f32(float) +declare double %llvm.sqrt.f64(double) +double %test_sqrt(float %F) { + %G = call float %llvm.sqrt.f32(float %F) + %H = cast float %G to double + %I = call double %llvm.sqrt.f64(double %H) + ret double %I +} + +; SIN +declare float %sinf(float) +declare double %sin(double) +double %test_sin(float %F) { + %G = call float %sinf(float %F) + %H = cast float %G to double + %I = call double %sin(double %H) + ret double %I +} + +; COS +declare float %cosf(float) +declare double %cos(double) +double %test_cos(float %F) { + %G = call float %cosf(float %F) + %H = cast float %G to double + %I = call double %cos(double %H) + ret double %I +} diff --git a/test/CodeGen/Generic/isunord.ll b/test/CodeGen/Generic/isunord.ll new file mode 100644 index 0000000..1495bd0 --- /dev/null +++ b/test/CodeGen/Generic/isunord.ll @@ -0,0 +1,10 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc +; XFAIL: ia64 + + +declare bool %llvm.isunordered.f64(double, double) + +bool %test(double %X, double %Y) { + %tmp27 = call bool %llvm.isunordered.f64( double %X, double %Y) + ret bool %tmp27 +} diff --git a/test/CodeGen/Generic/llvm-ct-intrinsics.ll b/test/CodeGen/Generic/llvm-ct-intrinsics.ll new file mode 100644 index 0000000..014d261 --- /dev/null +++ b/test/CodeGen/Generic/llvm-ct-intrinsics.ll @@ -0,0 +1,59 @@ +; Make sure this testcase is supported by all code generators +; RUN: llvm-upgrade < %s | llvm-as | llc + +declare ulong %llvm.ctpop.i64(ulong) +declare uint %llvm.ctpop.i32(uint) +declare ushort %llvm.ctpop.i16(ushort) +declare ubyte %llvm.ctpop.i8(ubyte) + +void %ctpoptest(ubyte %A, ushort %B, uint %C, ulong %D, + ubyte *%AP, ushort* %BP, uint* %CP, ulong* %DP) { + %a = call ubyte %llvm.ctpop.i8(ubyte %A) + %b = call ushort %llvm.ctpop.i16(ushort %B) + %c = call uint %llvm.ctpop.i32(uint %C) + %d = call ulong %llvm.ctpop.i64(ulong %D) + + store ubyte %a, ubyte* %AP + store ushort %b, ushort* %BP + store uint %c, uint* %CP + store ulong %d, ulong* %DP + ret void +} + +declare ulong %llvm.ctlz.i64(ulong) +declare uint %llvm.ctlz.i32(uint) +declare ushort %llvm.ctlz.i16(ushort) +declare ubyte %llvm.ctlz.i8(ubyte) + +void %ctlztest(ubyte %A, ushort %B, uint %C, ulong %D, + ubyte *%AP, ushort* %BP, uint* %CP, ulong* %DP) { + %a = call ubyte %llvm.ctlz.i8(ubyte %A) + %b = call ushort %llvm.ctlz.i16(ushort %B) + %c = call uint %llvm.ctlz.i32(uint %C) + %d = call ulong %llvm.ctlz.i64(ulong %D) + + store ubyte %a, ubyte* %AP + store ushort %b, ushort* %BP + store uint %c, uint* %CP + store ulong %d, ulong* %DP + ret void +} + +declare ulong %llvm.cttz.i64(ulong) +declare uint %llvm.cttz.i32(uint) +declare ushort %llvm.cttz.i16(ushort) +declare ubyte %llvm.cttz.i8(ubyte) + +void %cttztest(ubyte %A, ushort %B, uint %C, ulong %D, + ubyte *%AP, ushort* %BP, uint* %CP, ulong* %DP) { + %a = call ubyte %llvm.cttz.i8(ubyte %A) + %b = call ushort %llvm.cttz.i16(ushort %B) + %c = call uint %llvm.cttz.i32(uint %C) + %d = call ulong %llvm.cttz.i64(ulong %D) + + store ubyte %a, ubyte* %AP + store ushort %b, ushort* %BP + store uint %c, uint* %CP + store ulong %d, ulong* %DP + ret void +} diff --git a/test/CodeGen/Generic/negintconst.ll b/test/CodeGen/Generic/negintconst.ll new file mode 100644 index 0000000..020b6bb --- /dev/null +++ b/test/CodeGen/Generic/negintconst.ll @@ -0,0 +1,51 @@ +; RUN: llvm-upgrade %s | llvm-as | llc + +; Test that a negative constant smaller than 64 bits (e.g., int) +; is correctly implemented with sign-extension. +; In particular, the current code generated is: +; +; main: +; .L_main_LL_0: +; save %o6, -224, %o6 +; setx .G_fmtArg_1, %o1, %o0 +; setuw 1, %o1 ! i = 1 +; setuw 4294967295, %o3 ! THE BUG: 0x00000000ffffffff +; setsw 0, %i0 +; add %i6, 1999, %o2 ! fval +; add %o1, %g0, %o1 +; add %o0, 0, %o0 +; mulx %o1, %o3, %o1 ! ERROR: 0xffffffff; should be -1 +; add %o1, 3, %o1 ! ERROR: 0x100000002; should be 0x2 +; mulx %o1, 12, %o3 ! +; add %o2, %o3, %o3 ! produces bad address! +; call printf +; nop +; jmpl %i7+8, %g0 +; restore %g0, 0, %g0 +; +; llc produces: +; ioff = 2 fval = 0xffffffff7fffec90 &fval[2] = 0xb7fffeca8 +; instead of: +; ioff = 2 fval = 0xffffffff7fffec90 &fval[2] = 0xffffffff7fffeca8 +; + +%Results = type { float, float, float } + +%fmtArg = internal global [39 x sbyte] c"ioff = %u\09fval = 0x%p\09&fval[2] = 0x%p\0A\00"; <[39 x sbyte]*> [#uses=1] + +implementation + +declare int "printf"(sbyte*, ...) + +int "main"() +begin + %fval = alloca %Results, uint 4 + %i = add uint 1, 0 ; i = 1 + %iscale = mul uint %i, 4294967295 ; i*-1 = -1 + %ioff = add uint %iscale, 3 ; 3+(-i) = 2 + %ioff = cast uint %ioff to long + %fptr = getelementptr %Results* %fval, long %ioff ; &fval[2] + %castFmt = getelementptr [39 x sbyte]* %fmtArg, long 0, long 0 + call int (sbyte*, ...)* %printf(sbyte* %castFmt, uint %ioff, %Results* %fval, %Results* %fptr) + ret int 0 +end diff --git a/test/CodeGen/Generic/nested-select.ll b/test/CodeGen/Generic/nested-select.ll new file mode 100644 index 0000000..192d29f --- /dev/null +++ b/test/CodeGen/Generic/nested-select.ll @@ -0,0 +1,20 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc -o /dev/null -f + +; Test that select of a select works + +%typedef.tree = type opaque + +implementation + +int %ic_test(double %p.0.2.0.val, double %p.0.2.1.val, double %p.0.2.2.val, %typedef.tree* %t) { + %result.1.0 = cast bool false to int ; <int> [#uses=1] + %tmp.55 = setge double 0.000000e+00, 1.000000e+00 ; <bool> [#uses=1] + %tmp.66 = div double 0.000000e+00, 0.000000e+00 ; <double> [#uses=1] + br label %N +N: + %result.1.1 = select bool %tmp.55, int 0, int %result.1.0 ; <int> [#uses=1] + %tmp.75 = setge double %tmp.66, 1.000000e+00 ; <bool> [#uses=1] + %retval1 = select bool %tmp.75, int 0, int %result.1.1 ; <int> [#uses=1] + ret int %retval1 +} + diff --git a/test/CodeGen/Generic/phi-immediate-factoring.ll b/test/CodeGen/Generic/phi-immediate-factoring.ll new file mode 100644 index 0000000..cec1b43 --- /dev/null +++ b/test/CodeGen/Generic/phi-immediate-factoring.ll @@ -0,0 +1,54 @@ +; PR1296 +; RUN: llvm-as < %s | llc -march=x86 | grep {movl \$1} | wc -l | grep 1 + +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64" +target triple = "i686-apple-darwin8" + +define i32 @foo(i32 %A, i32 %B, i32 %C) { +entry: + switch i32 %A, label %out [ + i32 1, label %bb + i32 0, label %bb13 + i32 2, label %bb35 + ] + +bb: ; preds = %cond_next, %entry + %i.144.1 = phi i32 [ 0, %entry ], [ %tmp7, %cond_next ] ; <i32> [#uses=2] + %tmp4 = and i32 %i.144.1, %B ; <i32> [#uses=1] + icmp eq i32 %tmp4, 0 ; <i1>:0 [#uses=1] + br i1 %0, label %cond_next, label %out + +cond_next: ; preds = %bb + %tmp7 = add i32 %i.144.1, 1 ; <i32> [#uses=2] + icmp slt i32 %tmp7, 1000 ; <i1>:1 [#uses=1] + br i1 %1, label %bb, label %out + +bb13: ; preds = %cond_next18, %entry + %i.248.1 = phi i32 [ 0, %entry ], [ %tmp20, %cond_next18 ] ; <i32> [#uses=2] + %tmp16 = and i32 %i.248.1, %C ; <i32> [#uses=1] + icmp eq i32 %tmp16, 0 ; <i1>:2 [#uses=1] + br i1 %2, label %cond_next18, label %out + +cond_next18: ; preds = %bb13 + %tmp20 = add i32 %i.248.1, 1 ; <i32> [#uses=2] + icmp slt i32 %tmp20, 1000 ; <i1>:3 [#uses=1] + br i1 %3, label %bb13, label %out + +bb27: ; preds = %bb35 + %tmp30 = and i32 %i.3, %C ; <i32> [#uses=1] + icmp eq i32 %tmp30, 0 ; <i1>:4 [#uses=1] + br i1 %4, label %cond_next32, label %out + +cond_next32: ; preds = %bb27 + %indvar.next = add i32 %i.3, 1 ; <i32> [#uses=1] + br label %bb35 + +bb35: ; preds = %entry, %cond_next32 + %i.3 = phi i32 [ %indvar.next, %cond_next32 ], [ 0, %entry ] ; <i32> [#uses=3] + icmp slt i32 %i.3, 1000 ; <i1>:5 [#uses=1] + br i1 %5, label %bb27, label %out + +out: ; preds = %bb27, %bb35, %bb13, %cond_next18, %bb, %cond_next, %entry + %result.0 = phi i32 [ 0, %entry ], [ 1, %bb ], [ 0, %cond_next ], [ 1, %bb13 ], [ 0, %cond_next18 ], [ 1, %bb27 ], [ 0, %bb35 ] ; <i32> [#uses=1] + ret i32 %result.0 +} diff --git a/test/CodeGen/Generic/print-add.ll b/test/CodeGen/Generic/print-add.ll new file mode 100644 index 0000000..ef224a1 --- /dev/null +++ b/test/CodeGen/Generic/print-add.ll @@ -0,0 +1,18 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +%.str_1 = internal constant [4 x sbyte] c"%d\0A\00" + +declare int %printf(sbyte*, ...) + +int %main() { + %f = getelementptr [4 x sbyte]* %.str_1, long 0, long 0 + %d = add int 1, 0 + call int (sbyte*, ...)* %printf(sbyte* %f, int %d) + %e = add int 38, 2 + call int (sbyte*, ...)* %printf(sbyte* %f, int %e) + %g = add int %d, %d + %h = add int %e, %g + call int (sbyte*, ...)* %printf(sbyte* %f, int %h) + ret int 0 +} + diff --git a/test/CodeGen/Generic/print-arith-fp.ll b/test/CodeGen/Generic/print-arith-fp.ll new file mode 100644 index 0000000..cfa7583 --- /dev/null +++ b/test/CodeGen/Generic/print-arith-fp.ll @@ -0,0 +1,76 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +%a_str = internal constant [8 x sbyte] c"a = %f\0A\00" +%b_str = internal constant [8 x sbyte] c"b = %f\0A\00" +;; binary ops: arith +%add_str = internal constant [12 x sbyte] c"a + b = %f\0A\00" +%sub_str = internal constant [12 x sbyte] c"a - b = %f\0A\00" +%mul_str = internal constant [12 x sbyte] c"a * b = %f\0A\00" +%div_str = internal constant [12 x sbyte] c"b / a = %f\0A\00" +%rem_str = internal constant [13 x sbyte] c"b %% a = %f\0A\00" +;; binary ops: setcc +%lt_str = internal constant [12 x sbyte] c"a < b = %d\0A\00" +%le_str = internal constant [13 x sbyte] c"a <= b = %d\0A\00" +%gt_str = internal constant [12 x sbyte] c"a > b = %d\0A\00" +%ge_str = internal constant [13 x sbyte] c"a >= b = %d\0A\00" +%eq_str = internal constant [13 x sbyte] c"a == b = %d\0A\00" +%ne_str = internal constant [13 x sbyte] c"a != b = %d\0A\00" + +declare int %printf(sbyte*, ...) +%A = global double 2.0 +%B = global double 5.0 + +int %main() { + ;; main vars + %a = load double* %A + %b = load double* %B + + %a_s = getelementptr [8 x sbyte]* %a_str, long 0, long 0 + %b_s = getelementptr [8 x sbyte]* %b_str, long 0, long 0 + + call int (sbyte*, ...)* %printf(sbyte* %a_s, double %a) + call int (sbyte*, ...)* %printf(sbyte* %b_s, double %b) + + ;; arithmetic + %add_r = add double %a, %b + %sub_r = sub double %a, %b + %mul_r = mul double %a, %b + %div_r = div double %b, %a + %rem_r = rem double %b, %a + + %add_s = getelementptr [12 x sbyte]* %add_str, long 0, long 0 + %sub_s = getelementptr [12 x sbyte]* %sub_str, long 0, long 0 + %mul_s = getelementptr [12 x sbyte]* %mul_str, long 0, long 0 + %div_s = getelementptr [12 x sbyte]* %div_str, long 0, long 0 + %rem_s = getelementptr [13 x sbyte]* %rem_str, long 0, long 0 + + call int (sbyte*, ...)* %printf(sbyte* %add_s, double %add_r) + call int (sbyte*, ...)* %printf(sbyte* %sub_s, double %sub_r) + call int (sbyte*, ...)* %printf(sbyte* %mul_s, double %mul_r) + call int (sbyte*, ...)* %printf(sbyte* %div_s, double %div_r) + call int (sbyte*, ...)* %printf(sbyte* %rem_s, double %rem_r) + + ;; setcc + %lt_r = setlt double %a, %b + %le_r = setle double %a, %b + %gt_r = setgt double %a, %b + %ge_r = setge double %a, %b + %eq_r = seteq double %a, %b + %ne_r = setne double %a, %b + + %lt_s = getelementptr [12 x sbyte]* %lt_str, long 0, long 0 + %le_s = getelementptr [13 x sbyte]* %le_str, long 0, long 0 + %gt_s = getelementptr [12 x sbyte]* %gt_str, long 0, long 0 + %ge_s = getelementptr [13 x sbyte]* %ge_str, long 0, long 0 + %eq_s = getelementptr [13 x sbyte]* %eq_str, long 0, long 0 + %ne_s = getelementptr [13 x sbyte]* %ne_str, long 0, long 0 + + call int (sbyte*, ...)* %printf(sbyte* %lt_s, bool %lt_r) + call int (sbyte*, ...)* %printf(sbyte* %le_s, bool %le_r) + call int (sbyte*, ...)* %printf(sbyte* %gt_s, bool %gt_r) + call int (sbyte*, ...)* %printf(sbyte* %ge_s, bool %ge_r) + call int (sbyte*, ...)* %printf(sbyte* %eq_s, bool %eq_r) + call int (sbyte*, ...)* %printf(sbyte* %ne_s, bool %ne_r) + + ret int 0 +} diff --git a/test/CodeGen/Generic/print-arith-int.ll b/test/CodeGen/Generic/print-arith-int.ll new file mode 100644 index 0000000..708abec --- /dev/null +++ b/test/CodeGen/Generic/print-arith-int.ll @@ -0,0 +1,102 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +%a_str = internal constant [8 x sbyte] c"a = %d\0A\00" +%b_str = internal constant [8 x sbyte] c"b = %d\0A\00" +;; binary ops: arith +%add_str = internal constant [12 x sbyte] c"a + b = %d\0A\00" +%sub_str = internal constant [12 x sbyte] c"a - b = %d\0A\00" +%mul_str = internal constant [12 x sbyte] c"a * b = %d\0A\00" +%div_str = internal constant [12 x sbyte] c"b / a = %d\0A\00" +%rem_str = internal constant [13 x sbyte] c"b \% a = %d\0A\00" +;; binary ops: setcc +%lt_str = internal constant [12 x sbyte] c"a < b = %d\0A\00" +%le_str = internal constant [13 x sbyte] c"a <= b = %d\0A\00" +%gt_str = internal constant [12 x sbyte] c"a > b = %d\0A\00" +%ge_str = internal constant [13 x sbyte] c"a >= b = %d\0A\00" +%eq_str = internal constant [13 x sbyte] c"a == b = %d\0A\00" +%ne_str = internal constant [13 x sbyte] c"a != b = %d\0A\00" +;; logical +%and_str = internal constant [12 x sbyte] c"a & b = %d\0A\00" +%or_str = internal constant [12 x sbyte] c"a | b = %d\0A\00" +%xor_str = internal constant [12 x sbyte] c"a ^ b = %d\0A\00" +%shl_str = internal constant [13 x sbyte] c"b << a = %d\0A\00" +%shr_str = internal constant [13 x sbyte] c"b >> a = %d\0A\00" + +declare int %printf(sbyte*, ...) +%A = global int 2 +%B = global int 5 + +int %main() { + ;; main vars + %a = load int* %A + %b = load int* %B + + %a_s = getelementptr [8 x sbyte]* %a_str, long 0, long 0 + %b_s = getelementptr [8 x sbyte]* %b_str, long 0, long 0 + + call int (sbyte*, ...)* %printf(sbyte* %a_s, int %a) + call int (sbyte*, ...)* %printf(sbyte* %b_s, int %b) + + ;; arithmetic + %add_r = add int %a, %b + %sub_r = sub int %a, %b + %mul_r = mul int %a, %b + %div_r = div int %b, %a + %rem_r = rem int %b, %a + + %add_s = getelementptr [12 x sbyte]* %add_str, long 0, long 0 + %sub_s = getelementptr [12 x sbyte]* %sub_str, long 0, long 0 + %mul_s = getelementptr [12 x sbyte]* %mul_str, long 0, long 0 + %div_s = getelementptr [12 x sbyte]* %div_str, long 0, long 0 + %rem_s = getelementptr [13 x sbyte]* %rem_str, long 0, long 0 + + call int (sbyte*, ...)* %printf(sbyte* %add_s, int %add_r) + call int (sbyte*, ...)* %printf(sbyte* %sub_s, int %sub_r) + call int (sbyte*, ...)* %printf(sbyte* %mul_s, int %mul_r) + call int (sbyte*, ...)* %printf(sbyte* %div_s, int %div_r) + call int (sbyte*, ...)* %printf(sbyte* %rem_s, int %rem_r) + + ;; setcc + %lt_r = setlt int %a, %b + %le_r = setle int %a, %b + %gt_r = setgt int %a, %b + %ge_r = setge int %a, %b + %eq_r = seteq int %a, %b + %ne_r = setne int %a, %b + + %lt_s = getelementptr [12 x sbyte]* %lt_str, long 0, long 0 + %le_s = getelementptr [13 x sbyte]* %le_str, long 0, long 0 + %gt_s = getelementptr [12 x sbyte]* %gt_str, long 0, long 0 + %ge_s = getelementptr [13 x sbyte]* %ge_str, long 0, long 0 + %eq_s = getelementptr [13 x sbyte]* %eq_str, long 0, long 0 + %ne_s = getelementptr [13 x sbyte]* %ne_str, long 0, long 0 + + call int (sbyte*, ...)* %printf(sbyte* %lt_s, bool %lt_r) + call int (sbyte*, ...)* %printf(sbyte* %le_s, bool %le_r) + call int (sbyte*, ...)* %printf(sbyte* %gt_s, bool %gt_r) + call int (sbyte*, ...)* %printf(sbyte* %ge_s, bool %ge_r) + call int (sbyte*, ...)* %printf(sbyte* %eq_s, bool %eq_r) + call int (sbyte*, ...)* %printf(sbyte* %ne_s, bool %ne_r) + + ;; logical + %and_r = and int %a, %b + %or_r = or int %a, %b + %xor_r = xor int %a, %b + %u = cast int %a to ubyte + %shl_r = shl int %b, ubyte %u + %shr_r = shr int %b, ubyte %u + + %and_s = getelementptr [12 x sbyte]* %and_str, long 0, long 0 + %or_s = getelementptr [12 x sbyte]* %or_str, long 0, long 0 + %xor_s = getelementptr [12 x sbyte]* %xor_str, long 0, long 0 + %shl_s = getelementptr [13 x sbyte]* %shl_str, long 0, long 0 + %shr_s = getelementptr [13 x sbyte]* %shr_str, long 0, long 0 + + call int (sbyte*, ...)* %printf(sbyte* %and_s, int %and_r) + call int (sbyte*, ...)* %printf(sbyte* %or_s, int %or_r) + call int (sbyte*, ...)* %printf(sbyte* %xor_s, int %xor_r) + call int (sbyte*, ...)* %printf(sbyte* %shl_s, int %shl_r) + call int (sbyte*, ...)* %printf(sbyte* %shr_s, int %shr_r) + + ret int 0 +} diff --git a/test/CodeGen/Generic/print-int.ll b/test/CodeGen/Generic/print-int.ll new file mode 100644 index 0000000..27cf637 --- /dev/null +++ b/test/CodeGen/Generic/print-int.ll @@ -0,0 +1,13 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +%.str_1 = internal constant [4 x sbyte] c"%d\0A\00" + +declare int %printf(sbyte*, ...) + +int %main() { + %f = getelementptr [4 x sbyte]* %.str_1, long 0, long 0 + %d = add int 0, 0 + %tmp.0 = call int (sbyte*, ...)* %printf(sbyte* %f, int %d) + ret int 0 +} + diff --git a/test/CodeGen/Generic/print-mul-exp.ll b/test/CodeGen/Generic/print-mul-exp.ll new file mode 100644 index 0000000..d5f5f93 --- /dev/null +++ b/test/CodeGen/Generic/print-mul-exp.ll @@ -0,0 +1,57 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +%a_str = internal constant [8 x sbyte] c"a = %d\0A\00" +%a_mul_str = internal constant [13 x sbyte] c"a * %d = %d\0A\00" +%A = global int 2 +declare int %printf(sbyte*, ...) + +int %main() { + %a = load int* %A + %a_s = getelementptr [8 x sbyte]* %a_str, long 0, long 0 + %a_mul_s = getelementptr [13 x sbyte]* %a_mul_str, long 0, long 0 + call int (sbyte*, ...)* %printf(sbyte* %a_s, int %a) + + %r_0 = mul int %a, 0 + %r_1 = mul int %a, 1 + %r_2 = mul int %a, 2 + %r_3 = mul int %a, 3 + %r_4 = mul int %a, 4 + %r_5 = mul int %a, 5 + %r_6 = mul int %a, 6 + %r_7 = mul int %a, 7 + %r_8 = mul int %a, 8 + %r_9 = mul int %a, 9 + %r_10 = mul int %a, 10 + %r_11 = mul int %a, 11 + %r_12 = mul int %a, 12 + %r_13 = mul int %a, 13 + %r_14 = mul int %a, 14 + %r_15 = mul int %a, 15 + %r_16 = mul int %a, 16 + %r_17 = mul int %a, 17 + %r_18 = mul int %a, 18 + %r_19 = mul int %a, 19 + + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 0, int %r_0) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 1, int %r_1) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 2, int %r_2) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 3, int %r_3) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 4, int %r_4) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 5, int %r_5) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 6, int %r_6) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 7, int %r_7) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 8, int %r_8) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 9, int %r_9) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 10, int %r_10) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 11, int %r_11) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 12, int %r_12) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 13, int %r_13) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 14, int %r_14) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 15, int %r_15) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 16, int %r_16) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 17, int %r_17) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 18, int %r_18) + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int 19, int %r_19) + + ret int 0 +} diff --git a/test/CodeGen/Generic/print-mul.ll b/test/CodeGen/Generic/print-mul.ll new file mode 100644 index 0000000..911c73e --- /dev/null +++ b/test/CodeGen/Generic/print-mul.ll @@ -0,0 +1,35 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +%a_str = internal constant [8 x sbyte] c"a = %d\0A\00" +%b_str = internal constant [8 x sbyte] c"b = %d\0A\00" + +;; mul +%a_mul_str = internal constant [13 x sbyte] c"a * %d = %d\0A\00" + +declare int %printf(sbyte*, ...) +%A = global int 2 +%B = global int 5 + +int %main() { +entry: + %a = load int* %A + %b = load int* %B + %a_s = getelementptr [8 x sbyte]* %a_str, long 0, long 0 + %b_s = getelementptr [8 x sbyte]* %b_str, long 0, long 0 + %a_mul_s = getelementptr [13 x sbyte]* %a_mul_str, long 0, long 0 + call int (sbyte*, ...)* %printf(sbyte* %a_s, int %a) + call int (sbyte*, ...)* %printf(sbyte* %b_s, int %b) + br label %shl_test + +shl_test: + ;; test mul by 0-255 + %s = phi int [ 0, %entry ], [ %s_inc, %shl_test ] + %result = mul int %a, %s + call int (sbyte*, ...)* %printf(sbyte* %a_mul_s, int %s, int %result) + %s_inc = add int %s, 1 + %done = seteq int %s, 256 + br bool %done, label %fini, label %shl_test + +fini: + ret int 0 +} diff --git a/test/CodeGen/Generic/print-shift.ll b/test/CodeGen/Generic/print-shift.ll new file mode 100644 index 0000000..4f699d5 --- /dev/null +++ b/test/CodeGen/Generic/print-shift.ll @@ -0,0 +1,35 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +%a_str = internal constant [8 x sbyte] c"a = %d\0A\00" +%b_str = internal constant [8 x sbyte] c"b = %d\0A\00" + +;; shl +%a_shl_str = internal constant [14 x sbyte] c"a << %d = %d\0A\00" + +declare int %printf(sbyte*, ...) +%A = global int 2 +%B = global int 5 + +int %main() { +entry: + %a = load int* %A + %b = load int* %B + %a_s = getelementptr [8 x sbyte]* %a_str, long 0, long 0 + %b_s = getelementptr [8 x sbyte]* %b_str, long 0, long 0 + %a_shl_s = getelementptr [14 x sbyte]* %a_shl_str, long 0, long 0 + call int (sbyte*, ...)* %printf(sbyte* %a_s, int %a) + call int (sbyte*, ...)* %printf(sbyte* %b_s, int %b) + br label %shl_test + +shl_test: + ;; test left shifts 0-31 + %s = phi ubyte [ 0, %entry ], [ %s_inc, %shl_test ] + %result = shl int %a, ubyte %s + call int (sbyte*, ...)* %printf(sbyte* %a_shl_s, ubyte %s, int %result) + %s_inc = add ubyte %s, 1 + %done = seteq ubyte %s, 32 + br bool %done, label %fini, label %shl_test + +fini: + ret int 0 +} diff --git a/test/CodeGen/Generic/ret0.ll b/test/CodeGen/Generic/ret0.ll new file mode 100644 index 0000000..4d0d10b --- /dev/null +++ b/test/CodeGen/Generic/ret0.ll @@ -0,0 +1,5 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +int %main() { + ret int 0 +} diff --git a/test/CodeGen/Generic/ret42.ll b/test/CodeGen/Generic/ret42.ll new file mode 100644 index 0000000..88d3c98 --- /dev/null +++ b/test/CodeGen/Generic/ret42.ll @@ -0,0 +1,5 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +int %main() { + ret int 42 +} diff --git a/test/CodeGen/Generic/sched.ll b/test/CodeGen/Generic/sched.ll new file mode 100644 index 0000000..ed2f44e --- /dev/null +++ b/test/CodeGen/Generic/sched.ll @@ -0,0 +1,33 @@ +; RUN: llvm-upgrade %s | llvm-as | llc + +implementation +declare int "printf"(sbyte*, int, float) + + +int "testissue"(int %i, float %x, float %y) +begin + br label %bb1 +bb1: + %x1 = mul float %x, %y ;; x1 + %y1 = mul float %y, 0.75 ;; y1 + %z1 = add float %x1, %y1 ;; z1 = x1 + y1 + + %x2 = mul float %x, 0.5 ;; x2 + %y2 = mul float %y, 0.9 ;; y2 + %z2 = add float %x2, %y2 ;; z2 = x2 + y2 + + %z3 = add float %z1, %z2 ;; z3 = z1 + z2 + + %i1 = shl int %i, ubyte 3 ;; i1 + %j1 = add int %i, 7 ;; j1 + %m1 = add int %i1, %j1 ;; k1 = i1 + j1 +;; %m1 = div int %k1, 99 ;; m1 = k1 / 99 + + %b = setle int %m1, 6 ;; (m1 <= 6)? + br bool %b, label %bb1, label %bb2 + +bb2: + %Msg = cast ulong 0 to sbyte * + call int %printf(sbyte* %Msg, int %m1, float %z3) + ret int 0 +end diff --git a/test/CodeGen/Generic/select.ll b/test/CodeGen/Generic/select.ll new file mode 100644 index 0000000..edf3641 --- /dev/null +++ b/test/CodeGen/Generic/select.ll @@ -0,0 +1,209 @@ +; RUN: llvm-upgrade %s | llvm-as | llc + +%AConst = constant int 123 + +%Domain = type { sbyte*, int, int*, int, int, int*, %Domain* } + +implementation + +; Test setting values of different constants in registers. +; +void "testConsts"(int %N, float %X) +begin +; <label>:0 + %a = add int %N, 1 ; 1 should be put in immed field + %i = add int %N, 12345678 ; constant has to be loaded + %b = add short 4, 3 ; one of the operands shd be immed + %c = add float %X, 0.0 ; will this be optimzzed? + %d = add float %X, 3.1415 ; constant has to be loaded + %f = add uint 4294967295, 10 ; result shd be 9 (not in immed fld) + %g = add ushort 20, 65535 ; result shd be 19 (65536 in immed fld) + %j = add ushort 65535, 30 ; result shd be 29 (not in immed fld) + %h = add ubyte 40, 255 ; result shd be 39 (255 in immed fld) + %k = add ubyte 255, 50 ; result shd be 49 (not in immed fld) + + ret void +end + +; A SetCC whose result is used should produce instructions to +; compute the boolean value in a register. One whose result +; is unused will only generate the condition code but not +; the boolean result. +; +void "unusedBool"(int * %x, int * %y) +begin +; <label>:0 ; [#uses=0] + seteq int * %x, %y ; <bool>:0 [#uses=1] + xor bool %0, true ; <bool>:1 [#uses=0] + setne int * %x, %y ; <bool>:2 [#uses=0] + ret void +end + +; A constant argument to a Phi produces a Cast instruction in the +; corresponding predecessor basic block. This checks a few things: +; -- phi arguments coming from the bottom of the same basic block +; (they should not be forward substituted in the machine code!) +; -- code generation for casts of various types +; -- use of immediate fields for integral constants of different sizes +; -- branch on a constant condition +; +void "mergeConstants"(int * %x, int * %y) +begin +; <label>:0 + br label %Top +Top: + phi int [ 0, %0 ], [ 1, %Top ], [ 524288, %Next ] + phi float [ 0.0, %0 ], [ 1.0, %Top ], [ 2.0, %Next ] + phi double [ 0.5, %0 ], [ 1.5, %Top ], [ 2.5, %Next ] + phi bool [ true, %0 ], [ false,%Top ], [ true, %Next ] + br bool true, label %Top, label %Next +Next: + br label %Top +end + + + +; A constant argument to a cast used only once should be forward substituted +; and loaded where needed, which happens is: +; -- User of cast has no immediate field +; -- User of cast has immediate field but constant is too large to fit +; or constant is not resolved until later (e.g., global address) +; -- User of cast uses it as a call arg. or return value so it is an implicit +; use but has to be loaded into a virtual register so that the reg. +; allocator can allocate the appropriate phys. reg. for it +; +int* "castconst"(float) +begin +; <label>:0 + %castbig = cast ulong 99999999 to int + %castsmall = cast ulong 1 to int + %usebig = add int %castbig, %castsmall + + %castglob = cast int* %AConst to long* + %dummyl = load long* %castglob + + %castnull = cast ulong 0 to int* + ret int* %castnull +end + + + +; Test branch-on-comparison-with-zero, in two ways: +; 1. can be folded +; 2. cannot be folded because result of comparison is used twice +; +void "testbool"(int %A, int %B) { + br label %Top +Top: + %D = add int %A, %B + %E = sub int %D, -4 + %C = setle int %E, 0 + br bool %C, label %retlbl, label %loop + +loop: + %F = add int %A, %B + %G = sub int %D, -4 + %D = setle int %G, 0 + %E = xor bool %D, true + br bool %E, label %loop, label %Top + +retlbl: + ret void +end + + +;; Test use of a boolean result in cast operations. +;; Requires converting a condition code result into a 0/1 value in a reg. +;; +implementation + +int %castbool(int %A, int %B) { +bb0: ; [#uses=0] + %cond213 = setlt int %A, %B ; <bool> [#uses=1] + %cast110 = cast bool %cond213 to ubyte ; <ubyte> [#uses=1] + %cast109 = cast ubyte %cast110 to int ; <int> [#uses=1] + ret int %cast109 +} + + +;; Test use of a boolean result in arithmetic and logical operations. +;; Requires converting a condition code result into a 0/1 value in a reg. +;; +bool %boolexpr(bool %b, int %N) { + %b2 = setge int %N, 0 + %b3 = and bool %b, %b2 + ret bool %b3 +} + + +; Test branch on floating point comparison +; +void "testfloatbool"(float %x, float %y) ; Def %0, %1 - float +begin +; <label>:0 + br label %Top +Top: + %p = add float %x, %y ; Def 2 - float + %z = sub float %x, %y ; Def 3 - float + %b = setle float %p, %z ; Def 0 - bool + %c = xor bool %b, true ; Def 1 - bool + br bool %b, label %Top, label %goon +goon: + ret void +end + + +; Test cases where an LLVM instruction requires no machine +; instructions (e.g., cast int* to long). But there are 2 cases: +; 1. If the result register has only a single use and the use is in the +; same basic block, the operand will be copy-propagated during +; instruction selection. +; 2. If the result register has multiple uses or is in a different +; basic block, it cannot (or will not) be copy propagated during +; instruction selection. It will generate a +; copy instruction (add-with-0), but this copy should get coalesced +; away by the register allocator. +; +int "checkForward"(int %N, int* %A) +begin + +bb2: ;;<label> + %reg114 = shl int %N, ubyte 2 ;; + %cast115 = cast int %reg114 to long ;; reg114 will be propagated + %cast116 = cast int* %A to long ;; %A will be propagated + %reg116 = add long %cast116, %cast115 ;; + %castPtr = cast long %reg116 to int* ;; %A will be propagated + %reg118 = load int* %castPtr ;; + %cast117 = cast int %reg118 to long ;; reg118 will be copied 'cos + %reg159 = add long 1234567, %cast117 ;; cast117 has 2 uses, here + %reg160 = add long 7654321, %cast117 ;; and here. + ret int 0 +end + + +; Test case for unary NOT operation constructed from XOR. +; +void "checkNot"(bool %b, int %i) +begin + %notB = xor bool %b, true + %notI = xor int %i, -1 + %F = setge int %notI, 100 + %J = add int %i, %i + %andNotB = and bool %F, %notB ;; should get folded with notB + %andNotI = and int %J, %notI ;; should get folded with notI + + %notB2 = xor bool true, %b ;; should become XNOR + %notI2 = xor int -1, %i ;; should become XNOR + + ret void +end + + +; Test case for folding getelementptr into a load/store +; +int "checkFoldGEP"(%Domain* %D, long %idx) +begin + %reg841 = getelementptr %Domain* %D, long 0, uint 1 + %reg820 = load int* %reg841 + ret int %reg820 +end diff --git a/test/CodeGen/Generic/shift-int64.ll b/test/CodeGen/Generic/shift-int64.ll new file mode 100644 index 0000000..a5ab37d --- /dev/null +++ b/test/CodeGen/Generic/shift-int64.ll @@ -0,0 +1,11 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +long %test_imm(long %X) { + %Y = shr long %X, ubyte 17 + ret long %Y +} + +long %test_variable(long %X, ubyte %Amt) { + %Y = shr long %X, ubyte %Amt + ret long %Y +} diff --git a/test/CodeGen/Generic/spillccr.ll b/test/CodeGen/Generic/spillccr.ll new file mode 100644 index 0000000..6ae7506 --- /dev/null +++ b/test/CodeGen/Generic/spillccr.ll @@ -0,0 +1,50 @@ +; RUN: llvm-upgrade %s | llvm-as | llc + +; July 6, 2002 -- LLC Regression test +; This test case checks if the integer CC register %xcc (or %ccr) +; is correctly spilled. The code fragment came from function +; MakeGraph in Olden-mst. +; The original code made all comparisons with 0, so that the %xcc +; register is not needed for the branch in the first basic block. +; Replace 0 with 1 in the first comparson so that the +; branch-on-register instruction cannot be used directly, i.e., +; the %xcc register is needed for the first branch. +; + %Graph = type %struct.graph_st* + %Hash = type %struct.hash* + %HashEntry = type %struct.hash_entry* + %Vertex = type %struct.vert_st* + %struct.graph_st = type { [1 x %Vertex] } + %struct.hash = type { %HashEntry*, int (uint)*, int } + %struct.hash_entry = type { uint, sbyte*, %HashEntry } + %struct.vert_st = type { int, %Vertex, %Hash } +%HashRange = uninitialized global int ; <int*> [#uses=1] +%.LC0 = internal global [13 x sbyte] c"Make phase 2\00" ; <[13 x sbyte]*> [#uses=1] +%.LC1 = internal global [13 x sbyte] c"Make phase 3\00" ; <[13 x sbyte]*> [#uses=1] +%.LC2 = internal global [13 x sbyte] c"Make phase 4\00" ; <[13 x sbyte]*> [#uses=1] +%.LC3 = internal global [15 x sbyte] c"Make returning\00" ; <[15 x sbyte]*> [#uses=1] + +implementation ; Functions: + +%Graph %MakeGraph(int %numvert, int %numproc) { +bb1: ;[#uses=1] + %reg111 = add int %numproc, -1 ; <int> [#uses=3] + %cond275 = setlt int %reg111, 1 ; <bool> [#uses=2] + %cond276 = setle int %reg111, 0 ; <bool> [#uses=1] + %cond277 = setge int %numvert, 0 ; <bool> [#uses=2] + %reg162 = add int %numvert, 3 ; <int> [#uses=2] + br bool %cond275, label %bb7, label %bb4 + +bb4: + br bool %cond276, label %bb7, label %bb5 + +bb5: + br bool %cond277, label %bb7, label %bb6 + +bb6: ;[#uses=2] + ret %Graph null + +bb7: ;[#uses=2] + ret %Graph null +} + diff --git a/test/CodeGen/Generic/stacksave-restore.ll b/test/CodeGen/Generic/stacksave-restore.ll new file mode 100644 index 0000000..65cf6c1 --- /dev/null +++ b/test/CodeGen/Generic/stacksave-restore.ll @@ -0,0 +1,12 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +declare sbyte* %llvm.stacksave() +declare void %llvm.stackrestore(sbyte*) + +int *%test(uint %N) { + %tmp = call sbyte* %llvm.stacksave() + %P = alloca int, uint %N + call void %llvm.stackrestore(sbyte* %tmp) + %Q = alloca int, uint %N + ret int* %P +} diff --git a/test/CodeGen/Generic/switch-crit-edge-constant.ll b/test/CodeGen/Generic/switch-crit-edge-constant.ll new file mode 100644 index 0000000..ef986e0 --- /dev/null +++ b/test/CodeGen/Generic/switch-crit-edge-constant.ll @@ -0,0 +1,55 @@ +; PR925 +; RUN: llvm-upgrade < %s | llvm-as | llc -march=x86 | \ +; RUN: grep mov.*str1 | wc -l | grep 1 + +target endian = little +target pointersize = 32 +target triple = "i686-apple-darwin8.7.2" +%str1 = internal constant [5 x sbyte] c"bonk\00" ; <[5 x sbyte]*> [#uses=1] +%str2 = internal constant [5 x sbyte] c"bork\00" ; <[5 x sbyte]*> [#uses=1] +%str = internal constant [8 x sbyte] c"perfwap\00" ; <[8 x sbyte]*> [#uses=1] + +implementation ; Functions: + +void %foo(int %C) { +entry: + switch int %C, label %bb2 [ + int 1, label %blahaha + int 2, label %blahaha + int 3, label %blahaha + int 4, label %blahaha + int 5, label %blahaha + int 6, label %blahaha + int 7, label %blahaha + int 8, label %blahaha + int 9, label %blahaha + int 10, label %blahaha + ] + +bb2: ; preds = %entry + %tmp5 = and int %C, 123 ; <int> [#uses=1] + %tmp = seteq int %tmp5, 0 ; <bool> [#uses=1] + br bool %tmp, label %blahaha, label %cond_true + +cond_true: ; preds = %bb2 + br label %blahaha + +blahaha: ; preds = %cond_true, %bb2, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry + %s.0 = phi sbyte* [ getelementptr ([8 x sbyte]* %str, int 0, uint 0), %cond_true ], [ getelementptr ([5 x sbyte]* %str1, int 0, uint 0), %entry ], [ getelementptr ([5 x sbyte]* %str1, int 0, uint 0), %entry ], [ getelementptr ([5 x sbyte]* %str1, int 0, uint 0), %entry ], [ getelementptr ([5 x sbyte]* %str1, int 0, uint 0), %entry ], [ getelementptr ([5 x sbyte]* %str1, int 0, uint 0), %entry ], [ getelementptr ([5 x sbyte]* %str1, int 0, uint 0), %entry ], [ getelementptr ([5 x sbyte]* %str1, int 0, uint 0), %entry ], [ getelementptr ([5 x sbyte]* %str1, int 0, uint 0), %entry ], [ getelementptr ([5 x sbyte]* %str1, int 0, uint 0), %entry ], [ getelementptr ([5 x sbyte]* %str1, int 0, uint 0), %entry ], [ getelementptr ([5 x sbyte]* %str2, int 0, uint 0), %bb2 ] ; <sbyte*> [#uses=13] + %tmp8 = tail call int (sbyte*, ...)* %printf( sbyte* %s.0 ) ; <int> [#uses=0] + %tmp10 = tail call int (sbyte*, ...)* %printf( sbyte* %s.0 ) ; <int> [#uses=0] + %tmp12 = tail call int (sbyte*, ...)* %printf( sbyte* %s.0 ) ; <int> [#uses=0] + %tmp14 = tail call int (sbyte*, ...)* %printf( sbyte* %s.0 ) ; <int> [#uses=0] + %tmp16 = tail call int (sbyte*, ...)* %printf( sbyte* %s.0 ) ; <int> [#uses=0] + %tmp18 = tail call int (sbyte*, ...)* %printf( sbyte* %s.0 ) ; <int> [#uses=0] + %tmp20 = tail call int (sbyte*, ...)* %printf( sbyte* %s.0 ) ; <int> [#uses=0] + %tmp22 = tail call int (sbyte*, ...)* %printf( sbyte* %s.0 ) ; <int> [#uses=0] + %tmp24 = tail call int (sbyte*, ...)* %printf( sbyte* %s.0 ) ; <int> [#uses=0] + %tmp26 = tail call int (sbyte*, ...)* %printf( sbyte* %s.0 ) ; <int> [#uses=0] + %tmp28 = tail call int (sbyte*, ...)* %printf( sbyte* %s.0 ) ; <int> [#uses=0] + %tmp30 = tail call int (sbyte*, ...)* %printf( sbyte* %s.0 ) ; <int> [#uses=0] + %tmp32 = tail call int (sbyte*, ...)* %printf( sbyte* %s.0 ) ; <int> [#uses=0] + ret void +} + +declare int %printf(sbyte*, ...) diff --git a/test/CodeGen/Generic/switch-lower-feature-2.ll b/test/CodeGen/Generic/switch-lower-feature-2.ll new file mode 100644 index 0000000..6552cb1 --- /dev/null +++ b/test/CodeGen/Generic/switch-lower-feature-2.ll @@ -0,0 +1,50 @@ +; RUN: llvm-as < %s | llc -march=x86 -o %t -f +; RUN: grep jb %t | wc -l | grep 1 +; RUN: grep \\\$6 %t | wc -l | grep 2 +; RUN: grep 1024 %t | wc -l | grep 1 +; RUN: grep 1023 %t | wc -l | grep 1 +; RUN: grep 119 %t | wc -l | grep 1 +; RUN: grep JTI %t | wc -l | grep 2 +; RUN: grep jg %t | wc -l | grep 1 +; RUN: grep ja %t | wc -l | grep 1 +; RUN: grep js %t | wc -l | grep 1 + +target triple = "i686-pc-linux-gnu" + +define i32 @main(i32 %tmp158) { +entry: + switch i32 %tmp158, label %bb336 [ + i32 -2147483648, label %bb338 + i32 -2147483647, label %bb338 + i32 -2147483646, label %bb338 + i32 120, label %bb338 + i32 121, label %bb339 + i32 122, label %bb340 + i32 123, label %bb341 + i32 124, label %bb342 + i32 125, label %bb343 + i32 126, label %bb336 + i32 1024, label %bb338 + i32 0, label %bb338 + i32 1, label %bb338 + i32 2, label %bb338 + i32 3, label %bb338 + i32 4, label %bb338 + i32 5, label %bb338 + ] +bb336: + ret i32 10 +bb338: + ret i32 11 +bb339: + ret i32 12 +bb340: + ret i32 13 +bb341: + ret i32 14 +bb342: + ret i32 15 +bb343: + ret i32 18 + +} diff --git a/test/CodeGen/Generic/switch-lower-feature.ll b/test/CodeGen/Generic/switch-lower-feature.ll new file mode 100644 index 0000000..71dbc26 --- /dev/null +++ b/test/CodeGen/Generic/switch-lower-feature.ll @@ -0,0 +1,29 @@ +; RUN: llvm-as < %s | llc -march=x86 -o - | grep \$7 | wc -l | grep 1 +; RUN: llvm-as < %s | llc -march=x86 -o - | grep \$6 | wc -l | grep 1 +; RUN: llvm-as < %s | llc -march=x86 -o - | grep 1024 | wc -l | grep 1 +; RUN: llvm-as < %s | llc -march=x86 -o - | grep jb | wc -l | grep 2 +; RUN: llvm-as < %s | llc -march=x86 -o - | grep je | wc -l | grep 1 + +define i32 @main(i32 %tmp158) { +entry: + switch i32 %tmp158, label %bb336 [ + i32 120, label %bb338 + i32 121, label %bb338 + i32 122, label %bb338 + i32 123, label %bb338 + i32 124, label %bb338 + i32 125, label %bb338 + i32 126, label %bb338 + i32 1024, label %bb338 + i32 0, label %bb338 + i32 1, label %bb338 + i32 2, label %bb338 + i32 3, label %bb338 + i32 4, label %bb338 + i32 5, label %bb338 + ] +bb336: + ret i32 10 +bb338: + ret i32 11 +} diff --git a/test/CodeGen/Generic/switch-lower.ll b/test/CodeGen/Generic/switch-lower.ll new file mode 100644 index 0000000..b1aad3f --- /dev/null +++ b/test/CodeGen/Generic/switch-lower.ll @@ -0,0 +1,334 @@ +; RUN: llvm-as < %s | llc +; PR1197 + + +define void @exp_attr__expand_n_attribute_reference() { +entry: + br i1 false, label %cond_next954, label %cond_true924 + +cond_true924: ; preds = %entry + ret void + +cond_next954: ; preds = %entry + switch i8 0, label %cleanup7419 [ + i8 1, label %bb956 + i8 2, label %bb1069 + i8 4, label %bb7328 + i8 5, label %bb1267 + i8 8, label %bb1348 + i8 9, label %bb7328 + i8 11, label %bb1439 + i8 12, label %bb1484 + i8 13, label %bb1706 + i8 14, label %bb1783 + i8 17, label %bb1925 + i8 18, label %bb1929 + i8 19, label %bb2240 + i8 25, label %bb2447 + i8 27, label %bb2480 + i8 29, label %bb2590 + i8 30, label %bb2594 + i8 31, label %bb2621 + i8 32, label %bb2664 + i8 33, label %bb2697 + i8 34, label %bb2735 + i8 37, label %bb2786 + i8 38, label %bb2849 + i8 39, label %bb3269 + i8 41, label %bb3303 + i8 42, label %bb3346 + i8 43, label %bb3391 + i8 44, label %bb3395 + i8 50, label %bb3673 + i8 52, label %bb3677 + i8 53, label %bb3693 + i8 54, label %bb7328 + i8 56, label %bb3758 + i8 57, label %bb3787 + i8 64, label %bb5019 + i8 68, label %cond_true4235 + i8 69, label %bb4325 + i8 70, label %bb4526 + i8 72, label %bb4618 + i8 73, label %bb4991 + i8 80, label %bb5012 + i8 82, label %bb5019 + i8 84, label %bb5518 + i8 86, label %bb5752 + i8 87, label %bb5953 + i8 89, label %bb6040 + i8 90, label %bb6132 + i8 92, label %bb6186 + i8 93, label %bb6151 + i8 94, label %bb6155 + i8 97, label %bb6355 + i8 98, label %bb5019 + i8 99, label %bb6401 + i8 101, label %bb5019 + i8 102, label %bb1484 + i8 104, label %bb7064 + i8 105, label %bb7068 + i8 106, label %bb7072 + i8 108, label %bb1065 + i8 109, label %bb1702 + i8 110, label %bb2200 + i8 111, label %bb2731 + i8 112, label %bb2782 + i8 113, label %bb2845 + i8 114, label %bb2875 + i8 115, label %bb3669 + i8 116, label %bb7316 + i8 117, label %bb7316 + i8 118, label %bb3875 + i8 119, label %bb4359 + i8 120, label %bb4987 + i8 121, label %bb5008 + i8 122, label %bb5786 + i8 123, label %bb6147 + i8 124, label %bb6916 + i8 125, label %bb6920 + i8 126, label %bb6955 + i8 127, label %bb6990 + i8 -128, label %bb7027 + i8 -127, label %bb3879 + i8 -126, label %bb4700 + i8 -125, label %bb7076 + i8 -124, label %bb2366 + i8 -123, label %bb2366 + i8 -122, label %bb5490 + ] + +bb956: ; preds = %cond_next954 + ret void + +bb1065: ; preds = %cond_next954 + ret void + +bb1069: ; preds = %cond_next954 + ret void + +bb1267: ; preds = %cond_next954 + ret void + +bb1348: ; preds = %cond_next954 + ret void + +bb1439: ; preds = %cond_next954 + ret void + +bb1484: ; preds = %cond_next954, %cond_next954 + ret void + +bb1702: ; preds = %cond_next954 + ret void + +bb1706: ; preds = %cond_next954 + ret void + +bb1783: ; preds = %cond_next954 + ret void + +bb1925: ; preds = %cond_next954 + ret void + +bb1929: ; preds = %cond_next954 + ret void + +bb2200: ; preds = %cond_next954 + ret void + +bb2240: ; preds = %cond_next954 + ret void + +bb2366: ; preds = %cond_next954, %cond_next954 + ret void + +bb2447: ; preds = %cond_next954 + ret void + +bb2480: ; preds = %cond_next954 + ret void + +bb2590: ; preds = %cond_next954 + ret void + +bb2594: ; preds = %cond_next954 + ret void + +bb2621: ; preds = %cond_next954 + ret void + +bb2664: ; preds = %cond_next954 + ret void + +bb2697: ; preds = %cond_next954 + ret void + +bb2731: ; preds = %cond_next954 + ret void + +bb2735: ; preds = %cond_next954 + ret void + +bb2782: ; preds = %cond_next954 + ret void + +bb2786: ; preds = %cond_next954 + ret void + +bb2845: ; preds = %cond_next954 + ret void + +bb2849: ; preds = %cond_next954 + ret void + +bb2875: ; preds = %cond_next954 + ret void + +bb3269: ; preds = %cond_next954 + ret void + +bb3303: ; preds = %cond_next954 + ret void + +bb3346: ; preds = %cond_next954 + ret void + +bb3391: ; preds = %cond_next954 + ret void + +bb3395: ; preds = %cond_next954 + ret void + +bb3669: ; preds = %cond_next954 + ret void + +bb3673: ; preds = %cond_next954 + ret void + +bb3677: ; preds = %cond_next954 + ret void + +bb3693: ; preds = %cond_next954 + ret void + +bb3758: ; preds = %cond_next954 + ret void + +bb3787: ; preds = %cond_next954 + ret void + +bb3875: ; preds = %cond_next954 + ret void + +bb3879: ; preds = %cond_next954 + ret void + +cond_true4235: ; preds = %cond_next954 + ret void + +bb4325: ; preds = %cond_next954 + ret void + +bb4359: ; preds = %cond_next954 + ret void + +bb4526: ; preds = %cond_next954 + ret void + +bb4618: ; preds = %cond_next954 + ret void + +bb4700: ; preds = %cond_next954 + ret void + +bb4987: ; preds = %cond_next954 + ret void + +bb4991: ; preds = %cond_next954 + ret void + +bb5008: ; preds = %cond_next954 + ret void + +bb5012: ; preds = %cond_next954 + ret void + +bb5019: ; preds = %cond_next954, %cond_next954, %cond_next954, %cond_next954 + ret void + +bb5490: ; preds = %cond_next954 + ret void + +bb5518: ; preds = %cond_next954 + ret void + +bb5752: ; preds = %cond_next954 + ret void + +bb5786: ; preds = %cond_next954 + ret void + +bb5953: ; preds = %cond_next954 + ret void + +bb6040: ; preds = %cond_next954 + ret void + +bb6132: ; preds = %cond_next954 + ret void + +bb6147: ; preds = %cond_next954 + ret void + +bb6151: ; preds = %cond_next954 + ret void + +bb6155: ; preds = %cond_next954 + ret void + +bb6186: ; preds = %cond_next954 + ret void + +bb6355: ; preds = %cond_next954 + ret void + +bb6401: ; preds = %cond_next954 + ret void + +bb6916: ; preds = %cond_next954 + ret void + +bb6920: ; preds = %cond_next954 + ret void + +bb6955: ; preds = %cond_next954 + ret void + +bb6990: ; preds = %cond_next954 + ret void + +bb7027: ; preds = %cond_next954 + ret void + +bb7064: ; preds = %cond_next954 + ret void + +bb7068: ; preds = %cond_next954 + ret void + +bb7072: ; preds = %cond_next954 + ret void + +bb7076: ; preds = %cond_next954 + ret void + +bb7316: ; preds = %cond_next954, %cond_next954 + ret void + +bb7328: ; preds = %cond_next954, %cond_next954, %cond_next954 + ret void + +cleanup7419: ; preds = %cond_next954 + ret void +} diff --git a/test/CodeGen/Generic/vector-constantexpr.ll b/test/CodeGen/Generic/vector-constantexpr.ll new file mode 100644 index 0000000..31b60a4 --- /dev/null +++ b/test/CodeGen/Generic/vector-constantexpr.ll @@ -0,0 +1,10 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +void ""(float* %inregs, float* %outregs) { + %a_addr.i = alloca <4 x float> ; <<4 x float>*> [#uses=1] + store <4 x float> < float extractelement (<4 x float> undef, uint 3), float extractelement (<4 x float> undef, uint 0), float extractelement (<4 x float> undef, uint 1), float extractelement (<4 x float> undef, uint 2) >, <4 x float>* %a_addr.i + ret void +} + + + diff --git a/test/CodeGen/Generic/vector-identity-shuffle.ll b/test/CodeGen/Generic/vector-identity-shuffle.ll new file mode 100644 index 0000000..0f7e03b --- /dev/null +++ b/test/CodeGen/Generic/vector-identity-shuffle.ll @@ -0,0 +1,15 @@ +; RUN: llvm-upgrade < %s | llvm-as | llc + +void %test(<4 x float> *%tmp2.i) { + %tmp2.i = load <4x float>* %tmp2.i + %xFloat0.48 = extractelement <4 x float> %tmp2.i, uint 0 ; <float> [#uses=1] + %inFloat0.49 = insertelement <4 x float> undef, float %xFloat0.48, uint 0 ; <<4 x float>> [#uses=1] + %xFloat1.50 = extractelement <4 x float> %tmp2.i, uint 1 ; <float> [#uses=1] + %inFloat1.52 = insertelement <4 x float> %inFloat0.49, float %xFloat1.50, uint 1 ; <<4 x float>> [#uses=1] + %xFloat2.53 = extractelement <4 x float> %tmp2.i, uint 2 ; <float> [#uses=1] + %inFloat2.55 = insertelement <4 x float> %inFloat1.52, float %xFloat2.53, uint 2 ; <<4 x float>> [#uses=1] + %xFloat3.56 = extractelement <4 x float> %tmp2.i, uint 3 ; <float> [#uses=1] + %inFloat3.58 = insertelement <4 x float> %inFloat2.55, float %xFloat3.56, uint 3 ; <<4 x float>> [#uses=4] + store <4 x float> %inFloat3.58, <4x float>* %tmp2.i + ret void +} diff --git a/test/CodeGen/Generic/vector.ll b/test/CodeGen/Generic/vector.ll new file mode 100644 index 0000000..59f554b --- /dev/null +++ b/test/CodeGen/Generic/vector.ll @@ -0,0 +1,156 @@ +; Test that vectors are scalarized/lowered correctly. +; RUN: llvm-upgrade < %s | llvm-as | llc + +%f1 = type <1 x float> +%f2 = type <2 x float> +%f4 = type <4 x float> +%i4 = type <4 x int> +%f8 = type <8 x float> +%d8 = type <8 x double> + +implementation + +;;; TEST HANDLING OF VARIOUS VECTOR SIZES + +void %test_f1(%f1 *%P, %f1* %Q, %f1 *%S) { + %p = load %f1 *%P + %q = load %f1* %Q + %R = add %f1 %p, %q + store %f1 %R, %f1 *%S + ret void +} + +void %test_f2(%f2 *%P, %f2* %Q, %f2 *%S) { + %p = load %f2* %P + %q = load %f2* %Q + %R = add %f2 %p, %q + store %f2 %R, %f2 *%S + ret void +} + +void %test_f4(%f4 *%P, %f4* %Q, %f4 *%S) { + %p = load %f4* %P + %q = load %f4* %Q + %R = add %f4 %p, %q + store %f4 %R, %f4 *%S + ret void +} + +void %test_f8(%f8 *%P, %f8* %Q, %f8 *%S) { + %p = load %f8* %P + %q = load %f8* %Q + %R = add %f8 %p, %q + store %f8 %R, %f8 *%S + ret void +} + +void %test_fmul(%f8 *%P, %f8* %Q, %f8 *%S) { + %p = load %f8* %P + %q = load %f8* %Q + %R = mul %f8 %p, %q + store %f8 %R, %f8 *%S + ret void +} + +void %test_div(%f8 *%P, %f8* %Q, %f8 *%S) { + %p = load %f8* %P + %q = load %f8* %Q + %R = div %f8 %p, %q + store %f8 %R, %f8 *%S + ret void +} + +;;; TEST VECTOR CONSTRUCTS + +void %test_cst(%f4 *%P, %f4 *%S) { + %p = load %f4* %P + %R = add %f4 %p, <float 0.1, float 1.0, float 2.0, float 4.5> + store %f4 %R, %f4 *%S + ret void +} + +void %test_zero(%f4 *%P, %f4 *%S) { + %p = load %f4* %P + %R = add %f4 %p, zeroinitializer + store %f4 %R, %f4 *%S + ret void +} + +void %test_undef(%f4 *%P, %f4 *%S) { + %p = load %f4* %P + %R = add %f4 %p, undef + store %f4 %R, %f4 *%S + ret void +} + +void %test_constant_insert(%f4 *%S) { + %R = insertelement %f4 zeroinitializer, float 10.0, uint 0 + store %f4 %R, %f4 *%S + ret void +} + +void %test_variable_buildvector(float %F, %f4 *%S) { + %R = insertelement %f4 zeroinitializer, float %F, uint 0 + store %f4 %R, %f4 *%S + ret void +} + +void %test_scalar_to_vector(float %F, %f4 *%S) { + %R = insertelement %f4 undef, float %F, uint 0 ;; R = scalar_to_vector F + store %f4 %R, %f4 *%S + ret void +} + +float %test_extract_elt(%f8 *%P) { + %p = load %f8* %P + %R = extractelement %f8 %p, uint 3 + ret float %R +} + +double %test_extract_elt2(%d8 *%P) { + %p = load %d8* %P + %R = extractelement %d8 %p, uint 3 + ret double %R +} + +void %test_cast_1(<4 x float>* %b, <4 x int>* %a) { + %tmp = load <4 x float>* %b + %tmp2 = add <4 x float> %tmp, <float 1.0, float 2.0, float 3.0, float 4.0> + %tmp3 = cast <4 x float> %tmp2 to <4 x int> + %tmp4 = add <4 x int> %tmp3, <int 1, int 2, int 3, int 4> + store <4 x int> %tmp4, <4 x int>* %a + ret void +} + +void %test_cast_2(<8 x float>* %a, <8 x int>* %b) { + %T = load <8 x float>* %a + %T2 = cast <8 x float> %T to <8 x int> + store <8 x int> %T2, <8 x int>* %b + ret void +} + + +;;; TEST IMPORTANT IDIOMS + +void %splat(%f4* %P, %f4* %Q, float %X) { + %tmp = insertelement %f4 undef, float %X, uint 0 + %tmp2 = insertelement %f4 %tmp, float %X, uint 1 + %tmp4 = insertelement %f4 %tmp2, float %X, uint 2 + %tmp6 = insertelement %f4 %tmp4, float %X, uint 3 + %q = load %f4* %Q + %R = add %f4 %q, %tmp6 + store %f4 %R, %f4* %P + ret void +} + +void %splat_i4(%i4* %P, %i4* %Q, int %X) { + %tmp = insertelement %i4 undef, int %X, uint 0 + %tmp2 = insertelement %i4 %tmp, int %X, uint 1 + %tmp4 = insertelement %i4 %tmp2, int %X, uint 2 + %tmp6 = insertelement %i4 %tmp4, int %X, uint 3 + %q = load %i4* %Q + %R = add %i4 %q, %tmp6 + store %i4 %R, %i4* %P + ret void +} + |