diff options
author | Shih-wei Liao <sliao@google.com> | 2010-02-10 11:10:31 -0800 |
---|---|---|
committer | Shih-wei Liao <sliao@google.com> | 2010-02-10 11:10:31 -0800 |
commit | e264f62ca09a8f65c87a46d562a4d0f9ec5d457e (patch) | |
tree | 59e3d57ef656cef79afa708ae0a3daf25cd91fcf /test/CodeGen/Generic | |
download | external_llvm-e264f62ca09a8f65c87a46d562a4d0f9ec5d457e.zip external_llvm-e264f62ca09a8f65c87a46d562a4d0f9ec5d457e.tar.gz external_llvm-e264f62ca09a8f65c87a46d562a4d0f9ec5d457e.tar.bz2 |
Check in LLVM r95781.
Diffstat (limited to 'test/CodeGen/Generic')
154 files changed, 12739 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..dd382cf --- /dev/null +++ b/test/CodeGen/Generic/2002-04-14-UnexpectedUnsignedType.ll @@ -0,0 +1,13 @@ +; RUN: llc < %s + +; This caused the backend to assert out with: +; SparcInstrInfo.cpp:103: failed assertion `0 && "Unexpected unsigned type"' +; + +declare void @bar(i8*) + +define void @foo() { + %cast225 = inttoptr i64 123456 to i8* ; <i8*> [#uses=1] + call void @bar( i8* %cast225 ) + ret void +} 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..751ed40 --- /dev/null +++ b/test/CodeGen/Generic/2002-04-16-StackFrameSizeAlignment.ll @@ -0,0 +1,14 @@ +; RUN: llc < %s + +; Compiling this file produces: +; Sparc.cpp:91: failed assertion `(offset - OFFSET) % getStackFrameSizeAlignment() == 0' +; +declare i32 @SIM(i8*, i8*, i32, i32, i32, [256 x i32]*, i32, i32, i32) + +define void @foo() { +bb0: + %V = alloca [256 x i32], i32 256 ; <[256 x i32]*> [#uses=1] + call i32 @SIM( i8* null, i8* null, i32 0, i32 0, i32 0, [256 x i32]* %V, i32 0, i32 0, i32 2 ) ; <i32>:0 [#uses=0] + ret void +} + 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..6fb1799 --- /dev/null +++ b/test/CodeGen/Generic/2003-05-27-phifcmpd.ll @@ -0,0 +1,19 @@ +; RUN: llc < %s + +define void @QRiterate(i32 %p.1, double %tmp.212) { +entry: + %tmp.184 = icmp sgt i32 %p.1, 0 ; <i1> [#uses=1] + br i1 %tmp.184, label %shortcirc_next.1, label %shortcirc_done.1 + +shortcirc_next.1: ; preds = %shortcirc_done.1, %entry + %tmp.213 = fcmp une double %tmp.212, 0.000000e+00 ; <i1> [#uses=1] + br label %shortcirc_done.1 + +shortcirc_done.1: ; preds = %shortcirc_next.1, %entry + %val.1 = phi i1 [ false, %entry ], [ %tmp.213, %shortcirc_next.1 ] ; <i1> [#uses=1] + br i1 %val.1, label %shortcirc_next.1, label %exit.1 + +exit.1: ; preds = %shortcirc_done.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..14bb000 --- /dev/null +++ b/test/CodeGen/Generic/2003-05-27-useboolinotherbb.ll @@ -0,0 +1,13 @@ +; RUN: llc < %s + +define void @QRiterate(double %tmp.212) { + %tmp.213 = fcmp une double %tmp.212, 0.000000e+00 ; <i1> [#uses=1] + br label %shortcirc_next.1 + +shortcirc_next.1: ; preds = %shortcirc_next.1, %0 + br i1 %tmp.213, label %shortcirc_next.1, label %exit.1 + +exit.1: ; preds = %shortcirc_next.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..cc0eb5c --- /dev/null +++ b/test/CodeGen/Generic/2003-05-27-usefsubasbool.ll @@ -0,0 +1,14 @@ +; RUN: llc < %s + +define void @QRiterate(double %tmp.212) { +entry: + br label %shortcirc_next.1 + +shortcirc_next.1: ; preds = %shortcirc_next.1, %entry + %tmp.213 = fcmp une double %tmp.212, 0.000000e+00 ; <i1> [#uses=1] + br i1 %tmp.213, label %shortcirc_next.1, label %exit.1 + +exit.1: ; preds = %shortcirc_next.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..c6fbdae --- /dev/null +++ b/test/CodeGen/Generic/2003-05-28-ManyArgs.ll @@ -0,0 +1,153 @@ +; RUN: llc < %s + +;; 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 { i32, float, float, float, float } + %struct..s_chan = type { i32, float, float, float, float } + %struct..s_det_routing_arch = type { i32, float, float, float, i32, i32, i16, i16, i16, float, float } + %struct..s_placer_opts = type { i32, float, i32, i32, i8*, i32, i32 } + %struct..s_router_opts = type { float, float, float, float, float, i32, i32, i32, i32 } + %struct..s_segment_inf = type { float, i32, i16, i16, float, float, i32, float, float } + %struct..s_switch_inf = type { i32, float, float, float, float } + +define i32 @main(i32 %argc.1, i8** %argv.1) { +entry: + %net_file = alloca [300 x i8] ; <[300 x i8]*> [#uses=1] + %place_file = alloca [300 x i8] ; <[300 x i8]*> [#uses=1] + %arch_file = alloca [300 x i8] ; <[300 x i8]*> [#uses=1] + %route_file = alloca [300 x i8] ; <[300 x i8]*> [#uses=1] + %full_stats = alloca i32 ; <i32*> [#uses=1] + %operation = alloca i32 ; <i32*> [#uses=1] + %verify_binary_search = alloca i32 ; <i32*> [#uses=1] + %show_graphics = alloca i32 ; <i32*> [#uses=1] + %annealing_sched = alloca %struct..s_annealing_sched ; <%struct..s_annealing_sched*> [#uses=5] + %placer_opts = alloca %struct..s_placer_opts ; <%struct..s_placer_opts*> [#uses=7] + %router_opts = alloca %struct..s_router_opts ; <%struct..s_router_opts*> [#uses=9] + %det_routing_arch = alloca %struct..s_det_routing_arch ; <%struct..s_det_routing_arch*> [#uses=11] + %segment_inf = alloca %struct..s_segment_inf* ; <%struct..s_segment_inf**> [#uses=1] + %timing_inf = alloca { i32, float, float, float, float, float, float, float, float, float, float } ; <{ i32, float, float, float, float, float, float, float, float, float, float }*> [#uses=11] + %tmp.101 = getelementptr %struct..s_placer_opts* %placer_opts, i64 0, i32 4 ; <i8**> [#uses=1] + %tmp.105 = getelementptr [300 x i8]* %net_file, i64 0, i64 0 ; <i8*> [#uses=1] + %tmp.106 = getelementptr [300 x i8]* %arch_file, i64 0, i64 0 ; <i8*> [#uses=1] + %tmp.107 = getelementptr [300 x i8]* %place_file, i64 0, i64 0 ; <i8*> [#uses=1] + %tmp.108 = getelementptr [300 x i8]* %route_file, i64 0, i64 0 ; <i8*> [#uses=1] + %tmp.109 = getelementptr { i32, float, float, float, float, float, float, float, float, float, float }* %timing_inf, i64 0, i32 0 ; <i32*> [#uses=1] + %tmp.112 = getelementptr %struct..s_placer_opts* %placer_opts, i64 0, i32 0 ; <i32*> [#uses=1] + %tmp.114 = getelementptr %struct..s_placer_opts* %placer_opts, i64 0, i32 6 ; <i32*> [#uses=1] + %tmp.118 = getelementptr %struct..s_router_opts* %router_opts, i64 0, i32 7 ; <i32*> [#uses=1] + %tmp.135 = load i32* %operation ; <i32> [#uses=1] + %tmp.137 = load i32* %tmp.112 ; <i32> [#uses=1] + %tmp.138 = getelementptr %struct..s_placer_opts* %placer_opts, i64 0, i32 1 ; <float*> [#uses=1] + %tmp.139 = load float* %tmp.138 ; <float> [#uses=1] + %tmp.140 = getelementptr %struct..s_placer_opts* %placer_opts, i64 0, i32 2 ; <i32*> [#uses=1] + %tmp.141 = load i32* %tmp.140 ; <i32> [#uses=1] + %tmp.142 = getelementptr %struct..s_placer_opts* %placer_opts, i64 0, i32 3 ; <i32*> [#uses=1] + %tmp.143 = load i32* %tmp.142 ; <i32> [#uses=1] + %tmp.145 = load i8** %tmp.101 ; <i8*> [#uses=1] + %tmp.146 = getelementptr %struct..s_placer_opts* %placer_opts, i64 0, i32 5 ; <i32*> [#uses=1] + %tmp.147 = load i32* %tmp.146 ; <i32> [#uses=1] + %tmp.149 = load i32* %tmp.114 ; <i32> [#uses=1] + %tmp.154 = load i32* %full_stats ; <i32> [#uses=1] + %tmp.155 = load i32* %verify_binary_search ; <i32> [#uses=1] + %tmp.156 = getelementptr %struct..s_annealing_sched* %annealing_sched, i64 0, i32 0 ; <i32*> [#uses=1] + %tmp.157 = load i32* %tmp.156 ; <i32> [#uses=1] + %tmp.158 = getelementptr %struct..s_annealing_sched* %annealing_sched, i64 0, i32 1 ; <float*> [#uses=1] + %tmp.159 = load float* %tmp.158 ; <float> [#uses=1] + %tmp.160 = getelementptr %struct..s_annealing_sched* %annealing_sched, i64 0, i32 2 ; <float*> [#uses=1] + %tmp.161 = load float* %tmp.160 ; <float> [#uses=1] + %tmp.162 = getelementptr %struct..s_annealing_sched* %annealing_sched, i64 0, i32 3 ; <float*> [#uses=1] + %tmp.163 = load float* %tmp.162 ; <float> [#uses=1] + %tmp.164 = getelementptr %struct..s_annealing_sched* %annealing_sched, i64 0, i32 4 ; <float*> [#uses=1] + %tmp.165 = load float* %tmp.164 ; <float> [#uses=1] + %tmp.166 = getelementptr %struct..s_router_opts* %router_opts, i64 0, i32 0 ; <float*> [#uses=1] + %tmp.167 = load float* %tmp.166 ; <float> [#uses=1] + %tmp.168 = getelementptr %struct..s_router_opts* %router_opts, i64 0, i32 1 ; <float*> [#uses=1] + %tmp.169 = load float* %tmp.168 ; <float> [#uses=1] + %tmp.170 = getelementptr %struct..s_router_opts* %router_opts, i64 0, i32 2 ; <float*> [#uses=1] + %tmp.171 = load float* %tmp.170 ; <float> [#uses=1] + %tmp.172 = getelementptr %struct..s_router_opts* %router_opts, i64 0, i32 3 ; <float*> [#uses=1] + %tmp.173 = load float* %tmp.172 ; <float> [#uses=1] + %tmp.174 = getelementptr %struct..s_router_opts* %router_opts, i64 0, i32 4 ; <float*> [#uses=1] + %tmp.175 = load float* %tmp.174 ; <float> [#uses=1] + %tmp.176 = getelementptr %struct..s_router_opts* %router_opts, i64 0, i32 5 ; <i32*> [#uses=1] + %tmp.177 = load i32* %tmp.176 ; <i32> [#uses=1] + %tmp.178 = getelementptr %struct..s_router_opts* %router_opts, i64 0, i32 6 ; <i32*> [#uses=1] + %tmp.179 = load i32* %tmp.178 ; <i32> [#uses=1] + %tmp.181 = load i32* %tmp.118 ; <i32> [#uses=1] + %tmp.182 = getelementptr %struct..s_router_opts* %router_opts, i64 0, i32 8 ; <i32*> [#uses=1] + %tmp.183 = load i32* %tmp.182 ; <i32> [#uses=1] + %tmp.184 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, i64 0, i32 0 ; <i32*> [#uses=1] + %tmp.185 = load i32* %tmp.184 ; <i32> [#uses=1] + %tmp.186 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, i64 0, i32 1 ; <float*> [#uses=1] + %tmp.187 = load float* %tmp.186 ; <float> [#uses=1] + %tmp.188 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, i64 0, i32 2 ; <float*> [#uses=1] + %tmp.189 = load float* %tmp.188 ; <float> [#uses=1] + %tmp.190 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, i64 0, i32 3 ; <float*> [#uses=1] + %tmp.191 = load float* %tmp.190 ; <float> [#uses=1] + %tmp.192 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, i64 0, i32 4 ; <i32*> [#uses=1] + %tmp.193 = load i32* %tmp.192 ; <i32> [#uses=1] + %tmp.194 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, i64 0, i32 5 ; <i32*> [#uses=1] + %tmp.195 = load i32* %tmp.194 ; <i32> [#uses=1] + %tmp.196 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, i64 0, i32 6 ; <i16*> [#uses=1] + %tmp.197 = load i16* %tmp.196 ; <i16> [#uses=1] + %tmp.198 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, i64 0, i32 7 ; <i16*> [#uses=1] + %tmp.199 = load i16* %tmp.198 ; <i16> [#uses=1] + %tmp.200 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, i64 0, i32 8 ; <i16*> [#uses=1] + %tmp.201 = load i16* %tmp.200 ; <i16> [#uses=1] + %tmp.202 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, i64 0, i32 9 ; <float*> [#uses=1] + %tmp.203 = load float* %tmp.202 ; <float> [#uses=1] + %tmp.204 = getelementptr %struct..s_det_routing_arch* %det_routing_arch, i64 0, i32 10 ; <float*> [#uses=1] + %tmp.205 = load float* %tmp.204 ; <float> [#uses=1] + %tmp.206 = load %struct..s_segment_inf** %segment_inf ; <%struct..s_segment_inf*> [#uses=1] + %tmp.208 = load i32* %tmp.109 ; <i32> [#uses=1] + %tmp.209 = getelementptr { i32, float, float, float, float, float, float, float, float, float, float }* %timing_inf, i64 0, i32 1 ; <float*> [#uses=1] + %tmp.210 = load float* %tmp.209 ; <float> [#uses=1] + %tmp.211 = getelementptr { i32, float, float, float, float, float, float, float, float, float, float }* %timing_inf, i64 0, i32 2 ; <float*> [#uses=1] + %tmp.212 = load float* %tmp.211 ; <float> [#uses=1] + %tmp.213 = getelementptr { i32, float, float, float, float, float, float, float, float, float, float }* %timing_inf, i64 0, i32 3 ; <float*> [#uses=1] + %tmp.214 = load float* %tmp.213 ; <float> [#uses=1] + %tmp.215 = getelementptr { i32, float, float, float, float, float, float, float, float, float, float }* %timing_inf, i64 0, i32 4 ; <float*> [#uses=1] + %tmp.216 = load float* %tmp.215 ; <float> [#uses=1] + %tmp.217 = getelementptr { i32, float, float, float, float, float, float, float, float, float, float }* %timing_inf, i64 0, i32 5 ; <float*> [#uses=1] + %tmp.218 = load float* %tmp.217 ; <float> [#uses=1] + %tmp.219 = getelementptr { i32, float, float, float, float, float, float, float, float, float, float }* %timing_inf, i64 0, i32 6 ; <float*> [#uses=1] + %tmp.220 = load float* %tmp.219 ; <float> [#uses=1] + %tmp.221 = getelementptr { i32, float, float, float, float, float, float, float, float, float, float }* %timing_inf, i64 0, i32 7 ; <float*> [#uses=1] + %tmp.222 = load float* %tmp.221 ; <float> [#uses=1] + %tmp.223 = getelementptr { i32, float, float, float, float, float, float, float, float, float, float }* %timing_inf, i64 0, i32 8 ; <float*> [#uses=1] + %tmp.224 = load float* %tmp.223 ; <float> [#uses=1] + %tmp.225 = getelementptr { i32, float, float, float, float, float, float, float, float, float, float }* %timing_inf, i64 0, i32 9 ; <float*> [#uses=1] + %tmp.226 = load float* %tmp.225 ; <float> [#uses=1] + %tmp.227 = getelementptr { i32, float, float, float, float, float, float, float, float, float, float }* %timing_inf, i64 0, i32 10 ; <float*> [#uses=1] + %tmp.228 = load float* %tmp.227 ; <float> [#uses=1] + call void @place_and_route( i32 %tmp.135, i32 %tmp.137, float %tmp.139, i32 %tmp.141, i32 %tmp.143, i8* %tmp.145, i32 %tmp.147, i32 %tmp.149, i8* %tmp.107, i8* %tmp.105, i8* %tmp.106, i8* %tmp.108, i32 %tmp.154, i32 %tmp.155, i32 %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, i32 %tmp.177, i32 %tmp.179, i32 %tmp.181, i32 %tmp.183, i32 %tmp.185, float %tmp.187, float %tmp.189, float %tmp.191, i32 %tmp.193, i32 %tmp.195, i16 %tmp.197, i16 %tmp.199, i16 %tmp.201, float %tmp.203, float %tmp.205, %struct..s_segment_inf* %tmp.206, i32 %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 i32* %show_graphics ; <i32> [#uses=1] + %tmp.232 = icmp ne i32 %tmp.231, 0 ; <i1> [#uses=1] + br i1 %tmp.232, label %then.2, label %endif.2 + +then.2: ; preds = %entry + br label %endif.2 + +endif.2: ; preds = %then.2, %entry + ret i32 0 +} + +declare i32 @printf(i8*, ...) + +declare void @place_and_route(i32, i32, float, i32, i32, i8*, i32, i32, i8*, i8*, i8*, i8*, i32, i32, i32, float, float, float, float, float, float, float, float, float, i32, i32, i32, i32, i32, float, float, float, i32, i32, i16, i16, i16, float, float, %struct..s_segment_inf*, i32, 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..10d3a11 --- /dev/null +++ b/test/CodeGen/Generic/2003-05-30-BadFoldGEP.ll @@ -0,0 +1,39 @@ +; RUN: llc < %s + +;; 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 { i32, [256 x i8], i32, i32, i32, i32 } +@OutputFiles = external global [16 x %FileType] ; <[16 x %FileType]*> [#uses=1] +@Output = internal global %FileType* null ; <%FileType**> [#uses=1] + +define internal i32 @OpenOutput(i8* %filename.1) { +entry: + %tmp.0 = load %FileType** @Output ; <%FileType*> [#uses=1] + %tmp.4 = getelementptr %FileType* %tmp.0, i64 1 ; <%FileType*> [#uses=1] + %addrOfGlobal = getelementptr [16 x %FileType]* @OutputFiles, i64 0 ; <[16 x %FileType]*> [#uses=1] + %constantGEP = getelementptr [16 x %FileType]* %addrOfGlobal, i64 1 ; <[16 x %FileType]*> [#uses=1] + %constantGEP.upgrd.1 = getelementptr [16 x %FileType]* %constantGEP, i64 0, i64 0 ; <%FileType*> [#uses=1] + %tmp.10 = icmp eq %FileType* %tmp.4, %constantGEP.upgrd.1 ; <i1> [#uses=1] + br i1 %tmp.10, label %return, label %endif.0 + +endif.0: ; preds = %entry + ret i32 0 + +return: ; preds = %entry + ret i32 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..f7c3e42 --- /dev/null +++ b/test/CodeGen/Generic/2003-05-30-BadPreselectPhi.ll @@ -0,0 +1,33 @@ +; RUN: llc < %s + +;; 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*, i32, i32, i32, [4 x i8] } + %struct..task = type { %struct..task*, i32, i32, %struct..packet*, i32, %struct..task* (%struct..packet*)*, i32, i32 } +@v1 = external global i32 ; <i32*> [#uses=1] +@v2 = external global i32 ; <i32*> [#uses=1] + +define %struct..task* @handlerfn(%struct..packet* %pkt.2) { +entry: + %tmp.1 = icmp ne %struct..packet* %pkt.2, null ; <i1> [#uses=1] + br i1 %tmp.1, label %cond_false, label %cond_continue + +cond_false: ; preds = %entry + br label %cond_continue + +cond_continue: ; preds = %cond_false, %entry + %mem_tmp.0 = phi i32* [ @v2, %cond_false ], [ @v1, %entry ] ; <i32*> [#uses=1] + %tmp.12 = bitcast i32* %mem_tmp.0 to %struct..packet* ; <%struct..packet*> [#uses=1] + 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..1d1aad5 --- /dev/null +++ b/test/CodeGen/Generic/2003-07-06-BadIntCmp.ll @@ -0,0 +1,51 @@ +; RUN: llc < %s + +;; 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 i8] c"true\0A\00" ; <[6 x i8]*> [#uses=1] +@.str_2 = internal constant [7 x i8] c"false\0A\00" ; <[7 x i8]*> [#uses=1] + +declare i32 @printf(i8*, ...) + +define internal void @__main() { +entry: + ret void +} + +define internal void @CheckOutside(i32 %x.1, i32 %y.1) { +entry: + %tmp.2 = mul i32 %x.1, %x.1 ; <i32> [#uses=1] + %tmp.5 = mul i32 %y.1, %y.1 ; <i32> [#uses=1] + %tmp.6 = add i32 %tmp.2, %tmp.5 ; <i32> [#uses=1] + %tmp.8 = icmp sle i32 %tmp.6, 4194304 ; <i1> [#uses=1] + br i1 %tmp.8, label %then, label %else + +then: ; preds = %entry + %tmp.11 = call i32 (i8*, ...)* @printf( i8* getelementptr ([6 x i8]* @.str_1, i64 0, i64 0) ) ; <i32> [#uses=0] + br label %UnifiedExitNode + +else: ; preds = %entry + %tmp.13 = call i32 (i8*, ...)* @printf( i8* getelementptr ([7 x i8]* @.str_2, i64 0, i64 0) ) ; <i32> [#uses=0] + br label %UnifiedExitNode + +UnifiedExitNode: ; preds = %else, %then + ret void +} + +define i32 @main() { +entry: + call void @__main( ) + call void @CheckOutside( i32 2097152, i32 2097152 ) + ret i32 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..64312ba --- /dev/null +++ b/test/CodeGen/Generic/2003-07-07-BadLongConst.ll @@ -0,0 +1,20 @@ +; RUN: llc < %s + +@.str_1 = internal constant [42 x i8] c" ui = %u (0x%x)\09\09UL-ui = %lld (0x%llx)\0A\00" ; <[42 x i8]*> [#uses=1] + +declare i32 @printf(i8*, ...) + +define internal i64 @getL() { +entry: + ret i64 -5787213826675591005 +} + +define i32 @main(i32 %argc.1, i8** %argv.1) { +entry: + %tmp.11 = call i64 @getL( ) ; <i64> [#uses=2] + %tmp.5 = trunc i64 %tmp.11 to i32 ; <i32> [#uses=2] + %tmp.23 = and i64 %tmp.11, -4294967296 ; <i64> [#uses=2] + %tmp.16 = call i32 (i8*, ...)* @printf( i8* getelementptr ([42 x i8]* @.str_1, i64 0, i64 0), i32 %tmp.5, i32 %tmp.5, i64 %tmp.23, i64 %tmp.23 ) ; <i32> [#uses=0] + ret i32 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..8019caa --- /dev/null +++ b/test/CodeGen/Generic/2003-07-08-BadCastToBool.ll @@ -0,0 +1,34 @@ +; RUN: llc < %s + +;; 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 i8] c"d = %d, ct = %d, d ^ ct = %d\0A\00" + +declare i32 @printf(i8*, ...) + +define i32 @adj(i32 %d.1, i32 %ct.1) { +entry: + %tmp.19 = icmp eq i32 %ct.1, 2 ; <i1> [#uses=1] + %tmp.22.not = trunc i32 %ct.1 to i1 ; <i1> [#uses=1] + %tmp.221 = xor i1 %tmp.22.not, true ; <i1> [#uses=1] + %tmp.26 = or i1 %tmp.19, %tmp.221 ; <i1> [#uses=1] + %tmp.27 = zext i1 %tmp.26 to i32 ; <i32> [#uses=1] + ret i32 %tmp.27 +} + +define i32 @main() { +entry: + %result = call i32 @adj( i32 3, i32 2 ) ; <i32> [#uses=1] + %tmp.0 = call i32 (i8*, ...)* @printf( i8* getelementptr ([30 x i8]* @.str_1, i64 0, i64 0), i32 3, i32 2, i32 %result ) ; <i32> [#uses=0] + ret i32 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..4e6fe1c --- /dev/null +++ b/test/CodeGen/Generic/2003-07-29-BadConstSbyte.ll @@ -0,0 +1,40 @@ +; RUN: llc < %s + +;; 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 i8] c"\06\07\01\08\01\09" ; <[6 x i8]*> [#uses=1] +@.str_3 = internal constant [8 x i8] c"[%d] = \00" ; <[8 x i8]*> [#uses=1] +@.str_4 = internal constant [4 x i8] c"%d\0A\00" ; <[4 x i8]*> [#uses=1] + +declare i32 @printf(i8*, ...) + +define i32 @main() { +entry: + br label %loopentry + +loopentry: ; preds = %loopentry, %entry + %i = phi i64 [ 0, %entry ], [ %inc.i, %loopentry ] ; <i64> [#uses=3] + %cptr = getelementptr [6 x i8]* @yy_ec, i64 0, i64 %i ; <i8*> [#uses=1] + %c = load i8* %cptr ; <i8> [#uses=1] + %ignore = call i32 (i8*, ...)* @printf( i8* getelementptr ([8 x i8]* @.str_3, i64 0, i64 0), i64 %i ) ; <i32> [#uses=0] + %ignore2 = call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @.str_4, i64 0, i64 0), i8 %c ) ; <i32> [#uses=0] + %inc.i = add i64 %i, 1 ; <i64> [#uses=2] + %done = icmp sle i64 %inc.i, 5 ; <i1> [#uses=1] + br i1 %done, label %loopentry, label %exit.1 + +exit.1: ; preds = %loopentry + ret i32 0 +} + diff --git a/test/CodeGen/Generic/2004-02-08-UnwindSupport.ll b/test/CodeGen/Generic/2004-02-08-UnwindSupport.ll new file mode 100644 index 0000000..393062a --- /dev/null +++ b/test/CodeGen/Generic/2004-02-08-UnwindSupport.ll @@ -0,0 +1,17 @@ +; RUN: llc < %s -enable-correct-eh-support + +define i32 @test() { + unwind +} + +define i32 @main() { + %X = invoke i32 @test( ) + to label %cont unwind label %EH ; <i32> [#uses=0] + +cont: ; preds = %0 + ret i32 1 + +EH: ; preds = %0 + ret i32 0 +} + diff --git a/test/CodeGen/Generic/2004-05-09-LiveVarPartialRegister.ll b/test/CodeGen/Generic/2004-05-09-LiveVarPartialRegister.ll new file mode 100644 index 0000000..d4a4cf8 --- /dev/null +++ b/test/CodeGen/Generic/2004-05-09-LiveVarPartialRegister.ll @@ -0,0 +1,13 @@ +; RUN: llc < %s +@global_long_1 = linkonce global i64 7 ; <i64*> [#uses=1] +@global_long_2 = linkonce global i64 49 ; <i64*> [#uses=1] + +define i32 @main() { + %l1 = load i64* @global_long_1 ; <i64> [#uses=1] + %l2 = load i64* @global_long_2 ; <i64> [#uses=1] + %cond = icmp sle i64 %l1, %l2 ; <i1> [#uses=1] + %cast2 = zext i1 %cond to i32 ; <i32> [#uses=1] + %RV = sub i32 1, %cast2 ; <i32> [#uses=1] + ret i32 %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..7fd2361 --- /dev/null +++ b/test/CodeGen/Generic/2005-01-18-SetUO-InfLoop.ll @@ -0,0 +1,20 @@ +; RUN: llc < %s + +define void @intersect_pixel() { +entry: + %tmp125 = fcmp uno double 0.000000e+00, 0.000000e+00 ; <i1> [#uses=1] + %tmp126 = or i1 %tmp125, false ; <i1> [#uses=1] + %tmp126.not = xor i1 %tmp126, true ; <i1> [#uses=1] + %brmerge1 = or i1 %tmp126.not, false ; <i1> [#uses=1] + br i1 %brmerge1, label %bb154, label %cond_false133 + +cond_false133: ; preds = %entry + ret void + +bb154: ; preds = %entry + %tmp164 = icmp eq i32 0, 0 ; <i1> [#uses=0] + ret void +} + +declare i1 @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..353e411 --- /dev/null +++ b/test/CodeGen/Generic/2005-04-09-GlobalInPHI.ll @@ -0,0 +1,20 @@ +; RUN: llc < %s + %struct.TypHeader = type { i32, %struct.TypHeader**, [3 x i8], i8 } +@.str_67 = external global [4 x i8] ; <[4 x i8]*> [#uses=1] +@.str_87 = external global [17 x i8] ; <[17 x i8]*> [#uses=1] + +define void @PrBinop() { +entry: + br i1 false, label %cond_true, label %else.0 + +cond_true: ; preds = %entry + br label %else.0 + +else.0: ; preds = %cond_true, %entry + %tmp.167.1 = phi i32 [ ptrtoint ([17 x i8]* @.str_87 to i32), %entry ], [ 0, %cond_true ] ; <i32> [#uses=0] + call void @Pr( i8* getelementptr ([4 x i8]* @.str_67, i32 0, i32 0), i32 0, i32 0 ) + ret void +} + +declare void @Pr(i8*, i32, i32) + 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..733202c --- /dev/null +++ b/test/CodeGen/Generic/2005-07-12-memcpy-i64-length.ll @@ -0,0 +1,11 @@ +; RUN: llc < %s +; Test that llvm.memcpy works with a i64 length operand on all targets. + +declare void @llvm.memcpy.i64(i8*, i8*, i64, i32) + +define void @l12_l94_bc_divide_endif_2E_3_2E_ce() { +newFuncRoot: + tail call void @llvm.memcpy.i64( i8* null, i8* null, i64 0, i32 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..08060bf --- /dev/null +++ b/test/CodeGen/Generic/2005-10-18-ZeroSizeStackObject.ll @@ -0,0 +1,6 @@ +; RUN: llc < %s + +define void @test() { + %X = alloca { } ; <{ }*> [#uses=0] + 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..53a9cd0 --- /dev/null +++ b/test/CodeGen/Generic/2005-10-21-longlonggtu.ll @@ -0,0 +1,16 @@ +; RUN: llc < %s + +define float @t(i64 %u_arg) { + %u = bitcast i64 %u_arg to i64 ; <i64> [#uses=1] + %tmp5 = add i64 %u, 9007199254740991 ; <i64> [#uses=1] + %tmp = icmp ugt i64 %tmp5, 18014398509481982 ; <i1> [#uses=1] + br i1 %tmp, label %T, label %F + +T: ; preds = %0 + ret float 1.000000e+00 + +F: ; preds = %0 + call float @t( i64 0 ) ; <float>:1 [#uses=0] + ret float 0.000000e+00 +} + 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..a9eedde --- /dev/null +++ b/test/CodeGen/Generic/2005-12-01-Crash.ll @@ -0,0 +1,20 @@ +; RUN: llc < %s +@str = external global [36 x i8] ; <[36 x i8]*> [#uses=0] +@str.upgrd.1 = external global [29 x i8] ; <[29 x i8]*> [#uses=0] +@str1 = external global [29 x i8] ; <[29 x i8]*> [#uses=0] +@str2 = external global [29 x i8] ; <[29 x i8]*> [#uses=1] +@str.upgrd.2 = external global [2 x i8] ; <[2 x i8]*> [#uses=0] +@str3 = external global [2 x i8] ; <[2 x i8]*> [#uses=0] +@str4 = external global [2 x i8] ; <[2 x i8]*> [#uses=0] +@str5 = external global [2 x i8] ; <[2 x i8]*> [#uses=0] + +define void @printArgsNoRet(i32 %a1, float %a2, i8 %a3, double %a4, i8* %a5, i32 %a6, float %a7, i8 %a8, double %a9, i8* %a10, i32 %a11, float %a12, i8 %a13, double %a14, i8* %a15) { +entry: + %tmp17 = sext i8 %a13 to i32 ; <i32> [#uses=1] + %tmp23 = call i32 (i8*, ...)* @printf( i8* getelementptr ([29 x i8]* @str2, i32 0, i64 0), i32 %a11, double 0.000000e+00, i32 %tmp17, double %a14, i32 0 ) ; <i32> [#uses=0] + ret void +} + +declare i32 @printf(i8*, ...) + +declare i32 @main(i32, i8**) 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..349540f --- /dev/null +++ b/test/CodeGen/Generic/2005-12-12-ExpandSextInreg.ll @@ -0,0 +1,7 @@ +; RUN: llc < %s + +define i64 @test(i64 %A) { + %B = trunc i64 %A to i8 ; <i8> [#uses=1] + %C = sext i8 %B to i64 ; <i64> [#uses=1] + ret i64 %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..42e8ed0 --- /dev/null +++ b/test/CodeGen/Generic/2006-01-12-BadSetCCFold.ll @@ -0,0 +1,35 @@ +; RUN: llc < %s +; ModuleID = '2006-01-12-BadSetCCFold.ll' + %struct.node_t = type { double*, %struct.node_t*, %struct.node_t**, double**, double*, i32, i32 } + +define void @main() { +entry: + br i1 false, label %then.2.i, label %endif.2.i + +then.2.i: ; preds = %entry + br label %dealwithargs.exit + +endif.2.i: ; preds = %entry + br i1 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 i32 [ 64, %then.3.i ], [ 64, %then.2.i ], [ 64, %endif.2.i ] ; <i32> [#uses=1] + %tmp.14.i1134.i.i = icmp sgt i32 %n_nodes.4, 1 ; <i1> [#uses=2] + br i1 %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 i1 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 i1 %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..f06d341 --- /dev/null +++ b/test/CodeGen/Generic/2006-01-18-InvalidBranchOpcodeAssert.ll @@ -0,0 +1,15 @@ +; RUN: llc < %s +; This crashed the PPC backend. + +define void @test() { + %tmp125 = fcmp uno double 0.000000e+00, 0.000000e+00 ; <i1> [#uses=1] + br i1 %tmp125, label %bb154, label %cond_false133 + +cond_false133: ; preds = %0 + ret void + +bb154: ; preds = %0 + %tmp164 = icmp eq i32 0, 0 ; <i1> [#uses=0] + ret void +} + 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..5508272 --- /dev/null +++ b/test/CodeGen/Generic/2006-02-12-InsertLibcall.ll @@ -0,0 +1,60 @@ +; RUN: llc < %s +@G = external global i32 ; <i32*> [#uses=1] + +define void @encode_one_frame(i64 %tmp.2i) { +entry: + %tmp.9 = icmp eq i32 0, 0 ; <i1> [#uses=1] + br i1 %tmp.9, label %endif.0, label %shortcirc_next.0 + +then.5.i: ; preds = %shortcirc_next.i + %tmp.114.i = sdiv i64 %tmp.2i, 3 ; <i64> [#uses=1] + %tmp.111.i = call i64 @lseek( i32 0, i64 %tmp.114.i, i32 1 ) ; <i64> [#uses=0] + ret void + +shortcirc_next.0: ; preds = %entry + ret void + +endif.0: ; preds = %entry + %tmp.324.i = icmp eq i32 0, 0 ; <i1> [#uses=2] + %tmp.362.i = icmp slt i32 0, 0 ; <i1> [#uses=1] + br i1 %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 i1 %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 i1 %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 = icmp eq i32 0, 0 ; <i1> [#uses=1] + br i1 %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 i32* @G ; <i32> [#uses=1] + %tmp.29.i = icmp eq i32 %tmp.28.i, 1 ; <i1> [#uses=1] + br i1 %tmp.29.i, label %shortcirc_next.i, label %shortcirc_done.i + +shortcirc_next.i: ; preds = %else.1.i56 + %tmp.34.i = icmp eq i32 0, 3 ; <i1> [#uses=1] + br i1 %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 i64 @lseek(i32, i64, i32) 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..2a6cc0c --- /dev/null +++ b/test/CodeGen/Generic/2006-03-01-dagcombineinfloop.ll @@ -0,0 +1,95 @@ +; RUN: llc < %s +; Infinite loop in the dag combiner, reduced from 176.gcc. +%struct._obstack_chunk = type { i8*, %struct._obstack_chunk*, [4 x i8] } + %struct.anon = type { i32 } + %struct.lang_decl = type opaque + %struct.lang_type = type { i32, [1 x %struct.tree_node*] } + %struct.obstack = type { i32, %struct._obstack_chunk*, i8*, i8*, i8*, i32, i32, %struct._obstack_chunk* (...)*, void (...)*, i8*, i8 } + %struct.rtx_def = type { i16, i8, i8, [1 x %struct.anon] } + %struct.tree_common = type { %struct.tree_node*, %struct.tree_node*, i8, i8, i8, i8 } + %struct.tree_decl = type { [12 x i8], i8*, i32, %struct.tree_node*, i32, i8, i8, i8, i8, %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 i8], %struct.tree_node*, %struct.tree_node* } + %struct.tree_node = type { %struct.tree_decl } + %struct.tree_type = type { [12 x i8], %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, i32, i8, i8, i8, i8, i32, %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] + +define fastcc i32 @self_promoting_args_p(%struct.tree_node* %parms) { +entry: + %tmp915 = icmp eq %struct.tree_node* %parms, null ; <i1> [#uses=1] + br i1 %tmp915, label %return, label %cond_true92.preheader + +cond_true: ; preds = %cond_true92 + %tmp9.not = icmp ne %struct.tree_node* %tmp2, %tmp7 ; <i1> [#uses=1] + %tmp14 = icmp eq %struct.tree_node* %tmp2, null ; <i1> [#uses=1] + %bothcond = or i1 %tmp9.not, %tmp14 ; <i1> [#uses=1] + br i1 %bothcond, label %return, label %cond_next18 + +cond_next12: ; preds = %cond_true92 + %tmp14.old = icmp eq %struct.tree_node* %tmp2, null ; <i1> [#uses=1] + br i1 %tmp14.old, label %return, label %cond_next18 + +cond_next18: ; preds = %cond_next12, %cond_true + %tmp20 = bitcast %struct.tree_node* %tmp2 to %struct.tree_type* ; <%struct.tree_type*> [#uses=1] + %tmp21 = getelementptr %struct.tree_type* %tmp20, i32 0, i32 17 ; <%struct.tree_node**> [#uses=1] + %tmp22 = load %struct.tree_node** %tmp21 ; <%struct.tree_node*> [#uses=6] + %tmp24 = icmp eq %struct.tree_node* %tmp22, %tmp23 ; <i1> [#uses=1] + br i1 %tmp24, label %return, label %cond_next28 + +cond_next28: ; preds = %cond_next18 + %tmp30 = bitcast %struct.tree_node* %tmp2 to %struct.tree_common* ; <%struct.tree_common*> [#uses=1] + %tmp = getelementptr %struct.tree_common* %tmp30, i32 0, i32 2 ; <i8*> [#uses=1] + %tmp.upgrd.1 = bitcast i8* %tmp to i32* ; <i32*> [#uses=1] + %tmp.upgrd.2 = load i32* %tmp.upgrd.1 ; <i32> [#uses=1] + %tmp32 = trunc i32 %tmp.upgrd.2 to i8 ; <i8> [#uses=1] + %tmp33 = icmp eq i8 %tmp32, 7 ; <i1> [#uses=1] + br i1 %tmp33, label %cond_true34, label %cond_next84 + +cond_true34: ; preds = %cond_next28 + %tmp40 = icmp eq %struct.tree_node* %tmp22, %tmp39 ; <i1> [#uses=1] + %tmp49 = icmp eq %struct.tree_node* %tmp22, %tmp48 ; <i1> [#uses=1] + %bothcond6 = or i1 %tmp40, %tmp49 ; <i1> [#uses=1] + %tmp58 = icmp eq %struct.tree_node* %tmp22, %tmp57 ; <i1> [#uses=1] + %bothcond7 = or i1 %bothcond6, %tmp58 ; <i1> [#uses=1] + %tmp67 = icmp eq %struct.tree_node* %tmp22, %tmp66 ; <i1> [#uses=1] + %bothcond8 = or i1 %bothcond7, %tmp67 ; <i1> [#uses=1] + %tmp76 = icmp eq %struct.tree_node* %tmp22, %tmp75 ; <i1> [#uses=1] + %bothcond9 = or i1 %bothcond8, %tmp76 ; <i1> [#uses=2] + %brmerge = or i1 %bothcond9, %tmp.upgrd.6 ; <i1> [#uses=1] + %bothcond9.upgrd.3 = zext i1 %bothcond9 to i32 ; <i32> [#uses=1] + %.mux = xor i32 %bothcond9.upgrd.3, 1 ; <i32> [#uses=1] + br i1 %brmerge, label %return, label %cond_true92 + +cond_next84: ; preds = %cond_next28 + br i1 %tmp.upgrd.6, 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.upgrd.4 = bitcast %struct.tree_node* %t.0.0 to %struct.tree_list* ; <%struct.tree_list*> [#uses=1] + %tmp.upgrd.5 = getelementptr %struct.tree_list* %tmp.upgrd.4, i32 0, i32 2 ; <%struct.tree_node**> [#uses=1] + %tmp2 = load %struct.tree_node** %tmp.upgrd.5 ; <%struct.tree_node*> [#uses=5] + %tmp4 = bitcast %struct.tree_node* %t.0.0 to %struct.tree_common* ; <%struct.tree_common*> [#uses=1] + %tmp5 = getelementptr %struct.tree_common* %tmp4, i32 0, i32 0 ; <%struct.tree_node**> [#uses=1] + %tmp6 = load %struct.tree_node** %tmp5 ; <%struct.tree_node*> [#uses=3] + %tmp.upgrd.6 = icmp eq %struct.tree_node* %tmp6, null ; <i1> [#uses=3] + br i1 %tmp.upgrd.6, label %cond_true, label %cond_next12 + +return: ; preds = %cond_next84, %cond_true34, %cond_next18, %cond_next12, %cond_true, %entry + %retval.0 = phi i32 [ 1, %entry ], [ 1, %cond_next84 ], [ %.mux, %cond_true34 ], [ 0, %cond_next18 ], [ 0, %cond_next12 ], [ 0, %cond_true ] ; <i32> [#uses=1] + ret i32 %retval.0 +} 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..8465b82 --- /dev/null +++ b/test/CodeGen/Generic/2006-04-26-SetCCAnd.ll @@ -0,0 +1,40 @@ +; RUN: llc < %s +; PR748 +@G = external global i16 ; <i16*> [#uses=1] + +define void @OmNewObjHdr() { +entry: + br i1 false, label %endif.4, label %then.0 + +then.0: ; preds = %entry + ret void + +endif.4: ; preds = %entry + br i1 false, label %else.3, label %shortcirc_next.3 + +shortcirc_next.3: ; preds = %endif.4 + ret void + +else.3: ; preds = %endif.4 + switch i32 0, label %endif.10 [ + i32 5001, label %then.10 + i32 -5008, label %then.10 + ] + +then.10: ; preds = %else.3, %else.3 + %tmp.112 = load i16* null ; <i16> [#uses=2] + %tmp.113 = load i16* @G ; <i16> [#uses=2] + %tmp.114 = icmp ugt i16 %tmp.112, %tmp.113 ; <i1> [#uses=1] + %tmp.120 = icmp ult i16 %tmp.112, %tmp.113 ; <i1> [#uses=1] + %bothcond = and i1 %tmp.114, %tmp.120 ; <i1> [#uses=1] + br i1 %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..22d8f99 --- /dev/null +++ b/test/CodeGen/Generic/2006-04-28-Sign-extend-bool.ll @@ -0,0 +1,9 @@ +; RUN: llc < %s + +define i32 @test(i32 %tmp93) { + %tmp98 = shl i32 %tmp93, 31 ; <i32> [#uses=1] + %tmp99 = ashr i32 %tmp98, 31 ; <i32> [#uses=1] + %tmp99.upgrd.1 = trunc i32 %tmp99 to i8 ; <i8> [#uses=1] + %tmp99100 = sext i8 %tmp99.upgrd.1 to i32 ; <i32> [#uses=1] + ret i32 %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..1a9fa9f --- /dev/null +++ b/test/CodeGen/Generic/2006-05-06-GEP-Cast-Sink-Crash.ll @@ -0,0 +1,29 @@ +; RUN: llc < %s +%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.SYMBOL_TABLE_ENTRY = type { [9 x i8], [9 x i8], i32, i32, i32, %struct.SYMBOL_TABLE_ENTRY* } + %struct.__sFILEX = type opaque + %struct.__sbuf = type { i8*, i32 } +@str14 = external global [6 x i8] ; <[6 x i8]*> [#uses=0] + +declare void @fprintf(i32, ...) + +define void @OUTPUT_TABLE(%struct.SYMBOL_TABLE_ENTRY* %SYM_TAB) { +entry: + %tmp11 = getelementptr %struct.SYMBOL_TABLE_ENTRY* %SYM_TAB, i32 0, i32 1, i32 0 ; <i8*> [#uses=2] + %tmp.i = bitcast i8* %tmp11 to i8* ; <i8*> [#uses=1] + br label %bb.i + +bb.i: ; preds = %cond_next.i, %entry + %s1.0.i = phi i8* [ %tmp.i, %entry ], [ null, %cond_next.i ] ; <i8*> [#uses=0] + br i1 false, label %cond_true.i31, label %cond_next.i + +cond_true.i31: ; preds = %bb.i + call void (i32, ...)* @fprintf( i32 0, i8* %tmp11, i8* null ) + ret void + +cond_next.i: ; preds = %bb.i + br i1 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..a3720a9 --- /dev/null +++ b/test/CodeGen/Generic/2006-06-12-LowerSwitchCrash.ll @@ -0,0 +1,10 @@ +; RUN: llc < %s -O0 + +define float @test(i32 %tmp12771278) { + switch i32 %tmp12771278, label %bb1279 [ + ] + +bb1279: ; preds = %0 + ret float 1.000000e+00 +} + 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..bd922b3 --- /dev/null +++ b/test/CodeGen/Generic/2006-06-13-ComputeMaskedBitsCrash.ll @@ -0,0 +1,35 @@ +; RUN: llc < %s -O0 + +%struct.cl_perfunc_opts = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32 } +@cl_pf_opts = external global %struct.cl_perfunc_opts ; <%struct.cl_perfunc_opts*> [#uses=2] + +define void @set_flags_from_O() { +entry: + %tmp22 = icmp sgt i32 0, 0 ; <i1> [#uses=1] + br i1 %tmp22, label %cond_true23, label %cond_next159 + +cond_true23: ; preds = %entry + %tmp138 = getelementptr %struct.cl_perfunc_opts* @cl_pf_opts, i32 0, i32 8 ; <i8*> [#uses=1] + %tmp138.upgrd.1 = bitcast i8* %tmp138 to i32* ; <i32*> [#uses=2] + %tmp139 = load i32* %tmp138.upgrd.1 ; <i32> [#uses=1] + %tmp140 = shl i32 1, 27 ; <i32> [#uses=1] + %tmp141 = and i32 %tmp140, 134217728 ; <i32> [#uses=1] + %tmp142 = and i32 %tmp139, -134217729 ; <i32> [#uses=1] + %tmp143 = or i32 %tmp142, %tmp141 ; <i32> [#uses=1] + store i32 %tmp143, i32* %tmp138.upgrd.1 + %tmp144 = getelementptr %struct.cl_perfunc_opts* @cl_pf_opts, i32 0, i32 8 ; <i8*> [#uses=1] + %tmp144.upgrd.2 = bitcast i8* %tmp144 to i32* ; <i32*> [#uses=1] + %tmp145 = load i32* %tmp144.upgrd.2 ; <i32> [#uses=1] + %tmp146 = shl i32 %tmp145, 22 ; <i32> [#uses=1] + %tmp147 = lshr i32 %tmp146, 31 ; <i32> [#uses=1] + %tmp147.upgrd.3 = trunc i32 %tmp147 to i8 ; <i8> [#uses=1] + %tmp148 = icmp eq i8 %tmp147.upgrd.3, 0 ; <i1> [#uses=1] + br i1 %tmp148, label %cond_true149, label %cond_next159 + +cond_true149: ; preds = %cond_true23 + %tmp150 = bitcast i8* null to i32* ; <i32*> [#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..c4f2fb0 --- /dev/null +++ b/test/CodeGen/Generic/2006-06-28-SimplifySetCCCrash.ll @@ -0,0 +1,279 @@ +; RUN: llc < %s +%struct.rtunion = type { i64 } + %struct.rtx_def = type { i16, i8, i8, [1 x %struct.rtunion] } +@ix86_cpu = external global i32 ; <i32*> [#uses=1] +@which_alternative = external global i32 ; <i32*> [#uses=3] + +declare fastcc i32 @recog() + +define void @athlon_fp_unit_ready_cost() { +entry: + %tmp = icmp slt i32 0, 0 ; <i1> [#uses=1] + br i1 %tmp, label %cond_true.i, label %cond_true + +cond_true: ; preds = %entry + ret void + +cond_true.i: ; preds = %entry + %tmp8.i = tail call fastcc i32 @recog( ) ; <i32> [#uses=1] + switch i32 %tmp8.i, label %UnifiedReturnBlock [ + i32 -1, label %bb2063 + i32 19, label %bb2035 + i32 20, label %bb2035 + i32 21, label %bb2035 + i32 23, label %bb2035 + i32 24, label %bb2035 + i32 27, label %bb2035 + i32 32, label %bb2035 + i32 33, label %bb1994 + i32 35, label %bb2035 + i32 36, label %bb1994 + i32 90, label %bb1948 + i32 94, label %bb1948 + i32 95, label %bb1948 + i32 101, label %bb1648 + i32 102, label %bb1648 + i32 103, label %bb1648 + i32 104, label %bb1648 + i32 133, label %bb1419 + i32 135, label %bb1238 + i32 136, label %bb1238 + i32 137, label %bb1238 + i32 138, label %bb1238 + i32 139, label %bb1201 + i32 140, label %bb1201 + i32 141, label %bb1154 + i32 142, label %bb1126 + i32 144, label %bb1201 + i32 145, label %bb1126 + i32 146, label %bb1201 + i32 147, label %bb1126 + i32 148, label %bb1201 + i32 149, label %bb1126 + i32 150, label %bb1201 + i32 151, label %bb1126 + i32 152, label %bb1096 + i32 153, label %bb1096 + i32 154, label %bb1096 + i32 157, label %bb1096 + i32 158, label %bb1096 + i32 159, label %bb1096 + i32 162, label %bb1096 + i32 163, label %bb1096 + i32 164, label %bb1096 + i32 167, label %bb1201 + i32 168, label %bb1201 + i32 170, label %bb1201 + i32 171, label %bb1201 + i32 173, label %bb1201 + i32 174, label %bb1201 + i32 176, label %bb1201 + i32 177, label %bb1201 + i32 179, label %bb993 + i32 180, label %bb993 + i32 181, label %bb993 + i32 182, label %bb993 + i32 183, label %bb993 + i32 184, label %bb993 + i32 365, label %bb1126 + i32 366, label %bb1126 + i32 367, label %bb1126 + i32 368, label %bb1126 + i32 369, label %bb1126 + i32 370, label %bb1126 + i32 371, label %bb1126 + i32 372, label %bb1126 + i32 373, label %bb1126 + i32 384, label %bb1126 + i32 385, label %bb1126 + i32 386, label %bb1126 + i32 387, label %bb1126 + i32 388, label %bb1126 + i32 389, label %bb1126 + i32 390, label %bb1126 + i32 391, label %bb1126 + i32 392, label %bb1126 + i32 525, label %bb919 + i32 526, label %bb839 + i32 528, label %bb919 + i32 529, label %bb839 + i32 531, label %cond_next6.i119 + i32 532, label %cond_next6.i97 + i32 533, label %cond_next6.i81 + i32 534, label %bb495 + i32 536, label %cond_next6.i81 + i32 537, label %cond_next6.i81 + i32 538, label %bb396 + i32 539, label %bb288 + i32 541, label %bb396 + i32 542, label %bb396 + i32 543, label %bb396 + i32 544, label %bb396 + i32 545, label %bb189 + i32 546, label %cond_next6.i + i32 547, label %bb189 + i32 548, label %cond_next6.i + i32 549, label %bb189 + i32 550, label %cond_next6.i + i32 551, label %bb189 + i32 552, label %cond_next6.i + i32 553, label %bb189 + i32 554, label %cond_next6.i + i32 555, label %bb189 + i32 556, label %cond_next6.i + i32 557, label %bb189 + i32 558, label %cond_next6.i + i32 618, label %bb40 + i32 619, label %bb18 + i32 620, label %bb40 + i32 621, label %bb10 + i32 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 = icmp eq i16 0, 78 ; <i1> [#uses=1] + br i1 %tmp.i126, label %cond_next778, label %bb802 + +cond_next778: ; preds = %cond_next6.i119 + %tmp781 = icmp eq i32 0, 1 ; <i1> [#uses=1] + br i1 %tmp781, label %cond_next784, label %bb790 + +cond_next784: ; preds = %cond_next778 + %tmp785 = load i32* @ix86_cpu ; <i32> [#uses=1] + %tmp786 = icmp eq i32 %tmp785, 5 ; <i1> [#uses=1] + br i1 %tmp786, label %UnifiedReturnBlock, label %bb790 + +bb790: ; preds = %cond_next784, %cond_next778 + %tmp793 = icmp eq i32 0, 1 ; <i1> [#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 i32* @which_alternative ; <i32> [#uses=1] + switch i32 %tmp1650, label %bb1701 [ + i32 0, label %cond_next1675 + i32 1, label %cond_next1675 + i32 2, label %cond_next1675 + ] + +cond_next1675: ; preds = %bb1648, %bb1648, %bb1648 + ret void + +bb1701: ; preds = %bb1648 + %tmp1702 = load i32* @which_alternative ; <i32> [#uses=1] + switch i32 %tmp1702, label %bb1808 [ + i32 0, label %cond_next1727 + i32 1, label %cond_next1727 + i32 2, label %cond_next1727 + ] + +cond_next1727: ; preds = %bb1701, %bb1701, %bb1701 + ret void + +bb1808: ; preds = %bb1701 + %bothcond696 = or i1 false, false ; <i1> [#uses=1] + br i1 %bothcond696, label %bb1876, label %cond_next1834 + +cond_next1834: ; preds = %bb1808 + ret void + +bb1876: ; preds = %bb1808 + %tmp1877signed = load i32* @which_alternative ; <i32> [#uses=4] + %tmp1877 = bitcast i32 %tmp1877signed to i32 ; <i32> [#uses=1] + %bothcond699 = icmp ult i32 %tmp1877, 2 ; <i1> [#uses=1] + %tmp1888 = icmp eq i32 %tmp1877signed, 2 ; <i1> [#uses=1] + %bothcond700 = or i1 %bothcond699, %tmp1888 ; <i1> [#uses=1] + %bothcond700.not = xor i1 %bothcond700, true ; <i1> [#uses=1] + %tmp1894 = icmp eq i32 %tmp1877signed, 3 ; <i1> [#uses=1] + %bothcond701 = or i1 %tmp1894, %bothcond700.not ; <i1> [#uses=1] + %bothcond702 = or i1 %bothcond701, false ; <i1> [#uses=1] + br i1 %bothcond702, label %UnifiedReturnBlock, label %cond_next1902 + +cond_next1902: ; preds = %bb1876 + switch i32 %tmp1877signed, label %cond_next1937 [ + i32 0, label %bb1918 + i32 1, label %bb1918 + i32 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 i32 [ 100, %bb1876 ], [ 100, %cond_true.i ], [ 4, %cond_next784 ] ; <i32> [#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..756bd5d --- /dev/null +++ b/test/CodeGen/Generic/2006-07-03-schedulers.ll @@ -0,0 +1,32 @@ +; RUN: llc < %s -pre-RA-sched=default +; RUN: llc < %s -pre-RA-sched=list-burr +; RUN: llc < %s -pre-RA-sched=fast +; PR859 + +; The top-down schedulers are excluded here because they don't yet support +; targets that use physreg defs. + +declare i32 @printf(i8*, i32, float) + +define i32 @testissue(i32 %i, float %x, float %y) { + br label %bb1 + +bb1: ; preds = %bb1, %0 + %x1 = fmul float %x, %y ; <float> [#uses=1] + %y1 = fmul float %y, 7.500000e-01 ; <float> [#uses=1] + %z1 = fadd float %x1, %y1 ; <float> [#uses=1] + %x2 = fmul float %x, 5.000000e-01 ; <float> [#uses=1] + %y2 = fmul float %y, 0x3FECCCCCC0000000 ; <float> [#uses=1] + %z2 = fadd float %x2, %y2 ; <float> [#uses=1] + %z3 = fadd float %z1, %z2 ; <float> [#uses=1] + %i1 = shl i32 %i, 3 ; <i32> [#uses=1] + %j1 = add i32 %i, 7 ; <i32> [#uses=1] + %m1 = add i32 %i1, %j1 ; <i32> [#uses=2] + %b = icmp sle i32 %m1, 6 ; <i1> [#uses=1] + br i1 %b, label %bb1, label %bb2 + +bb2: ; preds = %bb1 + %Msg = inttoptr i64 0 to i8* ; <i8*> [#uses=1] + call i32 @printf( i8* %Msg, i32 %m1, float %z3 ) ; <i32>:1 [#uses=0] + ret i32 0 +} diff --git a/test/CodeGen/Generic/2006-08-30-CoalescerCrash.ll b/test/CodeGen/Generic/2006-08-30-CoalescerCrash.ll new file mode 100644 index 0000000..cbe8b15 --- /dev/null +++ b/test/CodeGen/Generic/2006-08-30-CoalescerCrash.ll @@ -0,0 +1,112 @@ +; RUN: llc < %s +%struct.CUMULATIVE_ARGS = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 } + %struct.VEC_edge = type { i32, i32, [1 x %struct.edge_def*] } + %struct._obstack_chunk = type { i8*, %struct._obstack_chunk*, [4 x i8] } + %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*, i8*, %struct.loop*, [2 x %struct.et_node*], %struct.basic_block_def*, %struct.basic_block_def*, %struct.reorder_block_def*, %struct.bb_ann_d*, i64, i32, i32, i32, i32 } + %struct.bb_ann_d = type { %struct.tree_node*, i8, %struct.edge_prediction* } + %struct.bitmap_element_def = type { %struct.bitmap_element_def*, %struct.bitmap_element_def*, i32, [4 x i32] } + %struct.bitmap_head_def = type { %struct.bitmap_element_def*, %struct.bitmap_element_def*, i32, %struct.bitmap_obstack* } + %struct.bitmap_obstack = type { %struct.bitmap_element_def*, %struct.bitmap_head_def*, %struct.obstack } + %struct.cost_pair = type { %struct.iv_cand*, i32, %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 { i32, [1 x %struct.def_operand_ptr] } + %struct.edge_def = type { %struct.basic_block_def*, %struct.basic_block_def*, %struct.edge_def_insns, i8*, %struct.location_t*, i32, i32, i64, i32 } + %struct.edge_def_insns = type { %struct.rtx_def* } + %struct.edge_prediction = type { %struct.edge_prediction*, %struct.edge_def*, i32, i32 } + %struct.eh_status = type opaque + %struct.emit_status = type { i32, i32, %struct.rtx_def*, %struct.rtx_def*, %struct.sequence_stack*, i32, %struct.location_t, i32, i8*, %struct.rtx_def** } + %struct.et_node = type opaque + %struct.expr_status = type { i32, i32, i32, %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*, i32, i32, i32, i32, %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*, i8, i32, i64, %struct.tree_node*, %struct.tree_node*, %struct.rtx_def*, %struct.varray_head_tag*, %struct.temp_slot*, i32, %struct.var_refs_queue*, i32, i32, %struct.rtvec_def*, %struct.tree_node*, i32, i32, i32, %struct.machine_function*, i32, i32, i1, i1, %struct.language_function*, %struct.rtx_def*, i32, i32, i32, i32, %struct.location_t, %struct.varray_head_tag*, %struct.tree_node*, i8, i8, i8 } + %struct.htab = type { i32 (i8*)*, i32 (i8*, i8*)*, void (i8*)*, i8**, i32, i32, i32, i32, i32, i8* (i32, i32)*, void (i8*)*, i8*, i8* (i8*, i32, i32)*, void (i8*, i8*)*, i32 } + %struct.initial_value_struct = type opaque + %struct.iv = type { %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, i1, i1, i32 } + %struct.iv_cand = type { i32, i1, i32, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.iv*, i32 } + %struct.iv_use = type { i32, i32, %struct.iv*, %struct.tree_node*, %struct.tree_node**, %struct.bitmap_head_def*, i32, %struct.cost_pair*, %struct.iv_cand* } + %struct.ivopts_data = type { %struct.loop*, %struct.htab*, i32, %struct.version_info*, %struct.bitmap_head_def*, i32, %struct.varray_head_tag*, %struct.varray_head_tag*, %struct.bitmap_head_def*, i1 } + %struct.lang_decl = type opaque + %struct.language_function = type opaque + %struct.location_t = type { i8*, i32 } + %struct.loop = type { i32, %struct.basic_block_def*, %struct.basic_block_def*, %struct.basic_block_def*, %struct.lpt_decision, i32, i32, %struct.edge_def**, i32, %struct.basic_block_def*, %struct.basic_block_def*, i32, %struct.edge_def**, i32, %struct.edge_def**, i32, %struct.simple_bitmap_def*, i32, %struct.loop**, i32, %struct.loop*, %struct.loop*, %struct.loop*, %struct.loop*, i32, i8*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, i32, %struct.tree_node*, %struct.tree_node*, %struct.nb_iter_bound*, %struct.edge_def*, i1 } + %struct.lpt_decision = type { i32, i32 } + %struct.machine_function = type { %struct.stack_local_entry*, i8*, %struct.rtx_def*, i32, i32, i32, i32, i32 } + %struct.nb_iter_bound = type { %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.nb_iter_bound* } + %struct.obstack = type { i32, %struct._obstack_chunk*, i8*, i8*, i8*, i32, i32, %struct._obstack_chunk* (i8*, i32)*, void (i8*, %struct._obstack_chunk*)*, i8*, i8 } + %struct.reorder_block_def = type { %struct.rtx_def*, %struct.rtx_def*, %struct.basic_block_def*, %struct.basic_block_def*, %struct.basic_block_def*, i32, i32, i32 } + %struct.rtvec_def = type { i32, [1 x %struct.rtx_def*] } + %struct.rtx_def = type { i16, i8, i8, %struct.u } + %struct.sequence_stack = type { %struct.rtx_def*, %struct.rtx_def*, %struct.sequence_stack* } + %struct.simple_bitmap_def = type { i32, i32, i32, [1 x i64] } + %struct.stack_local_entry = type opaque + %struct.stmt_ann_d = type { %struct.tree_ann_common_d, i8, %struct.basic_block_def*, %struct.stmt_operands_d, %struct.dataflow_d*, %struct.bitmap_head_def*, i32 } + %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 { i32, i8*, %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*, i8, i8, i8, i8, i8 } + %struct.tree_decl = type { %struct.tree_common, %struct.location_t, i32, %struct.tree_node*, i8, i8, i8, i8, i8, i8, i8, i32, %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*, i32, %struct.tree_decl_u2, %struct.tree_node*, %struct.tree_node*, i64, %struct.lang_decl* } + %struct.tree_decl_u1 = type { i64 } + %struct.tree_decl_u2 = type { %struct.function* } + %struct.tree_node = type { %struct.tree_decl } + %struct.u = type { [1 x i64] } + %struct.v_def_use_operand_type_t = type { %struct.tree_node*, %struct.tree_node* } + %struct.v_may_def_optype_d = type { i32, [1 x %struct.v_def_use_operand_type_t] } + %struct.var_refs_queue = type { %struct.rtx_def*, i32, i32, %struct.var_refs_queue* } + %struct.varasm_status = type opaque + %struct.varray_head_tag = type { i32, i32, i32, i8*, %struct.u } + %struct.version_info = type { %struct.tree_node*, %struct.iv*, i1, i32, i1 } + %struct.vuse_optype_d = type { i32, [1 x %struct.tree_node*] } + +define i1 @determine_use_iv_cost(%struct.ivopts_data* %data, %struct.iv_use* %use, %struct.iv_cand* %cand) { +entry: + switch i32 0, label %bb91 [ + i32 0, label %bb + i32 1, label %bb6 + i32 3, label %cond_next135 + ] + +bb: ; preds = %entry + ret i1 false + +bb6: ; preds = %entry + br i1 false, label %bb87, label %cond_next27 + +cond_next27: ; preds = %bb6 + br i1 false, label %cond_true30, label %cond_next55 + +cond_true30: ; preds = %cond_next27 + br i1 false, label %cond_next41, label %cond_true35 + +cond_true35: ; preds = %cond_true30 + ret i1 false + +cond_next41: ; preds = %cond_true30 + %tmp44 = call i32 @force_var_cost( %struct.ivopts_data* %data, %struct.tree_node* null, %struct.bitmap_head_def** null ) ; <i32> [#uses=2] + %tmp46 = udiv i32 %tmp44, 5 ; <i32> [#uses=1] + call void @set_use_iv_cost( %struct.ivopts_data* %data, %struct.iv_use* %use, %struct.iv_cand* %cand, i32 %tmp46, %struct.bitmap_head_def* null ) + %tmp44.off = add i32 %tmp44, -50000000 ; <i32> [#uses=1] + %tmp52 = icmp ugt i32 %tmp44.off, 4 ; <i1> [#uses=1] + %tmp52.upgrd.1 = zext i1 %tmp52 to i32 ; <i32> [#uses=1] + br label %bb87 + +cond_next55: ; preds = %cond_next27 + ret i1 false + +bb87: ; preds = %cond_next41, %bb6 + %tmp2.0 = phi i32 [ %tmp52.upgrd.1, %cond_next41 ], [ 1, %bb6 ] ; <i32> [#uses=0] + ret i1 false + +bb91: ; preds = %entry + ret i1 false + +cond_next135: ; preds = %entry + %tmp193 = call i1 @determine_use_iv_cost_generic( %struct.ivopts_data* %data, %struct.iv_use* %use, %struct.iv_cand* %cand ) ; <i1> [#uses=0] + ret i1 false +} + +declare void @set_use_iv_cost(%struct.ivopts_data*, %struct.iv_use*, %struct.iv_cand*, i32, %struct.bitmap_head_def*) + +declare i32 @force_var_cost(%struct.ivopts_data*, %struct.tree_node*, %struct.bitmap_head_def**) + +declare i1 @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..4b332b3 --- /dev/null +++ b/test/CodeGen/Generic/2006-09-02-LocalAllocCrash.ll @@ -0,0 +1,117 @@ +; RUN: llc < %s -regalloc=local + +%struct.CHESS_POSITION = type { i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i32, i32, i8, i8, [64 x i8], i8, i8, i8, i8, i8 } +@search = external global %struct.CHESS_POSITION ; <%struct.CHESS_POSITION*> [#uses=2] +@bishop_shift_rl45 = external global [64 x i32] ; <[64 x i32]*> [#uses=1] +@bishop_shift_rr45 = external global [64 x i32] ; <[64 x i32]*> [#uses=1] +@black_outpost = external global [64 x i8] ; <[64 x i8]*> [#uses=1] +@bishop_mobility_rl45 = external global [64 x [256 x i32]] ; <[64 x [256 x i32]]*> [#uses=1] +@bishop_mobility_rr45 = external global [64 x [256 x i32]] ; <[64 x [256 x i32]]*> [#uses=1] + +declare fastcc i32 @FirstOne() + +define fastcc void @Evaluate() { +entry: + br i1 false, label %cond_false186, label %cond_true + +cond_true: ; preds = %entry + ret void + +cond_false186: ; preds = %entry + br i1 false, label %cond_true293, label %bb203 + +bb203: ; preds = %cond_false186 + ret void + +cond_true293: ; preds = %cond_false186 + br i1 false, label %cond_true298, label %cond_next317 + +cond_true298: ; preds = %cond_true293 + br i1 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 i1 false, label %bb1069, label %cond_true522 + +cond_true522: ; preds = %cond_next518 + ret void + +bb1069: ; preds = %cond_next518 + br i1 false, label %cond_next1131, label %bb1096 + +bb1096: ; preds = %bb1069 + ret void + +cond_next1131: ; preds = %bb1069 + br i1 false, label %cond_next1207, label %cond_true1150 + +cond_true1150: ; preds = %cond_next1131 + ret void + +cond_next1207: ; preds = %cond_next1131 + br i1 false, label %cond_next1219, label %cond_true1211 + +cond_true1211: ; preds = %cond_next1207 + ret void + +cond_next1219: ; preds = %cond_next1207 + br i1 false, label %cond_true1223, label %cond_next1283 + +cond_true1223: ; preds = %cond_next1219 + br i1 false, label %cond_true1254, label %cond_true1264 + +cond_true1254: ; preds = %cond_true1223 + br i1 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 i64* getelementptr (%struct.CHESS_POSITION* @search, i32 0, i32 3) ; <i64> [#uses=1] + %tmp1591 = load i64* getelementptr (%struct.CHESS_POSITION* @search, i32 0, i32 4) ; <i64> [#uses=1] + %tmp1572 = tail call fastcc i32 @FirstOne( ) ; <i32> [#uses=5] + %tmp1582 = getelementptr [64 x i32]* @bishop_shift_rl45, i32 0, i32 %tmp1572 ; <i32*> [#uses=1] + %tmp1583 = load i32* %tmp1582 ; <i32> [#uses=1] + %tmp1583.upgrd.1 = trunc i32 %tmp1583 to i8 ; <i8> [#uses=1] + %shift.upgrd.2 = zext i8 %tmp1583.upgrd.1 to i64 ; <i64> [#uses=1] + %tmp1584 = lshr i64 %tmp1580, %shift.upgrd.2 ; <i64> [#uses=1] + %tmp1584.upgrd.3 = trunc i64 %tmp1584 to i32 ; <i32> [#uses=1] + %tmp1585 = and i32 %tmp1584.upgrd.3, 255 ; <i32> [#uses=1] + %gep.upgrd.4 = zext i32 %tmp1585 to i64 ; <i64> [#uses=1] + %tmp1587 = getelementptr [64 x [256 x i32]]* @bishop_mobility_rl45, i32 0, i32 %tmp1572, i64 %gep.upgrd.4 ; <i32*> [#uses=1] + %tmp1588 = load i32* %tmp1587 ; <i32> [#uses=1] + %tmp1593 = getelementptr [64 x i32]* @bishop_shift_rr45, i32 0, i32 %tmp1572 ; <i32*> [#uses=1] + %tmp1594 = load i32* %tmp1593 ; <i32> [#uses=1] + %tmp1594.upgrd.5 = trunc i32 %tmp1594 to i8 ; <i8> [#uses=1] + %shift.upgrd.6 = zext i8 %tmp1594.upgrd.5 to i64 ; <i64> [#uses=1] + %tmp1595 = lshr i64 %tmp1591, %shift.upgrd.6 ; <i64> [#uses=1] + %tmp1595.upgrd.7 = trunc i64 %tmp1595 to i32 ; <i32> [#uses=1] + %tmp1596 = and i32 %tmp1595.upgrd.7, 255 ; <i32> [#uses=1] + %gep.upgrd.8 = zext i32 %tmp1596 to i64 ; <i64> [#uses=1] + %tmp1598 = getelementptr [64 x [256 x i32]]* @bishop_mobility_rr45, i32 0, i32 %tmp1572, i64 %gep.upgrd.8 ; <i32*> [#uses=1] + %tmp1599 = load i32* %tmp1598 ; <i32> [#uses=1] + %tmp1600.neg = sub i32 0, %tmp1588 ; <i32> [#uses=1] + %tmp1602 = sub i32 %tmp1600.neg, %tmp1599 ; <i32> [#uses=1] + %tmp1604 = getelementptr [64 x i8]* @black_outpost, i32 0, i32 %tmp1572 ; <i8*> [#uses=1] + %tmp1605 = load i8* %tmp1604 ; <i8> [#uses=1] + %tmp1606 = icmp eq i8 %tmp1605, 0 ; <i1> [#uses=1] + br i1 %tmp1606, label %cond_next1637, label %cond_true1607 + +cond_true1607: ; preds = %bb1567 + ret void + +cond_next1637: ; preds = %bb1567 + %tmp1662 = sub i32 %tmp1602, 0 ; <i32> [#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..3d592b3 --- /dev/null +++ b/test/CodeGen/Generic/2006-09-06-SwitchLowering.ll @@ -0,0 +1,96 @@ +; RUN: llc < %s + +define void @foo() { + br label %cond_true813.i + +cond_true813.i: ; preds = %0 + br i1 false, label %cond_true818.i, label %cond_next1146.i + +cond_true818.i: ; preds = %cond_true813.i + br i1 false, label %recog_memoized.exit52, label %cond_next1146.i + +recog_memoized.exit52: ; preds = %cond_true818.i + switch i32 0, label %bb886.i.preheader [ + i32 0, label %bb907.i + i32 44, label %bb866.i + i32 103, label %bb874.i + i32 114, label %bb874.i + ] + +bb857.i: ; preds = %bb886.i, %bb866.i + %tmp862.i494.24 = phi i8* [ null, %bb866.i ], [ %tmp862.i494.26, %bb886.i ] ; <i8*> [#uses=4] + switch i32 0, label %bb886.i.preheader [ + i32 0, label %bb907.i + i32 44, label %bb866.i + i32 103, label %bb874.i + i32 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 i1 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 i8* [ %tmp862.i494.24, %bb857.i ], [ %tmp862.i494.24, %bb857.i ], [ undef, %recog_memoized.exit52 ], [ undef, %recog_memoized.exit52 ] ; <i8*> [#uses=1] + switch i32 0, label %bb886.i.preheader.loopexit [ + i32 0, label %bb907.i + i32 44, label %bb866.i.loopexit + i32 103, label %bb874.i.backedge + i32 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 i8* [ undef, %recog_memoized.exit52 ], [ %tmp862.i494.24, %bb857.i ] ; <i8*> [#uses=1] + br label %bb886.i + +bb886.i: ; preds = %cond_true903.i, %bb886.i.preheader + br i1 false, label %bb857.i, label %cond_true903.i + +cond_true903.i: ; preds = %bb886.i + switch i32 0, label %bb886.i [ + i32 0, label %bb907.i + i32 44, label %bb866.i.loopexit31 + i32 103, label %bb874.i.preheader.loopexit + i32 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 i8* [ %tmp862.i494.24, %bb857.i ], [ null, %bb866.i ], [ undef, %recog_memoized.exit52 ], [ %tmp862.i494.25, %bb874.i ], [ null, %cond_true903.i ] ; <i8*> [#uses=1] + br i1 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 i8* [ %tmp862.i494.0, %bb907.i ], [ undef, %cond_true818.i ], [ undef, %cond_true813.i ] ; <i8*> [#uses=0] + ret void + +bb2060.i: ; No predecessors! + br i1 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..51902c8 --- /dev/null +++ b/test/CodeGen/Generic/2006-10-27-CondFolding.ll @@ -0,0 +1,21 @@ +; RUN: llc < %s + +define void @start_pass_huff(i32 %gather_statistics) { +entry: + %tmp = icmp eq i32 %gather_statistics, 0 ; <i1> [#uses=1] + br i1 false, label %cond_next22, label %bb166 + +cond_next22: ; preds = %entry + %bothcond = and i1 false, %tmp ; <i1> [#uses=1] + br i1 %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..7dcb52c --- /dev/null +++ b/test/CodeGen/Generic/2006-10-29-Crash.ll @@ -0,0 +1,22 @@ +; RUN: llc < %s + +define void @form_component_prediction(i32 %dy) { +entry: + %tmp7 = and i32 %dy, 1 ; <i32> [#uses=1] + %tmp27 = icmp eq i32 %tmp7, 0 ; <i1> [#uses=1] + br i1 false, label %cond_next30, label %bb115 + +cond_next30: ; preds = %entry + ret void + +bb115: ; preds = %entry + %bothcond1 = or i1 %tmp27, false ; <i1> [#uses=1] + br i1 %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-20-DAGCombineCrash.ll b/test/CodeGen/Generic/2006-11-20-DAGCombineCrash.ll new file mode 100644 index 0000000..26d0f4f --- /dev/null +++ b/test/CodeGen/Generic/2006-11-20-DAGCombineCrash.ll @@ -0,0 +1,41 @@ +; RUN: llc < %s +; PR1011 +%struct.mng_data = type { i8* (%struct.mng_data*, i32)*, i32, i32, i32, i8, i8, i32, i32, i32, i32, i32 } + +define void @mng_display_bgr565() { +entry: + br i1 false, label %bb.preheader, label %return + +bb.preheader: ; preds = %entry + br i1 false, label %cond_true48, label %cond_next80 + +cond_true48: ; preds = %bb.preheader + %tmp = load i8* null ; <i8> [#uses=1] + %tmp51 = zext i8 %tmp to i16 ; <i16> [#uses=1] + %tmp99 = load i8* null ; <i8> [#uses=1] + %tmp54 = bitcast i8 %tmp99 to i8 ; <i8> [#uses=1] + %tmp54.upgrd.1 = zext i8 %tmp54 to i32 ; <i32> [#uses=1] + %tmp55 = lshr i32 %tmp54.upgrd.1, 3 ; <i32> [#uses=1] + %tmp55.upgrd.2 = trunc i32 %tmp55 to i16 ; <i16> [#uses=1] + %tmp52 = shl i16 %tmp51, 5 ; <i16> [#uses=1] + %tmp56 = and i16 %tmp55.upgrd.2, 28 ; <i16> [#uses=1] + %tmp57 = or i16 %tmp56, %tmp52 ; <i16> [#uses=1] + %tmp60 = zext i16 %tmp57 to i32 ; <i32> [#uses=1] + %tmp62 = xor i32 0, 65535 ; <i32> [#uses=1] + %tmp63 = mul i32 %tmp60, %tmp62 ; <i32> [#uses=1] + %tmp65 = add i32 0, %tmp63 ; <i32> [#uses=1] + %tmp69 = add i32 0, %tmp65 ; <i32> [#uses=1] + %tmp70 = lshr i32 %tmp69, 16 ; <i32> [#uses=1] + %tmp70.upgrd.3 = trunc i32 %tmp70 to i16 ; <i16> [#uses=1] + %tmp75 = lshr i16 %tmp70.upgrd.3, 8 ; <i16> [#uses=1] + %tmp75.upgrd.4 = trunc i16 %tmp75 to i8 ; <i8> [#uses=1] + %tmp76 = lshr i8 %tmp75.upgrd.4, 5 ; <i8> [#uses=1] + store i8 %tmp76, i8* null + ret void + +cond_next80: ; preds = %bb.preheader + ret void + +return: ; preds = %entry + ret void +} 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..255b120 --- /dev/null +++ b/test/CodeGen/Generic/2007-01-15-LoadSelectCycle.ll @@ -0,0 +1,12 @@ +; RUN: llc < %s +; 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..6bf5631 --- /dev/null +++ b/test/CodeGen/Generic/2007-02-16-BranchFold.ll @@ -0,0 +1,95 @@ +; PR 1200 +; RUN: llc < %s -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-25-invoke.ll b/test/CodeGen/Generic/2007-02-25-invoke.ll new file mode 100644 index 0000000..6e20eaa --- /dev/null +++ b/test/CodeGen/Generic/2007-02-25-invoke.ll @@ -0,0 +1,12 @@ +; RUN: llc < %s + +; 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..339f0f7 --- /dev/null +++ b/test/CodeGen/Generic/2007-04-08-MultipleFrameIndices.ll @@ -0,0 +1,11 @@ +; RUN: llc < %s +; 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..a0b1403 --- /dev/null +++ b/test/CodeGen/Generic/2007-04-13-SwitchLowerBadPhi.ll @@ -0,0 +1,27 @@ +; RUN: llc < %s -O0 +; 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-17-lsr-crash.ll b/test/CodeGen/Generic/2007-04-17-lsr-crash.ll new file mode 100644 index 0000000..98f87e5 --- /dev/null +++ b/test/CodeGen/Generic/2007-04-17-lsr-crash.ll @@ -0,0 +1,35 @@ +; RUN: llc < %s + +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-InlineAsm-X-Dest.ll b/test/CodeGen/Generic/2007-04-27-InlineAsm-X-Dest.ll new file mode 100644 index 0000000..af522dc --- /dev/null +++ b/test/CodeGen/Generic/2007-04-27-InlineAsm-X-Dest.ll @@ -0,0 +1,8 @@ +; RUN: llc < %s + +; 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..f2c9b7f --- /dev/null +++ b/test/CodeGen/Generic/2007-04-27-LargeMemObject.ll @@ -0,0 +1,13 @@ +; RUN: llc < %s + + %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..568b88f --- /dev/null +++ b/test/CodeGen/Generic/2007-04-30-LandingPadBranchFolding.ll @@ -0,0 +1,59 @@ +; RUN: llc < %s +; 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..bb774b4 --- /dev/null +++ b/test/CodeGen/Generic/2007-05-03-EHTypeInfo.ll @@ -0,0 +1,12 @@ +; RUN: llc < %s -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.i32( i8* getelementptr (%struct.exception* @program_error, i32 0, i32 0) ) ; <i32> [#uses=0] + ret void +} + +declare i32 @llvm.eh.typeid.for.i32(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..2749326 --- /dev/null +++ b/test/CodeGen/Generic/2007-05-05-Personality.ll @@ -0,0 +1,35 @@ +; RUN: llc < %s -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.i32( 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.i32( 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.i32(i8*, i8*, ...) + +declare i32 @llvm.eh.typeid.for.i32(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..b989819 --- /dev/null +++ b/test/CodeGen/Generic/2007-05-15-InfiniteRecursion.ll @@ -0,0 +1,90 @@ +; RUN: llc < %s + + %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 = fmul 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 = fsub double 1.000000e+00, %tmp199200.pn.i ; <double> [#uses=1] + %factor.2.in.i = fmul 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-11-21-UndeadIllegalNode.ll b/test/CodeGen/Generic/2007-11-21-UndeadIllegalNode.ll new file mode 100644 index 0000000..e220be6 --- /dev/null +++ b/test/CodeGen/Generic/2007-11-21-UndeadIllegalNode.ll @@ -0,0 +1,159 @@ +; RUN: llc < %s -o - + +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-f80:32:32" +target triple = "i686-pc-linux-gnu" + %struct.RETURN = type { i32, i32 } + %struct.ada__finalization__controlled = type { %struct.system__finalization_root__root_controlled } + %struct.ada__streams__root_stream_type = type { %struct.ada__tags__dispatch_table* } + %struct.ada__strings__unbounded__string_access = type { i8*, %struct.RETURN* } + %struct.ada__strings__unbounded__unbounded_string = type { %struct.ada__finalization__controlled, %struct.ada__strings__unbounded__string_access, i32 } + %struct.ada__tags__dispatch_table = type { [1 x i32] } + %struct.exception = type { i8, i8, i32, i8*, i8*, i32, i8* } + %struct.system__finalization_root__root_controlled = type { %struct.ada__streams__root_stream_type, %struct.system__finalization_root__root_controlled*, %struct.system__finalization_root__root_controlled* } + %struct.system__standard_library__exception_data = type { i8, i8, i32, i32, %struct.system__standard_library__exception_data*, i32, void ()* } +@C.495.7639 = internal constant %struct.RETURN { i32 1, i32 16 } ; <%struct.RETURN*> [#uses=1] +@ada__strings__index_error = external global %struct.exception ; <%struct.exception*> [#uses=1] +@.str5 = internal constant [16 x i8] c"a-strunb.adb:690" ; <[16 x i8]*> [#uses=1] + +declare void @llvm.memcpy.i32(i8*, i8*, i32, i32) + +declare void @ada__strings__unbounded__realloc_for_chunk(%struct.ada__strings__unbounded__unbounded_string*, i32) + +declare void @__gnat_raise_exception(%struct.system__standard_library__exception_data*, i64) + +define void @ada__strings__unbounded__insert__2(%struct.ada__strings__unbounded__unbounded_string* %source, i32 %before, i64 %new_item.0.0) { +entry: + %tmp24636 = lshr i64 %new_item.0.0, 32 ; <i64> [#uses=1] + %tmp24637 = trunc i64 %tmp24636 to i32 ; <i32> [#uses=1] + %tmp24638 = inttoptr i32 %tmp24637 to %struct.RETURN* ; <%struct.RETURN*> [#uses=2] + %tmp25 = getelementptr %struct.RETURN* %tmp24638, i32 0, i32 0 ; <i32*> [#uses=1] + %tmp26 = load i32* %tmp25, align 4 ; <i32> [#uses=1] + %tmp29 = getelementptr %struct.RETURN* %tmp24638, i32 0, i32 1 ; <i32*> [#uses=1] + %tmp30 = load i32* %tmp29, align 4 ; <i32> [#uses=1] + %tmp63 = getelementptr %struct.ada__strings__unbounded__unbounded_string* %source, i32 0, i32 1, i32 1 ; <%struct.RETURN**> [#uses=5] + %tmp64 = load %struct.RETURN** %tmp63, align 4 ; <%struct.RETURN*> [#uses=1] + %tmp65 = getelementptr %struct.RETURN* %tmp64, i32 0, i32 0 ; <i32*> [#uses=1] + %tmp66 = load i32* %tmp65, align 4 ; <i32> [#uses=1] + %tmp67 = icmp sgt i32 %tmp66, %before ; <i1> [#uses=1] + br i1 %tmp67, label %bb77, label %bb + +bb: ; preds = %entry + %tmp71 = getelementptr %struct.ada__strings__unbounded__unbounded_string* %source, i32 0, i32 2 ; <i32*> [#uses=4] + %tmp72 = load i32* %tmp71, align 4 ; <i32> [#uses=1] + %tmp73 = add i32 %tmp72, 1 ; <i32> [#uses=1] + %tmp74 = icmp slt i32 %tmp73, %before ; <i1> [#uses=1] + br i1 %tmp74, label %bb77, label %bb84 + +bb77: ; preds = %bb, %entry + tail call void @__gnat_raise_exception( %struct.system__standard_library__exception_data* bitcast (%struct.exception* @ada__strings__index_error to %struct.system__standard_library__exception_data*), i64 or (i64 zext (i32 ptrtoint ([16 x i8]* @.str5 to i32) to i64), i64 shl (i64 zext (i32 ptrtoint (%struct.RETURN* @C.495.7639 to i32) to i64), i64 32)) ) + unreachable + +bb84: ; preds = %bb + %tmp93 = sub i32 %tmp30, %tmp26 ; <i32> [#uses=2] + %tmp9394 = sext i32 %tmp93 to i36 ; <i36> [#uses=1] + %tmp95 = shl i36 %tmp9394, 3 ; <i36> [#uses=1] + %tmp96 = add i36 %tmp95, 8 ; <i36> [#uses=2] + %tmp97 = icmp sgt i36 %tmp96, -1 ; <i1> [#uses=1] + %tmp100 = select i1 %tmp97, i36 %tmp96, i36 0 ; <i36> [#uses=2] + %tmp101 = icmp slt i36 %tmp100, 17179869177 ; <i1> [#uses=1] + %tmp100.cast = trunc i36 %tmp100 to i32 ; <i32> [#uses=1] + %min102 = select i1 %tmp101, i32 %tmp100.cast, i32 -8 ; <i32> [#uses=1] + tail call void @ada__strings__unbounded__realloc_for_chunk( %struct.ada__strings__unbounded__unbounded_string* %source, i32 %min102 ) + %tmp148 = load i32* %tmp71, align 4 ; <i32> [#uses=4] + %tmp152 = add i32 %tmp93, 1 ; <i32> [#uses=2] + %tmp153 = icmp sgt i32 %tmp152, -1 ; <i1> [#uses=1] + %max154 = select i1 %tmp153, i32 %tmp152, i32 0 ; <i32> [#uses=5] + %tmp155 = add i32 %tmp148, %max154 ; <i32> [#uses=5] + %tmp315 = getelementptr %struct.ada__strings__unbounded__unbounded_string* %source, i32 0, i32 1, i32 0 ; <i8**> [#uses=4] + %tmp328 = load %struct.RETURN** %tmp63, align 4 ; <%struct.RETURN*> [#uses=1] + %tmp329 = getelementptr %struct.RETURN* %tmp328, i32 0, i32 0 ; <i32*> [#uses=1] + %tmp330 = load i32* %tmp329, align 4 ; <i32> [#uses=4] + %tmp324 = add i32 %max154, %before ; <i32> [#uses=3] + %tmp331 = sub i32 %tmp324, %tmp330 ; <i32> [#uses=1] + %tmp349 = sub i32 %before, %tmp330 ; <i32> [#uses=1] + %tmp356 = icmp sgt i32 %tmp331, %tmp349 ; <i1> [#uses=1] + %tmp431 = icmp sgt i32 %tmp324, %tmp155 ; <i1> [#uses=2] + br i1 %tmp356, label %bb420, label %bb359 + +bb359: ; preds = %bb84 + br i1 %tmp431, label %bb481, label %bb382 + +bb382: ; preds = %bb382, %bb359 + %indvar = phi i32 [ 0, %bb359 ], [ %indvar.next, %bb382 ] ; <i32> [#uses=2] + %max379.pn = phi i32 [ %max154, %bb359 ], [ %L492b.0, %bb382 ] ; <i32> [#uses=1] + %before.pn = phi i32 [ %before, %bb359 ], [ 1, %bb382 ] ; <i32> [#uses=1] + %L492b.0 = add i32 %before.pn, %max379.pn ; <i32> [#uses=3] + %tmp386 = load %struct.RETURN** %tmp63, align 4 ; <%struct.RETURN*> [#uses=1] + %tmp387 = getelementptr %struct.RETURN* %tmp386, i32 0, i32 0 ; <i32*> [#uses=1] + %tmp388 = load i32* %tmp387, align 4 ; <i32> [#uses=2] + %tmp392 = load i8** %tmp315, align 4 ; <i8*> [#uses=2] + %R493b.0 = add i32 %indvar, %before ; <i32> [#uses=1] + %tmp405 = sub i32 %R493b.0, %tmp388 ; <i32> [#uses=1] + %tmp406 = getelementptr i8* %tmp392, i32 %tmp405 ; <i8*> [#uses=1] + %tmp407 = load i8* %tmp406, align 1 ; <i8> [#uses=1] + %tmp408 = sub i32 %L492b.0, %tmp388 ; <i32> [#uses=1] + %tmp409 = getelementptr i8* %tmp392, i32 %tmp408 ; <i8*> [#uses=1] + store i8 %tmp407, i8* %tmp409, align 1 + %tmp414 = icmp eq i32 %L492b.0, %tmp155 ; <i1> [#uses=1] + %indvar.next = add i32 %indvar, 1 ; <i32> [#uses=1] + br i1 %tmp414, label %bb481, label %bb382 + +bb420: ; preds = %bb84 + br i1 %tmp431, label %bb481, label %bb436.preheader + +bb436.preheader: ; preds = %bb420 + %tmp4468 = load i8** %tmp315, align 4 ; <i8*> [#uses=2] + %tmp4599 = sub i32 %tmp148, %tmp330 ; <i32> [#uses=1] + %tmp46010 = getelementptr i8* %tmp4468, i32 %tmp4599 ; <i8*> [#uses=1] + %tmp46111 = load i8* %tmp46010, align 1 ; <i8> [#uses=1] + %tmp46212 = sub i32 %tmp155, %tmp330 ; <i32> [#uses=1] + %tmp46313 = getelementptr i8* %tmp4468, i32 %tmp46212 ; <i8*> [#uses=1] + store i8 %tmp46111, i8* %tmp46313, align 1 + %exitcond14 = icmp eq i32 %tmp155, %tmp324 ; <i1> [#uses=1] + br i1 %exitcond14, label %bb481, label %bb.nph + +bb.nph: ; preds = %bb436.preheader + %tmp5 = sub i32 %tmp148, %before ; <i32> [#uses=1] + br label %bb478 + +bb478: ; preds = %bb478, %bb.nph + %indvar6422 = phi i32 [ 0, %bb.nph ], [ %indvar.next643, %bb478 ] ; <i32> [#uses=1] + %indvar.next643 = add i32 %indvar6422, 1 ; <i32> [#uses=4] + %L490b.0 = sub i32 %tmp155, %indvar.next643 ; <i32> [#uses=1] + %R491b.0 = sub i32 %tmp148, %indvar.next643 ; <i32> [#uses=1] + %tmp440 = load %struct.RETURN** %tmp63, align 4 ; <%struct.RETURN*> [#uses=1] + %tmp441 = getelementptr %struct.RETURN* %tmp440, i32 0, i32 0 ; <i32*> [#uses=1] + %tmp442 = load i32* %tmp441, align 4 ; <i32> [#uses=2] + %tmp446 = load i8** %tmp315, align 4 ; <i8*> [#uses=2] + %tmp459 = sub i32 %R491b.0, %tmp442 ; <i32> [#uses=1] + %tmp460 = getelementptr i8* %tmp446, i32 %tmp459 ; <i8*> [#uses=1] + %tmp461 = load i8* %tmp460, align 1 ; <i8> [#uses=1] + %tmp462 = sub i32 %L490b.0, %tmp442 ; <i32> [#uses=1] + %tmp463 = getelementptr i8* %tmp446, i32 %tmp462 ; <i8*> [#uses=1] + store i8 %tmp461, i8* %tmp463, align 1 + %exitcond = icmp eq i32 %indvar.next643, %tmp5 ; <i1> [#uses=1] + br i1 %exitcond, label %bb481, label %bb478 + +bb481: ; preds = %bb478, %bb436.preheader, %bb420, %bb382, %bb359 + %tmp577 = add i32 %before, -1 ; <i32> [#uses=3] + %tmp578 = add i32 %max154, %tmp577 ; <i32> [#uses=2] + %tmp581 = icmp sge i32 %tmp578, %tmp577 ; <i1> [#uses=1] + %max582 = select i1 %tmp581, i32 %tmp578, i32 %tmp577 ; <i32> [#uses=1] + %tmp584 = sub i32 %max582, %before ; <i32> [#uses=1] + %tmp585 = add i32 %tmp584, 1 ; <i32> [#uses=2] + %tmp586 = icmp sgt i32 %tmp585, -1 ; <i1> [#uses=1] + %max587 = select i1 %tmp586, i32 %tmp585, i32 0 ; <i32> [#uses=1] + %tmp591 = load %struct.RETURN** %tmp63, align 4 ; <%struct.RETURN*> [#uses=1] + %tmp592 = getelementptr %struct.RETURN* %tmp591, i32 0, i32 0 ; <i32*> [#uses=1] + %tmp593 = load i32* %tmp592, align 4 ; <i32> [#uses=1] + %tmp597 = load i8** %tmp315, align 4 ; <i8*> [#uses=1] + %tmp600621 = trunc i64 %new_item.0.0 to i32 ; <i32> [#uses=1] + %tmp600622 = inttoptr i32 %tmp600621 to i8* ; <i8*> [#uses=1] + %tmp601 = sub i32 %before, %tmp593 ; <i32> [#uses=1] + %tmp602 = getelementptr i8* %tmp597, i32 %tmp601 ; <i8*> [#uses=1] + tail call void @llvm.memcpy.i32( i8* %tmp602, i8* %tmp600622, i32 %max587, i32 1 ) + %tmp606 = load i32* %tmp71, align 4 ; <i32> [#uses=1] + %tmp613 = add i32 %tmp606, %max154 ; <i32> [#uses=1] + store i32 %tmp613, i32* %tmp71, align 4 + ret void +} diff --git a/test/CodeGen/Generic/2007-12-17-InvokeAsm.ll b/test/CodeGen/Generic/2007-12-17-InvokeAsm.ll new file mode 100644 index 0000000..bd26481 --- /dev/null +++ b/test/CodeGen/Generic/2007-12-17-InvokeAsm.ll @@ -0,0 +1,15 @@ +; RUN: llc < %s -enable-eh + +target triple = "i686-pc-linux-gnu" + +define fastcc void @bc__support__high_resolution_time__initialize_clock_rate() { +entry: + invoke void asm "rdtsc\0A\09movl %eax, $0\0A\09movl %edx, $1", "=*imr,=*imr,~{dirflag},~{fpsr},~{flags},~{dx},~{ax}"( i32* null, i32* null ) + to label %.noexc unwind label %cleanup144 + +.noexc: ; preds = %entry + ret void + +cleanup144: ; preds = %entry + unwind +} diff --git a/test/CodeGen/Generic/2007-12-31-UnusedSelector.ll b/test/CodeGen/Generic/2007-12-31-UnusedSelector.ll new file mode 100644 index 0000000..fc9164f --- /dev/null +++ b/test/CodeGen/Generic/2007-12-31-UnusedSelector.ll @@ -0,0 +1,36 @@ +; RUN: llc < %s -enable-eh +; PR1833 + +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-f80:32:32" +target triple = "i686-pc-linux-gnu" + %struct.__class_type_info_pseudo = type { %struct.__type_info_pseudo } + %struct.__type_info_pseudo = type { i8*, i8* } +@_ZTI2e1 = external constant %struct.__class_type_info_pseudo ; <%struct.__class_type_info_pseudo*> [#uses=1] + +define void @_Z7ex_testv() { +entry: + invoke void @__cxa_throw( i8* null, i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI2e1 to i8*), void (i8*)* null ) noreturn + to label %UnifiedUnreachableBlock unwind label %lpad + +bb14: ; preds = %lpad + unreachable + +lpad: ; preds = %entry + invoke void @__cxa_end_catch( ) + to label %bb14 unwind label %lpad17 + +lpad17: ; preds = %lpad + %eh_select20 = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32( i8* null, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null ) ; <i32> [#uses=0] + unreachable + +UnifiedUnreachableBlock: ; preds = %entry + unreachable +} + +declare void @__cxa_throw(i8*, i8*, void (i8*)*) noreturn + +declare i32 @llvm.eh.selector.i32(i8*, i8*, ...) + +declare void @__cxa_end_catch() + +declare i32 @__gxx_personality_v0(...) diff --git a/test/CodeGen/Generic/2008-01-25-dag-combine-mul.ll b/test/CodeGen/Generic/2008-01-25-dag-combine-mul.ll new file mode 100644 index 0000000..314bb05 --- /dev/null +++ b/test/CodeGen/Generic/2008-01-25-dag-combine-mul.ll @@ -0,0 +1,31 @@ +; RUN: llc < %s +; rdar://5707064 + +define i32 @f(i16* %pc) { +entry: + %acc = alloca i64, align 8 ; <i64*> [#uses=4] + %tmp97 = load i64* %acc, align 8 ; <i64> [#uses=1] + %tmp98 = and i64 %tmp97, 4294967295 ; <i64> [#uses=1] + %tmp99 = load i64* null, align 8 ; <i64> [#uses=1] + %tmp100 = and i64 %tmp99, 4294967295 ; <i64> [#uses=1] + %tmp101 = mul i64 %tmp98, %tmp100 ; <i64> [#uses=1] + %tmp103 = lshr i64 %tmp101, 0 ; <i64> [#uses=1] + %tmp104 = load i64* %acc, align 8 ; <i64> [#uses=1] + %.cast105 = zext i32 32 to i64 ; <i64> [#uses=1] + %tmp106 = lshr i64 %tmp104, %.cast105 ; <i64> [#uses=1] + %tmp107 = load i64* null, align 8 ; <i64> [#uses=1] + %tmp108 = and i64 %tmp107, 4294967295 ; <i64> [#uses=1] + %tmp109 = mul i64 %tmp106, %tmp108 ; <i64> [#uses=1] + %tmp112 = add i64 %tmp109, 0 ; <i64> [#uses=1] + %tmp116 = add i64 %tmp112, 0 ; <i64> [#uses=1] + %tmp117 = add i64 %tmp103, %tmp116 ; <i64> [#uses=1] + %tmp118 = load i64* %acc, align 8 ; <i64> [#uses=1] + %tmp120 = lshr i64 %tmp118, 0 ; <i64> [#uses=1] + %tmp121 = load i64* null, align 8 ; <i64> [#uses=1] + %tmp123 = lshr i64 %tmp121, 0 ; <i64> [#uses=1] + %tmp124 = mul i64 %tmp120, %tmp123 ; <i64> [#uses=1] + %tmp126 = shl i64 %tmp124, 0 ; <i64> [#uses=1] + %tmp127 = add i64 %tmp117, %tmp126 ; <i64> [#uses=1] + store i64 %tmp127, i64* %acc, align 8 + ret i32 0 +} diff --git a/test/CodeGen/Generic/2008-01-30-LoadCrash.ll b/test/CodeGen/Generic/2008-01-30-LoadCrash.ll new file mode 100644 index 0000000..70c3aaa --- /dev/null +++ b/test/CodeGen/Generic/2008-01-30-LoadCrash.ll @@ -0,0 +1,19 @@ +; RUN: llc < %s + +@letters.3100 = external constant [63 x i8] ; <[63 x i8]*> [#uses=2] + +define i32 @mkstemps(i8* %pattern, i32 %suffix_len, i64 %tmp42.rle) nounwind { +bb20: + br label %bb41 + +bb41: ; preds = %bb20 + %tmp8182 = trunc i64 %tmp42.rle to i32 ; <i32> [#uses=1] + %tmp83 = getelementptr [63 x i8]* @letters.3100, i32 0, i32 %tmp8182 ; <i8*> [#uses=1] + %tmp84 = load i8* %tmp83, align 1 ; <i8> [#uses=1] + store i8 %tmp84, i8* null, align 1 + %tmp90 = urem i64 %tmp42.rle, 62 ; <i64> [#uses=1] + %tmp9091 = trunc i64 %tmp90 to i32 ; <i32> [#uses=1] + %tmp92 = getelementptr [63 x i8]* @letters.3100, i32 0, i32 %tmp9091 ; <i8*> [#uses=1] + store i8* %tmp92, i8** null, align 1 + ret i32 -1 +} diff --git a/test/CodeGen/Generic/2008-02-04-Ctlz.ll b/test/CodeGen/Generic/2008-02-04-Ctlz.ll new file mode 100644 index 0000000..288bfd2 --- /dev/null +++ b/test/CodeGen/Generic/2008-02-04-Ctlz.ll @@ -0,0 +1,21 @@ +; RUN: llc < %s + +@.str = internal constant [14 x i8] c"%lld %d %d %d\00" + +define i32 @main(i64 %arg) nounwind { +entry: + %tmp37 = tail call i64 @llvm.ctlz.i64( i64 %arg ) ; <i64> [#uses=1] + %tmp47 = tail call i64 @llvm.cttz.i64( i64 %arg ) ; <i64> [#uses=1] + %tmp57 = tail call i64 @llvm.ctpop.i64( i64 %arg ) ; <i64> [#uses=1] + %tmp38 = trunc i64 %tmp37 to i32 ; <i32>:0 [#uses=1] + %tmp48 = trunc i64 %tmp47 to i32 ; <i32>:0 [#uses=1] + %tmp58 = trunc i64 %tmp57 to i32 ; <i32>:0 [#uses=1] + %tmp40 = tail call i32 (i8*, ...)* @printf( i8* noalias getelementptr ([14 x i8]* @.str, i32 0, i32 0), i64 %arg, i32 %tmp38, i32 %tmp48, i32 %tmp58 ) nounwind ; <i32> [#uses=0] + ret i32 0 +} + +declare i32 @printf(i8* noalias , ...) nounwind + +declare i64 @llvm.ctlz.i64(i64) nounwind readnone +declare i64 @llvm.cttz.i64(i64) nounwind readnone +declare i64 @llvm.ctpop.i64(i64) nounwind readnone diff --git a/test/CodeGen/Generic/2008-02-04-ExtractSubvector.ll b/test/CodeGen/Generic/2008-02-04-ExtractSubvector.ll new file mode 100644 index 0000000..8bf82df --- /dev/null +++ b/test/CodeGen/Generic/2008-02-04-ExtractSubvector.ll @@ -0,0 +1,14 @@ +; RUN: llc < %s + +define i32 @main() nounwind { +entry: + br label %bb15 + +bb15: ; preds = %bb15, %entry + %tmp21 = fadd <8 x double> zeroinitializer, zeroinitializer ; <<8 x double>> [#uses=1] + br i1 false, label %bb30, label %bb15 + +bb30: ; preds = %bb15 + store <8 x double> %tmp21, <8 x double>* null, align 64 + ret i32 0 +} diff --git a/test/CodeGen/Generic/2008-02-20-MatchingMem.ll b/test/CodeGen/Generic/2008-02-20-MatchingMem.ll new file mode 100644 index 0000000..da1aeb5 --- /dev/null +++ b/test/CodeGen/Generic/2008-02-20-MatchingMem.ll @@ -0,0 +1,9 @@ +; RUN: llc < %s +; PR1133 +define void @test(i32* %X) nounwind { +entry: + %tmp1 = getelementptr i32* %X, i32 10 ; <i32*> [#uses=2] + tail call void asm sideeffect " $0 $1 ", "=*im,*im,~{memory}"( i32* %tmp1, i32* %tmp1 ) nounwind + ret void +} + diff --git a/test/CodeGen/Generic/2008-02-25-NegateZero.ll b/test/CodeGen/Generic/2008-02-25-NegateZero.ll new file mode 100644 index 0000000..97db667 --- /dev/null +++ b/test/CodeGen/Generic/2008-02-25-NegateZero.ll @@ -0,0 +1,14 @@ +; RUN: llc < %s +; rdar://5763967 + +define void @test() { +entry: + %tmp98 = load float* null, align 4 ; <float> [#uses=1] + %tmp106 = load float* null, align 4 ; <float> [#uses=1] + %tmp113 = fadd float %tmp98, %tmp106 ; <float> [#uses=1] + %tmp119 = fsub float %tmp113, 0.000000e+00 ; <float> [#uses=1] + call void (i32, ...)* @foo( i32 0, float 0.000000e+00, float %tmp119 ) nounwind + ret void +} + +declare void @foo(i32, ...) diff --git a/test/CodeGen/Generic/2008-02-26-NegatableCrash.ll b/test/CodeGen/Generic/2008-02-26-NegatableCrash.ll new file mode 100644 index 0000000..10b3d44 --- /dev/null +++ b/test/CodeGen/Generic/2008-02-26-NegatableCrash.ll @@ -0,0 +1,50 @@ +; RUN: llc < %s +; PR2096 + %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, i32, float } + %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.RcOverride = type { i32, i32, i32, float } + +define i32 @sonic_encode_frame(%struct.AVCodecContext* %avctx, i8* %buf, i32 %buf_size, i8* %data) { +entry: + switch i32 0, label %bb429 [ + i32 0, label %bb244.preheader + i32 1, label %bb279.preheader + ] + +bb279.preheader: ; preds = %entry + ret i32 0 + +bb244.preheader: ; preds = %entry + ret i32 0 + +bb429: ; preds = %entry + br i1 false, label %bb.nph1770, label %bb627 + +bb.nph1770: ; preds = %bb429 + br i1 false, label %bb471, label %bb505 + +bb471: ; preds = %bb471, %bb.nph1770 + %tmp487 = fadd double 0.000000e+00, 0.000000e+00 ; <double> [#uses=1] + br i1 false, label %bb505, label %bb471 + +bb505: ; preds = %bb471, %bb.nph1770 + %xy.0.lcssa = phi double [ 0.000000e+00, %bb.nph1770 ], [ %tmp487, %bb471 ] ; <double> [#uses=1] + %tmp507 = fsub double -0.000000e+00, %xy.0.lcssa ; <double> [#uses=1] + %tmp509 = fdiv double %tmp507, 0.000000e+00 ; <double> [#uses=1] + %tmp510 = fmul double %tmp509, 1.024000e+03 ; <double> [#uses=1] + %tmp516 = fdiv double %tmp510, 0.000000e+00 ; <double> [#uses=1] + %tmp517 = fadd double %tmp516, 5.000000e-01 ; <double> [#uses=1] + %tmp518 = tail call double @floor( double %tmp517 ) nounwind readnone ; <double> [#uses=0] + ret i32 0 + +bb627: ; preds = %bb429 + ret i32 0 +} + +declare double @floor(double) nounwind readnone diff --git a/test/CodeGen/Generic/2008-08-07-PtrToInt-SmallerInt.ll b/test/CodeGen/Generic/2008-08-07-PtrToInt-SmallerInt.ll new file mode 100644 index 0000000..4f95dfe --- /dev/null +++ b/test/CodeGen/Generic/2008-08-07-PtrToInt-SmallerInt.ll @@ -0,0 +1,7 @@ +; RUN: llc < %s +; PR2603 +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-f80:32:32" +target triple = "i386-pc-linux-gnu" + %struct.A = type { i8 } + %struct.B = type { i8, [1 x i8] } +@Foo = constant %struct.A { i8 ptrtoint (i8* getelementptr ([1 x i8]* inttoptr (i32 17 to [1 x i8]*), i32 0, i32 -16) to i8) } ; <%struct.A*> [#uses=0] diff --git a/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll b/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll new file mode 100644 index 0000000..6281ada --- /dev/null +++ b/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll @@ -0,0 +1,92 @@ +; RUN: llc < %s +; PR3806 + + %struct..0__pthread_mutex_s = type { i32, i32, i32, i32, i32, i32, %struct.__pthread_list_t } + %struct.Alignment = type { i32 } + %struct.QDesignerFormWindowInterface = type { %struct.QWidget } + %struct.QFont = type { %struct.QFontPrivate*, i32 } + %struct.QFontPrivate = type opaque + %"struct.QHash<QString,QList<QAbstractExtensionFactory*> >" = type { %"struct.QHash<QString,QList<QAbstractExtensionFactory*> >::._120" } + %"struct.QHash<QString,QList<QAbstractExtensionFactory*> >::._120" = type { %struct.QHashData* } + %struct.QHashData = type { %"struct.QHashData::Node"*, %"struct.QHashData::Node"**, %struct.Alignment, i32, i32, i16, i16, i32, i8 } + %"struct.QHashData::Node" = type { %"struct.QHashData::Node"*, i32 } + %"struct.QList<QAbstractExtensionFactory*>" = type { %"struct.QList<QAbstractExtensionFactory*>::._101" } + %"struct.QList<QAbstractExtensionFactory*>::._101" = type { %struct.QListData } + %struct.QListData = type { %"struct.QListData::Data"* } + %"struct.QListData::Data" = type { %struct.Alignment, i32, i32, i32, i8, [1 x i8*] } + %struct.QObject = type { i32 (...)**, %struct.QObjectData* } + %struct.QObjectData = type { i32 (...)**, %struct.QObject*, %struct.QObject*, %"struct.QList<QAbstractExtensionFactory*>", i32, i32 } + %struct.QPaintDevice.base = type { i32 (...)**, i16 } + %"struct.QPair<int,int>" = type { i32, i32 } + %struct.QPalette = type { %struct.QPalettePrivate*, i32 } + %struct.QPalettePrivate = type opaque + %struct.QRect = type { i32, i32, i32, i32 } + %struct.QWidget = type { %struct.QObject, %struct.QPaintDevice.base, %struct.QWidgetData* } + %struct.QWidgetData = type { i64, i32, %struct.Alignment, i8, i8, i16, %struct.QRect, %struct.QPalette, %struct.QFont, %struct.QRect } + %struct.__pthread_list_t = type { %struct.__pthread_list_t*, %struct.__pthread_list_t* } + %struct.pthread_attr_t = type { i64, [48 x i8] } + %struct.pthread_mutex_t = type { %struct..0__pthread_mutex_s } + %"struct.qdesigner_internal::Grid" = type { i32, i32, %struct.QWidget**, i8*, i8* } + %"struct.qdesigner_internal::GridLayout" = type { %"struct.qdesigner_internal::Layout", %"struct.QPair<int,int>", %"struct.qdesigner_internal::Grid"* } + %"struct.qdesigner_internal::Layout" = type { %struct.QObject, %"struct.QList<QAbstractExtensionFactory*>", %struct.QWidget*, %"struct.QHash<QString,QList<QAbstractExtensionFactory*> >", %struct.QWidget*, %struct.QDesignerFormWindowInterface*, i8, %"struct.QPair<int,int>", %struct.QRect, i8 } + +@_ZL20__gthrw_pthread_oncePiPFvvE = alias weak i32 (i32*, void ()*)* @pthread_once ; <i32 (i32*, void ()*)*> [#uses=0] +@_ZL27__gthrw_pthread_getspecificj = alias weak i8* (i32)* @pthread_getspecific ; <i8* (i32)*> [#uses=0] +@_ZL27__gthrw_pthread_setspecificjPKv = alias weak i32 (i32, i8*)* @pthread_setspecific ; <i32 (i32, i8*)*> [#uses=0] +@_ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_ = alias weak i32 (i64*, %struct.pthread_attr_t*, i8* (i8*)*, i8*)* @pthread_create ; <i32 (i64*, %struct.pthread_attr_t*, i8* (i8*)*, i8*)*> [#uses=0] +@_ZL22__gthrw_pthread_cancelm = alias weak i32 (i64)* @pthread_cancel ; <i32 (i64)*> [#uses=0] +@_ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_lock ; <i32 (%struct.pthread_mutex_t*)*> [#uses=0] +@_ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_trylock ; <i32 (%struct.pthread_mutex_t*)*> [#uses=0] +@_ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_unlock ; <i32 (%struct.pthread_mutex_t*)*> [#uses=0] +@_ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t = alias weak i32 (%struct.pthread_mutex_t*, %struct.Alignment*)* @pthread_mutex_init ; <i32 (%struct.pthread_mutex_t*, %struct.Alignment*)*> [#uses=0] +@_ZL26__gthrw_pthread_key_createPjPFvPvE = alias weak i32 (i32*, void (i8*)*)* @pthread_key_create ; <i32 (i32*, void (i8*)*)*> [#uses=0] +@_ZL26__gthrw_pthread_key_deletej = alias weak i32 (i32)* @pthread_key_delete ; <i32 (i32)*> [#uses=0] +@_ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t = alias weak i32 (%struct.Alignment*)* @pthread_mutexattr_init ; <i32 (%struct.Alignment*)*> [#uses=0] +@_ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti = alias weak i32 (%struct.Alignment*, i32)* @pthread_mutexattr_settype ; <i32 (%struct.Alignment*, i32)*> [#uses=0] +@_ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t = alias weak i32 (%struct.Alignment*)* @pthread_mutexattr_destroy ; <i32 (%struct.Alignment*)*> [#uses=0] + +define void @_ZN18qdesigner_internal10GridLayout9buildGridEv(%"struct.qdesigner_internal::GridLayout"* %this) nounwind { +entry: + br label %bb44 + +bb44: ; preds = %bb47, %entry + %indvar = phi i128 [ %indvar.next144, %bb47 ], [ 0, %entry ] ; <i128> [#uses=2] + br i1 false, label %bb46, label %bb47 + +bb46: ; preds = %bb44 + %tmp = shl i128 %indvar, 64 ; <i128> [#uses=1] + %tmp96 = and i128 %tmp, 79228162495817593519834398720 ; <i128> [#uses=0] + br label %bb47 + +bb47: ; preds = %bb46, %bb44 + %indvar.next144 = add i128 %indvar, 1 ; <i128> [#uses=1] + br label %bb44 +} + +declare i32 @pthread_once(i32*, void ()*) + +declare i8* @pthread_getspecific(i32) + +declare i32 @pthread_setspecific(i32, i8*) + +declare i32 @pthread_create(i64*, %struct.pthread_attr_t*, i8* (i8*)*, i8*) + +declare i32 @pthread_cancel(i64) + +declare i32 @pthread_mutex_lock(%struct.pthread_mutex_t*) + +declare i32 @pthread_mutex_trylock(%struct.pthread_mutex_t*) + +declare i32 @pthread_mutex_unlock(%struct.pthread_mutex_t*) + +declare i32 @pthread_mutex_init(%struct.pthread_mutex_t*, %struct.Alignment*) + +declare i32 @pthread_key_create(i32*, void (i8*)*) + +declare i32 @pthread_key_delete(i32) + +declare i32 @pthread_mutexattr_init(%struct.Alignment*) + +declare i32 @pthread_mutexattr_settype(%struct.Alignment*, i32) + +declare i32 @pthread_mutexattr_destroy(%struct.Alignment*) diff --git a/test/CodeGen/Generic/2009-03-29-SoftFloatVectorExtract.ll b/test/CodeGen/Generic/2009-03-29-SoftFloatVectorExtract.ll new file mode 100644 index 0000000..45b561a --- /dev/null +++ b/test/CodeGen/Generic/2009-03-29-SoftFloatVectorExtract.ll @@ -0,0 +1,10 @@ +; RUN: llc < %s -soft-float +; PR3899 + +@m = external global <2 x double> + +define double @vector_ex() nounwind { + %v = load <2 x double>* @m + %x = extractelement <2 x double> %v, i32 1 + ret double %x +} diff --git a/test/CodeGen/Generic/2009-04-10-SinkCrash.ll b/test/CodeGen/Generic/2009-04-10-SinkCrash.ll new file mode 100644 index 0000000..125f875 --- /dev/null +++ b/test/CodeGen/Generic/2009-04-10-SinkCrash.ll @@ -0,0 +1,16 @@ +; RUN: llc < %s + +define void @QRiterate(i32 %p.1, double %tmp.212) nounwind { +entry: + br i1 false, label %shortcirc_next.1, label %exit.1.critedge + +shortcirc_next.1: ; preds = %shortcirc_next.1, %entry + %tmp.213 = fcmp une double %tmp.212, 0.000000e+00 ; <i1> [#uses=1] + br i1 %tmp.213, label %shortcirc_next.1, label %exit.1 + +exit.1.critedge: ; preds = %entry + ret void + +exit.1: ; preds = %shortcirc_next.1 + ret void +} diff --git a/test/CodeGen/Generic/2009-04-28-i128-cmp-crash.ll b/test/CodeGen/Generic/2009-04-28-i128-cmp-crash.ll new file mode 100644 index 0000000..b62f811 --- /dev/null +++ b/test/CodeGen/Generic/2009-04-28-i128-cmp-crash.ll @@ -0,0 +1,32 @@ +; RUN: llc < %s +; rdar://6836460 +; rdar://7516906 +; PR5963 + +define i32 @test(i128* %P) nounwind { +entry: + %tmp48 = load i128* %P + %and49 = and i128 %tmp48, 18446744073709551616 ; <i128> [#uses=1] + %tobool = icmp ne i128 %and49, 0 ; <i1> [#uses=1] + br i1 %tobool, label %if.then50, label %if.end61 + +if.then50: ; preds = %if.then20 + ret i32 1241 + +if.end61: ; preds = %if.then50, %if.then20, %entry + ret i32 123 +} + +define i32 @test2(i320* %P) nounwind { +entry: + %tmp48 = load i320* %P + %and49 = and i320 %tmp48, 25108406941546723055343157692830665664409421777856138051584 + %tobool = icmp ne i320 %and49, 0 ; <i1> [#uses=1] + br i1 %tobool, label %if.then50, label %if.end61 + +if.then50: ; preds = %if.then20 + ret i32 1241 + +if.end61: ; preds = %if.then50, %if.then20, %entry + ret i32 123 +} diff --git a/test/CodeGen/Generic/2009-06-03-UnreachableSplitPad.ll b/test/CodeGen/Generic/2009-06-03-UnreachableSplitPad.ll new file mode 100644 index 0000000..112cac4 --- /dev/null +++ b/test/CodeGen/Generic/2009-06-03-UnreachableSplitPad.ll @@ -0,0 +1,15 @@ +; RUN: llc < %s +; PR4317 + +declare i32 @b() + +define void @a() { +entry: + ret void + +dummy: + invoke i32 @b() to label %reg unwind label %reg + +reg: + ret void +} diff --git a/test/CodeGen/Generic/2009-11-16-BadKillsCrash.ll b/test/CodeGen/Generic/2009-11-16-BadKillsCrash.ll new file mode 100644 index 0000000..a51c75d --- /dev/null +++ b/test/CodeGen/Generic/2009-11-16-BadKillsCrash.ll @@ -0,0 +1,75 @@ +; RUN: llc < %s +; PR5495 +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-f80:32:32-n8:16:32" +target triple = "i386-pc-linux-gnu" + +%"struct.std::__ctype_abstract_base<wchar_t>" = type { %"struct.std::locale::facet" } +%"struct.std::basic_ios<char,std::char_traits<char> >" = type { %"struct.std::ios_base", %"struct.std::basic_ostream<char,std::char_traits<char> >"*, i8, i8, %"struct.std::basic_streambuf<char,std::char_traits<char> >"*, %"struct.std::ctype<char>"*, %"struct.std::__ctype_abstract_base<wchar_t>"*, %"struct.std::__ctype_abstract_base<wchar_t>"* } +%"struct.std::basic_istream<char,std::char_traits<char> >" = type { i32 (...)**, i32, %"struct.std::basic_ios<char,std::char_traits<char> >" } +%"struct.std::basic_ostream<char,std::char_traits<char> >" = type { i32 (...)**, %"struct.std::basic_ios<char,std::char_traits<char> >" } +%"struct.std::basic_streambuf<char,std::char_traits<char> >" = type { i32 (...)**, i8*, i8*, i8*, i8*, i8*, i8*, %"struct.std::locale" } +%"struct.std::ctype<char>" = type { %"struct.std::locale::facet", i32*, i8, i32*, i32*, i16*, i8, [256 x i8], [256 x i8], i8 } +%"struct.std::ios_base" = type { i32 (...)**, i32, i32, i32, i32, i32, %"struct.std::ios_base::_Callback_list"*, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, %"struct.std::ios_base::_Words"*, %"struct.std::locale" } +%"struct.std::ios_base::_Callback_list" = type { %"struct.std::ios_base::_Callback_list"*, void (i32, %"struct.std::ios_base"*, i32)*, i32, i32 } +%"struct.std::ios_base::_Words" = type { i8*, i32 } +%"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 } +%union..0._15 = type { i32 } + +declare i8* @llvm.eh.exception() nounwind readonly + +declare i8* @__cxa_begin_catch(i8*) nounwind + +declare %"struct.std::ctype<char>"* @_ZSt9use_facetISt5ctypeIcEERKT_RKSt6locale(%"struct.std::locale"*) + +define %"struct.std::basic_istream<char,std::char_traits<char> >"* @_ZStrsIcSt11char_traitsIcEERSt13basic_istreamIT_T0_ES6_PS3_(%"struct.std::basic_istream<char,std::char_traits<char> >"* %__in, i8* nocapture %__s) { +entry: + %0 = invoke %"struct.std::ctype<char>"* @_ZSt9use_facetISt5ctypeIcEERKT_RKSt6locale(%"struct.std::locale"* undef) + to label %invcont8 unwind label %lpad74 ; <%"struct.std::ctype<char>"*> [#uses=0] + +invcont8: ; preds = %entry + %1 = invoke i32 undef(%"struct.std::basic_streambuf<char,std::char_traits<char> >"* undef) + to label %bb26.preheader unwind label %lpad ; <i32> [#uses=0] + +bb26.preheader: ; preds = %invcont8 + br label %invcont38 + +bb1.i100: ; preds = %invcont38 + %2 = add nsw i32 1, %__extracted.0 ; <i32> [#uses=3] + br i1 undef, label %bb.i97, label %bb1.i + +bb.i97: ; preds = %bb1.i100 + br label %invcont38 + +bb1.i: ; preds = %bb1.i100 + %3 = invoke i32 undef(%"struct.std::basic_streambuf<char,std::char_traits<char> >"* undef) + to label %invcont38 unwind label %lpad ; <i32> [#uses=0] + +invcont24: ; preds = %invcont38 + %4 = invoke i32 undef(%"struct.std::basic_streambuf<char,std::char_traits<char> >"* undef) + to label %_ZNSt15basic_streambufIcSt11char_traitsIcEE6sbumpcEv.exit.i unwind label %lpad ; <i32> [#uses=0] + +_ZNSt15basic_streambufIcSt11char_traitsIcEE6sbumpcEv.exit.i: ; preds = %invcont24 + br i1 undef, label %invcont25, label %bb.i93 + +bb.i93: ; preds = %_ZNSt15basic_streambufIcSt11char_traitsIcEE6sbumpcEv.exit.i + %5 = invoke i32 undef(%"struct.std::basic_streambuf<char,std::char_traits<char> >"* undef) + to label %invcont25 unwind label %lpad ; <i32> [#uses=0] + +invcont25: ; preds = %bb.i93, %_ZNSt15basic_streambufIcSt11char_traitsIcEE6sbumpcEv.exit.i + br label %invcont38 + +invcont38: ; preds = %invcont25, %bb1.i, %bb.i97, %bb26.preheader + %__extracted.0 = phi i32 [ 0, %bb26.preheader ], [ undef, %invcont25 ], [ %2, %bb.i97 ], [ %2, %bb1.i ] ; <i32> [#uses=1] + br i1 false, label %bb1.i100, label %invcont24 + +lpad: ; preds = %bb.i93, %invcont24, %bb1.i, %invcont8 + %__extracted.1 = phi i32 [ 0, %invcont8 ], [ %2, %bb1.i ], [ undef, %bb.i93 ], [ undef, %invcont24 ] ; <i32> [#uses=0] + %eh_ptr = call i8* @llvm.eh.exception() ; <i8*> [#uses=1] + %6 = call i8* @__cxa_begin_catch(i8* %eh_ptr) nounwind ; <i8*> [#uses=0] + unreachable + +lpad74: ; preds = %entry + unreachable +} diff --git a/test/CodeGen/Generic/APIntLoadStore.ll b/test/CodeGen/Generic/APIntLoadStore.ll new file mode 100644 index 0000000..7c71a33 --- /dev/null +++ b/test/CodeGen/Generic/APIntLoadStore.ll @@ -0,0 +1,2049 @@ +; RUN: llc < %s > %t +@i1_l = external global i1 ; <i1*> [#uses=1] +@i1_s = external global i1 ; <i1*> [#uses=1] +@i2_l = external global i2 ; <i2*> [#uses=1] +@i2_s = external global i2 ; <i2*> [#uses=1] +@i3_l = external global i3 ; <i3*> [#uses=1] +@i3_s = external global i3 ; <i3*> [#uses=1] +@i4_l = external global i4 ; <i4*> [#uses=1] +@i4_s = external global i4 ; <i4*> [#uses=1] +@i5_l = external global i5 ; <i5*> [#uses=1] +@i5_s = external global i5 ; <i5*> [#uses=1] +@i6_l = external global i6 ; <i6*> [#uses=1] +@i6_s = external global i6 ; <i6*> [#uses=1] +@i7_l = external global i7 ; <i7*> [#uses=1] +@i7_s = external global i7 ; <i7*> [#uses=1] +@i8_l = external global i8 ; <i8*> [#uses=1] +@i8_s = external global i8 ; <i8*> [#uses=1] +@i9_l = external global i9 ; <i9*> [#uses=1] +@i9_s = external global i9 ; <i9*> [#uses=1] +@i10_l = external global i10 ; <i10*> [#uses=1] +@i10_s = external global i10 ; <i10*> [#uses=1] +@i11_l = external global i11 ; <i11*> [#uses=1] +@i11_s = external global i11 ; <i11*> [#uses=1] +@i12_l = external global i12 ; <i12*> [#uses=1] +@i12_s = external global i12 ; <i12*> [#uses=1] +@i13_l = external global i13 ; <i13*> [#uses=1] +@i13_s = external global i13 ; <i13*> [#uses=1] +@i14_l = external global i14 ; <i14*> [#uses=1] +@i14_s = external global i14 ; <i14*> [#uses=1] +@i15_l = external global i15 ; <i15*> [#uses=1] +@i15_s = external global i15 ; <i15*> [#uses=1] +@i16_l = external global i16 ; <i16*> [#uses=1] +@i16_s = external global i16 ; <i16*> [#uses=1] +@i17_l = external global i17 ; <i17*> [#uses=1] +@i17_s = external global i17 ; <i17*> [#uses=1] +@i18_l = external global i18 ; <i18*> [#uses=1] +@i18_s = external global i18 ; <i18*> [#uses=1] +@i19_l = external global i19 ; <i19*> [#uses=1] +@i19_s = external global i19 ; <i19*> [#uses=1] +@i20_l = external global i20 ; <i20*> [#uses=1] +@i20_s = external global i20 ; <i20*> [#uses=1] +@i21_l = external global i21 ; <i21*> [#uses=1] +@i21_s = external global i21 ; <i21*> [#uses=1] +@i22_l = external global i22 ; <i22*> [#uses=1] +@i22_s = external global i22 ; <i22*> [#uses=1] +@i23_l = external global i23 ; <i23*> [#uses=1] +@i23_s = external global i23 ; <i23*> [#uses=1] +@i24_l = external global i24 ; <i24*> [#uses=1] +@i24_s = external global i24 ; <i24*> [#uses=1] +@i25_l = external global i25 ; <i25*> [#uses=1] +@i25_s = external global i25 ; <i25*> [#uses=1] +@i26_l = external global i26 ; <i26*> [#uses=1] +@i26_s = external global i26 ; <i26*> [#uses=1] +@i27_l = external global i27 ; <i27*> [#uses=1] +@i27_s = external global i27 ; <i27*> [#uses=1] +@i28_l = external global i28 ; <i28*> [#uses=1] +@i28_s = external global i28 ; <i28*> [#uses=1] +@i29_l = external global i29 ; <i29*> [#uses=1] +@i29_s = external global i29 ; <i29*> [#uses=1] +@i30_l = external global i30 ; <i30*> [#uses=1] +@i30_s = external global i30 ; <i30*> [#uses=1] +@i31_l = external global i31 ; <i31*> [#uses=1] +@i31_s = external global i31 ; <i31*> [#uses=1] +@i32_l = external global i32 ; <i32*> [#uses=1] +@i32_s = external global i32 ; <i32*> [#uses=1] +@i33_l = external global i33 ; <i33*> [#uses=1] +@i33_s = external global i33 ; <i33*> [#uses=1] +@i34_l = external global i34 ; <i34*> [#uses=1] +@i34_s = external global i34 ; <i34*> [#uses=1] +@i35_l = external global i35 ; <i35*> [#uses=1] +@i35_s = external global i35 ; <i35*> [#uses=1] +@i36_l = external global i36 ; <i36*> [#uses=1] +@i36_s = external global i36 ; <i36*> [#uses=1] +@i37_l = external global i37 ; <i37*> [#uses=1] +@i37_s = external global i37 ; <i37*> [#uses=1] +@i38_l = external global i38 ; <i38*> [#uses=1] +@i38_s = external global i38 ; <i38*> [#uses=1] +@i39_l = external global i39 ; <i39*> [#uses=1] +@i39_s = external global i39 ; <i39*> [#uses=1] +@i40_l = external global i40 ; <i40*> [#uses=1] +@i40_s = external global i40 ; <i40*> [#uses=1] +@i41_l = external global i41 ; <i41*> [#uses=1] +@i41_s = external global i41 ; <i41*> [#uses=1] +@i42_l = external global i42 ; <i42*> [#uses=1] +@i42_s = external global i42 ; <i42*> [#uses=1] +@i43_l = external global i43 ; <i43*> [#uses=1] +@i43_s = external global i43 ; <i43*> [#uses=1] +@i44_l = external global i44 ; <i44*> [#uses=1] +@i44_s = external global i44 ; <i44*> [#uses=1] +@i45_l = external global i45 ; <i45*> [#uses=1] +@i45_s = external global i45 ; <i45*> [#uses=1] +@i46_l = external global i46 ; <i46*> [#uses=1] +@i46_s = external global i46 ; <i46*> [#uses=1] +@i47_l = external global i47 ; <i47*> [#uses=1] +@i47_s = external global i47 ; <i47*> [#uses=1] +@i48_l = external global i48 ; <i48*> [#uses=1] +@i48_s = external global i48 ; <i48*> [#uses=1] +@i49_l = external global i49 ; <i49*> [#uses=1] +@i49_s = external global i49 ; <i49*> [#uses=1] +@i50_l = external global i50 ; <i50*> [#uses=1] +@i50_s = external global i50 ; <i50*> [#uses=1] +@i51_l = external global i51 ; <i51*> [#uses=1] +@i51_s = external global i51 ; <i51*> [#uses=1] +@i52_l = external global i52 ; <i52*> [#uses=1] +@i52_s = external global i52 ; <i52*> [#uses=1] +@i53_l = external global i53 ; <i53*> [#uses=1] +@i53_s = external global i53 ; <i53*> [#uses=1] +@i54_l = external global i54 ; <i54*> [#uses=1] +@i54_s = external global i54 ; <i54*> [#uses=1] +@i55_l = external global i55 ; <i55*> [#uses=1] +@i55_s = external global i55 ; <i55*> [#uses=1] +@i56_l = external global i56 ; <i56*> [#uses=1] +@i56_s = external global i56 ; <i56*> [#uses=1] +@i57_l = external global i57 ; <i57*> [#uses=1] +@i57_s = external global i57 ; <i57*> [#uses=1] +@i58_l = external global i58 ; <i58*> [#uses=1] +@i58_s = external global i58 ; <i58*> [#uses=1] +@i59_l = external global i59 ; <i59*> [#uses=1] +@i59_s = external global i59 ; <i59*> [#uses=1] +@i60_l = external global i60 ; <i60*> [#uses=1] +@i60_s = external global i60 ; <i60*> [#uses=1] +@i61_l = external global i61 ; <i61*> [#uses=1] +@i61_s = external global i61 ; <i61*> [#uses=1] +@i62_l = external global i62 ; <i62*> [#uses=1] +@i62_s = external global i62 ; <i62*> [#uses=1] +@i63_l = external global i63 ; <i63*> [#uses=1] +@i63_s = external global i63 ; <i63*> [#uses=1] +@i64_l = external global i64 ; <i64*> [#uses=1] +@i64_s = external global i64 ; <i64*> [#uses=1] +@i65_l = external global i65 ; <i65*> [#uses=1] +@i65_s = external global i65 ; <i65*> [#uses=1] +@i66_l = external global i66 ; <i66*> [#uses=1] +@i66_s = external global i66 ; <i66*> [#uses=1] +@i67_l = external global i67 ; <i67*> [#uses=1] +@i67_s = external global i67 ; <i67*> [#uses=1] +@i68_l = external global i68 ; <i68*> [#uses=1] +@i68_s = external global i68 ; <i68*> [#uses=1] +@i69_l = external global i69 ; <i69*> [#uses=1] +@i69_s = external global i69 ; <i69*> [#uses=1] +@i70_l = external global i70 ; <i70*> [#uses=1] +@i70_s = external global i70 ; <i70*> [#uses=1] +@i71_l = external global i71 ; <i71*> [#uses=1] +@i71_s = external global i71 ; <i71*> [#uses=1] +@i72_l = external global i72 ; <i72*> [#uses=1] +@i72_s = external global i72 ; <i72*> [#uses=1] +@i73_l = external global i73 ; <i73*> [#uses=1] +@i73_s = external global i73 ; <i73*> [#uses=1] +@i74_l = external global i74 ; <i74*> [#uses=1] +@i74_s = external global i74 ; <i74*> [#uses=1] +@i75_l = external global i75 ; <i75*> [#uses=1] +@i75_s = external global i75 ; <i75*> [#uses=1] +@i76_l = external global i76 ; <i76*> [#uses=1] +@i76_s = external global i76 ; <i76*> [#uses=1] +@i77_l = external global i77 ; <i77*> [#uses=1] +@i77_s = external global i77 ; <i77*> [#uses=1] +@i78_l = external global i78 ; <i78*> [#uses=1] +@i78_s = external global i78 ; <i78*> [#uses=1] +@i79_l = external global i79 ; <i79*> [#uses=1] +@i79_s = external global i79 ; <i79*> [#uses=1] +@i80_l = external global i80 ; <i80*> [#uses=1] +@i80_s = external global i80 ; <i80*> [#uses=1] +@i81_l = external global i81 ; <i81*> [#uses=1] +@i81_s = external global i81 ; <i81*> [#uses=1] +@i82_l = external global i82 ; <i82*> [#uses=1] +@i82_s = external global i82 ; <i82*> [#uses=1] +@i83_l = external global i83 ; <i83*> [#uses=1] +@i83_s = external global i83 ; <i83*> [#uses=1] +@i84_l = external global i84 ; <i84*> [#uses=1] +@i84_s = external global i84 ; <i84*> [#uses=1] +@i85_l = external global i85 ; <i85*> [#uses=1] +@i85_s = external global i85 ; <i85*> [#uses=1] +@i86_l = external global i86 ; <i86*> [#uses=1] +@i86_s = external global i86 ; <i86*> [#uses=1] +@i87_l = external global i87 ; <i87*> [#uses=1] +@i87_s = external global i87 ; <i87*> [#uses=1] +@i88_l = external global i88 ; <i88*> [#uses=1] +@i88_s = external global i88 ; <i88*> [#uses=1] +@i89_l = external global i89 ; <i89*> [#uses=1] +@i89_s = external global i89 ; <i89*> [#uses=1] +@i90_l = external global i90 ; <i90*> [#uses=1] +@i90_s = external global i90 ; <i90*> [#uses=1] +@i91_l = external global i91 ; <i91*> [#uses=1] +@i91_s = external global i91 ; <i91*> [#uses=1] +@i92_l = external global i92 ; <i92*> [#uses=1] +@i92_s = external global i92 ; <i92*> [#uses=1] +@i93_l = external global i93 ; <i93*> [#uses=1] +@i93_s = external global i93 ; <i93*> [#uses=1] +@i94_l = external global i94 ; <i94*> [#uses=1] +@i94_s = external global i94 ; <i94*> [#uses=1] +@i95_l = external global i95 ; <i95*> [#uses=1] +@i95_s = external global i95 ; <i95*> [#uses=1] +@i96_l = external global i96 ; <i96*> [#uses=1] +@i96_s = external global i96 ; <i96*> [#uses=1] +@i97_l = external global i97 ; <i97*> [#uses=1] +@i97_s = external global i97 ; <i97*> [#uses=1] +@i98_l = external global i98 ; <i98*> [#uses=1] +@i98_s = external global i98 ; <i98*> [#uses=1] +@i99_l = external global i99 ; <i99*> [#uses=1] +@i99_s = external global i99 ; <i99*> [#uses=1] +@i100_l = external global i100 ; <i100*> [#uses=1] +@i100_s = external global i100 ; <i100*> [#uses=1] +@i101_l = external global i101 ; <i101*> [#uses=1] +@i101_s = external global i101 ; <i101*> [#uses=1] +@i102_l = external global i102 ; <i102*> [#uses=1] +@i102_s = external global i102 ; <i102*> [#uses=1] +@i103_l = external global i103 ; <i103*> [#uses=1] +@i103_s = external global i103 ; <i103*> [#uses=1] +@i104_l = external global i104 ; <i104*> [#uses=1] +@i104_s = external global i104 ; <i104*> [#uses=1] +@i105_l = external global i105 ; <i105*> [#uses=1] +@i105_s = external global i105 ; <i105*> [#uses=1] +@i106_l = external global i106 ; <i106*> [#uses=1] +@i106_s = external global i106 ; <i106*> [#uses=1] +@i107_l = external global i107 ; <i107*> [#uses=1] +@i107_s = external global i107 ; <i107*> [#uses=1] +@i108_l = external global i108 ; <i108*> [#uses=1] +@i108_s = external global i108 ; <i108*> [#uses=1] +@i109_l = external global i109 ; <i109*> [#uses=1] +@i109_s = external global i109 ; <i109*> [#uses=1] +@i110_l = external global i110 ; <i110*> [#uses=1] +@i110_s = external global i110 ; <i110*> [#uses=1] +@i111_l = external global i111 ; <i111*> [#uses=1] +@i111_s = external global i111 ; <i111*> [#uses=1] +@i112_l = external global i112 ; <i112*> [#uses=1] +@i112_s = external global i112 ; <i112*> [#uses=1] +@i113_l = external global i113 ; <i113*> [#uses=1] +@i113_s = external global i113 ; <i113*> [#uses=1] +@i114_l = external global i114 ; <i114*> [#uses=1] +@i114_s = external global i114 ; <i114*> [#uses=1] +@i115_l = external global i115 ; <i115*> [#uses=1] +@i115_s = external global i115 ; <i115*> [#uses=1] +@i116_l = external global i116 ; <i116*> [#uses=1] +@i116_s = external global i116 ; <i116*> [#uses=1] +@i117_l = external global i117 ; <i117*> [#uses=1] +@i117_s = external global i117 ; <i117*> [#uses=1] +@i118_l = external global i118 ; <i118*> [#uses=1] +@i118_s = external global i118 ; <i118*> [#uses=1] +@i119_l = external global i119 ; <i119*> [#uses=1] +@i119_s = external global i119 ; <i119*> [#uses=1] +@i120_l = external global i120 ; <i120*> [#uses=1] +@i120_s = external global i120 ; <i120*> [#uses=1] +@i121_l = external global i121 ; <i121*> [#uses=1] +@i121_s = external global i121 ; <i121*> [#uses=1] +@i122_l = external global i122 ; <i122*> [#uses=1] +@i122_s = external global i122 ; <i122*> [#uses=1] +@i123_l = external global i123 ; <i123*> [#uses=1] +@i123_s = external global i123 ; <i123*> [#uses=1] +@i124_l = external global i124 ; <i124*> [#uses=1] +@i124_s = external global i124 ; <i124*> [#uses=1] +@i125_l = external global i125 ; <i125*> [#uses=1] +@i125_s = external global i125 ; <i125*> [#uses=1] +@i126_l = external global i126 ; <i126*> [#uses=1] +@i126_s = external global i126 ; <i126*> [#uses=1] +@i127_l = external global i127 ; <i127*> [#uses=1] +@i127_s = external global i127 ; <i127*> [#uses=1] +@i128_l = external global i128 ; <i128*> [#uses=1] +@i128_s = external global i128 ; <i128*> [#uses=1] +@i129_l = external global i129 ; <i129*> [#uses=1] +@i129_s = external global i129 ; <i129*> [#uses=1] +@i130_l = external global i130 ; <i130*> [#uses=1] +@i130_s = external global i130 ; <i130*> [#uses=1] +@i131_l = external global i131 ; <i131*> [#uses=1] +@i131_s = external global i131 ; <i131*> [#uses=1] +@i132_l = external global i132 ; <i132*> [#uses=1] +@i132_s = external global i132 ; <i132*> [#uses=1] +@i133_l = external global i133 ; <i133*> [#uses=1] +@i133_s = external global i133 ; <i133*> [#uses=1] +@i134_l = external global i134 ; <i134*> [#uses=1] +@i134_s = external global i134 ; <i134*> [#uses=1] +@i135_l = external global i135 ; <i135*> [#uses=1] +@i135_s = external global i135 ; <i135*> [#uses=1] +@i136_l = external global i136 ; <i136*> [#uses=1] +@i136_s = external global i136 ; <i136*> [#uses=1] +@i137_l = external global i137 ; <i137*> [#uses=1] +@i137_s = external global i137 ; <i137*> [#uses=1] +@i138_l = external global i138 ; <i138*> [#uses=1] +@i138_s = external global i138 ; <i138*> [#uses=1] +@i139_l = external global i139 ; <i139*> [#uses=1] +@i139_s = external global i139 ; <i139*> [#uses=1] +@i140_l = external global i140 ; <i140*> [#uses=1] +@i140_s = external global i140 ; <i140*> [#uses=1] +@i141_l = external global i141 ; <i141*> [#uses=1] +@i141_s = external global i141 ; <i141*> [#uses=1] +@i142_l = external global i142 ; <i142*> [#uses=1] +@i142_s = external global i142 ; <i142*> [#uses=1] +@i143_l = external global i143 ; <i143*> [#uses=1] +@i143_s = external global i143 ; <i143*> [#uses=1] +@i144_l = external global i144 ; <i144*> [#uses=1] +@i144_s = external global i144 ; <i144*> [#uses=1] +@i145_l = external global i145 ; <i145*> [#uses=1] +@i145_s = external global i145 ; <i145*> [#uses=1] +@i146_l = external global i146 ; <i146*> [#uses=1] +@i146_s = external global i146 ; <i146*> [#uses=1] +@i147_l = external global i147 ; <i147*> [#uses=1] +@i147_s = external global i147 ; <i147*> [#uses=1] +@i148_l = external global i148 ; <i148*> [#uses=1] +@i148_s = external global i148 ; <i148*> [#uses=1] +@i149_l = external global i149 ; <i149*> [#uses=1] +@i149_s = external global i149 ; <i149*> [#uses=1] +@i150_l = external global i150 ; <i150*> [#uses=1] +@i150_s = external global i150 ; <i150*> [#uses=1] +@i151_l = external global i151 ; <i151*> [#uses=1] +@i151_s = external global i151 ; <i151*> [#uses=1] +@i152_l = external global i152 ; <i152*> [#uses=1] +@i152_s = external global i152 ; <i152*> [#uses=1] +@i153_l = external global i153 ; <i153*> [#uses=1] +@i153_s = external global i153 ; <i153*> [#uses=1] +@i154_l = external global i154 ; <i154*> [#uses=1] +@i154_s = external global i154 ; <i154*> [#uses=1] +@i155_l = external global i155 ; <i155*> [#uses=1] +@i155_s = external global i155 ; <i155*> [#uses=1] +@i156_l = external global i156 ; <i156*> [#uses=1] +@i156_s = external global i156 ; <i156*> [#uses=1] +@i157_l = external global i157 ; <i157*> [#uses=1] +@i157_s = external global i157 ; <i157*> [#uses=1] +@i158_l = external global i158 ; <i158*> [#uses=1] +@i158_s = external global i158 ; <i158*> [#uses=1] +@i159_l = external global i159 ; <i159*> [#uses=1] +@i159_s = external global i159 ; <i159*> [#uses=1] +@i160_l = external global i160 ; <i160*> [#uses=1] +@i160_s = external global i160 ; <i160*> [#uses=1] +@i161_l = external global i161 ; <i161*> [#uses=1] +@i161_s = external global i161 ; <i161*> [#uses=1] +@i162_l = external global i162 ; <i162*> [#uses=1] +@i162_s = external global i162 ; <i162*> [#uses=1] +@i163_l = external global i163 ; <i163*> [#uses=1] +@i163_s = external global i163 ; <i163*> [#uses=1] +@i164_l = external global i164 ; <i164*> [#uses=1] +@i164_s = external global i164 ; <i164*> [#uses=1] +@i165_l = external global i165 ; <i165*> [#uses=1] +@i165_s = external global i165 ; <i165*> [#uses=1] +@i166_l = external global i166 ; <i166*> [#uses=1] +@i166_s = external global i166 ; <i166*> [#uses=1] +@i167_l = external global i167 ; <i167*> [#uses=1] +@i167_s = external global i167 ; <i167*> [#uses=1] +@i168_l = external global i168 ; <i168*> [#uses=1] +@i168_s = external global i168 ; <i168*> [#uses=1] +@i169_l = external global i169 ; <i169*> [#uses=1] +@i169_s = external global i169 ; <i169*> [#uses=1] +@i170_l = external global i170 ; <i170*> [#uses=1] +@i170_s = external global i170 ; <i170*> [#uses=1] +@i171_l = external global i171 ; <i171*> [#uses=1] +@i171_s = external global i171 ; <i171*> [#uses=1] +@i172_l = external global i172 ; <i172*> [#uses=1] +@i172_s = external global i172 ; <i172*> [#uses=1] +@i173_l = external global i173 ; <i173*> [#uses=1] +@i173_s = external global i173 ; <i173*> [#uses=1] +@i174_l = external global i174 ; <i174*> [#uses=1] +@i174_s = external global i174 ; <i174*> [#uses=1] +@i175_l = external global i175 ; <i175*> [#uses=1] +@i175_s = external global i175 ; <i175*> [#uses=1] +@i176_l = external global i176 ; <i176*> [#uses=1] +@i176_s = external global i176 ; <i176*> [#uses=1] +@i177_l = external global i177 ; <i177*> [#uses=1] +@i177_s = external global i177 ; <i177*> [#uses=1] +@i178_l = external global i178 ; <i178*> [#uses=1] +@i178_s = external global i178 ; <i178*> [#uses=1] +@i179_l = external global i179 ; <i179*> [#uses=1] +@i179_s = external global i179 ; <i179*> [#uses=1] +@i180_l = external global i180 ; <i180*> [#uses=1] +@i180_s = external global i180 ; <i180*> [#uses=1] +@i181_l = external global i181 ; <i181*> [#uses=1] +@i181_s = external global i181 ; <i181*> [#uses=1] +@i182_l = external global i182 ; <i182*> [#uses=1] +@i182_s = external global i182 ; <i182*> [#uses=1] +@i183_l = external global i183 ; <i183*> [#uses=1] +@i183_s = external global i183 ; <i183*> [#uses=1] +@i184_l = external global i184 ; <i184*> [#uses=1] +@i184_s = external global i184 ; <i184*> [#uses=1] +@i185_l = external global i185 ; <i185*> [#uses=1] +@i185_s = external global i185 ; <i185*> [#uses=1] +@i186_l = external global i186 ; <i186*> [#uses=1] +@i186_s = external global i186 ; <i186*> [#uses=1] +@i187_l = external global i187 ; <i187*> [#uses=1] +@i187_s = external global i187 ; <i187*> [#uses=1] +@i188_l = external global i188 ; <i188*> [#uses=1] +@i188_s = external global i188 ; <i188*> [#uses=1] +@i189_l = external global i189 ; <i189*> [#uses=1] +@i189_s = external global i189 ; <i189*> [#uses=1] +@i190_l = external global i190 ; <i190*> [#uses=1] +@i190_s = external global i190 ; <i190*> [#uses=1] +@i191_l = external global i191 ; <i191*> [#uses=1] +@i191_s = external global i191 ; <i191*> [#uses=1] +@i192_l = external global i192 ; <i192*> [#uses=1] +@i192_s = external global i192 ; <i192*> [#uses=1] +@i193_l = external global i193 ; <i193*> [#uses=1] +@i193_s = external global i193 ; <i193*> [#uses=1] +@i194_l = external global i194 ; <i194*> [#uses=1] +@i194_s = external global i194 ; <i194*> [#uses=1] +@i195_l = external global i195 ; <i195*> [#uses=1] +@i195_s = external global i195 ; <i195*> [#uses=1] +@i196_l = external global i196 ; <i196*> [#uses=1] +@i196_s = external global i196 ; <i196*> [#uses=1] +@i197_l = external global i197 ; <i197*> [#uses=1] +@i197_s = external global i197 ; <i197*> [#uses=1] +@i198_l = external global i198 ; <i198*> [#uses=1] +@i198_s = external global i198 ; <i198*> [#uses=1] +@i199_l = external global i199 ; <i199*> [#uses=1] +@i199_s = external global i199 ; <i199*> [#uses=1] +@i200_l = external global i200 ; <i200*> [#uses=1] +@i200_s = external global i200 ; <i200*> [#uses=1] +@i201_l = external global i201 ; <i201*> [#uses=1] +@i201_s = external global i201 ; <i201*> [#uses=1] +@i202_l = external global i202 ; <i202*> [#uses=1] +@i202_s = external global i202 ; <i202*> [#uses=1] +@i203_l = external global i203 ; <i203*> [#uses=1] +@i203_s = external global i203 ; <i203*> [#uses=1] +@i204_l = external global i204 ; <i204*> [#uses=1] +@i204_s = external global i204 ; <i204*> [#uses=1] +@i205_l = external global i205 ; <i205*> [#uses=1] +@i205_s = external global i205 ; <i205*> [#uses=1] +@i206_l = external global i206 ; <i206*> [#uses=1] +@i206_s = external global i206 ; <i206*> [#uses=1] +@i207_l = external global i207 ; <i207*> [#uses=1] +@i207_s = external global i207 ; <i207*> [#uses=1] +@i208_l = external global i208 ; <i208*> [#uses=1] +@i208_s = external global i208 ; <i208*> [#uses=1] +@i209_l = external global i209 ; <i209*> [#uses=1] +@i209_s = external global i209 ; <i209*> [#uses=1] +@i210_l = external global i210 ; <i210*> [#uses=1] +@i210_s = external global i210 ; <i210*> [#uses=1] +@i211_l = external global i211 ; <i211*> [#uses=1] +@i211_s = external global i211 ; <i211*> [#uses=1] +@i212_l = external global i212 ; <i212*> [#uses=1] +@i212_s = external global i212 ; <i212*> [#uses=1] +@i213_l = external global i213 ; <i213*> [#uses=1] +@i213_s = external global i213 ; <i213*> [#uses=1] +@i214_l = external global i214 ; <i214*> [#uses=1] +@i214_s = external global i214 ; <i214*> [#uses=1] +@i215_l = external global i215 ; <i215*> [#uses=1] +@i215_s = external global i215 ; <i215*> [#uses=1] +@i216_l = external global i216 ; <i216*> [#uses=1] +@i216_s = external global i216 ; <i216*> [#uses=1] +@i217_l = external global i217 ; <i217*> [#uses=1] +@i217_s = external global i217 ; <i217*> [#uses=1] +@i218_l = external global i218 ; <i218*> [#uses=1] +@i218_s = external global i218 ; <i218*> [#uses=1] +@i219_l = external global i219 ; <i219*> [#uses=1] +@i219_s = external global i219 ; <i219*> [#uses=1] +@i220_l = external global i220 ; <i220*> [#uses=1] +@i220_s = external global i220 ; <i220*> [#uses=1] +@i221_l = external global i221 ; <i221*> [#uses=1] +@i221_s = external global i221 ; <i221*> [#uses=1] +@i222_l = external global i222 ; <i222*> [#uses=1] +@i222_s = external global i222 ; <i222*> [#uses=1] +@i223_l = external global i223 ; <i223*> [#uses=1] +@i223_s = external global i223 ; <i223*> [#uses=1] +@i224_l = external global i224 ; <i224*> [#uses=1] +@i224_s = external global i224 ; <i224*> [#uses=1] +@i225_l = external global i225 ; <i225*> [#uses=1] +@i225_s = external global i225 ; <i225*> [#uses=1] +@i226_l = external global i226 ; <i226*> [#uses=1] +@i226_s = external global i226 ; <i226*> [#uses=1] +@i227_l = external global i227 ; <i227*> [#uses=1] +@i227_s = external global i227 ; <i227*> [#uses=1] +@i228_l = external global i228 ; <i228*> [#uses=1] +@i228_s = external global i228 ; <i228*> [#uses=1] +@i229_l = external global i229 ; <i229*> [#uses=1] +@i229_s = external global i229 ; <i229*> [#uses=1] +@i230_l = external global i230 ; <i230*> [#uses=1] +@i230_s = external global i230 ; <i230*> [#uses=1] +@i231_l = external global i231 ; <i231*> [#uses=1] +@i231_s = external global i231 ; <i231*> [#uses=1] +@i232_l = external global i232 ; <i232*> [#uses=1] +@i232_s = external global i232 ; <i232*> [#uses=1] +@i233_l = external global i233 ; <i233*> [#uses=1] +@i233_s = external global i233 ; <i233*> [#uses=1] +@i234_l = external global i234 ; <i234*> [#uses=1] +@i234_s = external global i234 ; <i234*> [#uses=1] +@i235_l = external global i235 ; <i235*> [#uses=1] +@i235_s = external global i235 ; <i235*> [#uses=1] +@i236_l = external global i236 ; <i236*> [#uses=1] +@i236_s = external global i236 ; <i236*> [#uses=1] +@i237_l = external global i237 ; <i237*> [#uses=1] +@i237_s = external global i237 ; <i237*> [#uses=1] +@i238_l = external global i238 ; <i238*> [#uses=1] +@i238_s = external global i238 ; <i238*> [#uses=1] +@i239_l = external global i239 ; <i239*> [#uses=1] +@i239_s = external global i239 ; <i239*> [#uses=1] +@i240_l = external global i240 ; <i240*> [#uses=1] +@i240_s = external global i240 ; <i240*> [#uses=1] +@i241_l = external global i241 ; <i241*> [#uses=1] +@i241_s = external global i241 ; <i241*> [#uses=1] +@i242_l = external global i242 ; <i242*> [#uses=1] +@i242_s = external global i242 ; <i242*> [#uses=1] +@i243_l = external global i243 ; <i243*> [#uses=1] +@i243_s = external global i243 ; <i243*> [#uses=1] +@i244_l = external global i244 ; <i244*> [#uses=1] +@i244_s = external global i244 ; <i244*> [#uses=1] +@i245_l = external global i245 ; <i245*> [#uses=1] +@i245_s = external global i245 ; <i245*> [#uses=1] +@i246_l = external global i246 ; <i246*> [#uses=1] +@i246_s = external global i246 ; <i246*> [#uses=1] +@i247_l = external global i247 ; <i247*> [#uses=1] +@i247_s = external global i247 ; <i247*> [#uses=1] +@i248_l = external global i248 ; <i248*> [#uses=1] +@i248_s = external global i248 ; <i248*> [#uses=1] +@i249_l = external global i249 ; <i249*> [#uses=1] +@i249_s = external global i249 ; <i249*> [#uses=1] +@i250_l = external global i250 ; <i250*> [#uses=1] +@i250_s = external global i250 ; <i250*> [#uses=1] +@i251_l = external global i251 ; <i251*> [#uses=1] +@i251_s = external global i251 ; <i251*> [#uses=1] +@i252_l = external global i252 ; <i252*> [#uses=1] +@i252_s = external global i252 ; <i252*> [#uses=1] +@i253_l = external global i253 ; <i253*> [#uses=1] +@i253_s = external global i253 ; <i253*> [#uses=1] +@i254_l = external global i254 ; <i254*> [#uses=1] +@i254_s = external global i254 ; <i254*> [#uses=1] +@i255_l = external global i255 ; <i255*> [#uses=1] +@i255_s = external global i255 ; <i255*> [#uses=1] +@i256_l = external global i256 ; <i256*> [#uses=1] +@i256_s = external global i256 ; <i256*> [#uses=1] + +define void @i1_ls() nounwind { + %tmp = load i1* @i1_l ; <i1> [#uses=1] + store i1 %tmp, i1* @i1_s + ret void +} + +define void @i2_ls() nounwind { + %tmp = load i2* @i2_l ; <i2> [#uses=1] + store i2 %tmp, i2* @i2_s + ret void +} + +define void @i3_ls() nounwind { + %tmp = load i3* @i3_l ; <i3> [#uses=1] + store i3 %tmp, i3* @i3_s + ret void +} + +define void @i4_ls() nounwind { + %tmp = load i4* @i4_l ; <i4> [#uses=1] + store i4 %tmp, i4* @i4_s + ret void +} + +define void @i5_ls() nounwind { + %tmp = load i5* @i5_l ; <i5> [#uses=1] + store i5 %tmp, i5* @i5_s + ret void +} + +define void @i6_ls() nounwind { + %tmp = load i6* @i6_l ; <i6> [#uses=1] + store i6 %tmp, i6* @i6_s + ret void +} + +define void @i7_ls() nounwind { + %tmp = load i7* @i7_l ; <i7> [#uses=1] + store i7 %tmp, i7* @i7_s + ret void +} + +define void @i8_ls() nounwind { + %tmp = load i8* @i8_l ; <i8> [#uses=1] + store i8 %tmp, i8* @i8_s + ret void +} + +define void @i9_ls() nounwind { + %tmp = load i9* @i9_l ; <i9> [#uses=1] + store i9 %tmp, i9* @i9_s + ret void +} + +define void @i10_ls() nounwind { + %tmp = load i10* @i10_l ; <i10> [#uses=1] + store i10 %tmp, i10* @i10_s + ret void +} + +define void @i11_ls() nounwind { + %tmp = load i11* @i11_l ; <i11> [#uses=1] + store i11 %tmp, i11* @i11_s + ret void +} + +define void @i12_ls() nounwind { + %tmp = load i12* @i12_l ; <i12> [#uses=1] + store i12 %tmp, i12* @i12_s + ret void +} + +define void @i13_ls() nounwind { + %tmp = load i13* @i13_l ; <i13> [#uses=1] + store i13 %tmp, i13* @i13_s + ret void +} + +define void @i14_ls() nounwind { + %tmp = load i14* @i14_l ; <i14> [#uses=1] + store i14 %tmp, i14* @i14_s + ret void +} + +define void @i15_ls() nounwind { + %tmp = load i15* @i15_l ; <i15> [#uses=1] + store i15 %tmp, i15* @i15_s + ret void +} + +define void @i16_ls() nounwind { + %tmp = load i16* @i16_l ; <i16> [#uses=1] + store i16 %tmp, i16* @i16_s + ret void +} + +define void @i17_ls() nounwind { + %tmp = load i17* @i17_l ; <i17> [#uses=1] + store i17 %tmp, i17* @i17_s + ret void +} + +define void @i18_ls() nounwind { + %tmp = load i18* @i18_l ; <i18> [#uses=1] + store i18 %tmp, i18* @i18_s + ret void +} + +define void @i19_ls() nounwind { + %tmp = load i19* @i19_l ; <i19> [#uses=1] + store i19 %tmp, i19* @i19_s + ret void +} + +define void @i20_ls() nounwind { + %tmp = load i20* @i20_l ; <i20> [#uses=1] + store i20 %tmp, i20* @i20_s + ret void +} + +define void @i21_ls() nounwind { + %tmp = load i21* @i21_l ; <i21> [#uses=1] + store i21 %tmp, i21* @i21_s + ret void +} + +define void @i22_ls() nounwind { + %tmp = load i22* @i22_l ; <i22> [#uses=1] + store i22 %tmp, i22* @i22_s + ret void +} + +define void @i23_ls() nounwind { + %tmp = load i23* @i23_l ; <i23> [#uses=1] + store i23 %tmp, i23* @i23_s + ret void +} + +define void @i24_ls() nounwind { + %tmp = load i24* @i24_l ; <i24> [#uses=1] + store i24 %tmp, i24* @i24_s + ret void +} + +define void @i25_ls() nounwind { + %tmp = load i25* @i25_l ; <i25> [#uses=1] + store i25 %tmp, i25* @i25_s + ret void +} + +define void @i26_ls() nounwind { + %tmp = load i26* @i26_l ; <i26> [#uses=1] + store i26 %tmp, i26* @i26_s + ret void +} + +define void @i27_ls() nounwind { + %tmp = load i27* @i27_l ; <i27> [#uses=1] + store i27 %tmp, i27* @i27_s + ret void +} + +define void @i28_ls() nounwind { + %tmp = load i28* @i28_l ; <i28> [#uses=1] + store i28 %tmp, i28* @i28_s + ret void +} + +define void @i29_ls() nounwind { + %tmp = load i29* @i29_l ; <i29> [#uses=1] + store i29 %tmp, i29* @i29_s + ret void +} + +define void @i30_ls() nounwind { + %tmp = load i30* @i30_l ; <i30> [#uses=1] + store i30 %tmp, i30* @i30_s + ret void +} + +define void @i31_ls() nounwind { + %tmp = load i31* @i31_l ; <i31> [#uses=1] + store i31 %tmp, i31* @i31_s + ret void +} + +define void @i32_ls() nounwind { + %tmp = load i32* @i32_l ; <i32> [#uses=1] + store i32 %tmp, i32* @i32_s + ret void +} + +define void @i33_ls() nounwind { + %tmp = load i33* @i33_l ; <i33> [#uses=1] + store i33 %tmp, i33* @i33_s + ret void +} + +define void @i34_ls() nounwind { + %tmp = load i34* @i34_l ; <i34> [#uses=1] + store i34 %tmp, i34* @i34_s + ret void +} + +define void @i35_ls() nounwind { + %tmp = load i35* @i35_l ; <i35> [#uses=1] + store i35 %tmp, i35* @i35_s + ret void +} + +define void @i36_ls() nounwind { + %tmp = load i36* @i36_l ; <i36> [#uses=1] + store i36 %tmp, i36* @i36_s + ret void +} + +define void @i37_ls() nounwind { + %tmp = load i37* @i37_l ; <i37> [#uses=1] + store i37 %tmp, i37* @i37_s + ret void +} + +define void @i38_ls() nounwind { + %tmp = load i38* @i38_l ; <i38> [#uses=1] + store i38 %tmp, i38* @i38_s + ret void +} + +define void @i39_ls() nounwind { + %tmp = load i39* @i39_l ; <i39> [#uses=1] + store i39 %tmp, i39* @i39_s + ret void +} + +define void @i40_ls() nounwind { + %tmp = load i40* @i40_l ; <i40> [#uses=1] + store i40 %tmp, i40* @i40_s + ret void +} + +define void @i41_ls() nounwind { + %tmp = load i41* @i41_l ; <i41> [#uses=1] + store i41 %tmp, i41* @i41_s + ret void +} + +define void @i42_ls() nounwind { + %tmp = load i42* @i42_l ; <i42> [#uses=1] + store i42 %tmp, i42* @i42_s + ret void +} + +define void @i43_ls() nounwind { + %tmp = load i43* @i43_l ; <i43> [#uses=1] + store i43 %tmp, i43* @i43_s + ret void +} + +define void @i44_ls() nounwind { + %tmp = load i44* @i44_l ; <i44> [#uses=1] + store i44 %tmp, i44* @i44_s + ret void +} + +define void @i45_ls() nounwind { + %tmp = load i45* @i45_l ; <i45> [#uses=1] + store i45 %tmp, i45* @i45_s + ret void +} + +define void @i46_ls() nounwind { + %tmp = load i46* @i46_l ; <i46> [#uses=1] + store i46 %tmp, i46* @i46_s + ret void +} + +define void @i47_ls() nounwind { + %tmp = load i47* @i47_l ; <i47> [#uses=1] + store i47 %tmp, i47* @i47_s + ret void +} + +define void @i48_ls() nounwind { + %tmp = load i48* @i48_l ; <i48> [#uses=1] + store i48 %tmp, i48* @i48_s + ret void +} + +define void @i49_ls() nounwind { + %tmp = load i49* @i49_l ; <i49> [#uses=1] + store i49 %tmp, i49* @i49_s + ret void +} + +define void @i50_ls() nounwind { + %tmp = load i50* @i50_l ; <i50> [#uses=1] + store i50 %tmp, i50* @i50_s + ret void +} + +define void @i51_ls() nounwind { + %tmp = load i51* @i51_l ; <i51> [#uses=1] + store i51 %tmp, i51* @i51_s + ret void +} + +define void @i52_ls() nounwind { + %tmp = load i52* @i52_l ; <i52> [#uses=1] + store i52 %tmp, i52* @i52_s + ret void +} + +define void @i53_ls() nounwind { + %tmp = load i53* @i53_l ; <i53> [#uses=1] + store i53 %tmp, i53* @i53_s + ret void +} + +define void @i54_ls() nounwind { + %tmp = load i54* @i54_l ; <i54> [#uses=1] + store i54 %tmp, i54* @i54_s + ret void +} + +define void @i55_ls() nounwind { + %tmp = load i55* @i55_l ; <i55> [#uses=1] + store i55 %tmp, i55* @i55_s + ret void +} + +define void @i56_ls() nounwind { + %tmp = load i56* @i56_l ; <i56> [#uses=1] + store i56 %tmp, i56* @i56_s + ret void +} + +define void @i57_ls() nounwind { + %tmp = load i57* @i57_l ; <i57> [#uses=1] + store i57 %tmp, i57* @i57_s + ret void +} + +define void @i58_ls() nounwind { + %tmp = load i58* @i58_l ; <i58> [#uses=1] + store i58 %tmp, i58* @i58_s + ret void +} + +define void @i59_ls() nounwind { + %tmp = load i59* @i59_l ; <i59> [#uses=1] + store i59 %tmp, i59* @i59_s + ret void +} + +define void @i60_ls() nounwind { + %tmp = load i60* @i60_l ; <i60> [#uses=1] + store i60 %tmp, i60* @i60_s + ret void +} + +define void @i61_ls() nounwind { + %tmp = load i61* @i61_l ; <i61> [#uses=1] + store i61 %tmp, i61* @i61_s + ret void +} + +define void @i62_ls() nounwind { + %tmp = load i62* @i62_l ; <i62> [#uses=1] + store i62 %tmp, i62* @i62_s + ret void +} + +define void @i63_ls() nounwind { + %tmp = load i63* @i63_l ; <i63> [#uses=1] + store i63 %tmp, i63* @i63_s + ret void +} + +define void @i64_ls() nounwind { + %tmp = load i64* @i64_l ; <i64> [#uses=1] + store i64 %tmp, i64* @i64_s + ret void +} + +define void @i65_ls() nounwind { + %tmp = load i65* @i65_l ; <i65> [#uses=1] + store i65 %tmp, i65* @i65_s + ret void +} + +define void @i66_ls() nounwind { + %tmp = load i66* @i66_l ; <i66> [#uses=1] + store i66 %tmp, i66* @i66_s + ret void +} + +define void @i67_ls() nounwind { + %tmp = load i67* @i67_l ; <i67> [#uses=1] + store i67 %tmp, i67* @i67_s + ret void +} + +define void @i68_ls() nounwind { + %tmp = load i68* @i68_l ; <i68> [#uses=1] + store i68 %tmp, i68* @i68_s + ret void +} + +define void @i69_ls() nounwind { + %tmp = load i69* @i69_l ; <i69> [#uses=1] + store i69 %tmp, i69* @i69_s + ret void +} + +define void @i70_ls() nounwind { + %tmp = load i70* @i70_l ; <i70> [#uses=1] + store i70 %tmp, i70* @i70_s + ret void +} + +define void @i71_ls() nounwind { + %tmp = load i71* @i71_l ; <i71> [#uses=1] + store i71 %tmp, i71* @i71_s + ret void +} + +define void @i72_ls() nounwind { + %tmp = load i72* @i72_l ; <i72> [#uses=1] + store i72 %tmp, i72* @i72_s + ret void +} + +define void @i73_ls() nounwind { + %tmp = load i73* @i73_l ; <i73> [#uses=1] + store i73 %tmp, i73* @i73_s + ret void +} + +define void @i74_ls() nounwind { + %tmp = load i74* @i74_l ; <i74> [#uses=1] + store i74 %tmp, i74* @i74_s + ret void +} + +define void @i75_ls() nounwind { + %tmp = load i75* @i75_l ; <i75> [#uses=1] + store i75 %tmp, i75* @i75_s + ret void +} + +define void @i76_ls() nounwind { + %tmp = load i76* @i76_l ; <i76> [#uses=1] + store i76 %tmp, i76* @i76_s + ret void +} + +define void @i77_ls() nounwind { + %tmp = load i77* @i77_l ; <i77> [#uses=1] + store i77 %tmp, i77* @i77_s + ret void +} + +define void @i78_ls() nounwind { + %tmp = load i78* @i78_l ; <i78> [#uses=1] + store i78 %tmp, i78* @i78_s + ret void +} + +define void @i79_ls() nounwind { + %tmp = load i79* @i79_l ; <i79> [#uses=1] + store i79 %tmp, i79* @i79_s + ret void +} + +define void @i80_ls() nounwind { + %tmp = load i80* @i80_l ; <i80> [#uses=1] + store i80 %tmp, i80* @i80_s + ret void +} + +define void @i81_ls() nounwind { + %tmp = load i81* @i81_l ; <i81> [#uses=1] + store i81 %tmp, i81* @i81_s + ret void +} + +define void @i82_ls() nounwind { + %tmp = load i82* @i82_l ; <i82> [#uses=1] + store i82 %tmp, i82* @i82_s + ret void +} + +define void @i83_ls() nounwind { + %tmp = load i83* @i83_l ; <i83> [#uses=1] + store i83 %tmp, i83* @i83_s + ret void +} + +define void @i84_ls() nounwind { + %tmp = load i84* @i84_l ; <i84> [#uses=1] + store i84 %tmp, i84* @i84_s + ret void +} + +define void @i85_ls() nounwind { + %tmp = load i85* @i85_l ; <i85> [#uses=1] + store i85 %tmp, i85* @i85_s + ret void +} + +define void @i86_ls() nounwind { + %tmp = load i86* @i86_l ; <i86> [#uses=1] + store i86 %tmp, i86* @i86_s + ret void +} + +define void @i87_ls() nounwind { + %tmp = load i87* @i87_l ; <i87> [#uses=1] + store i87 %tmp, i87* @i87_s + ret void +} + +define void @i88_ls() nounwind { + %tmp = load i88* @i88_l ; <i88> [#uses=1] + store i88 %tmp, i88* @i88_s + ret void +} + +define void @i89_ls() nounwind { + %tmp = load i89* @i89_l ; <i89> [#uses=1] + store i89 %tmp, i89* @i89_s + ret void +} + +define void @i90_ls() nounwind { + %tmp = load i90* @i90_l ; <i90> [#uses=1] + store i90 %tmp, i90* @i90_s + ret void +} + +define void @i91_ls() nounwind { + %tmp = load i91* @i91_l ; <i91> [#uses=1] + store i91 %tmp, i91* @i91_s + ret void +} + +define void @i92_ls() nounwind { + %tmp = load i92* @i92_l ; <i92> [#uses=1] + store i92 %tmp, i92* @i92_s + ret void +} + +define void @i93_ls() nounwind { + %tmp = load i93* @i93_l ; <i93> [#uses=1] + store i93 %tmp, i93* @i93_s + ret void +} + +define void @i94_ls() nounwind { + %tmp = load i94* @i94_l ; <i94> [#uses=1] + store i94 %tmp, i94* @i94_s + ret void +} + +define void @i95_ls() nounwind { + %tmp = load i95* @i95_l ; <i95> [#uses=1] + store i95 %tmp, i95* @i95_s + ret void +} + +define void @i96_ls() nounwind { + %tmp = load i96* @i96_l ; <i96> [#uses=1] + store i96 %tmp, i96* @i96_s + ret void +} + +define void @i97_ls() nounwind { + %tmp = load i97* @i97_l ; <i97> [#uses=1] + store i97 %tmp, i97* @i97_s + ret void +} + +define void @i98_ls() nounwind { + %tmp = load i98* @i98_l ; <i98> [#uses=1] + store i98 %tmp, i98* @i98_s + ret void +} + +define void @i99_ls() nounwind { + %tmp = load i99* @i99_l ; <i99> [#uses=1] + store i99 %tmp, i99* @i99_s + ret void +} + +define void @i100_ls() nounwind { + %tmp = load i100* @i100_l ; <i100> [#uses=1] + store i100 %tmp, i100* @i100_s + ret void +} + +define void @i101_ls() nounwind { + %tmp = load i101* @i101_l ; <i101> [#uses=1] + store i101 %tmp, i101* @i101_s + ret void +} + +define void @i102_ls() nounwind { + %tmp = load i102* @i102_l ; <i102> [#uses=1] + store i102 %tmp, i102* @i102_s + ret void +} + +define void @i103_ls() nounwind { + %tmp = load i103* @i103_l ; <i103> [#uses=1] + store i103 %tmp, i103* @i103_s + ret void +} + +define void @i104_ls() nounwind { + %tmp = load i104* @i104_l ; <i104> [#uses=1] + store i104 %tmp, i104* @i104_s + ret void +} + +define void @i105_ls() nounwind { + %tmp = load i105* @i105_l ; <i105> [#uses=1] + store i105 %tmp, i105* @i105_s + ret void +} + +define void @i106_ls() nounwind { + %tmp = load i106* @i106_l ; <i106> [#uses=1] + store i106 %tmp, i106* @i106_s + ret void +} + +define void @i107_ls() nounwind { + %tmp = load i107* @i107_l ; <i107> [#uses=1] + store i107 %tmp, i107* @i107_s + ret void +} + +define void @i108_ls() nounwind { + %tmp = load i108* @i108_l ; <i108> [#uses=1] + store i108 %tmp, i108* @i108_s + ret void +} + +define void @i109_ls() nounwind { + %tmp = load i109* @i109_l ; <i109> [#uses=1] + store i109 %tmp, i109* @i109_s + ret void +} + +define void @i110_ls() nounwind { + %tmp = load i110* @i110_l ; <i110> [#uses=1] + store i110 %tmp, i110* @i110_s + ret void +} + +define void @i111_ls() nounwind { + %tmp = load i111* @i111_l ; <i111> [#uses=1] + store i111 %tmp, i111* @i111_s + ret void +} + +define void @i112_ls() nounwind { + %tmp = load i112* @i112_l ; <i112> [#uses=1] + store i112 %tmp, i112* @i112_s + ret void +} + +define void @i113_ls() nounwind { + %tmp = load i113* @i113_l ; <i113> [#uses=1] + store i113 %tmp, i113* @i113_s + ret void +} + +define void @i114_ls() nounwind { + %tmp = load i114* @i114_l ; <i114> [#uses=1] + store i114 %tmp, i114* @i114_s + ret void +} + +define void @i115_ls() nounwind { + %tmp = load i115* @i115_l ; <i115> [#uses=1] + store i115 %tmp, i115* @i115_s + ret void +} + +define void @i116_ls() nounwind { + %tmp = load i116* @i116_l ; <i116> [#uses=1] + store i116 %tmp, i116* @i116_s + ret void +} + +define void @i117_ls() nounwind { + %tmp = load i117* @i117_l ; <i117> [#uses=1] + store i117 %tmp, i117* @i117_s + ret void +} + +define void @i118_ls() nounwind { + %tmp = load i118* @i118_l ; <i118> [#uses=1] + store i118 %tmp, i118* @i118_s + ret void +} + +define void @i119_ls() nounwind { + %tmp = load i119* @i119_l ; <i119> [#uses=1] + store i119 %tmp, i119* @i119_s + ret void +} + +define void @i120_ls() nounwind { + %tmp = load i120* @i120_l ; <i120> [#uses=1] + store i120 %tmp, i120* @i120_s + ret void +} + +define void @i121_ls() nounwind { + %tmp = load i121* @i121_l ; <i121> [#uses=1] + store i121 %tmp, i121* @i121_s + ret void +} + +define void @i122_ls() nounwind { + %tmp = load i122* @i122_l ; <i122> [#uses=1] + store i122 %tmp, i122* @i122_s + ret void +} + +define void @i123_ls() nounwind { + %tmp = load i123* @i123_l ; <i123> [#uses=1] + store i123 %tmp, i123* @i123_s + ret void +} + +define void @i124_ls() nounwind { + %tmp = load i124* @i124_l ; <i124> [#uses=1] + store i124 %tmp, i124* @i124_s + ret void +} + +define void @i125_ls() nounwind { + %tmp = load i125* @i125_l ; <i125> [#uses=1] + store i125 %tmp, i125* @i125_s + ret void +} + +define void @i126_ls() nounwind { + %tmp = load i126* @i126_l ; <i126> [#uses=1] + store i126 %tmp, i126* @i126_s + ret void +} + +define void @i127_ls() nounwind { + %tmp = load i127* @i127_l ; <i127> [#uses=1] + store i127 %tmp, i127* @i127_s + ret void +} + +define void @i128_ls() nounwind { + %tmp = load i128* @i128_l ; <i128> [#uses=1] + store i128 %tmp, i128* @i128_s + ret void +} + +define void @i129_ls() nounwind { + %tmp = load i129* @i129_l ; <i129> [#uses=1] + store i129 %tmp, i129* @i129_s + ret void +} + +define void @i130_ls() nounwind { + %tmp = load i130* @i130_l ; <i130> [#uses=1] + store i130 %tmp, i130* @i130_s + ret void +} + +define void @i131_ls() nounwind { + %tmp = load i131* @i131_l ; <i131> [#uses=1] + store i131 %tmp, i131* @i131_s + ret void +} + +define void @i132_ls() nounwind { + %tmp = load i132* @i132_l ; <i132> [#uses=1] + store i132 %tmp, i132* @i132_s + ret void +} + +define void @i133_ls() nounwind { + %tmp = load i133* @i133_l ; <i133> [#uses=1] + store i133 %tmp, i133* @i133_s + ret void +} + +define void @i134_ls() nounwind { + %tmp = load i134* @i134_l ; <i134> [#uses=1] + store i134 %tmp, i134* @i134_s + ret void +} + +define void @i135_ls() nounwind { + %tmp = load i135* @i135_l ; <i135> [#uses=1] + store i135 %tmp, i135* @i135_s + ret void +} + +define void @i136_ls() nounwind { + %tmp = load i136* @i136_l ; <i136> [#uses=1] + store i136 %tmp, i136* @i136_s + ret void +} + +define void @i137_ls() nounwind { + %tmp = load i137* @i137_l ; <i137> [#uses=1] + store i137 %tmp, i137* @i137_s + ret void +} + +define void @i138_ls() nounwind { + %tmp = load i138* @i138_l ; <i138> [#uses=1] + store i138 %tmp, i138* @i138_s + ret void +} + +define void @i139_ls() nounwind { + %tmp = load i139* @i139_l ; <i139> [#uses=1] + store i139 %tmp, i139* @i139_s + ret void +} + +define void @i140_ls() nounwind { + %tmp = load i140* @i140_l ; <i140> [#uses=1] + store i140 %tmp, i140* @i140_s + ret void +} + +define void @i141_ls() nounwind { + %tmp = load i141* @i141_l ; <i141> [#uses=1] + store i141 %tmp, i141* @i141_s + ret void +} + +define void @i142_ls() nounwind { + %tmp = load i142* @i142_l ; <i142> [#uses=1] + store i142 %tmp, i142* @i142_s + ret void +} + +define void @i143_ls() nounwind { + %tmp = load i143* @i143_l ; <i143> [#uses=1] + store i143 %tmp, i143* @i143_s + ret void +} + +define void @i144_ls() nounwind { + %tmp = load i144* @i144_l ; <i144> [#uses=1] + store i144 %tmp, i144* @i144_s + ret void +} + +define void @i145_ls() nounwind { + %tmp = load i145* @i145_l ; <i145> [#uses=1] + store i145 %tmp, i145* @i145_s + ret void +} + +define void @i146_ls() nounwind { + %tmp = load i146* @i146_l ; <i146> [#uses=1] + store i146 %tmp, i146* @i146_s + ret void +} + +define void @i147_ls() nounwind { + %tmp = load i147* @i147_l ; <i147> [#uses=1] + store i147 %tmp, i147* @i147_s + ret void +} + +define void @i148_ls() nounwind { + %tmp = load i148* @i148_l ; <i148> [#uses=1] + store i148 %tmp, i148* @i148_s + ret void +} + +define void @i149_ls() nounwind { + %tmp = load i149* @i149_l ; <i149> [#uses=1] + store i149 %tmp, i149* @i149_s + ret void +} + +define void @i150_ls() nounwind { + %tmp = load i150* @i150_l ; <i150> [#uses=1] + store i150 %tmp, i150* @i150_s + ret void +} + +define void @i151_ls() nounwind { + %tmp = load i151* @i151_l ; <i151> [#uses=1] + store i151 %tmp, i151* @i151_s + ret void +} + +define void @i152_ls() nounwind { + %tmp = load i152* @i152_l ; <i152> [#uses=1] + store i152 %tmp, i152* @i152_s + ret void +} + +define void @i153_ls() nounwind { + %tmp = load i153* @i153_l ; <i153> [#uses=1] + store i153 %tmp, i153* @i153_s + ret void +} + +define void @i154_ls() nounwind { + %tmp = load i154* @i154_l ; <i154> [#uses=1] + store i154 %tmp, i154* @i154_s + ret void +} + +define void @i155_ls() nounwind { + %tmp = load i155* @i155_l ; <i155> [#uses=1] + store i155 %tmp, i155* @i155_s + ret void +} + +define void @i156_ls() nounwind { + %tmp = load i156* @i156_l ; <i156> [#uses=1] + store i156 %tmp, i156* @i156_s + ret void +} + +define void @i157_ls() nounwind { + %tmp = load i157* @i157_l ; <i157> [#uses=1] + store i157 %tmp, i157* @i157_s + ret void +} + +define void @i158_ls() nounwind { + %tmp = load i158* @i158_l ; <i158> [#uses=1] + store i158 %tmp, i158* @i158_s + ret void +} + +define void @i159_ls() nounwind { + %tmp = load i159* @i159_l ; <i159> [#uses=1] + store i159 %tmp, i159* @i159_s + ret void +} + +define void @i160_ls() nounwind { + %tmp = load i160* @i160_l ; <i160> [#uses=1] + store i160 %tmp, i160* @i160_s + ret void +} + +define void @i161_ls() nounwind { + %tmp = load i161* @i161_l ; <i161> [#uses=1] + store i161 %tmp, i161* @i161_s + ret void +} + +define void @i162_ls() nounwind { + %tmp = load i162* @i162_l ; <i162> [#uses=1] + store i162 %tmp, i162* @i162_s + ret void +} + +define void @i163_ls() nounwind { + %tmp = load i163* @i163_l ; <i163> [#uses=1] + store i163 %tmp, i163* @i163_s + ret void +} + +define void @i164_ls() nounwind { + %tmp = load i164* @i164_l ; <i164> [#uses=1] + store i164 %tmp, i164* @i164_s + ret void +} + +define void @i165_ls() nounwind { + %tmp = load i165* @i165_l ; <i165> [#uses=1] + store i165 %tmp, i165* @i165_s + ret void +} + +define void @i166_ls() nounwind { + %tmp = load i166* @i166_l ; <i166> [#uses=1] + store i166 %tmp, i166* @i166_s + ret void +} + +define void @i167_ls() nounwind { + %tmp = load i167* @i167_l ; <i167> [#uses=1] + store i167 %tmp, i167* @i167_s + ret void +} + +define void @i168_ls() nounwind { + %tmp = load i168* @i168_l ; <i168> [#uses=1] + store i168 %tmp, i168* @i168_s + ret void +} + +define void @i169_ls() nounwind { + %tmp = load i169* @i169_l ; <i169> [#uses=1] + store i169 %tmp, i169* @i169_s + ret void +} + +define void @i170_ls() nounwind { + %tmp = load i170* @i170_l ; <i170> [#uses=1] + store i170 %tmp, i170* @i170_s + ret void +} + +define void @i171_ls() nounwind { + %tmp = load i171* @i171_l ; <i171> [#uses=1] + store i171 %tmp, i171* @i171_s + ret void +} + +define void @i172_ls() nounwind { + %tmp = load i172* @i172_l ; <i172> [#uses=1] + store i172 %tmp, i172* @i172_s + ret void +} + +define void @i173_ls() nounwind { + %tmp = load i173* @i173_l ; <i173> [#uses=1] + store i173 %tmp, i173* @i173_s + ret void +} + +define void @i174_ls() nounwind { + %tmp = load i174* @i174_l ; <i174> [#uses=1] + store i174 %tmp, i174* @i174_s + ret void +} + +define void @i175_ls() nounwind { + %tmp = load i175* @i175_l ; <i175> [#uses=1] + store i175 %tmp, i175* @i175_s + ret void +} + +define void @i176_ls() nounwind { + %tmp = load i176* @i176_l ; <i176> [#uses=1] + store i176 %tmp, i176* @i176_s + ret void +} + +define void @i177_ls() nounwind { + %tmp = load i177* @i177_l ; <i177> [#uses=1] + store i177 %tmp, i177* @i177_s + ret void +} + +define void @i178_ls() nounwind { + %tmp = load i178* @i178_l ; <i178> [#uses=1] + store i178 %tmp, i178* @i178_s + ret void +} + +define void @i179_ls() nounwind { + %tmp = load i179* @i179_l ; <i179> [#uses=1] + store i179 %tmp, i179* @i179_s + ret void +} + +define void @i180_ls() nounwind { + %tmp = load i180* @i180_l ; <i180> [#uses=1] + store i180 %tmp, i180* @i180_s + ret void +} + +define void @i181_ls() nounwind { + %tmp = load i181* @i181_l ; <i181> [#uses=1] + store i181 %tmp, i181* @i181_s + ret void +} + +define void @i182_ls() nounwind { + %tmp = load i182* @i182_l ; <i182> [#uses=1] + store i182 %tmp, i182* @i182_s + ret void +} + +define void @i183_ls() nounwind { + %tmp = load i183* @i183_l ; <i183> [#uses=1] + store i183 %tmp, i183* @i183_s + ret void +} + +define void @i184_ls() nounwind { + %tmp = load i184* @i184_l ; <i184> [#uses=1] + store i184 %tmp, i184* @i184_s + ret void +} + +define void @i185_ls() nounwind { + %tmp = load i185* @i185_l ; <i185> [#uses=1] + store i185 %tmp, i185* @i185_s + ret void +} + +define void @i186_ls() nounwind { + %tmp = load i186* @i186_l ; <i186> [#uses=1] + store i186 %tmp, i186* @i186_s + ret void +} + +define void @i187_ls() nounwind { + %tmp = load i187* @i187_l ; <i187> [#uses=1] + store i187 %tmp, i187* @i187_s + ret void +} + +define void @i188_ls() nounwind { + %tmp = load i188* @i188_l ; <i188> [#uses=1] + store i188 %tmp, i188* @i188_s + ret void +} + +define void @i189_ls() nounwind { + %tmp = load i189* @i189_l ; <i189> [#uses=1] + store i189 %tmp, i189* @i189_s + ret void +} + +define void @i190_ls() nounwind { + %tmp = load i190* @i190_l ; <i190> [#uses=1] + store i190 %tmp, i190* @i190_s + ret void +} + +define void @i191_ls() nounwind { + %tmp = load i191* @i191_l ; <i191> [#uses=1] + store i191 %tmp, i191* @i191_s + ret void +} + +define void @i192_ls() nounwind { + %tmp = load i192* @i192_l ; <i192> [#uses=1] + store i192 %tmp, i192* @i192_s + ret void +} + +define void @i193_ls() nounwind { + %tmp = load i193* @i193_l ; <i193> [#uses=1] + store i193 %tmp, i193* @i193_s + ret void +} + +define void @i194_ls() nounwind { + %tmp = load i194* @i194_l ; <i194> [#uses=1] + store i194 %tmp, i194* @i194_s + ret void +} + +define void @i195_ls() nounwind { + %tmp = load i195* @i195_l ; <i195> [#uses=1] + store i195 %tmp, i195* @i195_s + ret void +} + +define void @i196_ls() nounwind { + %tmp = load i196* @i196_l ; <i196> [#uses=1] + store i196 %tmp, i196* @i196_s + ret void +} + +define void @i197_ls() nounwind { + %tmp = load i197* @i197_l ; <i197> [#uses=1] + store i197 %tmp, i197* @i197_s + ret void +} + +define void @i198_ls() nounwind { + %tmp = load i198* @i198_l ; <i198> [#uses=1] + store i198 %tmp, i198* @i198_s + ret void +} + +define void @i199_ls() nounwind { + %tmp = load i199* @i199_l ; <i199> [#uses=1] + store i199 %tmp, i199* @i199_s + ret void +} + +define void @i200_ls() nounwind { + %tmp = load i200* @i200_l ; <i200> [#uses=1] + store i200 %tmp, i200* @i200_s + ret void +} + +define void @i201_ls() nounwind { + %tmp = load i201* @i201_l ; <i201> [#uses=1] + store i201 %tmp, i201* @i201_s + ret void +} + +define void @i202_ls() nounwind { + %tmp = load i202* @i202_l ; <i202> [#uses=1] + store i202 %tmp, i202* @i202_s + ret void +} + +define void @i203_ls() nounwind { + %tmp = load i203* @i203_l ; <i203> [#uses=1] + store i203 %tmp, i203* @i203_s + ret void +} + +define void @i204_ls() nounwind { + %tmp = load i204* @i204_l ; <i204> [#uses=1] + store i204 %tmp, i204* @i204_s + ret void +} + +define void @i205_ls() nounwind { + %tmp = load i205* @i205_l ; <i205> [#uses=1] + store i205 %tmp, i205* @i205_s + ret void +} + +define void @i206_ls() nounwind { + %tmp = load i206* @i206_l ; <i206> [#uses=1] + store i206 %tmp, i206* @i206_s + ret void +} + +define void @i207_ls() nounwind { + %tmp = load i207* @i207_l ; <i207> [#uses=1] + store i207 %tmp, i207* @i207_s + ret void +} + +define void @i208_ls() nounwind { + %tmp = load i208* @i208_l ; <i208> [#uses=1] + store i208 %tmp, i208* @i208_s + ret void +} + +define void @i209_ls() nounwind { + %tmp = load i209* @i209_l ; <i209> [#uses=1] + store i209 %tmp, i209* @i209_s + ret void +} + +define void @i210_ls() nounwind { + %tmp = load i210* @i210_l ; <i210> [#uses=1] + store i210 %tmp, i210* @i210_s + ret void +} + +define void @i211_ls() nounwind { + %tmp = load i211* @i211_l ; <i211> [#uses=1] + store i211 %tmp, i211* @i211_s + ret void +} + +define void @i212_ls() nounwind { + %tmp = load i212* @i212_l ; <i212> [#uses=1] + store i212 %tmp, i212* @i212_s + ret void +} + +define void @i213_ls() nounwind { + %tmp = load i213* @i213_l ; <i213> [#uses=1] + store i213 %tmp, i213* @i213_s + ret void +} + +define void @i214_ls() nounwind { + %tmp = load i214* @i214_l ; <i214> [#uses=1] + store i214 %tmp, i214* @i214_s + ret void +} + +define void @i215_ls() nounwind { + %tmp = load i215* @i215_l ; <i215> [#uses=1] + store i215 %tmp, i215* @i215_s + ret void +} + +define void @i216_ls() nounwind { + %tmp = load i216* @i216_l ; <i216> [#uses=1] + store i216 %tmp, i216* @i216_s + ret void +} + +define void @i217_ls() nounwind { + %tmp = load i217* @i217_l ; <i217> [#uses=1] + store i217 %tmp, i217* @i217_s + ret void +} + +define void @i218_ls() nounwind { + %tmp = load i218* @i218_l ; <i218> [#uses=1] + store i218 %tmp, i218* @i218_s + ret void +} + +define void @i219_ls() nounwind { + %tmp = load i219* @i219_l ; <i219> [#uses=1] + store i219 %tmp, i219* @i219_s + ret void +} + +define void @i220_ls() nounwind { + %tmp = load i220* @i220_l ; <i220> [#uses=1] + store i220 %tmp, i220* @i220_s + ret void +} + +define void @i221_ls() nounwind { + %tmp = load i221* @i221_l ; <i221> [#uses=1] + store i221 %tmp, i221* @i221_s + ret void +} + +define void @i222_ls() nounwind { + %tmp = load i222* @i222_l ; <i222> [#uses=1] + store i222 %tmp, i222* @i222_s + ret void +} + +define void @i223_ls() nounwind { + %tmp = load i223* @i223_l ; <i223> [#uses=1] + store i223 %tmp, i223* @i223_s + ret void +} + +define void @i224_ls() nounwind { + %tmp = load i224* @i224_l ; <i224> [#uses=1] + store i224 %tmp, i224* @i224_s + ret void +} + +define void @i225_ls() nounwind { + %tmp = load i225* @i225_l ; <i225> [#uses=1] + store i225 %tmp, i225* @i225_s + ret void +} + +define void @i226_ls() nounwind { + %tmp = load i226* @i226_l ; <i226> [#uses=1] + store i226 %tmp, i226* @i226_s + ret void +} + +define void @i227_ls() nounwind { + %tmp = load i227* @i227_l ; <i227> [#uses=1] + store i227 %tmp, i227* @i227_s + ret void +} + +define void @i228_ls() nounwind { + %tmp = load i228* @i228_l ; <i228> [#uses=1] + store i228 %tmp, i228* @i228_s + ret void +} + +define void @i229_ls() nounwind { + %tmp = load i229* @i229_l ; <i229> [#uses=1] + store i229 %tmp, i229* @i229_s + ret void +} + +define void @i230_ls() nounwind { + %tmp = load i230* @i230_l ; <i230> [#uses=1] + store i230 %tmp, i230* @i230_s + ret void +} + +define void @i231_ls() nounwind { + %tmp = load i231* @i231_l ; <i231> [#uses=1] + store i231 %tmp, i231* @i231_s + ret void +} + +define void @i232_ls() nounwind { + %tmp = load i232* @i232_l ; <i232> [#uses=1] + store i232 %tmp, i232* @i232_s + ret void +} + +define void @i233_ls() nounwind { + %tmp = load i233* @i233_l ; <i233> [#uses=1] + store i233 %tmp, i233* @i233_s + ret void +} + +define void @i234_ls() nounwind { + %tmp = load i234* @i234_l ; <i234> [#uses=1] + store i234 %tmp, i234* @i234_s + ret void +} + +define void @i235_ls() nounwind { + %tmp = load i235* @i235_l ; <i235> [#uses=1] + store i235 %tmp, i235* @i235_s + ret void +} + +define void @i236_ls() nounwind { + %tmp = load i236* @i236_l ; <i236> [#uses=1] + store i236 %tmp, i236* @i236_s + ret void +} + +define void @i237_ls() nounwind { + %tmp = load i237* @i237_l ; <i237> [#uses=1] + store i237 %tmp, i237* @i237_s + ret void +} + +define void @i238_ls() nounwind { + %tmp = load i238* @i238_l ; <i238> [#uses=1] + store i238 %tmp, i238* @i238_s + ret void +} + +define void @i239_ls() nounwind { + %tmp = load i239* @i239_l ; <i239> [#uses=1] + store i239 %tmp, i239* @i239_s + ret void +} + +define void @i240_ls() nounwind { + %tmp = load i240* @i240_l ; <i240> [#uses=1] + store i240 %tmp, i240* @i240_s + ret void +} + +define void @i241_ls() nounwind { + %tmp = load i241* @i241_l ; <i241> [#uses=1] + store i241 %tmp, i241* @i241_s + ret void +} + +define void @i242_ls() nounwind { + %tmp = load i242* @i242_l ; <i242> [#uses=1] + store i242 %tmp, i242* @i242_s + ret void +} + +define void @i243_ls() nounwind { + %tmp = load i243* @i243_l ; <i243> [#uses=1] + store i243 %tmp, i243* @i243_s + ret void +} + +define void @i244_ls() nounwind { + %tmp = load i244* @i244_l ; <i244> [#uses=1] + store i244 %tmp, i244* @i244_s + ret void +} + +define void @i245_ls() nounwind { + %tmp = load i245* @i245_l ; <i245> [#uses=1] + store i245 %tmp, i245* @i245_s + ret void +} + +define void @i246_ls() nounwind { + %tmp = load i246* @i246_l ; <i246> [#uses=1] + store i246 %tmp, i246* @i246_s + ret void +} + +define void @i247_ls() nounwind { + %tmp = load i247* @i247_l ; <i247> [#uses=1] + store i247 %tmp, i247* @i247_s + ret void +} + +define void @i248_ls() nounwind { + %tmp = load i248* @i248_l ; <i248> [#uses=1] + store i248 %tmp, i248* @i248_s + ret void +} + +define void @i249_ls() nounwind { + %tmp = load i249* @i249_l ; <i249> [#uses=1] + store i249 %tmp, i249* @i249_s + ret void +} + +define void @i250_ls() nounwind { + %tmp = load i250* @i250_l ; <i250> [#uses=1] + store i250 %tmp, i250* @i250_s + ret void +} + +define void @i251_ls() nounwind { + %tmp = load i251* @i251_l ; <i251> [#uses=1] + store i251 %tmp, i251* @i251_s + ret void +} + +define void @i252_ls() nounwind { + %tmp = load i252* @i252_l ; <i252> [#uses=1] + store i252 %tmp, i252* @i252_s + ret void +} + +define void @i253_ls() nounwind { + %tmp = load i253* @i253_l ; <i253> [#uses=1] + store i253 %tmp, i253* @i253_s + ret void +} + +define void @i254_ls() nounwind { + %tmp = load i254* @i254_l ; <i254> [#uses=1] + store i254 %tmp, i254* @i254_s + ret void +} + +define void @i255_ls() nounwind { + %tmp = load i255* @i255_l ; <i255> [#uses=1] + store i255 %tmp, i255* @i255_s + ret void +} + +define void @i256_ls() nounwind { + %tmp = load i256* @i256_l ; <i256> [#uses=1] + store i256 %tmp, i256* @i256_s + ret void +} diff --git a/test/CodeGen/Generic/APIntParam.ll b/test/CodeGen/Generic/APIntParam.ll new file mode 100644 index 0000000..8aa0b49 --- /dev/null +++ b/test/CodeGen/Generic/APIntParam.ll @@ -0,0 +1,1537 @@ +; RUN: llc < %s > %t +@i1_s = external global i1 ; <i1*> [#uses=1] +@i2_s = external global i2 ; <i2*> [#uses=1] +@i3_s = external global i3 ; <i3*> [#uses=1] +@i4_s = external global i4 ; <i4*> [#uses=1] +@i5_s = external global i5 ; <i5*> [#uses=1] +@i6_s = external global i6 ; <i6*> [#uses=1] +@i7_s = external global i7 ; <i7*> [#uses=1] +@i8_s = external global i8 ; <i8*> [#uses=1] +@i9_s = external global i9 ; <i9*> [#uses=1] +@i10_s = external global i10 ; <i10*> [#uses=1] +@i11_s = external global i11 ; <i11*> [#uses=1] +@i12_s = external global i12 ; <i12*> [#uses=1] +@i13_s = external global i13 ; <i13*> [#uses=1] +@i14_s = external global i14 ; <i14*> [#uses=1] +@i15_s = external global i15 ; <i15*> [#uses=1] +@i16_s = external global i16 ; <i16*> [#uses=1] +@i17_s = external global i17 ; <i17*> [#uses=1] +@i18_s = external global i18 ; <i18*> [#uses=1] +@i19_s = external global i19 ; <i19*> [#uses=1] +@i20_s = external global i20 ; <i20*> [#uses=1] +@i21_s = external global i21 ; <i21*> [#uses=1] +@i22_s = external global i22 ; <i22*> [#uses=1] +@i23_s = external global i23 ; <i23*> [#uses=1] +@i24_s = external global i24 ; <i24*> [#uses=1] +@i25_s = external global i25 ; <i25*> [#uses=1] +@i26_s = external global i26 ; <i26*> [#uses=1] +@i27_s = external global i27 ; <i27*> [#uses=1] +@i28_s = external global i28 ; <i28*> [#uses=1] +@i29_s = external global i29 ; <i29*> [#uses=1] +@i30_s = external global i30 ; <i30*> [#uses=1] +@i31_s = external global i31 ; <i31*> [#uses=1] +@i32_s = external global i32 ; <i32*> [#uses=1] +@i33_s = external global i33 ; <i33*> [#uses=1] +@i34_s = external global i34 ; <i34*> [#uses=1] +@i35_s = external global i35 ; <i35*> [#uses=1] +@i36_s = external global i36 ; <i36*> [#uses=1] +@i37_s = external global i37 ; <i37*> [#uses=1] +@i38_s = external global i38 ; <i38*> [#uses=1] +@i39_s = external global i39 ; <i39*> [#uses=1] +@i40_s = external global i40 ; <i40*> [#uses=1] +@i41_s = external global i41 ; <i41*> [#uses=1] +@i42_s = external global i42 ; <i42*> [#uses=1] +@i43_s = external global i43 ; <i43*> [#uses=1] +@i44_s = external global i44 ; <i44*> [#uses=1] +@i45_s = external global i45 ; <i45*> [#uses=1] +@i46_s = external global i46 ; <i46*> [#uses=1] +@i47_s = external global i47 ; <i47*> [#uses=1] +@i48_s = external global i48 ; <i48*> [#uses=1] +@i49_s = external global i49 ; <i49*> [#uses=1] +@i50_s = external global i50 ; <i50*> [#uses=1] +@i51_s = external global i51 ; <i51*> [#uses=1] +@i52_s = external global i52 ; <i52*> [#uses=1] +@i53_s = external global i53 ; <i53*> [#uses=1] +@i54_s = external global i54 ; <i54*> [#uses=1] +@i55_s = external global i55 ; <i55*> [#uses=1] +@i56_s = external global i56 ; <i56*> [#uses=1] +@i57_s = external global i57 ; <i57*> [#uses=1] +@i58_s = external global i58 ; <i58*> [#uses=1] +@i59_s = external global i59 ; <i59*> [#uses=1] +@i60_s = external global i60 ; <i60*> [#uses=1] +@i61_s = external global i61 ; <i61*> [#uses=1] +@i62_s = external global i62 ; <i62*> [#uses=1] +@i63_s = external global i63 ; <i63*> [#uses=1] +@i64_s = external global i64 ; <i64*> [#uses=1] +@i65_s = external global i65 ; <i65*> [#uses=1] +@i66_s = external global i66 ; <i66*> [#uses=1] +@i67_s = external global i67 ; <i67*> [#uses=1] +@i68_s = external global i68 ; <i68*> [#uses=1] +@i69_s = external global i69 ; <i69*> [#uses=1] +@i70_s = external global i70 ; <i70*> [#uses=1] +@i71_s = external global i71 ; <i71*> [#uses=1] +@i72_s = external global i72 ; <i72*> [#uses=1] +@i73_s = external global i73 ; <i73*> [#uses=1] +@i74_s = external global i74 ; <i74*> [#uses=1] +@i75_s = external global i75 ; <i75*> [#uses=1] +@i76_s = external global i76 ; <i76*> [#uses=1] +@i77_s = external global i77 ; <i77*> [#uses=1] +@i78_s = external global i78 ; <i78*> [#uses=1] +@i79_s = external global i79 ; <i79*> [#uses=1] +@i80_s = external global i80 ; <i80*> [#uses=1] +@i81_s = external global i81 ; <i81*> [#uses=1] +@i82_s = external global i82 ; <i82*> [#uses=1] +@i83_s = external global i83 ; <i83*> [#uses=1] +@i84_s = external global i84 ; <i84*> [#uses=1] +@i85_s = external global i85 ; <i85*> [#uses=1] +@i86_s = external global i86 ; <i86*> [#uses=1] +@i87_s = external global i87 ; <i87*> [#uses=1] +@i88_s = external global i88 ; <i88*> [#uses=1] +@i89_s = external global i89 ; <i89*> [#uses=1] +@i90_s = external global i90 ; <i90*> [#uses=1] +@i91_s = external global i91 ; <i91*> [#uses=1] +@i92_s = external global i92 ; <i92*> [#uses=1] +@i93_s = external global i93 ; <i93*> [#uses=1] +@i94_s = external global i94 ; <i94*> [#uses=1] +@i95_s = external global i95 ; <i95*> [#uses=1] +@i96_s = external global i96 ; <i96*> [#uses=1] +@i97_s = external global i97 ; <i97*> [#uses=1] +@i98_s = external global i98 ; <i98*> [#uses=1] +@i99_s = external global i99 ; <i99*> [#uses=1] +@i100_s = external global i100 ; <i100*> [#uses=1] +@i101_s = external global i101 ; <i101*> [#uses=1] +@i102_s = external global i102 ; <i102*> [#uses=1] +@i103_s = external global i103 ; <i103*> [#uses=1] +@i104_s = external global i104 ; <i104*> [#uses=1] +@i105_s = external global i105 ; <i105*> [#uses=1] +@i106_s = external global i106 ; <i106*> [#uses=1] +@i107_s = external global i107 ; <i107*> [#uses=1] +@i108_s = external global i108 ; <i108*> [#uses=1] +@i109_s = external global i109 ; <i109*> [#uses=1] +@i110_s = external global i110 ; <i110*> [#uses=1] +@i111_s = external global i111 ; <i111*> [#uses=1] +@i112_s = external global i112 ; <i112*> [#uses=1] +@i113_s = external global i113 ; <i113*> [#uses=1] +@i114_s = external global i114 ; <i114*> [#uses=1] +@i115_s = external global i115 ; <i115*> [#uses=1] +@i116_s = external global i116 ; <i116*> [#uses=1] +@i117_s = external global i117 ; <i117*> [#uses=1] +@i118_s = external global i118 ; <i118*> [#uses=1] +@i119_s = external global i119 ; <i119*> [#uses=1] +@i120_s = external global i120 ; <i120*> [#uses=1] +@i121_s = external global i121 ; <i121*> [#uses=1] +@i122_s = external global i122 ; <i122*> [#uses=1] +@i123_s = external global i123 ; <i123*> [#uses=1] +@i124_s = external global i124 ; <i124*> [#uses=1] +@i125_s = external global i125 ; <i125*> [#uses=1] +@i126_s = external global i126 ; <i126*> [#uses=1] +@i127_s = external global i127 ; <i127*> [#uses=1] +@i128_s = external global i128 ; <i128*> [#uses=1] +@i129_s = external global i129 ; <i129*> [#uses=1] +@i130_s = external global i130 ; <i130*> [#uses=1] +@i131_s = external global i131 ; <i131*> [#uses=1] +@i132_s = external global i132 ; <i132*> [#uses=1] +@i133_s = external global i133 ; <i133*> [#uses=1] +@i134_s = external global i134 ; <i134*> [#uses=1] +@i135_s = external global i135 ; <i135*> [#uses=1] +@i136_s = external global i136 ; <i136*> [#uses=1] +@i137_s = external global i137 ; <i137*> [#uses=1] +@i138_s = external global i138 ; <i138*> [#uses=1] +@i139_s = external global i139 ; <i139*> [#uses=1] +@i140_s = external global i140 ; <i140*> [#uses=1] +@i141_s = external global i141 ; <i141*> [#uses=1] +@i142_s = external global i142 ; <i142*> [#uses=1] +@i143_s = external global i143 ; <i143*> [#uses=1] +@i144_s = external global i144 ; <i144*> [#uses=1] +@i145_s = external global i145 ; <i145*> [#uses=1] +@i146_s = external global i146 ; <i146*> [#uses=1] +@i147_s = external global i147 ; <i147*> [#uses=1] +@i148_s = external global i148 ; <i148*> [#uses=1] +@i149_s = external global i149 ; <i149*> [#uses=1] +@i150_s = external global i150 ; <i150*> [#uses=1] +@i151_s = external global i151 ; <i151*> [#uses=1] +@i152_s = external global i152 ; <i152*> [#uses=1] +@i153_s = external global i153 ; <i153*> [#uses=1] +@i154_s = external global i154 ; <i154*> [#uses=1] +@i155_s = external global i155 ; <i155*> [#uses=1] +@i156_s = external global i156 ; <i156*> [#uses=1] +@i157_s = external global i157 ; <i157*> [#uses=1] +@i158_s = external global i158 ; <i158*> [#uses=1] +@i159_s = external global i159 ; <i159*> [#uses=1] +@i160_s = external global i160 ; <i160*> [#uses=1] +@i161_s = external global i161 ; <i161*> [#uses=1] +@i162_s = external global i162 ; <i162*> [#uses=1] +@i163_s = external global i163 ; <i163*> [#uses=1] +@i164_s = external global i164 ; <i164*> [#uses=1] +@i165_s = external global i165 ; <i165*> [#uses=1] +@i166_s = external global i166 ; <i166*> [#uses=1] +@i167_s = external global i167 ; <i167*> [#uses=1] +@i168_s = external global i168 ; <i168*> [#uses=1] +@i169_s = external global i169 ; <i169*> [#uses=1] +@i170_s = external global i170 ; <i170*> [#uses=1] +@i171_s = external global i171 ; <i171*> [#uses=1] +@i172_s = external global i172 ; <i172*> [#uses=1] +@i173_s = external global i173 ; <i173*> [#uses=1] +@i174_s = external global i174 ; <i174*> [#uses=1] +@i175_s = external global i175 ; <i175*> [#uses=1] +@i176_s = external global i176 ; <i176*> [#uses=1] +@i177_s = external global i177 ; <i177*> [#uses=1] +@i178_s = external global i178 ; <i178*> [#uses=1] +@i179_s = external global i179 ; <i179*> [#uses=1] +@i180_s = external global i180 ; <i180*> [#uses=1] +@i181_s = external global i181 ; <i181*> [#uses=1] +@i182_s = external global i182 ; <i182*> [#uses=1] +@i183_s = external global i183 ; <i183*> [#uses=1] +@i184_s = external global i184 ; <i184*> [#uses=1] +@i185_s = external global i185 ; <i185*> [#uses=1] +@i186_s = external global i186 ; <i186*> [#uses=1] +@i187_s = external global i187 ; <i187*> [#uses=1] +@i188_s = external global i188 ; <i188*> [#uses=1] +@i189_s = external global i189 ; <i189*> [#uses=1] +@i190_s = external global i190 ; <i190*> [#uses=1] +@i191_s = external global i191 ; <i191*> [#uses=1] +@i192_s = external global i192 ; <i192*> [#uses=1] +@i193_s = external global i193 ; <i193*> [#uses=1] +@i194_s = external global i194 ; <i194*> [#uses=1] +@i195_s = external global i195 ; <i195*> [#uses=1] +@i196_s = external global i196 ; <i196*> [#uses=1] +@i197_s = external global i197 ; <i197*> [#uses=1] +@i198_s = external global i198 ; <i198*> [#uses=1] +@i199_s = external global i199 ; <i199*> [#uses=1] +@i200_s = external global i200 ; <i200*> [#uses=1] +@i201_s = external global i201 ; <i201*> [#uses=1] +@i202_s = external global i202 ; <i202*> [#uses=1] +@i203_s = external global i203 ; <i203*> [#uses=1] +@i204_s = external global i204 ; <i204*> [#uses=1] +@i205_s = external global i205 ; <i205*> [#uses=1] +@i206_s = external global i206 ; <i206*> [#uses=1] +@i207_s = external global i207 ; <i207*> [#uses=1] +@i208_s = external global i208 ; <i208*> [#uses=1] +@i209_s = external global i209 ; <i209*> [#uses=1] +@i210_s = external global i210 ; <i210*> [#uses=1] +@i211_s = external global i211 ; <i211*> [#uses=1] +@i212_s = external global i212 ; <i212*> [#uses=1] +@i213_s = external global i213 ; <i213*> [#uses=1] +@i214_s = external global i214 ; <i214*> [#uses=1] +@i215_s = external global i215 ; <i215*> [#uses=1] +@i216_s = external global i216 ; <i216*> [#uses=1] +@i217_s = external global i217 ; <i217*> [#uses=1] +@i218_s = external global i218 ; <i218*> [#uses=1] +@i219_s = external global i219 ; <i219*> [#uses=1] +@i220_s = external global i220 ; <i220*> [#uses=1] +@i221_s = external global i221 ; <i221*> [#uses=1] +@i222_s = external global i222 ; <i222*> [#uses=1] +@i223_s = external global i223 ; <i223*> [#uses=1] +@i224_s = external global i224 ; <i224*> [#uses=1] +@i225_s = external global i225 ; <i225*> [#uses=1] +@i226_s = external global i226 ; <i226*> [#uses=1] +@i227_s = external global i227 ; <i227*> [#uses=1] +@i228_s = external global i228 ; <i228*> [#uses=1] +@i229_s = external global i229 ; <i229*> [#uses=1] +@i230_s = external global i230 ; <i230*> [#uses=1] +@i231_s = external global i231 ; <i231*> [#uses=1] +@i232_s = external global i232 ; <i232*> [#uses=1] +@i233_s = external global i233 ; <i233*> [#uses=1] +@i234_s = external global i234 ; <i234*> [#uses=1] +@i235_s = external global i235 ; <i235*> [#uses=1] +@i236_s = external global i236 ; <i236*> [#uses=1] +@i237_s = external global i237 ; <i237*> [#uses=1] +@i238_s = external global i238 ; <i238*> [#uses=1] +@i239_s = external global i239 ; <i239*> [#uses=1] +@i240_s = external global i240 ; <i240*> [#uses=1] +@i241_s = external global i241 ; <i241*> [#uses=1] +@i242_s = external global i242 ; <i242*> [#uses=1] +@i243_s = external global i243 ; <i243*> [#uses=1] +@i244_s = external global i244 ; <i244*> [#uses=1] +@i245_s = external global i245 ; <i245*> [#uses=1] +@i246_s = external global i246 ; <i246*> [#uses=1] +@i247_s = external global i247 ; <i247*> [#uses=1] +@i248_s = external global i248 ; <i248*> [#uses=1] +@i249_s = external global i249 ; <i249*> [#uses=1] +@i250_s = external global i250 ; <i250*> [#uses=1] +@i251_s = external global i251 ; <i251*> [#uses=1] +@i252_s = external global i252 ; <i252*> [#uses=1] +@i253_s = external global i253 ; <i253*> [#uses=1] +@i254_s = external global i254 ; <i254*> [#uses=1] +@i255_s = external global i255 ; <i255*> [#uses=1] +@i256_s = external global i256 ; <i256*> [#uses=1] + +define void @i1_ls(i1 %x) nounwind { + store i1 %x, i1* @i1_s + ret void +} + +define void @i2_ls(i2 %x) nounwind { + store i2 %x, i2* @i2_s + ret void +} + +define void @i3_ls(i3 %x) nounwind { + store i3 %x, i3* @i3_s + ret void +} + +define void @i4_ls(i4 %x) nounwind { + store i4 %x, i4* @i4_s + ret void +} + +define void @i5_ls(i5 %x) nounwind { + store i5 %x, i5* @i5_s + ret void +} + +define void @i6_ls(i6 %x) nounwind { + store i6 %x, i6* @i6_s + ret void +} + +define void @i7_ls(i7 %x) nounwind { + store i7 %x, i7* @i7_s + ret void +} + +define void @i8_ls(i8 %x) nounwind { + store i8 %x, i8* @i8_s + ret void +} + +define void @i9_ls(i9 %x) nounwind { + store i9 %x, i9* @i9_s + ret void +} + +define void @i10_ls(i10 %x) nounwind { + store i10 %x, i10* @i10_s + ret void +} + +define void @i11_ls(i11 %x) nounwind { + store i11 %x, i11* @i11_s + ret void +} + +define void @i12_ls(i12 %x) nounwind { + store i12 %x, i12* @i12_s + ret void +} + +define void @i13_ls(i13 %x) nounwind { + store i13 %x, i13* @i13_s + ret void +} + +define void @i14_ls(i14 %x) nounwind { + store i14 %x, i14* @i14_s + ret void +} + +define void @i15_ls(i15 %x) nounwind { + store i15 %x, i15* @i15_s + ret void +} + +define void @i16_ls(i16 %x) nounwind { + store i16 %x, i16* @i16_s + ret void +} + +define void @i17_ls(i17 %x) nounwind { + store i17 %x, i17* @i17_s + ret void +} + +define void @i18_ls(i18 %x) nounwind { + store i18 %x, i18* @i18_s + ret void +} + +define void @i19_ls(i19 %x) nounwind { + store i19 %x, i19* @i19_s + ret void +} + +define void @i20_ls(i20 %x) nounwind { + store i20 %x, i20* @i20_s + ret void +} + +define void @i21_ls(i21 %x) nounwind { + store i21 %x, i21* @i21_s + ret void +} + +define void @i22_ls(i22 %x) nounwind { + store i22 %x, i22* @i22_s + ret void +} + +define void @i23_ls(i23 %x) nounwind { + store i23 %x, i23* @i23_s + ret void +} + +define void @i24_ls(i24 %x) nounwind { + store i24 %x, i24* @i24_s + ret void +} + +define void @i25_ls(i25 %x) nounwind { + store i25 %x, i25* @i25_s + ret void +} + +define void @i26_ls(i26 %x) nounwind { + store i26 %x, i26* @i26_s + ret void +} + +define void @i27_ls(i27 %x) nounwind { + store i27 %x, i27* @i27_s + ret void +} + +define void @i28_ls(i28 %x) nounwind { + store i28 %x, i28* @i28_s + ret void +} + +define void @i29_ls(i29 %x) nounwind { + store i29 %x, i29* @i29_s + ret void +} + +define void @i30_ls(i30 %x) nounwind { + store i30 %x, i30* @i30_s + ret void +} + +define void @i31_ls(i31 %x) nounwind { + store i31 %x, i31* @i31_s + ret void +} + +define void @i32_ls(i32 %x) nounwind { + store i32 %x, i32* @i32_s + ret void +} + +define void @i33_ls(i33 %x) nounwind { + store i33 %x, i33* @i33_s + ret void +} + +define void @i34_ls(i34 %x) nounwind { + store i34 %x, i34* @i34_s + ret void +} + +define void @i35_ls(i35 %x) nounwind { + store i35 %x, i35* @i35_s + ret void +} + +define void @i36_ls(i36 %x) nounwind { + store i36 %x, i36* @i36_s + ret void +} + +define void @i37_ls(i37 %x) nounwind { + store i37 %x, i37* @i37_s + ret void +} + +define void @i38_ls(i38 %x) nounwind { + store i38 %x, i38* @i38_s + ret void +} + +define void @i39_ls(i39 %x) nounwind { + store i39 %x, i39* @i39_s + ret void +} + +define void @i40_ls(i40 %x) nounwind { + store i40 %x, i40* @i40_s + ret void +} + +define void @i41_ls(i41 %x) nounwind { + store i41 %x, i41* @i41_s + ret void +} + +define void @i42_ls(i42 %x) nounwind { + store i42 %x, i42* @i42_s + ret void +} + +define void @i43_ls(i43 %x) nounwind { + store i43 %x, i43* @i43_s + ret void +} + +define void @i44_ls(i44 %x) nounwind { + store i44 %x, i44* @i44_s + ret void +} + +define void @i45_ls(i45 %x) nounwind { + store i45 %x, i45* @i45_s + ret void +} + +define void @i46_ls(i46 %x) nounwind { + store i46 %x, i46* @i46_s + ret void +} + +define void @i47_ls(i47 %x) nounwind { + store i47 %x, i47* @i47_s + ret void +} + +define void @i48_ls(i48 %x) nounwind { + store i48 %x, i48* @i48_s + ret void +} + +define void @i49_ls(i49 %x) nounwind { + store i49 %x, i49* @i49_s + ret void +} + +define void @i50_ls(i50 %x) nounwind { + store i50 %x, i50* @i50_s + ret void +} + +define void @i51_ls(i51 %x) nounwind { + store i51 %x, i51* @i51_s + ret void +} + +define void @i52_ls(i52 %x) nounwind { + store i52 %x, i52* @i52_s + ret void +} + +define void @i53_ls(i53 %x) nounwind { + store i53 %x, i53* @i53_s + ret void +} + +define void @i54_ls(i54 %x) nounwind { + store i54 %x, i54* @i54_s + ret void +} + +define void @i55_ls(i55 %x) nounwind { + store i55 %x, i55* @i55_s + ret void +} + +define void @i56_ls(i56 %x) nounwind { + store i56 %x, i56* @i56_s + ret void +} + +define void @i57_ls(i57 %x) nounwind { + store i57 %x, i57* @i57_s + ret void +} + +define void @i58_ls(i58 %x) nounwind { + store i58 %x, i58* @i58_s + ret void +} + +define void @i59_ls(i59 %x) nounwind { + store i59 %x, i59* @i59_s + ret void +} + +define void @i60_ls(i60 %x) nounwind { + store i60 %x, i60* @i60_s + ret void +} + +define void @i61_ls(i61 %x) nounwind { + store i61 %x, i61* @i61_s + ret void +} + +define void @i62_ls(i62 %x) nounwind { + store i62 %x, i62* @i62_s + ret void +} + +define void @i63_ls(i63 %x) nounwind { + store i63 %x, i63* @i63_s + ret void +} + +define void @i64_ls(i64 %x) nounwind { + store i64 %x, i64* @i64_s + ret void +} + +define void @i65_ls(i65 %x) nounwind { + store i65 %x, i65* @i65_s + ret void +} + +define void @i66_ls(i66 %x) nounwind { + store i66 %x, i66* @i66_s + ret void +} + +define void @i67_ls(i67 %x) nounwind { + store i67 %x, i67* @i67_s + ret void +} + +define void @i68_ls(i68 %x) nounwind { + store i68 %x, i68* @i68_s + ret void +} + +define void @i69_ls(i69 %x) nounwind { + store i69 %x, i69* @i69_s + ret void +} + +define void @i70_ls(i70 %x) nounwind { + store i70 %x, i70* @i70_s + ret void +} + +define void @i71_ls(i71 %x) nounwind { + store i71 %x, i71* @i71_s + ret void +} + +define void @i72_ls(i72 %x) nounwind { + store i72 %x, i72* @i72_s + ret void +} + +define void @i73_ls(i73 %x) nounwind { + store i73 %x, i73* @i73_s + ret void +} + +define void @i74_ls(i74 %x) nounwind { + store i74 %x, i74* @i74_s + ret void +} + +define void @i75_ls(i75 %x) nounwind { + store i75 %x, i75* @i75_s + ret void +} + +define void @i76_ls(i76 %x) nounwind { + store i76 %x, i76* @i76_s + ret void +} + +define void @i77_ls(i77 %x) nounwind { + store i77 %x, i77* @i77_s + ret void +} + +define void @i78_ls(i78 %x) nounwind { + store i78 %x, i78* @i78_s + ret void +} + +define void @i79_ls(i79 %x) nounwind { + store i79 %x, i79* @i79_s + ret void +} + +define void @i80_ls(i80 %x) nounwind { + store i80 %x, i80* @i80_s + ret void +} + +define void @i81_ls(i81 %x) nounwind { + store i81 %x, i81* @i81_s + ret void +} + +define void @i82_ls(i82 %x) nounwind { + store i82 %x, i82* @i82_s + ret void +} + +define void @i83_ls(i83 %x) nounwind { + store i83 %x, i83* @i83_s + ret void +} + +define void @i84_ls(i84 %x) nounwind { + store i84 %x, i84* @i84_s + ret void +} + +define void @i85_ls(i85 %x) nounwind { + store i85 %x, i85* @i85_s + ret void +} + +define void @i86_ls(i86 %x) nounwind { + store i86 %x, i86* @i86_s + ret void +} + +define void @i87_ls(i87 %x) nounwind { + store i87 %x, i87* @i87_s + ret void +} + +define void @i88_ls(i88 %x) nounwind { + store i88 %x, i88* @i88_s + ret void +} + +define void @i89_ls(i89 %x) nounwind { + store i89 %x, i89* @i89_s + ret void +} + +define void @i90_ls(i90 %x) nounwind { + store i90 %x, i90* @i90_s + ret void +} + +define void @i91_ls(i91 %x) nounwind { + store i91 %x, i91* @i91_s + ret void +} + +define void @i92_ls(i92 %x) nounwind { + store i92 %x, i92* @i92_s + ret void +} + +define void @i93_ls(i93 %x) nounwind { + store i93 %x, i93* @i93_s + ret void +} + +define void @i94_ls(i94 %x) nounwind { + store i94 %x, i94* @i94_s + ret void +} + +define void @i95_ls(i95 %x) nounwind { + store i95 %x, i95* @i95_s + ret void +} + +define void @i96_ls(i96 %x) nounwind { + store i96 %x, i96* @i96_s + ret void +} + +define void @i97_ls(i97 %x) nounwind { + store i97 %x, i97* @i97_s + ret void +} + +define void @i98_ls(i98 %x) nounwind { + store i98 %x, i98* @i98_s + ret void +} + +define void @i99_ls(i99 %x) nounwind { + store i99 %x, i99* @i99_s + ret void +} + +define void @i100_ls(i100 %x) nounwind { + store i100 %x, i100* @i100_s + ret void +} + +define void @i101_ls(i101 %x) nounwind { + store i101 %x, i101* @i101_s + ret void +} + +define void @i102_ls(i102 %x) nounwind { + store i102 %x, i102* @i102_s + ret void +} + +define void @i103_ls(i103 %x) nounwind { + store i103 %x, i103* @i103_s + ret void +} + +define void @i104_ls(i104 %x) nounwind { + store i104 %x, i104* @i104_s + ret void +} + +define void @i105_ls(i105 %x) nounwind { + store i105 %x, i105* @i105_s + ret void +} + +define void @i106_ls(i106 %x) nounwind { + store i106 %x, i106* @i106_s + ret void +} + +define void @i107_ls(i107 %x) nounwind { + store i107 %x, i107* @i107_s + ret void +} + +define void @i108_ls(i108 %x) nounwind { + store i108 %x, i108* @i108_s + ret void +} + +define void @i109_ls(i109 %x) nounwind { + store i109 %x, i109* @i109_s + ret void +} + +define void @i110_ls(i110 %x) nounwind { + store i110 %x, i110* @i110_s + ret void +} + +define void @i111_ls(i111 %x) nounwind { + store i111 %x, i111* @i111_s + ret void +} + +define void @i112_ls(i112 %x) nounwind { + store i112 %x, i112* @i112_s + ret void +} + +define void @i113_ls(i113 %x) nounwind { + store i113 %x, i113* @i113_s + ret void +} + +define void @i114_ls(i114 %x) nounwind { + store i114 %x, i114* @i114_s + ret void +} + +define void @i115_ls(i115 %x) nounwind { + store i115 %x, i115* @i115_s + ret void +} + +define void @i116_ls(i116 %x) nounwind { + store i116 %x, i116* @i116_s + ret void +} + +define void @i117_ls(i117 %x) nounwind { + store i117 %x, i117* @i117_s + ret void +} + +define void @i118_ls(i118 %x) nounwind { + store i118 %x, i118* @i118_s + ret void +} + +define void @i119_ls(i119 %x) nounwind { + store i119 %x, i119* @i119_s + ret void +} + +define void @i120_ls(i120 %x) nounwind { + store i120 %x, i120* @i120_s + ret void +} + +define void @i121_ls(i121 %x) nounwind { + store i121 %x, i121* @i121_s + ret void +} + +define void @i122_ls(i122 %x) nounwind { + store i122 %x, i122* @i122_s + ret void +} + +define void @i123_ls(i123 %x) nounwind { + store i123 %x, i123* @i123_s + ret void +} + +define void @i124_ls(i124 %x) nounwind { + store i124 %x, i124* @i124_s + ret void +} + +define void @i125_ls(i125 %x) nounwind { + store i125 %x, i125* @i125_s + ret void +} + +define void @i126_ls(i126 %x) nounwind { + store i126 %x, i126* @i126_s + ret void +} + +define void @i127_ls(i127 %x) nounwind { + store i127 %x, i127* @i127_s + ret void +} + +define void @i128_ls(i128 %x) nounwind { + store i128 %x, i128* @i128_s + ret void +} + +define void @i129_ls(i129 %x) nounwind { + store i129 %x, i129* @i129_s + ret void +} + +define void @i130_ls(i130 %x) nounwind { + store i130 %x, i130* @i130_s + ret void +} + +define void @i131_ls(i131 %x) nounwind { + store i131 %x, i131* @i131_s + ret void +} + +define void @i132_ls(i132 %x) nounwind { + store i132 %x, i132* @i132_s + ret void +} + +define void @i133_ls(i133 %x) nounwind { + store i133 %x, i133* @i133_s + ret void +} + +define void @i134_ls(i134 %x) nounwind { + store i134 %x, i134* @i134_s + ret void +} + +define void @i135_ls(i135 %x) nounwind { + store i135 %x, i135* @i135_s + ret void +} + +define void @i136_ls(i136 %x) nounwind { + store i136 %x, i136* @i136_s + ret void +} + +define void @i137_ls(i137 %x) nounwind { + store i137 %x, i137* @i137_s + ret void +} + +define void @i138_ls(i138 %x) nounwind { + store i138 %x, i138* @i138_s + ret void +} + +define void @i139_ls(i139 %x) nounwind { + store i139 %x, i139* @i139_s + ret void +} + +define void @i140_ls(i140 %x) nounwind { + store i140 %x, i140* @i140_s + ret void +} + +define void @i141_ls(i141 %x) nounwind { + store i141 %x, i141* @i141_s + ret void +} + +define void @i142_ls(i142 %x) nounwind { + store i142 %x, i142* @i142_s + ret void +} + +define void @i143_ls(i143 %x) nounwind { + store i143 %x, i143* @i143_s + ret void +} + +define void @i144_ls(i144 %x) nounwind { + store i144 %x, i144* @i144_s + ret void +} + +define void @i145_ls(i145 %x) nounwind { + store i145 %x, i145* @i145_s + ret void +} + +define void @i146_ls(i146 %x) nounwind { + store i146 %x, i146* @i146_s + ret void +} + +define void @i147_ls(i147 %x) nounwind { + store i147 %x, i147* @i147_s + ret void +} + +define void @i148_ls(i148 %x) nounwind { + store i148 %x, i148* @i148_s + ret void +} + +define void @i149_ls(i149 %x) nounwind { + store i149 %x, i149* @i149_s + ret void +} + +define void @i150_ls(i150 %x) nounwind { + store i150 %x, i150* @i150_s + ret void +} + +define void @i151_ls(i151 %x) nounwind { + store i151 %x, i151* @i151_s + ret void +} + +define void @i152_ls(i152 %x) nounwind { + store i152 %x, i152* @i152_s + ret void +} + +define void @i153_ls(i153 %x) nounwind { + store i153 %x, i153* @i153_s + ret void +} + +define void @i154_ls(i154 %x) nounwind { + store i154 %x, i154* @i154_s + ret void +} + +define void @i155_ls(i155 %x) nounwind { + store i155 %x, i155* @i155_s + ret void +} + +define void @i156_ls(i156 %x) nounwind { + store i156 %x, i156* @i156_s + ret void +} + +define void @i157_ls(i157 %x) nounwind { + store i157 %x, i157* @i157_s + ret void +} + +define void @i158_ls(i158 %x) nounwind { + store i158 %x, i158* @i158_s + ret void +} + +define void @i159_ls(i159 %x) nounwind { + store i159 %x, i159* @i159_s + ret void +} + +define void @i160_ls(i160 %x) nounwind { + store i160 %x, i160* @i160_s + ret void +} + +define void @i161_ls(i161 %x) nounwind { + store i161 %x, i161* @i161_s + ret void +} + +define void @i162_ls(i162 %x) nounwind { + store i162 %x, i162* @i162_s + ret void +} + +define void @i163_ls(i163 %x) nounwind { + store i163 %x, i163* @i163_s + ret void +} + +define void @i164_ls(i164 %x) nounwind { + store i164 %x, i164* @i164_s + ret void +} + +define void @i165_ls(i165 %x) nounwind { + store i165 %x, i165* @i165_s + ret void +} + +define void @i166_ls(i166 %x) nounwind { + store i166 %x, i166* @i166_s + ret void +} + +define void @i167_ls(i167 %x) nounwind { + store i167 %x, i167* @i167_s + ret void +} + +define void @i168_ls(i168 %x) nounwind { + store i168 %x, i168* @i168_s + ret void +} + +define void @i169_ls(i169 %x) nounwind { + store i169 %x, i169* @i169_s + ret void +} + +define void @i170_ls(i170 %x) nounwind { + store i170 %x, i170* @i170_s + ret void +} + +define void @i171_ls(i171 %x) nounwind { + store i171 %x, i171* @i171_s + ret void +} + +define void @i172_ls(i172 %x) nounwind { + store i172 %x, i172* @i172_s + ret void +} + +define void @i173_ls(i173 %x) nounwind { + store i173 %x, i173* @i173_s + ret void +} + +define void @i174_ls(i174 %x) nounwind { + store i174 %x, i174* @i174_s + ret void +} + +define void @i175_ls(i175 %x) nounwind { + store i175 %x, i175* @i175_s + ret void +} + +define void @i176_ls(i176 %x) nounwind { + store i176 %x, i176* @i176_s + ret void +} + +define void @i177_ls(i177 %x) nounwind { + store i177 %x, i177* @i177_s + ret void +} + +define void @i178_ls(i178 %x) nounwind { + store i178 %x, i178* @i178_s + ret void +} + +define void @i179_ls(i179 %x) nounwind { + store i179 %x, i179* @i179_s + ret void +} + +define void @i180_ls(i180 %x) nounwind { + store i180 %x, i180* @i180_s + ret void +} + +define void @i181_ls(i181 %x) nounwind { + store i181 %x, i181* @i181_s + ret void +} + +define void @i182_ls(i182 %x) nounwind { + store i182 %x, i182* @i182_s + ret void +} + +define void @i183_ls(i183 %x) nounwind { + store i183 %x, i183* @i183_s + ret void +} + +define void @i184_ls(i184 %x) nounwind { + store i184 %x, i184* @i184_s + ret void +} + +define void @i185_ls(i185 %x) nounwind { + store i185 %x, i185* @i185_s + ret void +} + +define void @i186_ls(i186 %x) nounwind { + store i186 %x, i186* @i186_s + ret void +} + +define void @i187_ls(i187 %x) nounwind { + store i187 %x, i187* @i187_s + ret void +} + +define void @i188_ls(i188 %x) nounwind { + store i188 %x, i188* @i188_s + ret void +} + +define void @i189_ls(i189 %x) nounwind { + store i189 %x, i189* @i189_s + ret void +} + +define void @i190_ls(i190 %x) nounwind { + store i190 %x, i190* @i190_s + ret void +} + +define void @i191_ls(i191 %x) nounwind { + store i191 %x, i191* @i191_s + ret void +} + +define void @i192_ls(i192 %x) nounwind { + store i192 %x, i192* @i192_s + ret void +} + +define void @i193_ls(i193 %x) nounwind { + store i193 %x, i193* @i193_s + ret void +} + +define void @i194_ls(i194 %x) nounwind { + store i194 %x, i194* @i194_s + ret void +} + +define void @i195_ls(i195 %x) nounwind { + store i195 %x, i195* @i195_s + ret void +} + +define void @i196_ls(i196 %x) nounwind { + store i196 %x, i196* @i196_s + ret void +} + +define void @i197_ls(i197 %x) nounwind { + store i197 %x, i197* @i197_s + ret void +} + +define void @i198_ls(i198 %x) nounwind { + store i198 %x, i198* @i198_s + ret void +} + +define void @i199_ls(i199 %x) nounwind { + store i199 %x, i199* @i199_s + ret void +} + +define void @i200_ls(i200 %x) nounwind { + store i200 %x, i200* @i200_s + ret void +} + +define void @i201_ls(i201 %x) nounwind { + store i201 %x, i201* @i201_s + ret void +} + +define void @i202_ls(i202 %x) nounwind { + store i202 %x, i202* @i202_s + ret void +} + +define void @i203_ls(i203 %x) nounwind { + store i203 %x, i203* @i203_s + ret void +} + +define void @i204_ls(i204 %x) nounwind { + store i204 %x, i204* @i204_s + ret void +} + +define void @i205_ls(i205 %x) nounwind { + store i205 %x, i205* @i205_s + ret void +} + +define void @i206_ls(i206 %x) nounwind { + store i206 %x, i206* @i206_s + ret void +} + +define void @i207_ls(i207 %x) nounwind { + store i207 %x, i207* @i207_s + ret void +} + +define void @i208_ls(i208 %x) nounwind { + store i208 %x, i208* @i208_s + ret void +} + +define void @i209_ls(i209 %x) nounwind { + store i209 %x, i209* @i209_s + ret void +} + +define void @i210_ls(i210 %x) nounwind { + store i210 %x, i210* @i210_s + ret void +} + +define void @i211_ls(i211 %x) nounwind { + store i211 %x, i211* @i211_s + ret void +} + +define void @i212_ls(i212 %x) nounwind { + store i212 %x, i212* @i212_s + ret void +} + +define void @i213_ls(i213 %x) nounwind { + store i213 %x, i213* @i213_s + ret void +} + +define void @i214_ls(i214 %x) nounwind { + store i214 %x, i214* @i214_s + ret void +} + +define void @i215_ls(i215 %x) nounwind { + store i215 %x, i215* @i215_s + ret void +} + +define void @i216_ls(i216 %x) nounwind { + store i216 %x, i216* @i216_s + ret void +} + +define void @i217_ls(i217 %x) nounwind { + store i217 %x, i217* @i217_s + ret void +} + +define void @i218_ls(i218 %x) nounwind { + store i218 %x, i218* @i218_s + ret void +} + +define void @i219_ls(i219 %x) nounwind { + store i219 %x, i219* @i219_s + ret void +} + +define void @i220_ls(i220 %x) nounwind { + store i220 %x, i220* @i220_s + ret void +} + +define void @i221_ls(i221 %x) nounwind { + store i221 %x, i221* @i221_s + ret void +} + +define void @i222_ls(i222 %x) nounwind { + store i222 %x, i222* @i222_s + ret void +} + +define void @i223_ls(i223 %x) nounwind { + store i223 %x, i223* @i223_s + ret void +} + +define void @i224_ls(i224 %x) nounwind { + store i224 %x, i224* @i224_s + ret void +} + +define void @i225_ls(i225 %x) nounwind { + store i225 %x, i225* @i225_s + ret void +} + +define void @i226_ls(i226 %x) nounwind { + store i226 %x, i226* @i226_s + ret void +} + +define void @i227_ls(i227 %x) nounwind { + store i227 %x, i227* @i227_s + ret void +} + +define void @i228_ls(i228 %x) nounwind { + store i228 %x, i228* @i228_s + ret void +} + +define void @i229_ls(i229 %x) nounwind { + store i229 %x, i229* @i229_s + ret void +} + +define void @i230_ls(i230 %x) nounwind { + store i230 %x, i230* @i230_s + ret void +} + +define void @i231_ls(i231 %x) nounwind { + store i231 %x, i231* @i231_s + ret void +} + +define void @i232_ls(i232 %x) nounwind { + store i232 %x, i232* @i232_s + ret void +} + +define void @i233_ls(i233 %x) nounwind { + store i233 %x, i233* @i233_s + ret void +} + +define void @i234_ls(i234 %x) nounwind { + store i234 %x, i234* @i234_s + ret void +} + +define void @i235_ls(i235 %x) nounwind { + store i235 %x, i235* @i235_s + ret void +} + +define void @i236_ls(i236 %x) nounwind { + store i236 %x, i236* @i236_s + ret void +} + +define void @i237_ls(i237 %x) nounwind { + store i237 %x, i237* @i237_s + ret void +} + +define void @i238_ls(i238 %x) nounwind { + store i238 %x, i238* @i238_s + ret void +} + +define void @i239_ls(i239 %x) nounwind { + store i239 %x, i239* @i239_s + ret void +} + +define void @i240_ls(i240 %x) nounwind { + store i240 %x, i240* @i240_s + ret void +} + +define void @i241_ls(i241 %x) nounwind { + store i241 %x, i241* @i241_s + ret void +} + +define void @i242_ls(i242 %x) nounwind { + store i242 %x, i242* @i242_s + ret void +} + +define void @i243_ls(i243 %x) nounwind { + store i243 %x, i243* @i243_s + ret void +} + +define void @i244_ls(i244 %x) nounwind { + store i244 %x, i244* @i244_s + ret void +} + +define void @i245_ls(i245 %x) nounwind { + store i245 %x, i245* @i245_s + ret void +} + +define void @i246_ls(i246 %x) nounwind { + store i246 %x, i246* @i246_s + ret void +} + +define void @i247_ls(i247 %x) nounwind { + store i247 %x, i247* @i247_s + ret void +} + +define void @i248_ls(i248 %x) nounwind { + store i248 %x, i248* @i248_s + ret void +} + +define void @i249_ls(i249 %x) nounwind { + store i249 %x, i249* @i249_s + ret void +} + +define void @i250_ls(i250 %x) nounwind { + store i250 %x, i250* @i250_s + ret void +} + +define void @i251_ls(i251 %x) nounwind { + store i251 %x, i251* @i251_s + ret void +} + +define void @i252_ls(i252 %x) nounwind { + store i252 %x, i252* @i252_s + ret void +} + +define void @i253_ls(i253 %x) nounwind { + store i253 %x, i253* @i253_s + ret void +} + +define void @i254_ls(i254 %x) nounwind { + store i254 %x, i254* @i254_s + ret void +} + +define void @i255_ls(i255 %x) nounwind { + store i255 %x, i255* @i255_s + ret void +} + +define void @i256_ls(i256 %x) nounwind { + store i256 %x, i256* @i256_s + ret void +} diff --git a/test/CodeGen/Generic/APIntSextParam.ll b/test/CodeGen/Generic/APIntSextParam.ll new file mode 100644 index 0000000..acc0eeb --- /dev/null +++ b/test/CodeGen/Generic/APIntSextParam.ll @@ -0,0 +1,1537 @@ +; RUN: llc < %s > %t +@i1_s = external global i1 ; <i1*> [#uses=1] +@i2_s = external global i2 ; <i2*> [#uses=1] +@i3_s = external global i3 ; <i3*> [#uses=1] +@i4_s = external global i4 ; <i4*> [#uses=1] +@i5_s = external global i5 ; <i5*> [#uses=1] +@i6_s = external global i6 ; <i6*> [#uses=1] +@i7_s = external global i7 ; <i7*> [#uses=1] +@i8_s = external global i8 ; <i8*> [#uses=1] +@i9_s = external global i9 ; <i9*> [#uses=1] +@i10_s = external global i10 ; <i10*> [#uses=1] +@i11_s = external global i11 ; <i11*> [#uses=1] +@i12_s = external global i12 ; <i12*> [#uses=1] +@i13_s = external global i13 ; <i13*> [#uses=1] +@i14_s = external global i14 ; <i14*> [#uses=1] +@i15_s = external global i15 ; <i15*> [#uses=1] +@i16_s = external global i16 ; <i16*> [#uses=1] +@i17_s = external global i17 ; <i17*> [#uses=1] +@i18_s = external global i18 ; <i18*> [#uses=1] +@i19_s = external global i19 ; <i19*> [#uses=1] +@i20_s = external global i20 ; <i20*> [#uses=1] +@i21_s = external global i21 ; <i21*> [#uses=1] +@i22_s = external global i22 ; <i22*> [#uses=1] +@i23_s = external global i23 ; <i23*> [#uses=1] +@i24_s = external global i24 ; <i24*> [#uses=1] +@i25_s = external global i25 ; <i25*> [#uses=1] +@i26_s = external global i26 ; <i26*> [#uses=1] +@i27_s = external global i27 ; <i27*> [#uses=1] +@i28_s = external global i28 ; <i28*> [#uses=1] +@i29_s = external global i29 ; <i29*> [#uses=1] +@i30_s = external global i30 ; <i30*> [#uses=1] +@i31_s = external global i31 ; <i31*> [#uses=1] +@i32_s = external global i32 ; <i32*> [#uses=1] +@i33_s = external global i33 ; <i33*> [#uses=1] +@i34_s = external global i34 ; <i34*> [#uses=1] +@i35_s = external global i35 ; <i35*> [#uses=1] +@i36_s = external global i36 ; <i36*> [#uses=1] +@i37_s = external global i37 ; <i37*> [#uses=1] +@i38_s = external global i38 ; <i38*> [#uses=1] +@i39_s = external global i39 ; <i39*> [#uses=1] +@i40_s = external global i40 ; <i40*> [#uses=1] +@i41_s = external global i41 ; <i41*> [#uses=1] +@i42_s = external global i42 ; <i42*> [#uses=1] +@i43_s = external global i43 ; <i43*> [#uses=1] +@i44_s = external global i44 ; <i44*> [#uses=1] +@i45_s = external global i45 ; <i45*> [#uses=1] +@i46_s = external global i46 ; <i46*> [#uses=1] +@i47_s = external global i47 ; <i47*> [#uses=1] +@i48_s = external global i48 ; <i48*> [#uses=1] +@i49_s = external global i49 ; <i49*> [#uses=1] +@i50_s = external global i50 ; <i50*> [#uses=1] +@i51_s = external global i51 ; <i51*> [#uses=1] +@i52_s = external global i52 ; <i52*> [#uses=1] +@i53_s = external global i53 ; <i53*> [#uses=1] +@i54_s = external global i54 ; <i54*> [#uses=1] +@i55_s = external global i55 ; <i55*> [#uses=1] +@i56_s = external global i56 ; <i56*> [#uses=1] +@i57_s = external global i57 ; <i57*> [#uses=1] +@i58_s = external global i58 ; <i58*> [#uses=1] +@i59_s = external global i59 ; <i59*> [#uses=1] +@i60_s = external global i60 ; <i60*> [#uses=1] +@i61_s = external global i61 ; <i61*> [#uses=1] +@i62_s = external global i62 ; <i62*> [#uses=1] +@i63_s = external global i63 ; <i63*> [#uses=1] +@i64_s = external global i64 ; <i64*> [#uses=1] +@i65_s = external global i65 ; <i65*> [#uses=1] +@i66_s = external global i66 ; <i66*> [#uses=1] +@i67_s = external global i67 ; <i67*> [#uses=1] +@i68_s = external global i68 ; <i68*> [#uses=1] +@i69_s = external global i69 ; <i69*> [#uses=1] +@i70_s = external global i70 ; <i70*> [#uses=1] +@i71_s = external global i71 ; <i71*> [#uses=1] +@i72_s = external global i72 ; <i72*> [#uses=1] +@i73_s = external global i73 ; <i73*> [#uses=1] +@i74_s = external global i74 ; <i74*> [#uses=1] +@i75_s = external global i75 ; <i75*> [#uses=1] +@i76_s = external global i76 ; <i76*> [#uses=1] +@i77_s = external global i77 ; <i77*> [#uses=1] +@i78_s = external global i78 ; <i78*> [#uses=1] +@i79_s = external global i79 ; <i79*> [#uses=1] +@i80_s = external global i80 ; <i80*> [#uses=1] +@i81_s = external global i81 ; <i81*> [#uses=1] +@i82_s = external global i82 ; <i82*> [#uses=1] +@i83_s = external global i83 ; <i83*> [#uses=1] +@i84_s = external global i84 ; <i84*> [#uses=1] +@i85_s = external global i85 ; <i85*> [#uses=1] +@i86_s = external global i86 ; <i86*> [#uses=1] +@i87_s = external global i87 ; <i87*> [#uses=1] +@i88_s = external global i88 ; <i88*> [#uses=1] +@i89_s = external global i89 ; <i89*> [#uses=1] +@i90_s = external global i90 ; <i90*> [#uses=1] +@i91_s = external global i91 ; <i91*> [#uses=1] +@i92_s = external global i92 ; <i92*> [#uses=1] +@i93_s = external global i93 ; <i93*> [#uses=1] +@i94_s = external global i94 ; <i94*> [#uses=1] +@i95_s = external global i95 ; <i95*> [#uses=1] +@i96_s = external global i96 ; <i96*> [#uses=1] +@i97_s = external global i97 ; <i97*> [#uses=1] +@i98_s = external global i98 ; <i98*> [#uses=1] +@i99_s = external global i99 ; <i99*> [#uses=1] +@i100_s = external global i100 ; <i100*> [#uses=1] +@i101_s = external global i101 ; <i101*> [#uses=1] +@i102_s = external global i102 ; <i102*> [#uses=1] +@i103_s = external global i103 ; <i103*> [#uses=1] +@i104_s = external global i104 ; <i104*> [#uses=1] +@i105_s = external global i105 ; <i105*> [#uses=1] +@i106_s = external global i106 ; <i106*> [#uses=1] +@i107_s = external global i107 ; <i107*> [#uses=1] +@i108_s = external global i108 ; <i108*> [#uses=1] +@i109_s = external global i109 ; <i109*> [#uses=1] +@i110_s = external global i110 ; <i110*> [#uses=1] +@i111_s = external global i111 ; <i111*> [#uses=1] +@i112_s = external global i112 ; <i112*> [#uses=1] +@i113_s = external global i113 ; <i113*> [#uses=1] +@i114_s = external global i114 ; <i114*> [#uses=1] +@i115_s = external global i115 ; <i115*> [#uses=1] +@i116_s = external global i116 ; <i116*> [#uses=1] +@i117_s = external global i117 ; <i117*> [#uses=1] +@i118_s = external global i118 ; <i118*> [#uses=1] +@i119_s = external global i119 ; <i119*> [#uses=1] +@i120_s = external global i120 ; <i120*> [#uses=1] +@i121_s = external global i121 ; <i121*> [#uses=1] +@i122_s = external global i122 ; <i122*> [#uses=1] +@i123_s = external global i123 ; <i123*> [#uses=1] +@i124_s = external global i124 ; <i124*> [#uses=1] +@i125_s = external global i125 ; <i125*> [#uses=1] +@i126_s = external global i126 ; <i126*> [#uses=1] +@i127_s = external global i127 ; <i127*> [#uses=1] +@i128_s = external global i128 ; <i128*> [#uses=1] +@i129_s = external global i129 ; <i129*> [#uses=1] +@i130_s = external global i130 ; <i130*> [#uses=1] +@i131_s = external global i131 ; <i131*> [#uses=1] +@i132_s = external global i132 ; <i132*> [#uses=1] +@i133_s = external global i133 ; <i133*> [#uses=1] +@i134_s = external global i134 ; <i134*> [#uses=1] +@i135_s = external global i135 ; <i135*> [#uses=1] +@i136_s = external global i136 ; <i136*> [#uses=1] +@i137_s = external global i137 ; <i137*> [#uses=1] +@i138_s = external global i138 ; <i138*> [#uses=1] +@i139_s = external global i139 ; <i139*> [#uses=1] +@i140_s = external global i140 ; <i140*> [#uses=1] +@i141_s = external global i141 ; <i141*> [#uses=1] +@i142_s = external global i142 ; <i142*> [#uses=1] +@i143_s = external global i143 ; <i143*> [#uses=1] +@i144_s = external global i144 ; <i144*> [#uses=1] +@i145_s = external global i145 ; <i145*> [#uses=1] +@i146_s = external global i146 ; <i146*> [#uses=1] +@i147_s = external global i147 ; <i147*> [#uses=1] +@i148_s = external global i148 ; <i148*> [#uses=1] +@i149_s = external global i149 ; <i149*> [#uses=1] +@i150_s = external global i150 ; <i150*> [#uses=1] +@i151_s = external global i151 ; <i151*> [#uses=1] +@i152_s = external global i152 ; <i152*> [#uses=1] +@i153_s = external global i153 ; <i153*> [#uses=1] +@i154_s = external global i154 ; <i154*> [#uses=1] +@i155_s = external global i155 ; <i155*> [#uses=1] +@i156_s = external global i156 ; <i156*> [#uses=1] +@i157_s = external global i157 ; <i157*> [#uses=1] +@i158_s = external global i158 ; <i158*> [#uses=1] +@i159_s = external global i159 ; <i159*> [#uses=1] +@i160_s = external global i160 ; <i160*> [#uses=1] +@i161_s = external global i161 ; <i161*> [#uses=1] +@i162_s = external global i162 ; <i162*> [#uses=1] +@i163_s = external global i163 ; <i163*> [#uses=1] +@i164_s = external global i164 ; <i164*> [#uses=1] +@i165_s = external global i165 ; <i165*> [#uses=1] +@i166_s = external global i166 ; <i166*> [#uses=1] +@i167_s = external global i167 ; <i167*> [#uses=1] +@i168_s = external global i168 ; <i168*> [#uses=1] +@i169_s = external global i169 ; <i169*> [#uses=1] +@i170_s = external global i170 ; <i170*> [#uses=1] +@i171_s = external global i171 ; <i171*> [#uses=1] +@i172_s = external global i172 ; <i172*> [#uses=1] +@i173_s = external global i173 ; <i173*> [#uses=1] +@i174_s = external global i174 ; <i174*> [#uses=1] +@i175_s = external global i175 ; <i175*> [#uses=1] +@i176_s = external global i176 ; <i176*> [#uses=1] +@i177_s = external global i177 ; <i177*> [#uses=1] +@i178_s = external global i178 ; <i178*> [#uses=1] +@i179_s = external global i179 ; <i179*> [#uses=1] +@i180_s = external global i180 ; <i180*> [#uses=1] +@i181_s = external global i181 ; <i181*> [#uses=1] +@i182_s = external global i182 ; <i182*> [#uses=1] +@i183_s = external global i183 ; <i183*> [#uses=1] +@i184_s = external global i184 ; <i184*> [#uses=1] +@i185_s = external global i185 ; <i185*> [#uses=1] +@i186_s = external global i186 ; <i186*> [#uses=1] +@i187_s = external global i187 ; <i187*> [#uses=1] +@i188_s = external global i188 ; <i188*> [#uses=1] +@i189_s = external global i189 ; <i189*> [#uses=1] +@i190_s = external global i190 ; <i190*> [#uses=1] +@i191_s = external global i191 ; <i191*> [#uses=1] +@i192_s = external global i192 ; <i192*> [#uses=1] +@i193_s = external global i193 ; <i193*> [#uses=1] +@i194_s = external global i194 ; <i194*> [#uses=1] +@i195_s = external global i195 ; <i195*> [#uses=1] +@i196_s = external global i196 ; <i196*> [#uses=1] +@i197_s = external global i197 ; <i197*> [#uses=1] +@i198_s = external global i198 ; <i198*> [#uses=1] +@i199_s = external global i199 ; <i199*> [#uses=1] +@i200_s = external global i200 ; <i200*> [#uses=1] +@i201_s = external global i201 ; <i201*> [#uses=1] +@i202_s = external global i202 ; <i202*> [#uses=1] +@i203_s = external global i203 ; <i203*> [#uses=1] +@i204_s = external global i204 ; <i204*> [#uses=1] +@i205_s = external global i205 ; <i205*> [#uses=1] +@i206_s = external global i206 ; <i206*> [#uses=1] +@i207_s = external global i207 ; <i207*> [#uses=1] +@i208_s = external global i208 ; <i208*> [#uses=1] +@i209_s = external global i209 ; <i209*> [#uses=1] +@i210_s = external global i210 ; <i210*> [#uses=1] +@i211_s = external global i211 ; <i211*> [#uses=1] +@i212_s = external global i212 ; <i212*> [#uses=1] +@i213_s = external global i213 ; <i213*> [#uses=1] +@i214_s = external global i214 ; <i214*> [#uses=1] +@i215_s = external global i215 ; <i215*> [#uses=1] +@i216_s = external global i216 ; <i216*> [#uses=1] +@i217_s = external global i217 ; <i217*> [#uses=1] +@i218_s = external global i218 ; <i218*> [#uses=1] +@i219_s = external global i219 ; <i219*> [#uses=1] +@i220_s = external global i220 ; <i220*> [#uses=1] +@i221_s = external global i221 ; <i221*> [#uses=1] +@i222_s = external global i222 ; <i222*> [#uses=1] +@i223_s = external global i223 ; <i223*> [#uses=1] +@i224_s = external global i224 ; <i224*> [#uses=1] +@i225_s = external global i225 ; <i225*> [#uses=1] +@i226_s = external global i226 ; <i226*> [#uses=1] +@i227_s = external global i227 ; <i227*> [#uses=1] +@i228_s = external global i228 ; <i228*> [#uses=1] +@i229_s = external global i229 ; <i229*> [#uses=1] +@i230_s = external global i230 ; <i230*> [#uses=1] +@i231_s = external global i231 ; <i231*> [#uses=1] +@i232_s = external global i232 ; <i232*> [#uses=1] +@i233_s = external global i233 ; <i233*> [#uses=1] +@i234_s = external global i234 ; <i234*> [#uses=1] +@i235_s = external global i235 ; <i235*> [#uses=1] +@i236_s = external global i236 ; <i236*> [#uses=1] +@i237_s = external global i237 ; <i237*> [#uses=1] +@i238_s = external global i238 ; <i238*> [#uses=1] +@i239_s = external global i239 ; <i239*> [#uses=1] +@i240_s = external global i240 ; <i240*> [#uses=1] +@i241_s = external global i241 ; <i241*> [#uses=1] +@i242_s = external global i242 ; <i242*> [#uses=1] +@i243_s = external global i243 ; <i243*> [#uses=1] +@i244_s = external global i244 ; <i244*> [#uses=1] +@i245_s = external global i245 ; <i245*> [#uses=1] +@i246_s = external global i246 ; <i246*> [#uses=1] +@i247_s = external global i247 ; <i247*> [#uses=1] +@i248_s = external global i248 ; <i248*> [#uses=1] +@i249_s = external global i249 ; <i249*> [#uses=1] +@i250_s = external global i250 ; <i250*> [#uses=1] +@i251_s = external global i251 ; <i251*> [#uses=1] +@i252_s = external global i252 ; <i252*> [#uses=1] +@i253_s = external global i253 ; <i253*> [#uses=1] +@i254_s = external global i254 ; <i254*> [#uses=1] +@i255_s = external global i255 ; <i255*> [#uses=1] +@i256_s = external global i256 ; <i256*> [#uses=1] + +define void @i1_ls(i1 signext %x) nounwind { + store i1 %x, i1* @i1_s + ret void +} + +define void @i2_ls(i2 signext %x) nounwind { + store i2 %x, i2* @i2_s + ret void +} + +define void @i3_ls(i3 signext %x) nounwind { + store i3 %x, i3* @i3_s + ret void +} + +define void @i4_ls(i4 signext %x) nounwind { + store i4 %x, i4* @i4_s + ret void +} + +define void @i5_ls(i5 signext %x) nounwind { + store i5 %x, i5* @i5_s + ret void +} + +define void @i6_ls(i6 signext %x) nounwind { + store i6 %x, i6* @i6_s + ret void +} + +define void @i7_ls(i7 signext %x) nounwind { + store i7 %x, i7* @i7_s + ret void +} + +define void @i8_ls(i8 signext %x) nounwind { + store i8 %x, i8* @i8_s + ret void +} + +define void @i9_ls(i9 signext %x) nounwind { + store i9 %x, i9* @i9_s + ret void +} + +define void @i10_ls(i10 signext %x) nounwind { + store i10 %x, i10* @i10_s + ret void +} + +define void @i11_ls(i11 signext %x) nounwind { + store i11 %x, i11* @i11_s + ret void +} + +define void @i12_ls(i12 signext %x) nounwind { + store i12 %x, i12* @i12_s + ret void +} + +define void @i13_ls(i13 signext %x) nounwind { + store i13 %x, i13* @i13_s + ret void +} + +define void @i14_ls(i14 signext %x) nounwind { + store i14 %x, i14* @i14_s + ret void +} + +define void @i15_ls(i15 signext %x) nounwind { + store i15 %x, i15* @i15_s + ret void +} + +define void @i16_ls(i16 signext %x) nounwind { + store i16 %x, i16* @i16_s + ret void +} + +define void @i17_ls(i17 signext %x) nounwind { + store i17 %x, i17* @i17_s + ret void +} + +define void @i18_ls(i18 signext %x) nounwind { + store i18 %x, i18* @i18_s + ret void +} + +define void @i19_ls(i19 signext %x) nounwind { + store i19 %x, i19* @i19_s + ret void +} + +define void @i20_ls(i20 signext %x) nounwind { + store i20 %x, i20* @i20_s + ret void +} + +define void @i21_ls(i21 signext %x) nounwind { + store i21 %x, i21* @i21_s + ret void +} + +define void @i22_ls(i22 signext %x) nounwind { + store i22 %x, i22* @i22_s + ret void +} + +define void @i23_ls(i23 signext %x) nounwind { + store i23 %x, i23* @i23_s + ret void +} + +define void @i24_ls(i24 signext %x) nounwind { + store i24 %x, i24* @i24_s + ret void +} + +define void @i25_ls(i25 signext %x) nounwind { + store i25 %x, i25* @i25_s + ret void +} + +define void @i26_ls(i26 signext %x) nounwind { + store i26 %x, i26* @i26_s + ret void +} + +define void @i27_ls(i27 signext %x) nounwind { + store i27 %x, i27* @i27_s + ret void +} + +define void @i28_ls(i28 signext %x) nounwind { + store i28 %x, i28* @i28_s + ret void +} + +define void @i29_ls(i29 signext %x) nounwind { + store i29 %x, i29* @i29_s + ret void +} + +define void @i30_ls(i30 signext %x) nounwind { + store i30 %x, i30* @i30_s + ret void +} + +define void @i31_ls(i31 signext %x) nounwind { + store i31 %x, i31* @i31_s + ret void +} + +define void @i32_ls(i32 signext %x) nounwind { + store i32 %x, i32* @i32_s + ret void +} + +define void @i33_ls(i33 signext %x) nounwind { + store i33 %x, i33* @i33_s + ret void +} + +define void @i34_ls(i34 signext %x) nounwind { + store i34 %x, i34* @i34_s + ret void +} + +define void @i35_ls(i35 signext %x) nounwind { + store i35 %x, i35* @i35_s + ret void +} + +define void @i36_ls(i36 signext %x) nounwind { + store i36 %x, i36* @i36_s + ret void +} + +define void @i37_ls(i37 signext %x) nounwind { + store i37 %x, i37* @i37_s + ret void +} + +define void @i38_ls(i38 signext %x) nounwind { + store i38 %x, i38* @i38_s + ret void +} + +define void @i39_ls(i39 signext %x) nounwind { + store i39 %x, i39* @i39_s + ret void +} + +define void @i40_ls(i40 signext %x) nounwind { + store i40 %x, i40* @i40_s + ret void +} + +define void @i41_ls(i41 signext %x) nounwind { + store i41 %x, i41* @i41_s + ret void +} + +define void @i42_ls(i42 signext %x) nounwind { + store i42 %x, i42* @i42_s + ret void +} + +define void @i43_ls(i43 signext %x) nounwind { + store i43 %x, i43* @i43_s + ret void +} + +define void @i44_ls(i44 signext %x) nounwind { + store i44 %x, i44* @i44_s + ret void +} + +define void @i45_ls(i45 signext %x) nounwind { + store i45 %x, i45* @i45_s + ret void +} + +define void @i46_ls(i46 signext %x) nounwind { + store i46 %x, i46* @i46_s + ret void +} + +define void @i47_ls(i47 signext %x) nounwind { + store i47 %x, i47* @i47_s + ret void +} + +define void @i48_ls(i48 signext %x) nounwind { + store i48 %x, i48* @i48_s + ret void +} + +define void @i49_ls(i49 signext %x) nounwind { + store i49 %x, i49* @i49_s + ret void +} + +define void @i50_ls(i50 signext %x) nounwind { + store i50 %x, i50* @i50_s + ret void +} + +define void @i51_ls(i51 signext %x) nounwind { + store i51 %x, i51* @i51_s + ret void +} + +define void @i52_ls(i52 signext %x) nounwind { + store i52 %x, i52* @i52_s + ret void +} + +define void @i53_ls(i53 signext %x) nounwind { + store i53 %x, i53* @i53_s + ret void +} + +define void @i54_ls(i54 signext %x) nounwind { + store i54 %x, i54* @i54_s + ret void +} + +define void @i55_ls(i55 signext %x) nounwind { + store i55 %x, i55* @i55_s + ret void +} + +define void @i56_ls(i56 signext %x) nounwind { + store i56 %x, i56* @i56_s + ret void +} + +define void @i57_ls(i57 signext %x) nounwind { + store i57 %x, i57* @i57_s + ret void +} + +define void @i58_ls(i58 signext %x) nounwind { + store i58 %x, i58* @i58_s + ret void +} + +define void @i59_ls(i59 signext %x) nounwind { + store i59 %x, i59* @i59_s + ret void +} + +define void @i60_ls(i60 signext %x) nounwind { + store i60 %x, i60* @i60_s + ret void +} + +define void @i61_ls(i61 signext %x) nounwind { + store i61 %x, i61* @i61_s + ret void +} + +define void @i62_ls(i62 signext %x) nounwind { + store i62 %x, i62* @i62_s + ret void +} + +define void @i63_ls(i63 signext %x) nounwind { + store i63 %x, i63* @i63_s + ret void +} + +define void @i64_ls(i64 signext %x) nounwind { + store i64 %x, i64* @i64_s + ret void +} + +define void @i65_ls(i65 signext %x) nounwind { + store i65 %x, i65* @i65_s + ret void +} + +define void @i66_ls(i66 signext %x) nounwind { + store i66 %x, i66* @i66_s + ret void +} + +define void @i67_ls(i67 signext %x) nounwind { + store i67 %x, i67* @i67_s + ret void +} + +define void @i68_ls(i68 signext %x) nounwind { + store i68 %x, i68* @i68_s + ret void +} + +define void @i69_ls(i69 signext %x) nounwind { + store i69 %x, i69* @i69_s + ret void +} + +define void @i70_ls(i70 signext %x) nounwind { + store i70 %x, i70* @i70_s + ret void +} + +define void @i71_ls(i71 signext %x) nounwind { + store i71 %x, i71* @i71_s + ret void +} + +define void @i72_ls(i72 signext %x) nounwind { + store i72 %x, i72* @i72_s + ret void +} + +define void @i73_ls(i73 signext %x) nounwind { + store i73 %x, i73* @i73_s + ret void +} + +define void @i74_ls(i74 signext %x) nounwind { + store i74 %x, i74* @i74_s + ret void +} + +define void @i75_ls(i75 signext %x) nounwind { + store i75 %x, i75* @i75_s + ret void +} + +define void @i76_ls(i76 signext %x) nounwind { + store i76 %x, i76* @i76_s + ret void +} + +define void @i77_ls(i77 signext %x) nounwind { + store i77 %x, i77* @i77_s + ret void +} + +define void @i78_ls(i78 signext %x) nounwind { + store i78 %x, i78* @i78_s + ret void +} + +define void @i79_ls(i79 signext %x) nounwind { + store i79 %x, i79* @i79_s + ret void +} + +define void @i80_ls(i80 signext %x) nounwind { + store i80 %x, i80* @i80_s + ret void +} + +define void @i81_ls(i81 signext %x) nounwind { + store i81 %x, i81* @i81_s + ret void +} + +define void @i82_ls(i82 signext %x) nounwind { + store i82 %x, i82* @i82_s + ret void +} + +define void @i83_ls(i83 signext %x) nounwind { + store i83 %x, i83* @i83_s + ret void +} + +define void @i84_ls(i84 signext %x) nounwind { + store i84 %x, i84* @i84_s + ret void +} + +define void @i85_ls(i85 signext %x) nounwind { + store i85 %x, i85* @i85_s + ret void +} + +define void @i86_ls(i86 signext %x) nounwind { + store i86 %x, i86* @i86_s + ret void +} + +define void @i87_ls(i87 signext %x) nounwind { + store i87 %x, i87* @i87_s + ret void +} + +define void @i88_ls(i88 signext %x) nounwind { + store i88 %x, i88* @i88_s + ret void +} + +define void @i89_ls(i89 signext %x) nounwind { + store i89 %x, i89* @i89_s + ret void +} + +define void @i90_ls(i90 signext %x) nounwind { + store i90 %x, i90* @i90_s + ret void +} + +define void @i91_ls(i91 signext %x) nounwind { + store i91 %x, i91* @i91_s + ret void +} + +define void @i92_ls(i92 signext %x) nounwind { + store i92 %x, i92* @i92_s + ret void +} + +define void @i93_ls(i93 signext %x) nounwind { + store i93 %x, i93* @i93_s + ret void +} + +define void @i94_ls(i94 signext %x) nounwind { + store i94 %x, i94* @i94_s + ret void +} + +define void @i95_ls(i95 signext %x) nounwind { + store i95 %x, i95* @i95_s + ret void +} + +define void @i96_ls(i96 signext %x) nounwind { + store i96 %x, i96* @i96_s + ret void +} + +define void @i97_ls(i97 signext %x) nounwind { + store i97 %x, i97* @i97_s + ret void +} + +define void @i98_ls(i98 signext %x) nounwind { + store i98 %x, i98* @i98_s + ret void +} + +define void @i99_ls(i99 signext %x) nounwind { + store i99 %x, i99* @i99_s + ret void +} + +define void @i100_ls(i100 signext %x) nounwind { + store i100 %x, i100* @i100_s + ret void +} + +define void @i101_ls(i101 signext %x) nounwind { + store i101 %x, i101* @i101_s + ret void +} + +define void @i102_ls(i102 signext %x) nounwind { + store i102 %x, i102* @i102_s + ret void +} + +define void @i103_ls(i103 signext %x) nounwind { + store i103 %x, i103* @i103_s + ret void +} + +define void @i104_ls(i104 signext %x) nounwind { + store i104 %x, i104* @i104_s + ret void +} + +define void @i105_ls(i105 signext %x) nounwind { + store i105 %x, i105* @i105_s + ret void +} + +define void @i106_ls(i106 signext %x) nounwind { + store i106 %x, i106* @i106_s + ret void +} + +define void @i107_ls(i107 signext %x) nounwind { + store i107 %x, i107* @i107_s + ret void +} + +define void @i108_ls(i108 signext %x) nounwind { + store i108 %x, i108* @i108_s + ret void +} + +define void @i109_ls(i109 signext %x) nounwind { + store i109 %x, i109* @i109_s + ret void +} + +define void @i110_ls(i110 signext %x) nounwind { + store i110 %x, i110* @i110_s + ret void +} + +define void @i111_ls(i111 signext %x) nounwind { + store i111 %x, i111* @i111_s + ret void +} + +define void @i112_ls(i112 signext %x) nounwind { + store i112 %x, i112* @i112_s + ret void +} + +define void @i113_ls(i113 signext %x) nounwind { + store i113 %x, i113* @i113_s + ret void +} + +define void @i114_ls(i114 signext %x) nounwind { + store i114 %x, i114* @i114_s + ret void +} + +define void @i115_ls(i115 signext %x) nounwind { + store i115 %x, i115* @i115_s + ret void +} + +define void @i116_ls(i116 signext %x) nounwind { + store i116 %x, i116* @i116_s + ret void +} + +define void @i117_ls(i117 signext %x) nounwind { + store i117 %x, i117* @i117_s + ret void +} + +define void @i118_ls(i118 signext %x) nounwind { + store i118 %x, i118* @i118_s + ret void +} + +define void @i119_ls(i119 signext %x) nounwind { + store i119 %x, i119* @i119_s + ret void +} + +define void @i120_ls(i120 signext %x) nounwind { + store i120 %x, i120* @i120_s + ret void +} + +define void @i121_ls(i121 signext %x) nounwind { + store i121 %x, i121* @i121_s + ret void +} + +define void @i122_ls(i122 signext %x) nounwind { + store i122 %x, i122* @i122_s + ret void +} + +define void @i123_ls(i123 signext %x) nounwind { + store i123 %x, i123* @i123_s + ret void +} + +define void @i124_ls(i124 signext %x) nounwind { + store i124 %x, i124* @i124_s + ret void +} + +define void @i125_ls(i125 signext %x) nounwind { + store i125 %x, i125* @i125_s + ret void +} + +define void @i126_ls(i126 signext %x) nounwind { + store i126 %x, i126* @i126_s + ret void +} + +define void @i127_ls(i127 signext %x) nounwind { + store i127 %x, i127* @i127_s + ret void +} + +define void @i128_ls(i128 signext %x) nounwind { + store i128 %x, i128* @i128_s + ret void +} + +define void @i129_ls(i129 signext %x) nounwind { + store i129 %x, i129* @i129_s + ret void +} + +define void @i130_ls(i130 signext %x) nounwind { + store i130 %x, i130* @i130_s + ret void +} + +define void @i131_ls(i131 signext %x) nounwind { + store i131 %x, i131* @i131_s + ret void +} + +define void @i132_ls(i132 signext %x) nounwind { + store i132 %x, i132* @i132_s + ret void +} + +define void @i133_ls(i133 signext %x) nounwind { + store i133 %x, i133* @i133_s + ret void +} + +define void @i134_ls(i134 signext %x) nounwind { + store i134 %x, i134* @i134_s + ret void +} + +define void @i135_ls(i135 signext %x) nounwind { + store i135 %x, i135* @i135_s + ret void +} + +define void @i136_ls(i136 signext %x) nounwind { + store i136 %x, i136* @i136_s + ret void +} + +define void @i137_ls(i137 signext %x) nounwind { + store i137 %x, i137* @i137_s + ret void +} + +define void @i138_ls(i138 signext %x) nounwind { + store i138 %x, i138* @i138_s + ret void +} + +define void @i139_ls(i139 signext %x) nounwind { + store i139 %x, i139* @i139_s + ret void +} + +define void @i140_ls(i140 signext %x) nounwind { + store i140 %x, i140* @i140_s + ret void +} + +define void @i141_ls(i141 signext %x) nounwind { + store i141 %x, i141* @i141_s + ret void +} + +define void @i142_ls(i142 signext %x) nounwind { + store i142 %x, i142* @i142_s + ret void +} + +define void @i143_ls(i143 signext %x) nounwind { + store i143 %x, i143* @i143_s + ret void +} + +define void @i144_ls(i144 signext %x) nounwind { + store i144 %x, i144* @i144_s + ret void +} + +define void @i145_ls(i145 signext %x) nounwind { + store i145 %x, i145* @i145_s + ret void +} + +define void @i146_ls(i146 signext %x) nounwind { + store i146 %x, i146* @i146_s + ret void +} + +define void @i147_ls(i147 signext %x) nounwind { + store i147 %x, i147* @i147_s + ret void +} + +define void @i148_ls(i148 signext %x) nounwind { + store i148 %x, i148* @i148_s + ret void +} + +define void @i149_ls(i149 signext %x) nounwind { + store i149 %x, i149* @i149_s + ret void +} + +define void @i150_ls(i150 signext %x) nounwind { + store i150 %x, i150* @i150_s + ret void +} + +define void @i151_ls(i151 signext %x) nounwind { + store i151 %x, i151* @i151_s + ret void +} + +define void @i152_ls(i152 signext %x) nounwind { + store i152 %x, i152* @i152_s + ret void +} + +define void @i153_ls(i153 signext %x) nounwind { + store i153 %x, i153* @i153_s + ret void +} + +define void @i154_ls(i154 signext %x) nounwind { + store i154 %x, i154* @i154_s + ret void +} + +define void @i155_ls(i155 signext %x) nounwind { + store i155 %x, i155* @i155_s + ret void +} + +define void @i156_ls(i156 signext %x) nounwind { + store i156 %x, i156* @i156_s + ret void +} + +define void @i157_ls(i157 signext %x) nounwind { + store i157 %x, i157* @i157_s + ret void +} + +define void @i158_ls(i158 signext %x) nounwind { + store i158 %x, i158* @i158_s + ret void +} + +define void @i159_ls(i159 signext %x) nounwind { + store i159 %x, i159* @i159_s + ret void +} + +define void @i160_ls(i160 signext %x) nounwind { + store i160 %x, i160* @i160_s + ret void +} + +define void @i161_ls(i161 signext %x) nounwind { + store i161 %x, i161* @i161_s + ret void +} + +define void @i162_ls(i162 signext %x) nounwind { + store i162 %x, i162* @i162_s + ret void +} + +define void @i163_ls(i163 signext %x) nounwind { + store i163 %x, i163* @i163_s + ret void +} + +define void @i164_ls(i164 signext %x) nounwind { + store i164 %x, i164* @i164_s + ret void +} + +define void @i165_ls(i165 signext %x) nounwind { + store i165 %x, i165* @i165_s + ret void +} + +define void @i166_ls(i166 signext %x) nounwind { + store i166 %x, i166* @i166_s + ret void +} + +define void @i167_ls(i167 signext %x) nounwind { + store i167 %x, i167* @i167_s + ret void +} + +define void @i168_ls(i168 signext %x) nounwind { + store i168 %x, i168* @i168_s + ret void +} + +define void @i169_ls(i169 signext %x) nounwind { + store i169 %x, i169* @i169_s + ret void +} + +define void @i170_ls(i170 signext %x) nounwind { + store i170 %x, i170* @i170_s + ret void +} + +define void @i171_ls(i171 signext %x) nounwind { + store i171 %x, i171* @i171_s + ret void +} + +define void @i172_ls(i172 signext %x) nounwind { + store i172 %x, i172* @i172_s + ret void +} + +define void @i173_ls(i173 signext %x) nounwind { + store i173 %x, i173* @i173_s + ret void +} + +define void @i174_ls(i174 signext %x) nounwind { + store i174 %x, i174* @i174_s + ret void +} + +define void @i175_ls(i175 signext %x) nounwind { + store i175 %x, i175* @i175_s + ret void +} + +define void @i176_ls(i176 signext %x) nounwind { + store i176 %x, i176* @i176_s + ret void +} + +define void @i177_ls(i177 signext %x) nounwind { + store i177 %x, i177* @i177_s + ret void +} + +define void @i178_ls(i178 signext %x) nounwind { + store i178 %x, i178* @i178_s + ret void +} + +define void @i179_ls(i179 signext %x) nounwind { + store i179 %x, i179* @i179_s + ret void +} + +define void @i180_ls(i180 signext %x) nounwind { + store i180 %x, i180* @i180_s + ret void +} + +define void @i181_ls(i181 signext %x) nounwind { + store i181 %x, i181* @i181_s + ret void +} + +define void @i182_ls(i182 signext %x) nounwind { + store i182 %x, i182* @i182_s + ret void +} + +define void @i183_ls(i183 signext %x) nounwind { + store i183 %x, i183* @i183_s + ret void +} + +define void @i184_ls(i184 signext %x) nounwind { + store i184 %x, i184* @i184_s + ret void +} + +define void @i185_ls(i185 signext %x) nounwind { + store i185 %x, i185* @i185_s + ret void +} + +define void @i186_ls(i186 signext %x) nounwind { + store i186 %x, i186* @i186_s + ret void +} + +define void @i187_ls(i187 signext %x) nounwind { + store i187 %x, i187* @i187_s + ret void +} + +define void @i188_ls(i188 signext %x) nounwind { + store i188 %x, i188* @i188_s + ret void +} + +define void @i189_ls(i189 signext %x) nounwind { + store i189 %x, i189* @i189_s + ret void +} + +define void @i190_ls(i190 signext %x) nounwind { + store i190 %x, i190* @i190_s + ret void +} + +define void @i191_ls(i191 signext %x) nounwind { + store i191 %x, i191* @i191_s + ret void +} + +define void @i192_ls(i192 signext %x) nounwind { + store i192 %x, i192* @i192_s + ret void +} + +define void @i193_ls(i193 signext %x) nounwind { + store i193 %x, i193* @i193_s + ret void +} + +define void @i194_ls(i194 signext %x) nounwind { + store i194 %x, i194* @i194_s + ret void +} + +define void @i195_ls(i195 signext %x) nounwind { + store i195 %x, i195* @i195_s + ret void +} + +define void @i196_ls(i196 signext %x) nounwind { + store i196 %x, i196* @i196_s + ret void +} + +define void @i197_ls(i197 signext %x) nounwind { + store i197 %x, i197* @i197_s + ret void +} + +define void @i198_ls(i198 signext %x) nounwind { + store i198 %x, i198* @i198_s + ret void +} + +define void @i199_ls(i199 signext %x) nounwind { + store i199 %x, i199* @i199_s + ret void +} + +define void @i200_ls(i200 signext %x) nounwind { + store i200 %x, i200* @i200_s + ret void +} + +define void @i201_ls(i201 signext %x) nounwind { + store i201 %x, i201* @i201_s + ret void +} + +define void @i202_ls(i202 signext %x) nounwind { + store i202 %x, i202* @i202_s + ret void +} + +define void @i203_ls(i203 signext %x) nounwind { + store i203 %x, i203* @i203_s + ret void +} + +define void @i204_ls(i204 signext %x) nounwind { + store i204 %x, i204* @i204_s + ret void +} + +define void @i205_ls(i205 signext %x) nounwind { + store i205 %x, i205* @i205_s + ret void +} + +define void @i206_ls(i206 signext %x) nounwind { + store i206 %x, i206* @i206_s + ret void +} + +define void @i207_ls(i207 signext %x) nounwind { + store i207 %x, i207* @i207_s + ret void +} + +define void @i208_ls(i208 signext %x) nounwind { + store i208 %x, i208* @i208_s + ret void +} + +define void @i209_ls(i209 signext %x) nounwind { + store i209 %x, i209* @i209_s + ret void +} + +define void @i210_ls(i210 signext %x) nounwind { + store i210 %x, i210* @i210_s + ret void +} + +define void @i211_ls(i211 signext %x) nounwind { + store i211 %x, i211* @i211_s + ret void +} + +define void @i212_ls(i212 signext %x) nounwind { + store i212 %x, i212* @i212_s + ret void +} + +define void @i213_ls(i213 signext %x) nounwind { + store i213 %x, i213* @i213_s + ret void +} + +define void @i214_ls(i214 signext %x) nounwind { + store i214 %x, i214* @i214_s + ret void +} + +define void @i215_ls(i215 signext %x) nounwind { + store i215 %x, i215* @i215_s + ret void +} + +define void @i216_ls(i216 signext %x) nounwind { + store i216 %x, i216* @i216_s + ret void +} + +define void @i217_ls(i217 signext %x) nounwind { + store i217 %x, i217* @i217_s + ret void +} + +define void @i218_ls(i218 signext %x) nounwind { + store i218 %x, i218* @i218_s + ret void +} + +define void @i219_ls(i219 signext %x) nounwind { + store i219 %x, i219* @i219_s + ret void +} + +define void @i220_ls(i220 signext %x) nounwind { + store i220 %x, i220* @i220_s + ret void +} + +define void @i221_ls(i221 signext %x) nounwind { + store i221 %x, i221* @i221_s + ret void +} + +define void @i222_ls(i222 signext %x) nounwind { + store i222 %x, i222* @i222_s + ret void +} + +define void @i223_ls(i223 signext %x) nounwind { + store i223 %x, i223* @i223_s + ret void +} + +define void @i224_ls(i224 signext %x) nounwind { + store i224 %x, i224* @i224_s + ret void +} + +define void @i225_ls(i225 signext %x) nounwind { + store i225 %x, i225* @i225_s + ret void +} + +define void @i226_ls(i226 signext %x) nounwind { + store i226 %x, i226* @i226_s + ret void +} + +define void @i227_ls(i227 signext %x) nounwind { + store i227 %x, i227* @i227_s + ret void +} + +define void @i228_ls(i228 signext %x) nounwind { + store i228 %x, i228* @i228_s + ret void +} + +define void @i229_ls(i229 signext %x) nounwind { + store i229 %x, i229* @i229_s + ret void +} + +define void @i230_ls(i230 signext %x) nounwind { + store i230 %x, i230* @i230_s + ret void +} + +define void @i231_ls(i231 signext %x) nounwind { + store i231 %x, i231* @i231_s + ret void +} + +define void @i232_ls(i232 signext %x) nounwind { + store i232 %x, i232* @i232_s + ret void +} + +define void @i233_ls(i233 signext %x) nounwind { + store i233 %x, i233* @i233_s + ret void +} + +define void @i234_ls(i234 signext %x) nounwind { + store i234 %x, i234* @i234_s + ret void +} + +define void @i235_ls(i235 signext %x) nounwind { + store i235 %x, i235* @i235_s + ret void +} + +define void @i236_ls(i236 signext %x) nounwind { + store i236 %x, i236* @i236_s + ret void +} + +define void @i237_ls(i237 signext %x) nounwind { + store i237 %x, i237* @i237_s + ret void +} + +define void @i238_ls(i238 signext %x) nounwind { + store i238 %x, i238* @i238_s + ret void +} + +define void @i239_ls(i239 signext %x) nounwind { + store i239 %x, i239* @i239_s + ret void +} + +define void @i240_ls(i240 signext %x) nounwind { + store i240 %x, i240* @i240_s + ret void +} + +define void @i241_ls(i241 signext %x) nounwind { + store i241 %x, i241* @i241_s + ret void +} + +define void @i242_ls(i242 signext %x) nounwind { + store i242 %x, i242* @i242_s + ret void +} + +define void @i243_ls(i243 signext %x) nounwind { + store i243 %x, i243* @i243_s + ret void +} + +define void @i244_ls(i244 signext %x) nounwind { + store i244 %x, i244* @i244_s + ret void +} + +define void @i245_ls(i245 signext %x) nounwind { + store i245 %x, i245* @i245_s + ret void +} + +define void @i246_ls(i246 signext %x) nounwind { + store i246 %x, i246* @i246_s + ret void +} + +define void @i247_ls(i247 signext %x) nounwind { + store i247 %x, i247* @i247_s + ret void +} + +define void @i248_ls(i248 signext %x) nounwind { + store i248 %x, i248* @i248_s + ret void +} + +define void @i249_ls(i249 signext %x) nounwind { + store i249 %x, i249* @i249_s + ret void +} + +define void @i250_ls(i250 signext %x) nounwind { + store i250 %x, i250* @i250_s + ret void +} + +define void @i251_ls(i251 signext %x) nounwind { + store i251 %x, i251* @i251_s + ret void +} + +define void @i252_ls(i252 signext %x) nounwind { + store i252 %x, i252* @i252_s + ret void +} + +define void @i253_ls(i253 signext %x) nounwind { + store i253 %x, i253* @i253_s + ret void +} + +define void @i254_ls(i254 signext %x) nounwind { + store i254 %x, i254* @i254_s + ret void +} + +define void @i255_ls(i255 signext %x) nounwind { + store i255 %x, i255* @i255_s + ret void +} + +define void @i256_ls(i256 signext %x) nounwind { + store i256 %x, i256* @i256_s + ret void +} diff --git a/test/CodeGen/Generic/APIntZextParam.ll b/test/CodeGen/Generic/APIntZextParam.ll new file mode 100644 index 0000000..173b9fd --- /dev/null +++ b/test/CodeGen/Generic/APIntZextParam.ll @@ -0,0 +1,1537 @@ +; RUN: llc < %s > %t +@i1_s = external global i1 ; <i1*> [#uses=1] +@i2_s = external global i2 ; <i2*> [#uses=1] +@i3_s = external global i3 ; <i3*> [#uses=1] +@i4_s = external global i4 ; <i4*> [#uses=1] +@i5_s = external global i5 ; <i5*> [#uses=1] +@i6_s = external global i6 ; <i6*> [#uses=1] +@i7_s = external global i7 ; <i7*> [#uses=1] +@i8_s = external global i8 ; <i8*> [#uses=1] +@i9_s = external global i9 ; <i9*> [#uses=1] +@i10_s = external global i10 ; <i10*> [#uses=1] +@i11_s = external global i11 ; <i11*> [#uses=1] +@i12_s = external global i12 ; <i12*> [#uses=1] +@i13_s = external global i13 ; <i13*> [#uses=1] +@i14_s = external global i14 ; <i14*> [#uses=1] +@i15_s = external global i15 ; <i15*> [#uses=1] +@i16_s = external global i16 ; <i16*> [#uses=1] +@i17_s = external global i17 ; <i17*> [#uses=1] +@i18_s = external global i18 ; <i18*> [#uses=1] +@i19_s = external global i19 ; <i19*> [#uses=1] +@i20_s = external global i20 ; <i20*> [#uses=1] +@i21_s = external global i21 ; <i21*> [#uses=1] +@i22_s = external global i22 ; <i22*> [#uses=1] +@i23_s = external global i23 ; <i23*> [#uses=1] +@i24_s = external global i24 ; <i24*> [#uses=1] +@i25_s = external global i25 ; <i25*> [#uses=1] +@i26_s = external global i26 ; <i26*> [#uses=1] +@i27_s = external global i27 ; <i27*> [#uses=1] +@i28_s = external global i28 ; <i28*> [#uses=1] +@i29_s = external global i29 ; <i29*> [#uses=1] +@i30_s = external global i30 ; <i30*> [#uses=1] +@i31_s = external global i31 ; <i31*> [#uses=1] +@i32_s = external global i32 ; <i32*> [#uses=1] +@i33_s = external global i33 ; <i33*> [#uses=1] +@i34_s = external global i34 ; <i34*> [#uses=1] +@i35_s = external global i35 ; <i35*> [#uses=1] +@i36_s = external global i36 ; <i36*> [#uses=1] +@i37_s = external global i37 ; <i37*> [#uses=1] +@i38_s = external global i38 ; <i38*> [#uses=1] +@i39_s = external global i39 ; <i39*> [#uses=1] +@i40_s = external global i40 ; <i40*> [#uses=1] +@i41_s = external global i41 ; <i41*> [#uses=1] +@i42_s = external global i42 ; <i42*> [#uses=1] +@i43_s = external global i43 ; <i43*> [#uses=1] +@i44_s = external global i44 ; <i44*> [#uses=1] +@i45_s = external global i45 ; <i45*> [#uses=1] +@i46_s = external global i46 ; <i46*> [#uses=1] +@i47_s = external global i47 ; <i47*> [#uses=1] +@i48_s = external global i48 ; <i48*> [#uses=1] +@i49_s = external global i49 ; <i49*> [#uses=1] +@i50_s = external global i50 ; <i50*> [#uses=1] +@i51_s = external global i51 ; <i51*> [#uses=1] +@i52_s = external global i52 ; <i52*> [#uses=1] +@i53_s = external global i53 ; <i53*> [#uses=1] +@i54_s = external global i54 ; <i54*> [#uses=1] +@i55_s = external global i55 ; <i55*> [#uses=1] +@i56_s = external global i56 ; <i56*> [#uses=1] +@i57_s = external global i57 ; <i57*> [#uses=1] +@i58_s = external global i58 ; <i58*> [#uses=1] +@i59_s = external global i59 ; <i59*> [#uses=1] +@i60_s = external global i60 ; <i60*> [#uses=1] +@i61_s = external global i61 ; <i61*> [#uses=1] +@i62_s = external global i62 ; <i62*> [#uses=1] +@i63_s = external global i63 ; <i63*> [#uses=1] +@i64_s = external global i64 ; <i64*> [#uses=1] +@i65_s = external global i65 ; <i65*> [#uses=1] +@i66_s = external global i66 ; <i66*> [#uses=1] +@i67_s = external global i67 ; <i67*> [#uses=1] +@i68_s = external global i68 ; <i68*> [#uses=1] +@i69_s = external global i69 ; <i69*> [#uses=1] +@i70_s = external global i70 ; <i70*> [#uses=1] +@i71_s = external global i71 ; <i71*> [#uses=1] +@i72_s = external global i72 ; <i72*> [#uses=1] +@i73_s = external global i73 ; <i73*> [#uses=1] +@i74_s = external global i74 ; <i74*> [#uses=1] +@i75_s = external global i75 ; <i75*> [#uses=1] +@i76_s = external global i76 ; <i76*> [#uses=1] +@i77_s = external global i77 ; <i77*> [#uses=1] +@i78_s = external global i78 ; <i78*> [#uses=1] +@i79_s = external global i79 ; <i79*> [#uses=1] +@i80_s = external global i80 ; <i80*> [#uses=1] +@i81_s = external global i81 ; <i81*> [#uses=1] +@i82_s = external global i82 ; <i82*> [#uses=1] +@i83_s = external global i83 ; <i83*> [#uses=1] +@i84_s = external global i84 ; <i84*> [#uses=1] +@i85_s = external global i85 ; <i85*> [#uses=1] +@i86_s = external global i86 ; <i86*> [#uses=1] +@i87_s = external global i87 ; <i87*> [#uses=1] +@i88_s = external global i88 ; <i88*> [#uses=1] +@i89_s = external global i89 ; <i89*> [#uses=1] +@i90_s = external global i90 ; <i90*> [#uses=1] +@i91_s = external global i91 ; <i91*> [#uses=1] +@i92_s = external global i92 ; <i92*> [#uses=1] +@i93_s = external global i93 ; <i93*> [#uses=1] +@i94_s = external global i94 ; <i94*> [#uses=1] +@i95_s = external global i95 ; <i95*> [#uses=1] +@i96_s = external global i96 ; <i96*> [#uses=1] +@i97_s = external global i97 ; <i97*> [#uses=1] +@i98_s = external global i98 ; <i98*> [#uses=1] +@i99_s = external global i99 ; <i99*> [#uses=1] +@i100_s = external global i100 ; <i100*> [#uses=1] +@i101_s = external global i101 ; <i101*> [#uses=1] +@i102_s = external global i102 ; <i102*> [#uses=1] +@i103_s = external global i103 ; <i103*> [#uses=1] +@i104_s = external global i104 ; <i104*> [#uses=1] +@i105_s = external global i105 ; <i105*> [#uses=1] +@i106_s = external global i106 ; <i106*> [#uses=1] +@i107_s = external global i107 ; <i107*> [#uses=1] +@i108_s = external global i108 ; <i108*> [#uses=1] +@i109_s = external global i109 ; <i109*> [#uses=1] +@i110_s = external global i110 ; <i110*> [#uses=1] +@i111_s = external global i111 ; <i111*> [#uses=1] +@i112_s = external global i112 ; <i112*> [#uses=1] +@i113_s = external global i113 ; <i113*> [#uses=1] +@i114_s = external global i114 ; <i114*> [#uses=1] +@i115_s = external global i115 ; <i115*> [#uses=1] +@i116_s = external global i116 ; <i116*> [#uses=1] +@i117_s = external global i117 ; <i117*> [#uses=1] +@i118_s = external global i118 ; <i118*> [#uses=1] +@i119_s = external global i119 ; <i119*> [#uses=1] +@i120_s = external global i120 ; <i120*> [#uses=1] +@i121_s = external global i121 ; <i121*> [#uses=1] +@i122_s = external global i122 ; <i122*> [#uses=1] +@i123_s = external global i123 ; <i123*> [#uses=1] +@i124_s = external global i124 ; <i124*> [#uses=1] +@i125_s = external global i125 ; <i125*> [#uses=1] +@i126_s = external global i126 ; <i126*> [#uses=1] +@i127_s = external global i127 ; <i127*> [#uses=1] +@i128_s = external global i128 ; <i128*> [#uses=1] +@i129_s = external global i129 ; <i129*> [#uses=1] +@i130_s = external global i130 ; <i130*> [#uses=1] +@i131_s = external global i131 ; <i131*> [#uses=1] +@i132_s = external global i132 ; <i132*> [#uses=1] +@i133_s = external global i133 ; <i133*> [#uses=1] +@i134_s = external global i134 ; <i134*> [#uses=1] +@i135_s = external global i135 ; <i135*> [#uses=1] +@i136_s = external global i136 ; <i136*> [#uses=1] +@i137_s = external global i137 ; <i137*> [#uses=1] +@i138_s = external global i138 ; <i138*> [#uses=1] +@i139_s = external global i139 ; <i139*> [#uses=1] +@i140_s = external global i140 ; <i140*> [#uses=1] +@i141_s = external global i141 ; <i141*> [#uses=1] +@i142_s = external global i142 ; <i142*> [#uses=1] +@i143_s = external global i143 ; <i143*> [#uses=1] +@i144_s = external global i144 ; <i144*> [#uses=1] +@i145_s = external global i145 ; <i145*> [#uses=1] +@i146_s = external global i146 ; <i146*> [#uses=1] +@i147_s = external global i147 ; <i147*> [#uses=1] +@i148_s = external global i148 ; <i148*> [#uses=1] +@i149_s = external global i149 ; <i149*> [#uses=1] +@i150_s = external global i150 ; <i150*> [#uses=1] +@i151_s = external global i151 ; <i151*> [#uses=1] +@i152_s = external global i152 ; <i152*> [#uses=1] +@i153_s = external global i153 ; <i153*> [#uses=1] +@i154_s = external global i154 ; <i154*> [#uses=1] +@i155_s = external global i155 ; <i155*> [#uses=1] +@i156_s = external global i156 ; <i156*> [#uses=1] +@i157_s = external global i157 ; <i157*> [#uses=1] +@i158_s = external global i158 ; <i158*> [#uses=1] +@i159_s = external global i159 ; <i159*> [#uses=1] +@i160_s = external global i160 ; <i160*> [#uses=1] +@i161_s = external global i161 ; <i161*> [#uses=1] +@i162_s = external global i162 ; <i162*> [#uses=1] +@i163_s = external global i163 ; <i163*> [#uses=1] +@i164_s = external global i164 ; <i164*> [#uses=1] +@i165_s = external global i165 ; <i165*> [#uses=1] +@i166_s = external global i166 ; <i166*> [#uses=1] +@i167_s = external global i167 ; <i167*> [#uses=1] +@i168_s = external global i168 ; <i168*> [#uses=1] +@i169_s = external global i169 ; <i169*> [#uses=1] +@i170_s = external global i170 ; <i170*> [#uses=1] +@i171_s = external global i171 ; <i171*> [#uses=1] +@i172_s = external global i172 ; <i172*> [#uses=1] +@i173_s = external global i173 ; <i173*> [#uses=1] +@i174_s = external global i174 ; <i174*> [#uses=1] +@i175_s = external global i175 ; <i175*> [#uses=1] +@i176_s = external global i176 ; <i176*> [#uses=1] +@i177_s = external global i177 ; <i177*> [#uses=1] +@i178_s = external global i178 ; <i178*> [#uses=1] +@i179_s = external global i179 ; <i179*> [#uses=1] +@i180_s = external global i180 ; <i180*> [#uses=1] +@i181_s = external global i181 ; <i181*> [#uses=1] +@i182_s = external global i182 ; <i182*> [#uses=1] +@i183_s = external global i183 ; <i183*> [#uses=1] +@i184_s = external global i184 ; <i184*> [#uses=1] +@i185_s = external global i185 ; <i185*> [#uses=1] +@i186_s = external global i186 ; <i186*> [#uses=1] +@i187_s = external global i187 ; <i187*> [#uses=1] +@i188_s = external global i188 ; <i188*> [#uses=1] +@i189_s = external global i189 ; <i189*> [#uses=1] +@i190_s = external global i190 ; <i190*> [#uses=1] +@i191_s = external global i191 ; <i191*> [#uses=1] +@i192_s = external global i192 ; <i192*> [#uses=1] +@i193_s = external global i193 ; <i193*> [#uses=1] +@i194_s = external global i194 ; <i194*> [#uses=1] +@i195_s = external global i195 ; <i195*> [#uses=1] +@i196_s = external global i196 ; <i196*> [#uses=1] +@i197_s = external global i197 ; <i197*> [#uses=1] +@i198_s = external global i198 ; <i198*> [#uses=1] +@i199_s = external global i199 ; <i199*> [#uses=1] +@i200_s = external global i200 ; <i200*> [#uses=1] +@i201_s = external global i201 ; <i201*> [#uses=1] +@i202_s = external global i202 ; <i202*> [#uses=1] +@i203_s = external global i203 ; <i203*> [#uses=1] +@i204_s = external global i204 ; <i204*> [#uses=1] +@i205_s = external global i205 ; <i205*> [#uses=1] +@i206_s = external global i206 ; <i206*> [#uses=1] +@i207_s = external global i207 ; <i207*> [#uses=1] +@i208_s = external global i208 ; <i208*> [#uses=1] +@i209_s = external global i209 ; <i209*> [#uses=1] +@i210_s = external global i210 ; <i210*> [#uses=1] +@i211_s = external global i211 ; <i211*> [#uses=1] +@i212_s = external global i212 ; <i212*> [#uses=1] +@i213_s = external global i213 ; <i213*> [#uses=1] +@i214_s = external global i214 ; <i214*> [#uses=1] +@i215_s = external global i215 ; <i215*> [#uses=1] +@i216_s = external global i216 ; <i216*> [#uses=1] +@i217_s = external global i217 ; <i217*> [#uses=1] +@i218_s = external global i218 ; <i218*> [#uses=1] +@i219_s = external global i219 ; <i219*> [#uses=1] +@i220_s = external global i220 ; <i220*> [#uses=1] +@i221_s = external global i221 ; <i221*> [#uses=1] +@i222_s = external global i222 ; <i222*> [#uses=1] +@i223_s = external global i223 ; <i223*> [#uses=1] +@i224_s = external global i224 ; <i224*> [#uses=1] +@i225_s = external global i225 ; <i225*> [#uses=1] +@i226_s = external global i226 ; <i226*> [#uses=1] +@i227_s = external global i227 ; <i227*> [#uses=1] +@i228_s = external global i228 ; <i228*> [#uses=1] +@i229_s = external global i229 ; <i229*> [#uses=1] +@i230_s = external global i230 ; <i230*> [#uses=1] +@i231_s = external global i231 ; <i231*> [#uses=1] +@i232_s = external global i232 ; <i232*> [#uses=1] +@i233_s = external global i233 ; <i233*> [#uses=1] +@i234_s = external global i234 ; <i234*> [#uses=1] +@i235_s = external global i235 ; <i235*> [#uses=1] +@i236_s = external global i236 ; <i236*> [#uses=1] +@i237_s = external global i237 ; <i237*> [#uses=1] +@i238_s = external global i238 ; <i238*> [#uses=1] +@i239_s = external global i239 ; <i239*> [#uses=1] +@i240_s = external global i240 ; <i240*> [#uses=1] +@i241_s = external global i241 ; <i241*> [#uses=1] +@i242_s = external global i242 ; <i242*> [#uses=1] +@i243_s = external global i243 ; <i243*> [#uses=1] +@i244_s = external global i244 ; <i244*> [#uses=1] +@i245_s = external global i245 ; <i245*> [#uses=1] +@i246_s = external global i246 ; <i246*> [#uses=1] +@i247_s = external global i247 ; <i247*> [#uses=1] +@i248_s = external global i248 ; <i248*> [#uses=1] +@i249_s = external global i249 ; <i249*> [#uses=1] +@i250_s = external global i250 ; <i250*> [#uses=1] +@i251_s = external global i251 ; <i251*> [#uses=1] +@i252_s = external global i252 ; <i252*> [#uses=1] +@i253_s = external global i253 ; <i253*> [#uses=1] +@i254_s = external global i254 ; <i254*> [#uses=1] +@i255_s = external global i255 ; <i255*> [#uses=1] +@i256_s = external global i256 ; <i256*> [#uses=1] + +define void @i1_ls(i1 zeroext %x) nounwind { + store i1 %x, i1* @i1_s + ret void +} + +define void @i2_ls(i2 zeroext %x) nounwind { + store i2 %x, i2* @i2_s + ret void +} + +define void @i3_ls(i3 zeroext %x) nounwind { + store i3 %x, i3* @i3_s + ret void +} + +define void @i4_ls(i4 zeroext %x) nounwind { + store i4 %x, i4* @i4_s + ret void +} + +define void @i5_ls(i5 zeroext %x) nounwind { + store i5 %x, i5* @i5_s + ret void +} + +define void @i6_ls(i6 zeroext %x) nounwind { + store i6 %x, i6* @i6_s + ret void +} + +define void @i7_ls(i7 zeroext %x) nounwind { + store i7 %x, i7* @i7_s + ret void +} + +define void @i8_ls(i8 zeroext %x) nounwind { + store i8 %x, i8* @i8_s + ret void +} + +define void @i9_ls(i9 zeroext %x) nounwind { + store i9 %x, i9* @i9_s + ret void +} + +define void @i10_ls(i10 zeroext %x) nounwind { + store i10 %x, i10* @i10_s + ret void +} + +define void @i11_ls(i11 zeroext %x) nounwind { + store i11 %x, i11* @i11_s + ret void +} + +define void @i12_ls(i12 zeroext %x) nounwind { + store i12 %x, i12* @i12_s + ret void +} + +define void @i13_ls(i13 zeroext %x) nounwind { + store i13 %x, i13* @i13_s + ret void +} + +define void @i14_ls(i14 zeroext %x) nounwind { + store i14 %x, i14* @i14_s + ret void +} + +define void @i15_ls(i15 zeroext %x) nounwind { + store i15 %x, i15* @i15_s + ret void +} + +define void @i16_ls(i16 zeroext %x) nounwind { + store i16 %x, i16* @i16_s + ret void +} + +define void @i17_ls(i17 zeroext %x) nounwind { + store i17 %x, i17* @i17_s + ret void +} + +define void @i18_ls(i18 zeroext %x) nounwind { + store i18 %x, i18* @i18_s + ret void +} + +define void @i19_ls(i19 zeroext %x) nounwind { + store i19 %x, i19* @i19_s + ret void +} + +define void @i20_ls(i20 zeroext %x) nounwind { + store i20 %x, i20* @i20_s + ret void +} + +define void @i21_ls(i21 zeroext %x) nounwind { + store i21 %x, i21* @i21_s + ret void +} + +define void @i22_ls(i22 zeroext %x) nounwind { + store i22 %x, i22* @i22_s + ret void +} + +define void @i23_ls(i23 zeroext %x) nounwind { + store i23 %x, i23* @i23_s + ret void +} + +define void @i24_ls(i24 zeroext %x) nounwind { + store i24 %x, i24* @i24_s + ret void +} + +define void @i25_ls(i25 zeroext %x) nounwind { + store i25 %x, i25* @i25_s + ret void +} + +define void @i26_ls(i26 zeroext %x) nounwind { + store i26 %x, i26* @i26_s + ret void +} + +define void @i27_ls(i27 zeroext %x) nounwind { + store i27 %x, i27* @i27_s + ret void +} + +define void @i28_ls(i28 zeroext %x) nounwind { + store i28 %x, i28* @i28_s + ret void +} + +define void @i29_ls(i29 zeroext %x) nounwind { + store i29 %x, i29* @i29_s + ret void +} + +define void @i30_ls(i30 zeroext %x) nounwind { + store i30 %x, i30* @i30_s + ret void +} + +define void @i31_ls(i31 zeroext %x) nounwind { + store i31 %x, i31* @i31_s + ret void +} + +define void @i32_ls(i32 zeroext %x) nounwind { + store i32 %x, i32* @i32_s + ret void +} + +define void @i33_ls(i33 zeroext %x) nounwind { + store i33 %x, i33* @i33_s + ret void +} + +define void @i34_ls(i34 zeroext %x) nounwind { + store i34 %x, i34* @i34_s + ret void +} + +define void @i35_ls(i35 zeroext %x) nounwind { + store i35 %x, i35* @i35_s + ret void +} + +define void @i36_ls(i36 zeroext %x) nounwind { + store i36 %x, i36* @i36_s + ret void +} + +define void @i37_ls(i37 zeroext %x) nounwind { + store i37 %x, i37* @i37_s + ret void +} + +define void @i38_ls(i38 zeroext %x) nounwind { + store i38 %x, i38* @i38_s + ret void +} + +define void @i39_ls(i39 zeroext %x) nounwind { + store i39 %x, i39* @i39_s + ret void +} + +define void @i40_ls(i40 zeroext %x) nounwind { + store i40 %x, i40* @i40_s + ret void +} + +define void @i41_ls(i41 zeroext %x) nounwind { + store i41 %x, i41* @i41_s + ret void +} + +define void @i42_ls(i42 zeroext %x) nounwind { + store i42 %x, i42* @i42_s + ret void +} + +define void @i43_ls(i43 zeroext %x) nounwind { + store i43 %x, i43* @i43_s + ret void +} + +define void @i44_ls(i44 zeroext %x) nounwind { + store i44 %x, i44* @i44_s + ret void +} + +define void @i45_ls(i45 zeroext %x) nounwind { + store i45 %x, i45* @i45_s + ret void +} + +define void @i46_ls(i46 zeroext %x) nounwind { + store i46 %x, i46* @i46_s + ret void +} + +define void @i47_ls(i47 zeroext %x) nounwind { + store i47 %x, i47* @i47_s + ret void +} + +define void @i48_ls(i48 zeroext %x) nounwind { + store i48 %x, i48* @i48_s + ret void +} + +define void @i49_ls(i49 zeroext %x) nounwind { + store i49 %x, i49* @i49_s + ret void +} + +define void @i50_ls(i50 zeroext %x) nounwind { + store i50 %x, i50* @i50_s + ret void +} + +define void @i51_ls(i51 zeroext %x) nounwind { + store i51 %x, i51* @i51_s + ret void +} + +define void @i52_ls(i52 zeroext %x) nounwind { + store i52 %x, i52* @i52_s + ret void +} + +define void @i53_ls(i53 zeroext %x) nounwind { + store i53 %x, i53* @i53_s + ret void +} + +define void @i54_ls(i54 zeroext %x) nounwind { + store i54 %x, i54* @i54_s + ret void +} + +define void @i55_ls(i55 zeroext %x) nounwind { + store i55 %x, i55* @i55_s + ret void +} + +define void @i56_ls(i56 zeroext %x) nounwind { + store i56 %x, i56* @i56_s + ret void +} + +define void @i57_ls(i57 zeroext %x) nounwind { + store i57 %x, i57* @i57_s + ret void +} + +define void @i58_ls(i58 zeroext %x) nounwind { + store i58 %x, i58* @i58_s + ret void +} + +define void @i59_ls(i59 zeroext %x) nounwind { + store i59 %x, i59* @i59_s + ret void +} + +define void @i60_ls(i60 zeroext %x) nounwind { + store i60 %x, i60* @i60_s + ret void +} + +define void @i61_ls(i61 zeroext %x) nounwind { + store i61 %x, i61* @i61_s + ret void +} + +define void @i62_ls(i62 zeroext %x) nounwind { + store i62 %x, i62* @i62_s + ret void +} + +define void @i63_ls(i63 zeroext %x) nounwind { + store i63 %x, i63* @i63_s + ret void +} + +define void @i64_ls(i64 zeroext %x) nounwind { + store i64 %x, i64* @i64_s + ret void +} + +define void @i65_ls(i65 zeroext %x) nounwind { + store i65 %x, i65* @i65_s + ret void +} + +define void @i66_ls(i66 zeroext %x) nounwind { + store i66 %x, i66* @i66_s + ret void +} + +define void @i67_ls(i67 zeroext %x) nounwind { + store i67 %x, i67* @i67_s + ret void +} + +define void @i68_ls(i68 zeroext %x) nounwind { + store i68 %x, i68* @i68_s + ret void +} + +define void @i69_ls(i69 zeroext %x) nounwind { + store i69 %x, i69* @i69_s + ret void +} + +define void @i70_ls(i70 zeroext %x) nounwind { + store i70 %x, i70* @i70_s + ret void +} + +define void @i71_ls(i71 zeroext %x) nounwind { + store i71 %x, i71* @i71_s + ret void +} + +define void @i72_ls(i72 zeroext %x) nounwind { + store i72 %x, i72* @i72_s + ret void +} + +define void @i73_ls(i73 zeroext %x) nounwind { + store i73 %x, i73* @i73_s + ret void +} + +define void @i74_ls(i74 zeroext %x) nounwind { + store i74 %x, i74* @i74_s + ret void +} + +define void @i75_ls(i75 zeroext %x) nounwind { + store i75 %x, i75* @i75_s + ret void +} + +define void @i76_ls(i76 zeroext %x) nounwind { + store i76 %x, i76* @i76_s + ret void +} + +define void @i77_ls(i77 zeroext %x) nounwind { + store i77 %x, i77* @i77_s + ret void +} + +define void @i78_ls(i78 zeroext %x) nounwind { + store i78 %x, i78* @i78_s + ret void +} + +define void @i79_ls(i79 zeroext %x) nounwind { + store i79 %x, i79* @i79_s + ret void +} + +define void @i80_ls(i80 zeroext %x) nounwind { + store i80 %x, i80* @i80_s + ret void +} + +define void @i81_ls(i81 zeroext %x) nounwind { + store i81 %x, i81* @i81_s + ret void +} + +define void @i82_ls(i82 zeroext %x) nounwind { + store i82 %x, i82* @i82_s + ret void +} + +define void @i83_ls(i83 zeroext %x) nounwind { + store i83 %x, i83* @i83_s + ret void +} + +define void @i84_ls(i84 zeroext %x) nounwind { + store i84 %x, i84* @i84_s + ret void +} + +define void @i85_ls(i85 zeroext %x) nounwind { + store i85 %x, i85* @i85_s + ret void +} + +define void @i86_ls(i86 zeroext %x) nounwind { + store i86 %x, i86* @i86_s + ret void +} + +define void @i87_ls(i87 zeroext %x) nounwind { + store i87 %x, i87* @i87_s + ret void +} + +define void @i88_ls(i88 zeroext %x) nounwind { + store i88 %x, i88* @i88_s + ret void +} + +define void @i89_ls(i89 zeroext %x) nounwind { + store i89 %x, i89* @i89_s + ret void +} + +define void @i90_ls(i90 zeroext %x) nounwind { + store i90 %x, i90* @i90_s + ret void +} + +define void @i91_ls(i91 zeroext %x) nounwind { + store i91 %x, i91* @i91_s + ret void +} + +define void @i92_ls(i92 zeroext %x) nounwind { + store i92 %x, i92* @i92_s + ret void +} + +define void @i93_ls(i93 zeroext %x) nounwind { + store i93 %x, i93* @i93_s + ret void +} + +define void @i94_ls(i94 zeroext %x) nounwind { + store i94 %x, i94* @i94_s + ret void +} + +define void @i95_ls(i95 zeroext %x) nounwind { + store i95 %x, i95* @i95_s + ret void +} + +define void @i96_ls(i96 zeroext %x) nounwind { + store i96 %x, i96* @i96_s + ret void +} + +define void @i97_ls(i97 zeroext %x) nounwind { + store i97 %x, i97* @i97_s + ret void +} + +define void @i98_ls(i98 zeroext %x) nounwind { + store i98 %x, i98* @i98_s + ret void +} + +define void @i99_ls(i99 zeroext %x) nounwind { + store i99 %x, i99* @i99_s + ret void +} + +define void @i100_ls(i100 zeroext %x) nounwind { + store i100 %x, i100* @i100_s + ret void +} + +define void @i101_ls(i101 zeroext %x) nounwind { + store i101 %x, i101* @i101_s + ret void +} + +define void @i102_ls(i102 zeroext %x) nounwind { + store i102 %x, i102* @i102_s + ret void +} + +define void @i103_ls(i103 zeroext %x) nounwind { + store i103 %x, i103* @i103_s + ret void +} + +define void @i104_ls(i104 zeroext %x) nounwind { + store i104 %x, i104* @i104_s + ret void +} + +define void @i105_ls(i105 zeroext %x) nounwind { + store i105 %x, i105* @i105_s + ret void +} + +define void @i106_ls(i106 zeroext %x) nounwind { + store i106 %x, i106* @i106_s + ret void +} + +define void @i107_ls(i107 zeroext %x) nounwind { + store i107 %x, i107* @i107_s + ret void +} + +define void @i108_ls(i108 zeroext %x) nounwind { + store i108 %x, i108* @i108_s + ret void +} + +define void @i109_ls(i109 zeroext %x) nounwind { + store i109 %x, i109* @i109_s + ret void +} + +define void @i110_ls(i110 zeroext %x) nounwind { + store i110 %x, i110* @i110_s + ret void +} + +define void @i111_ls(i111 zeroext %x) nounwind { + store i111 %x, i111* @i111_s + ret void +} + +define void @i112_ls(i112 zeroext %x) nounwind { + store i112 %x, i112* @i112_s + ret void +} + +define void @i113_ls(i113 zeroext %x) nounwind { + store i113 %x, i113* @i113_s + ret void +} + +define void @i114_ls(i114 zeroext %x) nounwind { + store i114 %x, i114* @i114_s + ret void +} + +define void @i115_ls(i115 zeroext %x) nounwind { + store i115 %x, i115* @i115_s + ret void +} + +define void @i116_ls(i116 zeroext %x) nounwind { + store i116 %x, i116* @i116_s + ret void +} + +define void @i117_ls(i117 zeroext %x) nounwind { + store i117 %x, i117* @i117_s + ret void +} + +define void @i118_ls(i118 zeroext %x) nounwind { + store i118 %x, i118* @i118_s + ret void +} + +define void @i119_ls(i119 zeroext %x) nounwind { + store i119 %x, i119* @i119_s + ret void +} + +define void @i120_ls(i120 zeroext %x) nounwind { + store i120 %x, i120* @i120_s + ret void +} + +define void @i121_ls(i121 zeroext %x) nounwind { + store i121 %x, i121* @i121_s + ret void +} + +define void @i122_ls(i122 zeroext %x) nounwind { + store i122 %x, i122* @i122_s + ret void +} + +define void @i123_ls(i123 zeroext %x) nounwind { + store i123 %x, i123* @i123_s + ret void +} + +define void @i124_ls(i124 zeroext %x) nounwind { + store i124 %x, i124* @i124_s + ret void +} + +define void @i125_ls(i125 zeroext %x) nounwind { + store i125 %x, i125* @i125_s + ret void +} + +define void @i126_ls(i126 zeroext %x) nounwind { + store i126 %x, i126* @i126_s + ret void +} + +define void @i127_ls(i127 zeroext %x) nounwind { + store i127 %x, i127* @i127_s + ret void +} + +define void @i128_ls(i128 zeroext %x) nounwind { + store i128 %x, i128* @i128_s + ret void +} + +define void @i129_ls(i129 zeroext %x) nounwind { + store i129 %x, i129* @i129_s + ret void +} + +define void @i130_ls(i130 zeroext %x) nounwind { + store i130 %x, i130* @i130_s + ret void +} + +define void @i131_ls(i131 zeroext %x) nounwind { + store i131 %x, i131* @i131_s + ret void +} + +define void @i132_ls(i132 zeroext %x) nounwind { + store i132 %x, i132* @i132_s + ret void +} + +define void @i133_ls(i133 zeroext %x) nounwind { + store i133 %x, i133* @i133_s + ret void +} + +define void @i134_ls(i134 zeroext %x) nounwind { + store i134 %x, i134* @i134_s + ret void +} + +define void @i135_ls(i135 zeroext %x) nounwind { + store i135 %x, i135* @i135_s + ret void +} + +define void @i136_ls(i136 zeroext %x) nounwind { + store i136 %x, i136* @i136_s + ret void +} + +define void @i137_ls(i137 zeroext %x) nounwind { + store i137 %x, i137* @i137_s + ret void +} + +define void @i138_ls(i138 zeroext %x) nounwind { + store i138 %x, i138* @i138_s + ret void +} + +define void @i139_ls(i139 zeroext %x) nounwind { + store i139 %x, i139* @i139_s + ret void +} + +define void @i140_ls(i140 zeroext %x) nounwind { + store i140 %x, i140* @i140_s + ret void +} + +define void @i141_ls(i141 zeroext %x) nounwind { + store i141 %x, i141* @i141_s + ret void +} + +define void @i142_ls(i142 zeroext %x) nounwind { + store i142 %x, i142* @i142_s + ret void +} + +define void @i143_ls(i143 zeroext %x) nounwind { + store i143 %x, i143* @i143_s + ret void +} + +define void @i144_ls(i144 zeroext %x) nounwind { + store i144 %x, i144* @i144_s + ret void +} + +define void @i145_ls(i145 zeroext %x) nounwind { + store i145 %x, i145* @i145_s + ret void +} + +define void @i146_ls(i146 zeroext %x) nounwind { + store i146 %x, i146* @i146_s + ret void +} + +define void @i147_ls(i147 zeroext %x) nounwind { + store i147 %x, i147* @i147_s + ret void +} + +define void @i148_ls(i148 zeroext %x) nounwind { + store i148 %x, i148* @i148_s + ret void +} + +define void @i149_ls(i149 zeroext %x) nounwind { + store i149 %x, i149* @i149_s + ret void +} + +define void @i150_ls(i150 zeroext %x) nounwind { + store i150 %x, i150* @i150_s + ret void +} + +define void @i151_ls(i151 zeroext %x) nounwind { + store i151 %x, i151* @i151_s + ret void +} + +define void @i152_ls(i152 zeroext %x) nounwind { + store i152 %x, i152* @i152_s + ret void +} + +define void @i153_ls(i153 zeroext %x) nounwind { + store i153 %x, i153* @i153_s + ret void +} + +define void @i154_ls(i154 zeroext %x) nounwind { + store i154 %x, i154* @i154_s + ret void +} + +define void @i155_ls(i155 zeroext %x) nounwind { + store i155 %x, i155* @i155_s + ret void +} + +define void @i156_ls(i156 zeroext %x) nounwind { + store i156 %x, i156* @i156_s + ret void +} + +define void @i157_ls(i157 zeroext %x) nounwind { + store i157 %x, i157* @i157_s + ret void +} + +define void @i158_ls(i158 zeroext %x) nounwind { + store i158 %x, i158* @i158_s + ret void +} + +define void @i159_ls(i159 zeroext %x) nounwind { + store i159 %x, i159* @i159_s + ret void +} + +define void @i160_ls(i160 zeroext %x) nounwind { + store i160 %x, i160* @i160_s + ret void +} + +define void @i161_ls(i161 zeroext %x) nounwind { + store i161 %x, i161* @i161_s + ret void +} + +define void @i162_ls(i162 zeroext %x) nounwind { + store i162 %x, i162* @i162_s + ret void +} + +define void @i163_ls(i163 zeroext %x) nounwind { + store i163 %x, i163* @i163_s + ret void +} + +define void @i164_ls(i164 zeroext %x) nounwind { + store i164 %x, i164* @i164_s + ret void +} + +define void @i165_ls(i165 zeroext %x) nounwind { + store i165 %x, i165* @i165_s + ret void +} + +define void @i166_ls(i166 zeroext %x) nounwind { + store i166 %x, i166* @i166_s + ret void +} + +define void @i167_ls(i167 zeroext %x) nounwind { + store i167 %x, i167* @i167_s + ret void +} + +define void @i168_ls(i168 zeroext %x) nounwind { + store i168 %x, i168* @i168_s + ret void +} + +define void @i169_ls(i169 zeroext %x) nounwind { + store i169 %x, i169* @i169_s + ret void +} + +define void @i170_ls(i170 zeroext %x) nounwind { + store i170 %x, i170* @i170_s + ret void +} + +define void @i171_ls(i171 zeroext %x) nounwind { + store i171 %x, i171* @i171_s + ret void +} + +define void @i172_ls(i172 zeroext %x) nounwind { + store i172 %x, i172* @i172_s + ret void +} + +define void @i173_ls(i173 zeroext %x) nounwind { + store i173 %x, i173* @i173_s + ret void +} + +define void @i174_ls(i174 zeroext %x) nounwind { + store i174 %x, i174* @i174_s + ret void +} + +define void @i175_ls(i175 zeroext %x) nounwind { + store i175 %x, i175* @i175_s + ret void +} + +define void @i176_ls(i176 zeroext %x) nounwind { + store i176 %x, i176* @i176_s + ret void +} + +define void @i177_ls(i177 zeroext %x) nounwind { + store i177 %x, i177* @i177_s + ret void +} + +define void @i178_ls(i178 zeroext %x) nounwind { + store i178 %x, i178* @i178_s + ret void +} + +define void @i179_ls(i179 zeroext %x) nounwind { + store i179 %x, i179* @i179_s + ret void +} + +define void @i180_ls(i180 zeroext %x) nounwind { + store i180 %x, i180* @i180_s + ret void +} + +define void @i181_ls(i181 zeroext %x) nounwind { + store i181 %x, i181* @i181_s + ret void +} + +define void @i182_ls(i182 zeroext %x) nounwind { + store i182 %x, i182* @i182_s + ret void +} + +define void @i183_ls(i183 zeroext %x) nounwind { + store i183 %x, i183* @i183_s + ret void +} + +define void @i184_ls(i184 zeroext %x) nounwind { + store i184 %x, i184* @i184_s + ret void +} + +define void @i185_ls(i185 zeroext %x) nounwind { + store i185 %x, i185* @i185_s + ret void +} + +define void @i186_ls(i186 zeroext %x) nounwind { + store i186 %x, i186* @i186_s + ret void +} + +define void @i187_ls(i187 zeroext %x) nounwind { + store i187 %x, i187* @i187_s + ret void +} + +define void @i188_ls(i188 zeroext %x) nounwind { + store i188 %x, i188* @i188_s + ret void +} + +define void @i189_ls(i189 zeroext %x) nounwind { + store i189 %x, i189* @i189_s + ret void +} + +define void @i190_ls(i190 zeroext %x) nounwind { + store i190 %x, i190* @i190_s + ret void +} + +define void @i191_ls(i191 zeroext %x) nounwind { + store i191 %x, i191* @i191_s + ret void +} + +define void @i192_ls(i192 zeroext %x) nounwind { + store i192 %x, i192* @i192_s + ret void +} + +define void @i193_ls(i193 zeroext %x) nounwind { + store i193 %x, i193* @i193_s + ret void +} + +define void @i194_ls(i194 zeroext %x) nounwind { + store i194 %x, i194* @i194_s + ret void +} + +define void @i195_ls(i195 zeroext %x) nounwind { + store i195 %x, i195* @i195_s + ret void +} + +define void @i196_ls(i196 zeroext %x) nounwind { + store i196 %x, i196* @i196_s + ret void +} + +define void @i197_ls(i197 zeroext %x) nounwind { + store i197 %x, i197* @i197_s + ret void +} + +define void @i198_ls(i198 zeroext %x) nounwind { + store i198 %x, i198* @i198_s + ret void +} + +define void @i199_ls(i199 zeroext %x) nounwind { + store i199 %x, i199* @i199_s + ret void +} + +define void @i200_ls(i200 zeroext %x) nounwind { + store i200 %x, i200* @i200_s + ret void +} + +define void @i201_ls(i201 zeroext %x) nounwind { + store i201 %x, i201* @i201_s + ret void +} + +define void @i202_ls(i202 zeroext %x) nounwind { + store i202 %x, i202* @i202_s + ret void +} + +define void @i203_ls(i203 zeroext %x) nounwind { + store i203 %x, i203* @i203_s + ret void +} + +define void @i204_ls(i204 zeroext %x) nounwind { + store i204 %x, i204* @i204_s + ret void +} + +define void @i205_ls(i205 zeroext %x) nounwind { + store i205 %x, i205* @i205_s + ret void +} + +define void @i206_ls(i206 zeroext %x) nounwind { + store i206 %x, i206* @i206_s + ret void +} + +define void @i207_ls(i207 zeroext %x) nounwind { + store i207 %x, i207* @i207_s + ret void +} + +define void @i208_ls(i208 zeroext %x) nounwind { + store i208 %x, i208* @i208_s + ret void +} + +define void @i209_ls(i209 zeroext %x) nounwind { + store i209 %x, i209* @i209_s + ret void +} + +define void @i210_ls(i210 zeroext %x) nounwind { + store i210 %x, i210* @i210_s + ret void +} + +define void @i211_ls(i211 zeroext %x) nounwind { + store i211 %x, i211* @i211_s + ret void +} + +define void @i212_ls(i212 zeroext %x) nounwind { + store i212 %x, i212* @i212_s + ret void +} + +define void @i213_ls(i213 zeroext %x) nounwind { + store i213 %x, i213* @i213_s + ret void +} + +define void @i214_ls(i214 zeroext %x) nounwind { + store i214 %x, i214* @i214_s + ret void +} + +define void @i215_ls(i215 zeroext %x) nounwind { + store i215 %x, i215* @i215_s + ret void +} + +define void @i216_ls(i216 zeroext %x) nounwind { + store i216 %x, i216* @i216_s + ret void +} + +define void @i217_ls(i217 zeroext %x) nounwind { + store i217 %x, i217* @i217_s + ret void +} + +define void @i218_ls(i218 zeroext %x) nounwind { + store i218 %x, i218* @i218_s + ret void +} + +define void @i219_ls(i219 zeroext %x) nounwind { + store i219 %x, i219* @i219_s + ret void +} + +define void @i220_ls(i220 zeroext %x) nounwind { + store i220 %x, i220* @i220_s + ret void +} + +define void @i221_ls(i221 zeroext %x) nounwind { + store i221 %x, i221* @i221_s + ret void +} + +define void @i222_ls(i222 zeroext %x) nounwind { + store i222 %x, i222* @i222_s + ret void +} + +define void @i223_ls(i223 zeroext %x) nounwind { + store i223 %x, i223* @i223_s + ret void +} + +define void @i224_ls(i224 zeroext %x) nounwind { + store i224 %x, i224* @i224_s + ret void +} + +define void @i225_ls(i225 zeroext %x) nounwind { + store i225 %x, i225* @i225_s + ret void +} + +define void @i226_ls(i226 zeroext %x) nounwind { + store i226 %x, i226* @i226_s + ret void +} + +define void @i227_ls(i227 zeroext %x) nounwind { + store i227 %x, i227* @i227_s + ret void +} + +define void @i228_ls(i228 zeroext %x) nounwind { + store i228 %x, i228* @i228_s + ret void +} + +define void @i229_ls(i229 zeroext %x) nounwind { + store i229 %x, i229* @i229_s + ret void +} + +define void @i230_ls(i230 zeroext %x) nounwind { + store i230 %x, i230* @i230_s + ret void +} + +define void @i231_ls(i231 zeroext %x) nounwind { + store i231 %x, i231* @i231_s + ret void +} + +define void @i232_ls(i232 zeroext %x) nounwind { + store i232 %x, i232* @i232_s + ret void +} + +define void @i233_ls(i233 zeroext %x) nounwind { + store i233 %x, i233* @i233_s + ret void +} + +define void @i234_ls(i234 zeroext %x) nounwind { + store i234 %x, i234* @i234_s + ret void +} + +define void @i235_ls(i235 zeroext %x) nounwind { + store i235 %x, i235* @i235_s + ret void +} + +define void @i236_ls(i236 zeroext %x) nounwind { + store i236 %x, i236* @i236_s + ret void +} + +define void @i237_ls(i237 zeroext %x) nounwind { + store i237 %x, i237* @i237_s + ret void +} + +define void @i238_ls(i238 zeroext %x) nounwind { + store i238 %x, i238* @i238_s + ret void +} + +define void @i239_ls(i239 zeroext %x) nounwind { + store i239 %x, i239* @i239_s + ret void +} + +define void @i240_ls(i240 zeroext %x) nounwind { + store i240 %x, i240* @i240_s + ret void +} + +define void @i241_ls(i241 zeroext %x) nounwind { + store i241 %x, i241* @i241_s + ret void +} + +define void @i242_ls(i242 zeroext %x) nounwind { + store i242 %x, i242* @i242_s + ret void +} + +define void @i243_ls(i243 zeroext %x) nounwind { + store i243 %x, i243* @i243_s + ret void +} + +define void @i244_ls(i244 zeroext %x) nounwind { + store i244 %x, i244* @i244_s + ret void +} + +define void @i245_ls(i245 zeroext %x) nounwind { + store i245 %x, i245* @i245_s + ret void +} + +define void @i246_ls(i246 zeroext %x) nounwind { + store i246 %x, i246* @i246_s + ret void +} + +define void @i247_ls(i247 zeroext %x) nounwind { + store i247 %x, i247* @i247_s + ret void +} + +define void @i248_ls(i248 zeroext %x) nounwind { + store i248 %x, i248* @i248_s + ret void +} + +define void @i249_ls(i249 zeroext %x) nounwind { + store i249 %x, i249* @i249_s + ret void +} + +define void @i250_ls(i250 zeroext %x) nounwind { + store i250 %x, i250* @i250_s + ret void +} + +define void @i251_ls(i251 zeroext %x) nounwind { + store i251 %x, i251* @i251_s + ret void +} + +define void @i252_ls(i252 zeroext %x) nounwind { + store i252 %x, i252* @i252_s + ret void +} + +define void @i253_ls(i253 zeroext %x) nounwind { + store i253 %x, i253* @i253_s + ret void +} + +define void @i254_ls(i254 zeroext %x) nounwind { + store i254 %x, i254* @i254_s + ret void +} + +define void @i255_ls(i255 zeroext %x) nounwind { + store i255 %x, i255* @i255_s + ret void +} + +define void @i256_ls(i256 zeroext %x) nounwind { + store i256 %x, i256* @i256_s + ret void +} diff --git a/test/CodeGen/Generic/BasicInstrs.ll b/test/CodeGen/Generic/BasicInstrs.ll new file mode 100644 index 0000000..578431e --- /dev/null +++ b/test/CodeGen/Generic/BasicInstrs.ll @@ -0,0 +1,54 @@ +; New testcase, this contains a bunch of simple instructions that should be +; handled by a code generator. + +; RUN: llc < %s + +define i32 @add(i32 %A, i32 %B) { + %R = add i32 %A, %B ; <i32> [#uses=1] + ret i32 %R +} + +define i32 @sub(i32 %A, i32 %B) { + %R = sub i32 %A, %B ; <i32> [#uses=1] + ret i32 %R +} + +define i32 @mul(i32 %A, i32 %B) { + %R = mul i32 %A, %B ; <i32> [#uses=1] + ret i32 %R +} + +define i32 @sdiv(i32 %A, i32 %B) { + %R = sdiv i32 %A, %B ; <i32> [#uses=1] + ret i32 %R +} + +define i32 @udiv(i32 %A, i32 %B) { + %R = udiv i32 %A, %B ; <i32> [#uses=1] + ret i32 %R +} + +define i32 @srem(i32 %A, i32 %B) { + %R = srem i32 %A, %B ; <i32> [#uses=1] + ret i32 %R +} + +define i32 @urem(i32 %A, i32 %B) { + %R = urem i32 %A, %B ; <i32> [#uses=1] + ret i32 %R +} + +define i32 @and(i32 %A, i32 %B) { + %R = and i32 %A, %B ; <i32> [#uses=1] + ret i32 %R +} + +define i32 @or(i32 %A, i32 %B) { + %R = or i32 %A, %B ; <i32> [#uses=1] + ret i32 %R +} + +define i32 @xor(i32 %A, i32 %B) { + %R = xor i32 %A, %B ; <i32> [#uses=1] + ret i32 %R +} diff --git a/test/CodeGen/Generic/BurgBadRegAlloc.ll b/test/CodeGen/Generic/BurgBadRegAlloc.ll new file mode 100644 index 0000000..99d856a --- /dev/null +++ b/test/CodeGen/Generic/BurgBadRegAlloc.ll @@ -0,0 +1,829 @@ +; RUN: llc < %s + +;; 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 i16] + %Dimension = type %struct.dimension* + %Index_Map = type { i32, %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 i32 ()* + %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 { i32, %List } + %struct.binding = type { i8*, i32 } + %struct.dimension = type { i16*, %Index_Map, %Mapping, i32, %PlankMap } + %struct.index_map = type { i32, %Item_Set* } + %struct.intlist = type { i32, %IntList } + %struct.item = type { %DeltaCost, %Rule } + %struct.item_set = type { i32, i32, %Operator, [2 x %Item_Set], %Item_Set, i16*, %ItemArray, %ItemArray } + %struct.list = type { i8*, %List } + %struct.mapping = type { %List*, i32, i32, i32, %Item_Set* } + %struct.nonterminal = type { i8*, i32, i32, i32, %PlankMap, %Rule } + %struct.operator = type { i8*, i32, i32, i32, i32, i32, %Table } + %struct.pattern = type { %NonTerminal, %Operator, [2 x %NonTerminal] } + %struct.patternAST = type { %Symbol, i8*, %List } + %struct.plank = type { i8*, %List, i32 } + %struct.plankMap = type { %List, i32, %StateMap } + %struct.rule = type { %DeltaCost, i32, i32, i32, %NonTerminal, %Pattern, i32 } + %struct.ruleAST = type { i8*, %PatternAST, i32, %IntList, %Rule, %StrTableElement, %StrTableElement } + %struct.stateMap = type { i8*, %Plank, i32, i16* } + %struct.strTableElement = type { i8*, %IntList, i8* } + %struct.symbol = type { i8*, i32, { %Operator } } + %struct.table = type { %Operator, %List, i16*, [2 x %Dimension], %Item_Set* } +@yylval = external global %YYSTYPE ; <%YYSTYPE*> [#uses=1] +@yylhs = external global [25 x i16] ; <[25 x i16]*> [#uses=1] +@yylen = external global [25 x i16] ; <[25 x i16]*> [#uses=1] +@yydefred = external global [43 x i16] ; <[43 x i16]*> [#uses=1] +@yydgoto = external global [12 x i16] ; <[12 x i16]*> [#uses=1] +@yysindex = external global [43 x i16] ; <[43 x i16]*> [#uses=2] +@yyrindex = external global [43 x i16] ; <[43 x i16]*> [#uses=1] +@yygindex = external global [12 x i16] ; <[12 x i16]*> [#uses=1] +@yytable = external global [263 x i16] ; <[263 x i16]*> [#uses=4] +@yycheck = external global [263 x i16] ; <[263 x i16]*> [#uses=4] +@yynerrs = external global i32 ; <i32*> [#uses=3] +@yyerrflag = external global i32 ; <i32*> [#uses=6] +@yychar = external global i32 ; <i32*> [#uses=15] +@yyssp = external global i16* ; <i16**> [#uses=15] +@yyvsp = external global %YYSTYPE* ; <%YYSTYPE**> [#uses=30] +@yyval = external global %YYSTYPE ; <%YYSTYPE*> [#uses=1] +@yyss = external global i16* ; <i16**> [#uses=3] +@yysslim = external global i16* ; <i16**> [#uses=3] +@yyvs = external global %YYSTYPE* ; <%YYSTYPE**> [#uses=1] +@.LC01 = external global [13 x i8] ; <[13 x i8]*> [#uses=1] +@.LC1 = external global [20 x i8] ; <[20 x i8]*> [#uses=1] + +define i32 @yyparse() { +bb0: + store i32 0, i32* @yynerrs + store i32 0, i32* @yyerrflag + store i32 -1, i32* @yychar + %reg113 = load i16** @yyss ; <i16*> [#uses=1] + %cond581 = icmp ne i16* %reg113, null ; <i1> [#uses=1] + br i1 %cond581, label %bb3, label %bb2 + +bb2: ; preds = %bb0 + %reg584 = call i32 @yygrowstack( ) ; <i32> [#uses=1] + %cond584 = icmp ne i32 %reg584, 0 ; <i1> [#uses=1] + br i1 %cond584, label %bb113, label %bb3 + +bb3: ; preds = %bb2, %bb0 + %reg115 = load i16** @yyss ; <i16*> [#uses=1] + store i16* %reg115, i16** @yyssp + %reg116 = load %YYSTYPE** @yyvs ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg116, %YYSTYPE** @yyvsp + %reg117 = load i16** @yyssp ; <i16*> [#uses=1] + store i16 0, i16* %reg117 + br label %bb4 + +bb4: ; preds = %bb112, %bb102, %bb35, %bb31, %bb15, %bb14, %bb3 + %reg458 = phi i32 [ %reg476, %bb112 ], [ 1, %bb102 ], [ %reg458, %bb35 ], [ %cast768, %bb31 ], [ %cast658, %bb15 ], [ %cast658, %bb14 ], [ 0, %bb3 ] ; <i32> [#uses=2] + %reg458-idxcast = zext i32 %reg458 to i64 ; <i64> [#uses=3] + %reg594 = getelementptr [43 x i16]* @yydefred, i64 0, i64 %reg458-idxcast ; <i16*> [#uses=1] + %reg125 = load i16* %reg594 ; <i16> [#uses=1] + %cast599 = sext i16 %reg125 to i32 ; <i32> [#uses=2] + %cond600 = icmp ne i32 %cast599, 0 ; <i1> [#uses=1] + br i1 %cond600, label %bb36, label %bb5 + +bb5: ; preds = %bb4 + %reg127 = load i32* @yychar ; <i32> [#uses=1] + %cond603 = icmp sge i32 %reg127, 0 ; <i1> [#uses=1] + br i1 %cond603, label %bb8, label %bb6 + +bb6: ; preds = %bb5 + %reg607 = call i32 @yylex( ) ; <i32> [#uses=1] + store i32 %reg607, i32* @yychar + %reg129 = load i32* @yychar ; <i32> [#uses=1] + %cond609 = icmp sge i32 %reg129, 0 ; <i1> [#uses=1] + br i1 %cond609, label %bb8, label %bb7 + +bb7: ; preds = %bb6 + store i32 0, i32* @yychar + br label %bb8 + +bb8: ; preds = %bb7, %bb6, %bb5 + %reg615 = getelementptr [43 x i16]* @yysindex, i64 0, i64 %reg458-idxcast ; <i16*> [#uses=1] + %reg137 = load i16* %reg615 ; <i16> [#uses=1] + %cast620 = sext i16 %reg137 to i32 ; <i32> [#uses=2] + %cond621 = icmp eq i32 %cast620, 0 ; <i1> [#uses=1] + br i1 %cond621, label %bb16, label %bb9 + +bb9: ; preds = %bb8 + %reg139 = load i32* @yychar ; <i32> [#uses=2] + %reg460 = add i32 %cast620, %reg139 ; <i32> [#uses=3] + %cond624 = icmp slt i32 %reg460, 0 ; <i1> [#uses=1] + br i1 %cond624, label %bb16, label %bb10 + +bb10: ; preds = %bb9 + %cond627 = icmp sgt i32 %reg460, 262 ; <i1> [#uses=1] + br i1 %cond627, label %bb16, label %bb11 + +bb11: ; preds = %bb10 + %reg460-idxcast = sext i32 %reg460 to i64 ; <i64> [#uses=2] + %reg632 = getelementptr [263 x i16]* @yycheck, i64 0, i64 %reg460-idxcast ; <i16*> [#uses=1] + %reg148 = load i16* %reg632 ; <i16> [#uses=1] + %cast637 = sext i16 %reg148 to i32 ; <i32> [#uses=1] + %cond639 = icmp ne i32 %cast637, %reg139 ; <i1> [#uses=1] + br i1 %cond639, label %bb16, label %bb12 + +bb12: ; preds = %bb11 + %reg150 = load i16** @yyssp ; <i16*> [#uses=1] + %cast640 = bitcast i16* %reg150 to i8* ; <i8*> [#uses=1] + %reg151 = load i16** @yysslim ; <i16*> [#uses=1] + %cast641 = bitcast i16* %reg151 to i8* ; <i8*> [#uses=1] + %cond642 = icmp ult i8* %cast640, %cast641 ; <i1> [#uses=1] + br i1 %cond642, label %bb14, label %bb13 + +bb13: ; preds = %bb12 + %reg644 = call i32 @yygrowstack( ) ; <i32> [#uses=1] + %cond644 = icmp ne i32 %reg644, 0 ; <i1> [#uses=1] + br i1 %cond644, label %bb113, label %bb14 + +bb14: ; preds = %bb13, %bb12 + %reg153 = load i16** @yyssp ; <i16*> [#uses=1] + %reg647 = getelementptr i16* %reg153, i64 1 ; <i16*> [#uses=2] + store i16* %reg647, i16** @yyssp + %reg653 = getelementptr [263 x i16]* @yytable, i64 0, i64 %reg460-idxcast ; <i16*> [#uses=1] + %reg162 = load i16* %reg653 ; <i16> [#uses=2] + %cast658 = sext i16 %reg162 to i32 ; <i32> [#uses=2] + store i16 %reg162, i16* %reg647 + %reg164 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=2] + %reg661 = getelementptr %YYSTYPE* %reg164, i64 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg661, %YYSTYPE** @yyvsp + %reg167 = load %IntList* getelementptr (%YYSTYPE* @yylval, i64 0, i32 0) ; <%IntList> [#uses=1] + %reg661.idx1 = getelementptr %YYSTYPE* %reg164, i64 1, i32 0 ; <%IntList*> [#uses=1] + store %IntList %reg167, %IntList* %reg661.idx1 + store i32 -1, i32* @yychar + %reg169 = load i32* @yyerrflag ; <i32> [#uses=2] + %cond669 = icmp sle i32 %reg169, 0 ; <i1> [#uses=1] + br i1 %cond669, label %bb4, label %bb15 + +bb15: ; preds = %bb14 + %reg171 = add i32 %reg169, -1 ; <i32> [#uses=1] + store i32 %reg171, i32* @yyerrflag + br label %bb4 + +bb16: ; preds = %bb11, %bb10, %bb9, %bb8 + %reg677 = getelementptr [43 x i16]* @yyrindex, i64 0, i64 %reg458-idxcast ; <i16*> [#uses=1] + %reg178 = load i16* %reg677 ; <i16> [#uses=1] + %cast682 = sext i16 %reg178 to i32 ; <i32> [#uses=2] + %cond683 = icmp eq i32 %cast682, 0 ; <i1> [#uses=1] + br i1 %cond683, label %bb21, label %bb17 + +bb17: ; preds = %bb16 + %reg180 = load i32* @yychar ; <i32> [#uses=2] + %reg463 = add i32 %cast682, %reg180 ; <i32> [#uses=3] + %cond686 = icmp slt i32 %reg463, 0 ; <i1> [#uses=1] + br i1 %cond686, label %bb21, label %bb18 + +bb18: ; preds = %bb17 + %cond689 = icmp sgt i32 %reg463, 262 ; <i1> [#uses=1] + br i1 %cond689, label %bb21, label %bb19 + +bb19: ; preds = %bb18 + %reg463-idxcast = sext i32 %reg463 to i64 ; <i64> [#uses=2] + %reg694 = getelementptr [263 x i16]* @yycheck, i64 0, i64 %reg463-idxcast ; <i16*> [#uses=1] + %reg189 = load i16* %reg694 ; <i16> [#uses=1] + %cast699 = sext i16 %reg189 to i32 ; <i32> [#uses=1] + %cond701 = icmp ne i32 %cast699, %reg180 ; <i1> [#uses=1] + br i1 %cond701, label %bb21, label %bb20 + +bb20: ; preds = %bb19 + %reg704 = getelementptr [263 x i16]* @yytable, i64 0, i64 %reg463-idxcast ; <i16*> [#uses=1] + %reg197 = load i16* %reg704 ; <i16> [#uses=1] + %cast709 = sext i16 %reg197 to i32 ; <i32> [#uses=1] + br label %bb36 + +bb21: ; preds = %bb19, %bb18, %bb17, %bb16 + %reg198 = load i32* @yyerrflag ; <i32> [#uses=1] + %cond711 = icmp ne i32 %reg198, 0 ; <i1> [#uses=1] + br i1 %cond711, label %bb23, label %bb22 + +bb22: ; preds = %bb21 + call void @yyerror( i8* getelementptr ([13 x i8]* @.LC01, i64 0, i64 0) ) + %reg200 = load i32* @yynerrs ; <i32> [#uses=1] + %reg201 = add i32 %reg200, 1 ; <i32> [#uses=1] + store i32 %reg201, i32* @yynerrs + br label %bb23 + +bb23: ; preds = %bb22, %bb21 + %reg202 = load i32* @yyerrflag ; <i32> [#uses=1] + %cond719 = icmp sgt i32 %reg202, 2 ; <i1> [#uses=1] + br i1 %cond719, label %bb34, label %bb24 + +bb24: ; preds = %bb23 + store i32 3, i32* @yyerrflag + %reg241 = load i16** @yyss ; <i16*> [#uses=1] + %cast778 = bitcast i16* %reg241 to i8* ; <i8*> [#uses=1] + br label %bb25 + +bb25: ; preds = %bb33, %bb24 + %reg204 = load i16** @yyssp ; <i16*> [#uses=4] + %reg206 = load i16* %reg204 ; <i16> [#uses=1] + %reg206-idxcast = sext i16 %reg206 to i64 ; <i64> [#uses=1] + %reg727 = getelementptr [43 x i16]* @yysindex, i64 0, i64 %reg206-idxcast ; <i16*> [#uses=1] + %reg212 = load i16* %reg727 ; <i16> [#uses=2] + %cast732 = sext i16 %reg212 to i32 ; <i32> [#uses=2] + %cond733 = icmp eq i32 %cast732, 0 ; <i1> [#uses=1] + br i1 %cond733, label %bb32, label %bb26 + +bb26: ; preds = %bb25 + %reg466 = add i32 %cast732, 256 ; <i32> [#uses=2] + %cond736 = icmp slt i32 %reg466, 0 ; <i1> [#uses=1] + br i1 %cond736, label %bb32, label %bb27 + +bb27: ; preds = %bb26 + %cond739 = icmp sgt i32 %reg466, 262 ; <i1> [#uses=1] + br i1 %cond739, label %bb32, label %bb28 + +bb28: ; preds = %bb27 + %reg212-idxcast = sext i16 %reg212 to i64 ; <i64> [#uses=1] + %reg212-idxcast-offset = add i64 %reg212-idxcast, 256 ; <i64> [#uses=2] + %reg744 = getelementptr [263 x i16]* @yycheck, i64 0, i64 %reg212-idxcast-offset ; <i16*> [#uses=1] + %reg221 = load i16* %reg744 ; <i16> [#uses=1] + %cond748 = icmp ne i16 %reg221, 256 ; <i1> [#uses=1] + br i1 %cond748, label %bb32, label %bb29 + +bb29: ; preds = %bb28 + %cast750 = bitcast i16* %reg204 to i8* ; <i8*> [#uses=1] + %reg223 = load i16** @yysslim ; <i16*> [#uses=1] + %cast751 = bitcast i16* %reg223 to i8* ; <i8*> [#uses=1] + %cond752 = icmp ult i8* %cast750, %cast751 ; <i1> [#uses=1] + br i1 %cond752, label %bb31, label %bb30 + +bb30: ; preds = %bb29 + %reg754 = call i32 @yygrowstack( ) ; <i32> [#uses=1] + %cond754 = icmp ne i32 %reg754, 0 ; <i1> [#uses=1] + br i1 %cond754, label %bb113, label %bb31 + +bb31: ; preds = %bb30, %bb29 + %reg225 = load i16** @yyssp ; <i16*> [#uses=1] + %reg757 = getelementptr i16* %reg225, i64 1 ; <i16*> [#uses=2] + store i16* %reg757, i16** @yyssp + %reg763 = getelementptr [263 x i16]* @yytable, i64 0, i64 %reg212-idxcast-offset ; <i16*> [#uses=1] + %reg234 = load i16* %reg763 ; <i16> [#uses=2] + %cast768 = sext i16 %reg234 to i32 ; <i32> [#uses=1] + store i16 %reg234, i16* %reg757 + %reg236 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=2] + %reg771 = getelementptr %YYSTYPE* %reg236, i64 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg771, %YYSTYPE** @yyvsp + %reg239 = load %IntList* getelementptr (%YYSTYPE* @yylval, i64 0, i32 0) ; <%IntList> [#uses=1] + %reg771.idx1 = getelementptr %YYSTYPE* %reg236, i64 1, i32 0 ; <%IntList*> [#uses=1] + store %IntList %reg239, %IntList* %reg771.idx1 + br label %bb4 + +bb32: ; preds = %bb28, %bb27, %bb26, %bb25 + %cast777 = bitcast i16* %reg204 to i8* ; <i8*> [#uses=1] + %cond779 = icmp ule i8* %cast777, %cast778 ; <i1> [#uses=1] + br i1 %cond779, label %UnifiedExitNode, label %bb33 + +bb33: ; preds = %bb32 + %reg781 = getelementptr i16* %reg204, i64 -1 ; <i16*> [#uses=1] + store i16* %reg781, i16** @yyssp + %reg244 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=1] + %reg786 = getelementptr %YYSTYPE* %reg244, i64 -1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg786, %YYSTYPE** @yyvsp + br label %bb25 + +bb34: ; preds = %bb23 + %reg246 = load i32* @yychar ; <i32> [#uses=1] + %cond791 = icmp eq i32 %reg246, 0 ; <i1> [#uses=1] + br i1 %cond791, label %UnifiedExitNode, label %bb35 + +bb35: ; preds = %bb34 + store i32 -1, i32* @yychar + br label %bb4 + +bb36: ; preds = %bb20, %bb4 + %reg468 = phi i32 [ %cast709, %bb20 ], [ %cast599, %bb4 ] ; <i32> [#uses=31] + %reg468-idxcast = sext i32 %reg468 to i64 ; <i64> [#uses=2] + %reg796 = getelementptr [25 x i16]* @yylen, i64 0, i64 %reg468-idxcast ; <i16*> [#uses=1] + %reg254 = load i16* %reg796 ; <i16> [#uses=2] + %reg259 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=1] + %reg254-idxcast = sext i16 %reg254 to i64 ; <i64> [#uses=1] + %reg254-idxcast-scale = mul i64 %reg254-idxcast, -1 ; <i64> [#uses=1] + %reg254-idxcast-scale-offset = add i64 %reg254-idxcast-scale, 1 ; <i64> [#uses=1] + %reg261.idx1 = getelementptr %YYSTYPE* %reg259, i64 %reg254-idxcast-scale-offset, i32 0 ; <%IntList*> [#uses=1] + %reg261 = load %IntList* %reg261.idx1 ; <%IntList> [#uses=1] + store %IntList %reg261, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + %cond812 = icmp eq i32 %reg468, 13 ; <i1> [#uses=1] + br i1 %cond812, label %bb85, label %bb37 + +bb37: ; preds = %bb36 + %cond814 = icmp sgt i32 %reg468, 13 ; <i1> [#uses=1] + br i1 %cond814, label %bb56, label %bb38 + +bb38: ; preds = %bb37 + %cond817 = icmp eq i32 %reg468, 7 ; <i1> [#uses=1] + br i1 %cond817, label %bb79, label %bb39 + +bb39: ; preds = %bb38 + %cond819 = icmp sgt i32 %reg468, 7 ; <i1> [#uses=1] + br i1 %cond819, label %bb48, label %bb40 + +bb40: ; preds = %bb39 + %cond822 = icmp eq i32 %reg468, 4 ; <i1> [#uses=1] + br i1 %cond822, label %bb76, label %bb41 + +bb41: ; preds = %bb40 + %cond824 = icmp sgt i32 %reg468, 4 ; <i1> [#uses=1] + br i1 %cond824, label %bb45, label %bb42 + +bb42: ; preds = %bb41 + %cond827 = icmp eq i32 %reg468, 2 ; <i1> [#uses=1] + br i1 %cond827, label %bb74, label %bb43 + +bb43: ; preds = %bb42 + %cond829 = icmp eq i32 %reg468, 3 ; <i1> [#uses=1] + br i1 %cond829, label %bb75, label %bb97 + +bb45: ; preds = %bb41 + %cond831 = icmp eq i32 %reg468, 5 ; <i1> [#uses=1] + br i1 %cond831, label %bb77, label %bb46 + +bb46: ; preds = %bb45 + %cond833 = icmp eq i32 %reg468, 6 ; <i1> [#uses=1] + br i1 %cond833, label %bb78, label %bb97 + +bb48: ; preds = %bb39 + %cond835 = icmp eq i32 %reg468, 10 ; <i1> [#uses=1] + br i1 %cond835, label %bb82, label %bb49 + +bb49: ; preds = %bb48 + %cond837 = icmp sgt i32 %reg468, 10 ; <i1> [#uses=1] + br i1 %cond837, label %bb53, label %bb50 + +bb50: ; preds = %bb49 + %cond840 = icmp eq i32 %reg468, 8 ; <i1> [#uses=1] + br i1 %cond840, label %bb80, label %bb51 + +bb51: ; preds = %bb50 + %cond842 = icmp eq i32 %reg468, 9 ; <i1> [#uses=1] + br i1 %cond842, label %bb81, label %bb97 + +bb53: ; preds = %bb49 + %cond844 = icmp eq i32 %reg468, 11 ; <i1> [#uses=1] + br i1 %cond844, label %bb83, label %bb54 + +bb54: ; preds = %bb53 + %cond846 = icmp eq i32 %reg468, 12 ; <i1> [#uses=1] + br i1 %cond846, label %bb84, label %bb97 + +bb56: ; preds = %bb37 + %cond848 = icmp eq i32 %reg468, 19 ; <i1> [#uses=1] + br i1 %cond848, label %bb91, label %bb57 + +bb57: ; preds = %bb56 + %cond850 = icmp sgt i32 %reg468, 19 ; <i1> [#uses=1] + br i1 %cond850, label %bb66, label %bb58 + +bb58: ; preds = %bb57 + %cond853 = icmp eq i32 %reg468, 16 ; <i1> [#uses=1] + br i1 %cond853, label %bb88, label %bb59 + +bb59: ; preds = %bb58 + %cond855 = icmp sgt i32 %reg468, 16 ; <i1> [#uses=1] + br i1 %cond855, label %bb63, label %bb60 + +bb60: ; preds = %bb59 + %cond858 = icmp eq i32 %reg468, 14 ; <i1> [#uses=1] + br i1 %cond858, label %bb86, label %bb61 + +bb61: ; preds = %bb60 + %cond860 = icmp eq i32 %reg468, 15 ; <i1> [#uses=1] + br i1 %cond860, label %bb87, label %bb97 + +bb63: ; preds = %bb59 + %cond862 = icmp eq i32 %reg468, 17 ; <i1> [#uses=1] + br i1 %cond862, label %bb89, label %bb64 + +bb64: ; preds = %bb63 + %cond864 = icmp eq i32 %reg468, 18 ; <i1> [#uses=1] + br i1 %cond864, label %bb90, label %bb97 + +bb66: ; preds = %bb57 + %cond866 = icmp eq i32 %reg468, 22 ; <i1> [#uses=1] + br i1 %cond866, label %bb94, label %bb67 + +bb67: ; preds = %bb66 + %cond868 = icmp sgt i32 %reg468, 22 ; <i1> [#uses=1] + br i1 %cond868, label %bb71, label %bb68 + +bb68: ; preds = %bb67 + %cond871 = icmp eq i32 %reg468, 20 ; <i1> [#uses=1] + br i1 %cond871, label %bb92, label %bb69 + +bb69: ; preds = %bb68 + %cond873 = icmp eq i32 %reg468, 21 ; <i1> [#uses=1] + br i1 %cond873, label %bb93, label %bb97 + +bb71: ; preds = %bb67 + %cond875 = icmp eq i32 %reg468, 23 ; <i1> [#uses=1] + br i1 %cond875, label %bb95, label %bb72 + +bb72: ; preds = %bb71 + %cond877 = icmp eq i32 %reg468, 24 ; <i1> [#uses=1] + br i1 %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, i64 -2, i32 0 ; <%IntList*> [#uses=1] + %reg264 = load %IntList* %reg264.idx1 ; <%IntList> [#uses=1] + %reg265.idx = getelementptr %YYSTYPE* %reg262, i64 0, i32 0 ; <%IntList*> [#uses=1] + %reg265 = load %IntList* %reg265.idx ; <%IntList> [#uses=1] + %cast889 = bitcast %IntList %reg265 to %List ; <%List> [#uses=1] + %cast890 = bitcast %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, i64 0, i32 0) + br label %bb97 + +bb77: ; preds = %bb45 + %reg269 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=2] + %cast894 = getelementptr %YYSTYPE* %reg269, i64 0, i32 0 ; <%IntList*> [#uses=1] + %reg271 = load %IntList* %cast894 ; <%IntList> [#uses=1] + %reg271.upgrd.1 = bitcast %IntList %reg271 to i8* ; <i8*> [#uses=1] + %reg272.idx1 = getelementptr %YYSTYPE* %reg269, i64 -1, i32 0 ; <%IntList*> [#uses=1] + %reg272 = load %IntList* %reg272.idx1 ; <%IntList> [#uses=1] + %cast901 = bitcast %IntList %reg272 to %List ; <%List> [#uses=1] + %reg901 = call %List @newList( i8* %reg271.upgrd.1, %List %cast901 ) ; <%List> [#uses=1] + bitcast %List %reg901 to %IntList ; <%IntList>:0 [#uses=1] + store %IntList %0, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb78: ; preds = %bb46 + %reg275 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=1] + %reg277.idx = getelementptr %YYSTYPE* %reg275, i64 0, i32 0 ; <%IntList*> [#uses=1] + %reg277 = load %IntList* %reg277.idx ; <%IntList> [#uses=1] + %cast907 = bitcast %IntList %reg277 to %List ; <%List> [#uses=1] + %reg907 = call %Arity @newArity( i32 -1, %List %cast907 ) ; <%Arity> [#uses=1] + bitcast %Arity %reg907 to %IntList ; <%IntList>:1 [#uses=1] + store %IntList %1, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb79: ; preds = %bb38 + store %IntList null, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + %reg281 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=1] + %cast912 = getelementptr %YYSTYPE* %reg281, i64 0, i32 0 ; <%IntList*> [#uses=1] + %reg282 = load %IntList* %cast912 ; <%IntList> [#uses=1] + %reg282.upgrd.2 = bitcast %IntList %reg282 to %List ; <%List> [#uses=1] + call void @doGram( %List %reg282.upgrd.2 ) + br label %bb97 + +bb80: ; preds = %bb50 + store %IntList null, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + %reg285 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=1] + %cast917 = getelementptr %YYSTYPE* %reg285, i64 0, i32 0 ; <%IntList*> [#uses=1] + %reg286 = load %IntList* %cast917 ; <%IntList> [#uses=1] + %reg286.upgrd.3 = bitcast %IntList %reg286 to i8* ; <i8*> [#uses=1] + call void @doStart( i8* %reg286.upgrd.3 ) + br label %bb97 + +bb81: ; preds = %bb51 + store %IntList null, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb82: ; preds = %bb48 + %reg290 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=2] + %cast923 = getelementptr %YYSTYPE* %reg290, i64 0, i32 0 ; <%IntList*> [#uses=1] + %reg292 = load %IntList* %cast923 ; <%IntList> [#uses=1] + %reg292.upgrd.4 = bitcast %IntList %reg292 to i8* ; <i8*> [#uses=1] + %reg293.idx1 = getelementptr %YYSTYPE* %reg290, i64 -1, i32 0 ; <%IntList*> [#uses=1] + %reg293 = load %IntList* %reg293.idx1 ; <%IntList> [#uses=1] + %cast930 = bitcast %IntList %reg293 to %List ; <%List> [#uses=1] + %reg930 = call %List @newList( i8* %reg292.upgrd.4, %List %cast930 ) ; <%List> [#uses=1] + bitcast %List %reg930 to %IntList ; <%IntList>:2 [#uses=1] + store %IntList %2, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb83: ; preds = %bb53 + store %IntList null, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb84: ; preds = %bb54 + %reg298 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=2] + %cast936 = getelementptr %YYSTYPE* %reg298, i64 0, i32 0 ; <%IntList*> [#uses=1] + %reg300 = load %IntList* %cast936 ; <%IntList> [#uses=1] + %reg300.upgrd.5 = bitcast %IntList %reg300 to i8* ; <i8*> [#uses=1] + %reg301.idx1 = getelementptr %YYSTYPE* %reg298, i64 -1, i32 0 ; <%IntList*> [#uses=1] + %reg301 = load %IntList* %reg301.idx1 ; <%IntList> [#uses=1] + %cast943 = bitcast %IntList %reg301 to %List ; <%List> [#uses=1] + %reg943 = call %List @newList( i8* %reg300.upgrd.5, %List %cast943 ) ; <%List> [#uses=1] + bitcast %List %reg943 to %IntList ; <%IntList>:3 [#uses=1] + store %IntList %3, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb85: ; preds = %bb36 + %reg304 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=2] + %cast9521 = getelementptr %YYSTYPE* %reg304, i64 -2, i32 0 ; <%IntList*> [#uses=1] + %reg306 = load %IntList* %cast9521 ; <%IntList> [#uses=1] + %reg306.upgrd.6 = bitcast %IntList %reg306 to i8* ; <i8*> [#uses=1] + %cast953 = bitcast %YYSTYPE* %reg304 to i32* ; <i32*> [#uses=1] + %reg307 = load i32* %cast953 ; <i32> [#uses=1] + %reg955 = call %Binding @newBinding( i8* %reg306.upgrd.6, i32 %reg307 ) ; <%Binding> [#uses=1] + bitcast %Binding %reg955 to %IntList ; <%IntList>:4 [#uses=1] + store %IntList %4, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb86: ; preds = %bb60 + store %IntList null, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb87: ; preds = %bb61 + %reg312 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=2] + %cast961 = getelementptr %YYSTYPE* %reg312, i64 0, i32 0 ; <%IntList*> [#uses=1] + %reg314 = load %IntList* %cast961 ; <%IntList> [#uses=1] + %reg314.upgrd.7 = bitcast %IntList %reg314 to i8* ; <i8*> [#uses=1] + %reg315.idx1 = getelementptr %YYSTYPE* %reg312, i64 -1, i32 0 ; <%IntList*> [#uses=1] + %reg315 = load %IntList* %reg315.idx1 ; <%IntList> [#uses=1] + %cast968 = bitcast %IntList %reg315 to %List ; <%List> [#uses=1] + %reg968 = call %List @newList( i8* %reg314.upgrd.7, %List %cast968 ) ; <%List> [#uses=1] + bitcast %List %reg968 to %IntList ; <%IntList>:5 [#uses=1] + store %IntList %5, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb88: ; preds = %bb58 + %reg318 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=4] + %cast9791 = getelementptr %YYSTYPE* %reg318, i64 -6, i32 0 ; <%IntList*> [#uses=1] + %reg322 = load %IntList* %cast9791 ; <%IntList> [#uses=1] + %reg322.upgrd.8 = bitcast %IntList %reg322 to i8* ; <i8*> [#uses=1] + %reg323.idx1 = getelementptr %YYSTYPE* %reg318, i64 -4, i32 0 ; <%IntList*> [#uses=1] + %reg323 = load %IntList* %reg323.idx1 ; <%IntList> [#uses=1] + %reg987 = getelementptr %YYSTYPE* %reg318, i64 -2 ; <%YYSTYPE*> [#uses=1] + %cast989 = bitcast %YYSTYPE* %reg987 to i32* ; <i32*> [#uses=1] + %reg324 = load i32* %cast989 ; <i32> [#uses=1] + %reg325.idx1 = getelementptr %YYSTYPE* %reg318, i64 -1, i32 0 ; <%IntList*> [#uses=1] + %reg325 = load %IntList* %reg325.idx1 ; <%IntList> [#uses=1] + %cast998 = bitcast %IntList %reg323 to %PatternAST ; <%PatternAST> [#uses=1] + %reg996 = call %RuleAST @newRuleAST( i8* %reg322.upgrd.8, %PatternAST %cast998, i32 %reg324, %IntList %reg325 ) ; <%RuleAST> [#uses=1] + bitcast %RuleAST %reg996 to %IntList ; <%IntList>:6 [#uses=1] + store %IntList %6, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb89: ; preds = %bb63 + %reg328 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=1] + %cast1002 = getelementptr %YYSTYPE* %reg328, i64 0, i32 0 ; <%IntList*> [#uses=1] + %reg329 = load %IntList* %cast1002 ; <%IntList> [#uses=1] + %reg329.upgrd.9 = bitcast %IntList %reg329 to i8* ; <i8*> [#uses=1] + %reg1004 = call %PatternAST @newPatternAST( i8* %reg329.upgrd.9, %List null ) ; <%PatternAST> [#uses=1] + bitcast %PatternAST %reg1004 to %IntList ; <%IntList>:7 [#uses=1] + store %IntList %7, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb90: ; preds = %bb64 + %reg333 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=2] + %cast10131 = getelementptr %YYSTYPE* %reg333, i64 -1, i32 0 ; <%IntList*> [#uses=1] + %reg335 = load %IntList* %cast10131 ; <%IntList> [#uses=1] + %reg335.upgrd.10 = bitcast %IntList %reg335 to i8* ; <i8*> [#uses=1] + %reg1015 = call %List @newList( i8* %reg335.upgrd.10, %List null ) ; <%List> [#uses=1] + %cast10211 = getelementptr %YYSTYPE* %reg333, i64 -3, i32 0 ; <%IntList*> [#uses=1] + %reg338 = load %IntList* %cast10211 ; <%IntList> [#uses=1] + %reg338.upgrd.11 = bitcast %IntList %reg338 to i8* ; <i8*> [#uses=1] + %reg1023 = call %PatternAST @newPatternAST( i8* %reg338.upgrd.11, %List %reg1015 ) ; <%PatternAST> [#uses=1] + bitcast %PatternAST %reg1023 to %IntList ; <%IntList>:8 [#uses=1] + store %IntList %8, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb91: ; preds = %bb56 + %reg341 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=3] + %cast10331 = getelementptr %YYSTYPE* %reg341, i64 -1, i32 0 ; <%IntList*> [#uses=1] + %reg344 = load %IntList* %cast10331 ; <%IntList> [#uses=1] + %reg344.upgrd.12 = bitcast %IntList %reg344 to i8* ; <i8*> [#uses=1] + %reg1035 = call %List @newList( i8* %reg344.upgrd.12, %List null ) ; <%List> [#uses=1] + %cast10411 = getelementptr %YYSTYPE* %reg341, i64 -3, i32 0 ; <%IntList*> [#uses=1] + %reg347 = load %IntList* %cast10411 ; <%IntList> [#uses=1] + %reg347.upgrd.13 = bitcast %IntList %reg347 to i8* ; <i8*> [#uses=1] + %reg1043 = call %List @newList( i8* %reg347.upgrd.13, %List %reg1035 ) ; <%List> [#uses=1] + %cast10491 = getelementptr %YYSTYPE* %reg341, i64 -5, i32 0 ; <%IntList*> [#uses=1] + %reg349 = load %IntList* %cast10491 ; <%IntList> [#uses=1] + %reg349.upgrd.14 = bitcast %IntList %reg349 to i8* ; <i8*> [#uses=1] + %reg1051 = call %PatternAST @newPatternAST( i8* %reg349.upgrd.14, %List %reg1043 ) ; <%PatternAST> [#uses=1] + bitcast %PatternAST %reg1051 to %IntList ; <%IntList>:9 [#uses=1] + store %IntList %9, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb92: ; preds = %bb68 + store %IntList null, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb93: ; preds = %bb69 + %reg354 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1059 = getelementptr %YYSTYPE* %reg354, i64 -2 ; <%YYSTYPE*> [#uses=1] + %cast1061 = bitcast %YYSTYPE* %reg1059 to i32* ; <i32*> [#uses=1] + %reg356 = load i32* %cast1061 ; <i32> [#uses=1] + %reg357.idx1 = getelementptr %YYSTYPE* %reg354, i64 -1, i32 0 ; <%IntList*> [#uses=1] + %reg357 = load %IntList* %reg357.idx1 ; <%IntList> [#uses=1] + %reg1068 = call %IntList @newIntList( i32 %reg356, %IntList %reg357 ) ; <%IntList> [#uses=1] + store %IntList %reg1068, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb94: ; preds = %bb66 + store %IntList null, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb95: ; preds = %bb71 + %reg362 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1076 = getelementptr %YYSTYPE* %reg362, i64 -1 ; <%YYSTYPE*> [#uses=1] + %cast1078 = bitcast %YYSTYPE* %reg1076 to i32* ; <i32*> [#uses=1] + %reg364 = load i32* %cast1078 ; <i32> [#uses=1] + %reg365.idx = getelementptr %YYSTYPE* %reg362, i64 0, i32 0 ; <%IntList*> [#uses=1] + %reg365 = load %IntList* %reg365.idx ; <%IntList> [#uses=1] + %reg1081 = call %IntList @newIntList( i32 %reg364, %IntList %reg365 ) ; <%IntList> [#uses=1] + store %IntList %reg1081, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) + br label %bb97 + +bb96: ; preds = %bb72 + %reg368 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1088 = getelementptr %YYSTYPE* %reg368, i64 -1 ; <%YYSTYPE*> [#uses=1] + %cast1090 = bitcast %YYSTYPE* %reg1088 to i32* ; <i32*> [#uses=1] + %reg370 = load i32* %cast1090 ; <i32> [#uses=1] + %reg371.idx = getelementptr %YYSTYPE* %reg368, i64 0, i32 0 ; <%IntList*> [#uses=1] + %reg371 = load %IntList* %reg371.idx ; <%IntList> [#uses=1] + %reg1093 = call %IntList @newIntList( i32 %reg370, %IntList %reg371 ) ; <%IntList> [#uses=1] + store %IntList %reg1093, %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 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 = sext i16 %reg254 to i64 ; <i64> [#uses=3] + %reg375 = add i64 %cast1097, %cast1097 ; <i64> [#uses=1] + %reg377 = load i16** @yyssp ; <i16*> [#uses=1] + %cast379 = ptrtoint i16* %reg377 to i64 ; <i64> [#uses=1] + %reg381 = sub i64 %cast379, %reg375 ; <i64> [#uses=1] + %cast1099 = inttoptr i64 %reg381 to i16* ; <i16*> [#uses=1] + store i16* %cast1099, i16** @yyssp + %reg382 = load i16** @yyssp ; <i16*> [#uses=3] + %reg383 = load i16* %reg382 ; <i16> [#uses=1] + %cast1103 = sext i16 %reg383 to i32 ; <i32> [#uses=3] + %reg385 = mul i64 %cast1097, 8 ; <i64> [#uses=1] + %reg387 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=1] + %cast389 = ptrtoint %YYSTYPE* %reg387 to i64 ; <i64> [#uses=1] + %reg391 = sub i64 %cast389, %reg385 ; <i64> [#uses=1] + %cast1108 = inttoptr i64 %reg391 to %YYSTYPE* ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %cast1108, %YYSTYPE** @yyvsp + %reg1111 = getelementptr [25 x i16]* @yylhs, i64 0, i64 %reg468-idxcast ; <i16*> [#uses=1] + %reg398 = load i16* %reg1111 ; <i16> [#uses=2] + %cast1116 = sext i16 %reg398 to i32 ; <i32> [#uses=1] + %cond1117 = icmp ne i32 %cast1103, 0 ; <i1> [#uses=1] + br i1 %cond1117, label %bb104, label %bb98 + +bb98: ; preds = %bb97 + %cond1119 = icmp ne i32 %cast1116, 0 ; <i1> [#uses=1] + br i1 %cond1119, label %bb104, label %bb99 + +bb99: ; preds = %bb98 + %reg1122 = getelementptr i16* %reg382, i64 1 ; <i16*> [#uses=2] + store i16* %reg1122, i16** @yyssp + store i16 1, i16* %reg1122 + %reg403 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1128 = getelementptr %YYSTYPE* %reg403, i64 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg1128, %YYSTYPE** @yyvsp + %reg406 = load %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) ; <%IntList> [#uses=1] + %reg1128.idx1 = getelementptr %YYSTYPE* %reg403, i64 1, i32 0 ; <%IntList*> [#uses=1] + store %IntList %reg406, %IntList* %reg1128.idx1 + %reg407 = load i32* @yychar ; <i32> [#uses=1] + %cond1135 = icmp sge i32 %reg407, 0 ; <i1> [#uses=1] + br i1 %cond1135, label %bb102, label %bb100 + +bb100: ; preds = %bb99 + %reg1139 = call i32 @yylex( ) ; <i32> [#uses=1] + store i32 %reg1139, i32* @yychar + %reg409 = load i32* @yychar ; <i32> [#uses=1] + %cond1141 = icmp sge i32 %reg409, 0 ; <i1> [#uses=1] + br i1 %cond1141, label %bb102, label %bb101 + +bb101: ; preds = %bb100 + store i32 0, i32* @yychar + br label %bb102 + +bb102: ; preds = %bb101, %bb100, %bb99 + %reg411 = load i32* @yychar ; <i32> [#uses=1] + %cond1146 = icmp ne i32 %reg411, 0 ; <i1> [#uses=1] + br i1 %cond1146, label %bb4, label %UnifiedExitNode + +bb104: ; preds = %bb98, %bb97 + %reg398-idxcast = sext i16 %reg398 to i64 ; <i64> [#uses=2] + %reg1150 = getelementptr [12 x i16]* @yygindex, i64 0, i64 %reg398-idxcast ; <i16*> [#uses=1] + %reg418 = load i16* %reg1150 ; <i16> [#uses=1] + %cast1155 = sext i16 %reg418 to i32 ; <i32> [#uses=2] + %cond1156 = icmp eq i32 %cast1155, 0 ; <i1> [#uses=1] + br i1 %cond1156, label %bb109, label %bb105 + +bb105: ; preds = %bb104 + %reg473 = add i32 %cast1155, %cast1103 ; <i32> [#uses=3] + %cond1158 = icmp slt i32 %reg473, 0 ; <i1> [#uses=1] + br i1 %cond1158, label %bb109, label %bb106 + +bb106: ; preds = %bb105 + %cond1161 = icmp sgt i32 %reg473, 262 ; <i1> [#uses=1] + br i1 %cond1161, label %bb109, label %bb107 + +bb107: ; preds = %bb106 + %reg473-idxcast = sext i32 %reg473 to i64 ; <i64> [#uses=2] + %reg1166 = getelementptr [263 x i16]* @yycheck, i64 0, i64 %reg473-idxcast ; <i16*> [#uses=1] + %reg428 = load i16* %reg1166 ; <i16> [#uses=1] + %cast1171 = sext i16 %reg428 to i32 ; <i32> [#uses=1] + %cond1172 = icmp ne i32 %cast1171, %cast1103 ; <i1> [#uses=1] + br i1 %cond1172, label %bb109, label %bb108 + +bb108: ; preds = %bb107 + %reg1175 = getelementptr [263 x i16]* @yytable, i64 0, i64 %reg473-idxcast ; <i16*> [#uses=1] + %reg435 = load i16* %reg1175 ; <i16> [#uses=1] + %cast1180 = sext i16 %reg435 to i32 ; <i32> [#uses=1] + br label %bb110 + +bb109: ; preds = %bb107, %bb106, %bb105, %bb104 + %reg1183 = getelementptr [12 x i16]* @yydgoto, i64 0, i64 %reg398-idxcast ; <i16*> [#uses=1] + %reg442 = load i16* %reg1183 ; <i16> [#uses=1] + %cast1188 = sext i16 %reg442 to i32 ; <i32> [#uses=1] + br label %bb110 + +bb110: ; preds = %bb109, %bb108 + %reg476 = phi i32 [ %cast1188, %bb109 ], [ %cast1180, %bb108 ] ; <i32> [#uses=2] + %cast1189 = bitcast i16* %reg382 to i8* ; <i8*> [#uses=1] + %reg444 = load i16** @yysslim ; <i16*> [#uses=1] + %cast1190 = bitcast i16* %reg444 to i8* ; <i8*> [#uses=1] + %cond1191 = icmp ult i8* %cast1189, %cast1190 ; <i1> [#uses=1] + br i1 %cond1191, label %bb112, label %bb111 + +bb111: ; preds = %bb110 + %reg1193 = call i32 @yygrowstack( ) ; <i32> [#uses=1] + %cond1193 = icmp ne i32 %reg1193, 0 ; <i1> [#uses=1] + br i1 %cond1193, label %bb113, label %bb112 + +bb112: ; preds = %bb111, %bb110 + %reg446 = load i16** @yyssp ; <i16*> [#uses=1] + %reg1196 = getelementptr i16* %reg446, i64 1 ; <i16*> [#uses=2] + store i16* %reg1196, i16** @yyssp + %cast1357 = trunc i32 %reg476 to i16 ; <i16> [#uses=1] + store i16 %cast1357, i16* %reg1196 + %reg449 = load %YYSTYPE** @yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1202 = getelementptr %YYSTYPE* %reg449, i64 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg1202, %YYSTYPE** @yyvsp + %reg452 = load %IntList* getelementptr (%YYSTYPE* @yyval, i64 0, i32 0) ; <%IntList> [#uses=1] + %reg1202.idx1 = getelementptr %YYSTYPE* %reg449, i64 1, i32 0 ; <%IntList*> [#uses=1] + store %IntList %reg452, %IntList* %reg1202.idx1 + br label %bb4 + +bb113: ; preds = %bb111, %bb30, %bb13, %bb2 + call void @yyerror( i8* getelementptr ([20 x i8]* @.LC1, i64 0, i64 0) ) + br label %UnifiedExitNode + +UnifiedExitNode: ; preds = %bb113, %bb102, %bb34, %bb32 + %UnifiedRetVal = phi i32 [ 1, %bb113 ], [ 1, %bb34 ], [ 1, %bb32 ], [ 0, %bb102 ] ; <i32> [#uses=1] + ret i32 %UnifiedRetVal +} + +declare %List @newList(i8*, %List) + +declare %IntList @newIntList(i32, %IntList) + +declare void @doStart(i8*) + +declare void @yyerror(i8*) + +declare void @doSpec(%List, %List) + +declare %Arity @newArity(i32, %List) + +declare %Binding @newBinding(i8*, i32) + +declare %PatternAST @newPatternAST(i8*, %List) + +declare %RuleAST @newRuleAST(i8*, %PatternAST, i32, %IntList) + +declare void @yyfinished() + +declare i32 @yylex() + +declare void @doGram(%List) + +declare i32 @yygrowstack() diff --git a/test/CodeGen/Generic/ConstantExprLowering.ll b/test/CodeGen/Generic/ConstantExprLowering.ll new file mode 100644 index 0000000..428d712 --- /dev/null +++ b/test/CodeGen/Generic/ConstantExprLowering.ll @@ -0,0 +1,22 @@ +; RUN: llc < %s + +@.str_1 = internal constant [16 x i8] c"%d %d %d %d %d\0A\00" ; <[16 x i8]*> [#uses=1] +@XA = external global i32 ; <i32*> [#uses=1] +@XB = external global i32 ; <i32*> [#uses=1] + +declare i32 @printf(i8*, ...) + +define void @test(i32 %A, i32 %B, i32 %C, i32 %D) { +entry: + %t1 = icmp slt i32 %A, 0 ; <i1> [#uses=1] + br i1 %t1, label %less, label %not_less + +less: ; preds = %entry + br label %not_less + +not_less: ; preds = %less, %entry + %t2 = phi i32 [ sub (i32 ptrtoint (i32* @XA to i32), i32 ptrtoint (i32* @XB to i32)), %less ], [ sub (i32 ptrtoint (i32* @XA to i32), i32 ptrtoint (i32* @XB to i32)), %entry ] ; <i32> [#uses=1] + %tmp.39 = call i32 (i8*, ...)* @printf( i8* getelementptr ([16 x i8]* @.str_1, i64 0, i64 0), i32 %t2 ) ; <i32> [#uses=0] + 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..fb78ba2 --- /dev/null +++ b/test/CodeGen/Generic/GC/alloc_loop.ll @@ -0,0 +1,53 @@ +; RUN: llc < %s + + +declare i8* @llvm_gc_allocate(i32) +declare void @llvm_gc_initialize(i32) + +declare void @llvm.gcroot(i8**, i8*) +declare void @llvm.gcwrite(i8*, i8*, i8**) + +define i32 @main() gc "shadow-stack" { +entry: + %A = alloca i8* + %B = alloca i8** + + call void @llvm_gc_initialize(i32 1048576) ; Start with 1MB heap + + ;; void *A; + call void @llvm.gcroot(i8** %A, i8* null) + + ;; A = gcalloc(10); + %Aptr = call i8* @llvm_gc_allocate(i32 10) + store i8* %Aptr, i8** %A + + ;; void **B; + %tmp.1 = bitcast i8*** %B to i8** + call void @llvm.gcroot(i8** %tmp.1, i8* null) + + ;; B = gcalloc(4); + %B.upgrd.1 = call i8* @llvm_gc_allocate(i32 8) + %tmp.2 = bitcast i8* %B.upgrd.1 to i8** + store i8** %tmp.2, i8*** %B + + ;; *B = A; + %B.1 = load i8*** %B + %A.1 = load i8** %A + call void @llvm.gcwrite(i8* %A.1, i8* %B.upgrd.1, i8** %B.1) + + br label %AllocLoop + +AllocLoop: + %i = phi i32 [ 0, %entry ], [ %indvar.next, %AllocLoop ] + ;; Allocated mem: allocated memory is immediately dead. + call i8* @llvm_gc_allocate(i32 100) + + %indvar.next = add i32 %i, 1 + %exitcond = icmp eq i32 %indvar.next, 10000000 + br i1 %exitcond, label %Exit, label %AllocLoop + +Exit: + ret i32 0 +} + +declare void @__main() diff --git a/test/CodeGen/Generic/GC/argpromotion.ll b/test/CodeGen/Generic/GC/argpromotion.ll new file mode 100644 index 0000000..dda376d --- /dev/null +++ b/test/CodeGen/Generic/GC/argpromotion.ll @@ -0,0 +1,19 @@ +; RUN: opt < %s -anders-aa -argpromotion + +declare void @llvm.gcroot(i8**, i8*) + +define i32 @g() { +entry: + %var = alloca i32 + store i32 1, i32* %var + %x = call i32 @f(i32* %var) + ret i32 %x +} + +define internal i32 @f(i32* %xp) gc "example" { +entry: + %var = alloca i8* + call void @llvm.gcroot(i8** %var, i8* null) + %x = load i32* %xp + ret i32 %x +} diff --git a/test/CodeGen/Generic/GC/badreadproto.ll b/test/CodeGen/Generic/GC/badreadproto.ll new file mode 100644 index 0000000..4fe90b9 --- /dev/null +++ b/test/CodeGen/Generic/GC/badreadproto.ll @@ -0,0 +1,13 @@ +; RUN: not llvm-as < %s >& /dev/null + + %list = type { i32, %list* } + +; This usage is invalid now; instead, objects must be bitcast to i8* for input +; to the gc intrinsics. +declare %list* @llvm.gcread(%list*, %list**) + +define %list* @tl(%list* %l) gc "example" { + %hd.ptr = getelementptr %list* %l, i32 0, i32 0 + %hd = call %list* @llvm.gcread(%list* %l, %list** %hd.ptr) + ret i32 %tmp +} diff --git a/test/CodeGen/Generic/GC/badrootproto.ll b/test/CodeGen/Generic/GC/badrootproto.ll new file mode 100644 index 0000000..ff86d03 --- /dev/null +++ b/test/CodeGen/Generic/GC/badrootproto.ll @@ -0,0 +1,13 @@ +; RUN: not llvm-as < %s >& /dev/null + + %list = type { i32, %list* } + %meta = type opaque + +; This usage is invalid now; instead, objects must be bitcast to i8* for input +; to the gc intrinsics. +declare void @llvm.gcroot(%list*, %meta*) + +define void @root() gc "example" { + %x.var = alloca i8* + call void @llvm.gcroot(i8** %x.var, %meta* null) +} diff --git a/test/CodeGen/Generic/GC/badwriteproto.ll b/test/CodeGen/Generic/GC/badwriteproto.ll new file mode 100644 index 0000000..be81f84 --- /dev/null +++ b/test/CodeGen/Generic/GC/badwriteproto.ll @@ -0,0 +1,22 @@ +; RUN: not llvm-as < %s >& /dev/null + + %list = type { i32, %list* } + +; This usage is invalid now; instead, objects must be bitcast to i8* for input +; to the gc intrinsics. +declare void @llvm.gcwrite(%list*, %list*, %list**) + +define %list* @cons(i32 %hd, %list* %tl) gc "example" { + %tmp = call i8* @gcalloc(i32 bitcast(%list* getelementptr(%list* null, i32 1) to i32)) + %cell = bitcast i8* %tmp to %list* + + %hd.ptr = getelementptr %list* %cell, i32 0, i32 0 + store i32 %hd, i32* %hd.ptr + + %tl.ptr = getelementptr %list* %cell, i32 0, i32 0 + call void @llvm.gcwrite(%list* %tl, %list* %cell, %list** %tl.ptr) + + ret %cell.2 +} + +declare i8* @gcalloc(i32) diff --git a/test/CodeGen/Generic/GC/deadargelim.ll b/test/CodeGen/Generic/GC/deadargelim.ll new file mode 100644 index 0000000..1760190 --- /dev/null +++ b/test/CodeGen/Generic/GC/deadargelim.ll @@ -0,0 +1,16 @@ +; RUN: opt < %s -deadargelim + +declare void @llvm.gcroot(i8**, i8*) + +define void @g() { +entry: + call void @f(i32 0) + ret void +} + +define internal void @f(i32 %unused) gc "example" { +entry: + %var = alloca i8* + call void @llvm.gcroot(i8** %var, i8* null) + ret void +} diff --git a/test/CodeGen/Generic/GC/dg.exp b/test/CodeGen/Generic/GC/dg.exp new file mode 100644 index 0000000..f200589 --- /dev/null +++ b/test/CodeGen/Generic/GC/dg.exp @@ -0,0 +1,3 @@ +load_lib llvm.exp + +RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] diff --git a/test/CodeGen/Generic/GC/fat.ll b/test/CodeGen/Generic/GC/fat.ll new file mode 100644 index 0000000..d05ca3d --- /dev/null +++ b/test/CodeGen/Generic/GC/fat.ll @@ -0,0 +1,10 @@ +; RUN: not llvm-as < %s >& /dev/null + +declare void @llvm.gcroot(i8**, i8*) nounwind + +define void @f() gc "x" { + %st = alloca { i8*, i1 } ; <{ i8*, i1 }*> [#uses=1] + %st_ptr = bitcast { i8*, i1 }* %st to i8** ; <i8**> [#uses=1] + call void @llvm.gcroot(i8** %st_ptr, i8* null) + ret void +} diff --git a/test/CodeGen/Generic/GC/inline.ll b/test/CodeGen/Generic/GC/inline.ll new file mode 100644 index 0000000..9da33ae --- /dev/null +++ b/test/CodeGen/Generic/GC/inline.ll @@ -0,0 +1,23 @@ +; RUN: opt < %s -inline -S | grep example + + %IntArray = type { i32, [0 x i32*] } + +declare void @llvm.gcroot(i8**, i8*) nounwind + +define i32 @f() { + %x = call i32 @g( ) ; <i32> [#uses=1] + ret i32 %x +} + +define internal i32 @g() gc "example" { + %root = alloca i8* ; <i8**> [#uses=2] + call void @llvm.gcroot( i8** %root, i8* null ) + %obj = call %IntArray* @h( ) ; <%IntArray*> [#uses=2] + %obj.2 = bitcast %IntArray* %obj to i8* ; <i8*> [#uses=1] + store i8* %obj.2, i8** %root + %Length.ptr = getelementptr %IntArray* %obj, i32 0, i32 0 ; <i32*> [#uses=1] + %Length = load i32* %Length.ptr ; <i32> [#uses=1] + ret i32 %Length +} + +declare %IntArray* @h() diff --git a/test/CodeGen/Generic/GC/inline2.ll b/test/CodeGen/Generic/GC/inline2.ll new file mode 100644 index 0000000..1594705 --- /dev/null +++ b/test/CodeGen/Generic/GC/inline2.ll @@ -0,0 +1,24 @@ +; RUN: opt < %s -inline -S | grep sample +; RUN: opt < %s -inline -S | grep example + + %IntArray = type { i32, [0 x i32*] } + +declare void @llvm.gcroot(i8**, i8*) nounwind + +define i32 @f() gc "sample" { + %x = call i32 @g( ) ; <i32> [#uses=1] + ret i32 %x +} + +define internal i32 @g() gc "example" { + %root = alloca i8* ; <i8**> [#uses=2] + call void @llvm.gcroot( i8** %root, i8* null ) + %obj = call %IntArray* @h( ) ; <%IntArray*> [#uses=2] + %obj.2 = bitcast %IntArray* %obj to i8* ; <i8*> [#uses=1] + store i8* %obj.2, i8** %root + %Length.ptr = getelementptr %IntArray* %obj, i32 0, i32 0 ; <i32*> [#uses=1] + %Length = load i32* %Length.ptr ; <i32> [#uses=1] + ret i32 %Length +} + +declare %IntArray* @h() diff --git a/test/CodeGen/Generic/GC/lower_gcroot.ll b/test/CodeGen/Generic/GC/lower_gcroot.ll new file mode 100644 index 0000000..c2d418a --- /dev/null +++ b/test/CodeGen/Generic/GC/lower_gcroot.ll @@ -0,0 +1,11 @@ +; RUN: llc < %s + + %Env = type i8* + +define void @.main(%Env) gc "shadow-stack" { + %Root = alloca %Env + call void @llvm.gcroot( %Env* %Root, %Env null ) + unreachable +} + +declare void @llvm.gcroot(%Env*, %Env) diff --git a/test/CodeGen/Generic/GC/outside.ll b/test/CodeGen/Generic/GC/outside.ll new file mode 100644 index 0000000..2968c69 --- /dev/null +++ b/test/CodeGen/Generic/GC/outside.ll @@ -0,0 +1,10 @@ +; RUN: not llvm-as < %s >& /dev/null + +declare void @llvm.gcroot(i8**, i8*) + +define void @f(i8* %x) { + %root = alloca i8* + call void @llvm.gcroot(i8** %root, i8* null) + store i8* %x, i8** %root + ret void +} diff --git a/test/CodeGen/Generic/GC/redundant_init.ll b/test/CodeGen/Generic/GC/redundant_init.ll new file mode 100644 index 0000000..10c70e7 --- /dev/null +++ b/test/CodeGen/Generic/GC/redundant_init.ll @@ -0,0 +1,17 @@ +; RUN: llc < %s -march=x86 | \ +; RUN: ignore grep {movl..0} | count 0 + +%struct.obj = type { i8*, %struct.obj* } + +declare void @g() gc "shadow-stack" + +define void @f(i8* %o) gc "shadow-stack" { +entry: + %root = alloca i8* + call void @llvm.gcroot(i8** %root, i8* null) + store i8* %o, i8** %root + call void @g() + ret void +} + +declare void @llvm.gcroot(i8**, i8*) diff --git a/test/CodeGen/Generic/GC/simple_ocaml.ll b/test/CodeGen/Generic/GC/simple_ocaml.ll new file mode 100644 index 0000000..f765dc0 --- /dev/null +++ b/test/CodeGen/Generic/GC/simple_ocaml.ll @@ -0,0 +1,42 @@ +; RUN: llc < %s | grep caml.*__frametable +; RUN: llc < %s -march=x86 | grep {movl .0} + +%struct.obj = type { i8*, %struct.obj* } + +define %struct.obj* @fun(%struct.obj* %head) gc "ocaml" { +entry: + %gcroot.0 = alloca i8* + %gcroot.1 = alloca i8* + + call void @llvm.gcroot(i8** %gcroot.0, i8* null) + call void @llvm.gcroot(i8** %gcroot.1, i8* null) + + %local.0 = bitcast i8** %gcroot.0 to %struct.obj** + %local.1 = bitcast i8** %gcroot.1 to %struct.obj** + + store %struct.obj* %head, %struct.obj** %local.0 + br label %bb.loop +bb.loop: + %t0 = load %struct.obj** %local.0 + %t1 = getelementptr %struct.obj* %t0, i32 0, i32 1 + %t2 = bitcast %struct.obj* %t0 to i8* + %t3 = bitcast %struct.obj** %t1 to i8** + %t4 = call i8* @llvm.gcread(i8* %t2, i8** %t3) + %t5 = bitcast i8* %t4 to %struct.obj* + %t6 = icmp eq %struct.obj* %t5, null + br i1 %t6, label %bb.loop, label %bb.end +bb.end: + %t7 = malloc %struct.obj + store %struct.obj* %t7, %struct.obj** %local.1 + %t8 = bitcast %struct.obj* %t7 to i8* + %t9 = load %struct.obj** %local.0 + %t10 = getelementptr %struct.obj* %t9, i32 0, i32 1 + %t11 = bitcast %struct.obj* %t9 to i8* + %t12 = bitcast %struct.obj** %t10 to i8** + call void @llvm.gcwrite(i8* %t8, i8* %t11, i8** %t12) + ret %struct.obj* %t7 +} + +declare void @llvm.gcroot(i8** %value, i8* %tag) +declare void @llvm.gcwrite(i8* %value, i8* %obj, i8** %field) +declare i8* @llvm.gcread(i8* %obj, i8** %field) diff --git a/test/CodeGen/Generic/Makefile b/test/CodeGen/Generic/Makefile new file mode 100644 index 0000000..26ebc31 --- /dev/null +++ b/test/CodeGen/Generic/Makefile @@ -0,0 +1,23 @@ +# Makefile for running ad-hoc custom LLVM tests +# +%.bc: %.ll + llvm-as $< + +%.llc.s: %.bc + llc $< -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/add-with-overflow-24.ll b/test/CodeGen/Generic/add-with-overflow-24.ll new file mode 100644 index 0000000..63f5a22 --- /dev/null +++ b/test/CodeGen/Generic/add-with-overflow-24.ll @@ -0,0 +1,42 @@ +; RUN: llc < %s + +@ok = internal constant [4 x i8] c"%d\0A\00" +@no = internal constant [4 x i8] c"no\0A\00" + +define i1 @func1(i24 signext %v1, i24 signext %v2) nounwind { +entry: + %t = call {i24, i1} @llvm.sadd.with.overflow.i24(i24 %v1, i24 %v2) + %sum = extractvalue {i24, i1} %t, 0 + %sum32 = sext i24 %sum to i32 + %obit = extractvalue {i24, i1} %t, 1 + br i1 %obit, label %overflow, label %normal + +normal: + %t1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @ok, i32 0, i32 0), i32 %sum32 ) nounwind + ret i1 true + +overflow: + %t2 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @no, i32 0, i32 0) ) nounwind + ret i1 false +} + +define i1 @func2(i24 zeroext %v1, i24 zeroext %v2) nounwind { +entry: + %t = call {i24, i1} @llvm.uadd.with.overflow.i24(i24 %v1, i24 %v2) + %sum = extractvalue {i24, i1} %t, 0 + %sum32 = zext i24 %sum to i32 + %obit = extractvalue {i24, i1} %t, 1 + br i1 %obit, label %carry, label %normal + +normal: + %t1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @ok, i32 0, i32 0), i32 %sum32 ) nounwind + ret i1 true + +carry: + %t2 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @no, i32 0, i32 0) ) nounwind + ret i1 false +} + +declare i32 @printf(i8*, ...) nounwind +declare {i24, i1} @llvm.sadd.with.overflow.i24(i24, i24) +declare {i24, i1} @llvm.uadd.with.overflow.i24(i24, i24) diff --git a/test/CodeGen/Generic/add-with-overflow.ll b/test/CodeGen/Generic/add-with-overflow.ll new file mode 100644 index 0000000..0c2c960 --- /dev/null +++ b/test/CodeGen/Generic/add-with-overflow.ll @@ -0,0 +1,41 @@ +; RUN: llc < %s +; RUN: llc < %s -fast-isel + +@ok = internal constant [4 x i8] c"%d\0A\00" +@no = internal constant [4 x i8] c"no\0A\00" + +define i1 @func1(i32 %v1, i32 %v2) nounwind { +entry: + %t = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %v1, i32 %v2) + %sum = extractvalue {i32, i1} %t, 0 + %obit = extractvalue {i32, i1} %t, 1 + br i1 %obit, label %overflow, label %normal + +normal: + %t1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @ok, i32 0, i32 0), i32 %sum ) nounwind + ret i1 true + +overflow: + %t2 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @no, i32 0, i32 0) ) nounwind + ret i1 false +} + +define i1 @func2(i32 %v1, i32 %v2) nounwind { +entry: + %t = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %v1, i32 %v2) + %sum = extractvalue {i32, i1} %t, 0 + %obit = extractvalue {i32, i1} %t, 1 + br i1 %obit, label %overflow, label %normal + +normal: + %t1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @ok, i32 0, i32 0), i32 %sum ) nounwind + ret i1 true + +overflow: + %t2 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @no, i32 0, i32 0) ) nounwind + ret i1 false +} + +declare i32 @printf(i8*, ...) nounwind +declare {i32, i1} @llvm.sadd.with.overflow.i32(i32, i32) +declare {i32, i1} @llvm.uadd.with.overflow.i32(i32, i32) diff --git a/test/CodeGen/Generic/asm-large-immediate.ll b/test/CodeGen/Generic/asm-large-immediate.ll new file mode 100644 index 0000000..605665b --- /dev/null +++ b/test/CodeGen/Generic/asm-large-immediate.ll @@ -0,0 +1,8 @@ +; RUN: llc < %s | grep 68719476738 + +define void @test() { +entry: + tail call void asm sideeffect "/* result: ${0:c} */", "i,~{dirflag},~{fpsr},~{flags}"( i64 68719476738 ) + ret void +} + diff --git a/test/CodeGen/Generic/badCallArgLRLLVM.ll b/test/CodeGen/Generic/badCallArgLRLLVM.ll new file mode 100644 index 0000000..4ed88df --- /dev/null +++ b/test/CodeGen/Generic/badCallArgLRLLVM.ll @@ -0,0 +1,31 @@ +; RUN: llc < %s + +; 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 +; + +declare i32 @getInt(i32) + +define i32 @main(i32 %argc, i8** %argv) { +bb0: + br label %bb2 + +bb1: ; preds = %bb2 + %reg222 = call i32 @getInt( i32 %reg218 ) ; <i32> [#uses=1] + %reg110 = add i32 %reg222, 1 ; <i32> [#uses=2] + %b = icmp sle i32 %reg110, 0 ; <i1> [#uses=1] + br i1 %b, label %bb2, label %bb3 + +bb2: ; preds = %bb1, %bb0 + %reg218 = call i32 @getInt( i32 %argc ) ; <i32> [#uses=1] + br label %bb1 + +bb3: ; preds = %bb1 + ret i32 %reg110 +} + diff --git a/test/CodeGen/Generic/badFoldGEP.ll b/test/CodeGen/Generic/badFoldGEP.ll new file mode 100644 index 0000000..2d4474b --- /dev/null +++ b/test/CodeGen/Generic/badFoldGEP.ll @@ -0,0 +1,27 @@ +; RUN: llc < %s + +;; 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 { i8*, i32, i32*, i32, i32, i32*, %Domain* } +@domain_array = external global [497 x %Domain] ; <[497 x %Domain]*> [#uses=2] + +declare void @opaque([497 x %Domain]*) + +define i32 @main(i32 %argc, i8** %argv) { +bb0: + call void @opaque( [497 x %Domain]* @domain_array ) + %cann-indvar-idxcast = sext i32 %argc to i64 ; <i64> [#uses=1] + %reg841 = getelementptr [497 x %Domain]* @domain_array, i64 0, i64 %cann-indvar-idxcast, i32 3 ; <i32*> [#uses=1] + %reg846 = getelementptr i32* %reg841, i64 1 ; <i32*> [#uses=1] + %reg820 = load i32* %reg846 ; <i32> [#uses=1] + ret i32 %reg820 +} + diff --git a/test/CodeGen/Generic/badarg6.ll b/test/CodeGen/Generic/badarg6.ll new file mode 100644 index 0000000..d6e5ac5 --- /dev/null +++ b/test/CodeGen/Generic/badarg6.ll @@ -0,0 +1,32 @@ +; RUN: llc < %s + +; 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 i8] c"\09\09M = %g, I = %g, V = %g\0A\09\09O = %g, E = %g\0A\0A\00" ; <[44 x i8]*> [#uses=1] + +declare i32 @printf(i8*, ...) + +declare double @opaque(double) + +define i32 @main(i32 %argc, i8** %argv) { +bb25: + %b = icmp sle i32 %argc, 2 ; <i1> [#uses=1] + br i1 %b, label %bb42, label %bb43 + +bb42: ; preds = %bb25 + %reg315 = call double @opaque( double 3.000000e+00 ) ; <double> [#uses=1] + %reg316 = call double @opaque( double 3.100000e+00 ) ; <double> [#uses=1] + %reg317 = call double @opaque( double 3.200000e+00 ) ; <double> [#uses=1] + %reg318 = call double @opaque( double 3.300000e+00 ) ; <double> [#uses=1] + %reg319 = call double @opaque( double 3.400000e+00 ) ; <double> [#uses=1] + br label %bb43 + +bb43: ; preds = %bb42, %bb25 + %reg321 = phi double [ 2.000000e-01, %bb25 ], [ %reg315, %bb42 ] ; <double> [#uses=1] + %reg322 = phi double [ 6.000000e+00, %bb25 ], [ %reg316, %bb42 ] ; <double> [#uses=1] + %reg323 = phi double [ -1.000000e+00, %bb25 ], [ %reg317, %bb42 ] ; <double> [#uses=1] + %reg324 = phi double [ -1.000000e+00, %bb25 ], [ %reg318, %bb42 ] ; <double> [#uses=1] + %reg325 = phi double [ 1.000000e+00, %bb25 ], [ %reg319, %bb42 ] ; <double> [#uses=1] + %reg609 = call i32 (i8*, ...)* @printf( i8* getelementptr ([44 x i8]* @.LC12, i64 0, i64 0), double %reg325, double %reg324, double %reg323, double %reg322, double %reg321 ) ; <i32> [#uses=0] + ret i32 0 +} diff --git a/test/CodeGen/Generic/badlive.ll b/test/CodeGen/Generic/badlive.ll new file mode 100644 index 0000000..43b03e3 --- /dev/null +++ b/test/CodeGen/Generic/badlive.ll @@ -0,0 +1,28 @@ +; RUN: llc < %s + +define i32 @main() { +bb0: + %reg109 = malloc i32, i32 100 ; <i32*> [#uses=2] + br label %bb2 + +bb2: ; preds = %bb2, %bb0 + %cann-indvar1 = phi i32 [ 0, %bb0 ], [ %add1-indvar1, %bb2 ] ; <i32> [#uses=2] + %reg127 = mul i32 %cann-indvar1, 2 ; <i32> [#uses=1] + %add1-indvar1 = add i32 %cann-indvar1, 1 ; <i32> [#uses=1] + store i32 999, i32* %reg109 + %cond1015 = icmp sle i32 1, 99 ; <i1> [#uses=1] + %reg128 = add i32 %reg127, 2 ; <i32> [#uses=0] + br i1 %cond1015, label %bb2, label %bb4 + +bb4: ; preds = %bb4, %bb2 + %cann-indvar = phi i32 [ %add1-indvar, %bb4 ], [ 0, %bb2 ] ; <i32> [#uses=1] + %add1-indvar = add i32 %cann-indvar, 1 ; <i32> [#uses=2] + store i32 333, i32* %reg109 + %reg131 = add i32 %add1-indvar, 3 ; <i32> [#uses=1] + %cond1017 = icmp ule i32 %reg131, 99 ; <i1> [#uses=1] + br i1 %cond1017, label %bb4, label %bb5 + +bb5: ; preds = %bb4 + ret i32 0 +} + diff --git a/test/CodeGen/Generic/bool-to-double.ll b/test/CodeGen/Generic/bool-to-double.ll new file mode 100644 index 0000000..81350a4 --- /dev/null +++ b/test/CodeGen/Generic/bool-to-double.ll @@ -0,0 +1,6 @@ +; RUN: llc < %s +define double @test(i1 %X) { + %Y = uitofp i1 %X to double ; <double> [#uses=1] + ret double %Y +} + diff --git a/test/CodeGen/Generic/bool-vector.ll b/test/CodeGen/Generic/bool-vector.ll new file mode 100644 index 0000000..4758697 --- /dev/null +++ b/test/CodeGen/Generic/bool-vector.ll @@ -0,0 +1,11 @@ +; RUN: llc < %s +; PR1845 + +define void @boolVectorSelect(<4 x i1>* %boolVectorPtr) { +Body: + %castPtr = bitcast <4 x i1>* %boolVectorPtr to <4 x i1>* + %someBools = load <4 x i1>* %castPtr, align 1 ; <<4 x i1>> + %internal = alloca <4 x i1>, align 16 ; <<4 x i1>*> [#uses=1] + store <4 x i1> %someBools, <4 x i1>* %internal, align 1 + ret void +} diff --git a/test/CodeGen/Generic/call-ret0.ll b/test/CodeGen/Generic/call-ret0.ll new file mode 100644 index 0000000..a8e00cd --- /dev/null +++ b/test/CodeGen/Generic/call-ret0.ll @@ -0,0 +1,10 @@ +; RUN: llc < %s +define i32 @foo(i32 %x) { + ret i32 %x +} + +define i32 @main() { + %r = call i32 @foo( i32 0 ) ; <i32> [#uses=1] + ret i32 %r +} + diff --git a/test/CodeGen/Generic/call-ret42.ll b/test/CodeGen/Generic/call-ret42.ll new file mode 100644 index 0000000..95cc286 --- /dev/null +++ b/test/CodeGen/Generic/call-ret42.ll @@ -0,0 +1,10 @@ +; RUN: llc < %s + +define i32 @foo(i32 %x) { + ret i32 42 +} + +define i32 @main() { + %r = call i32 @foo( i32 15 ) ; <i32> [#uses=1] + ret i32 %r +} diff --git a/test/CodeGen/Generic/call-void.ll b/test/CodeGen/Generic/call-void.ll new file mode 100644 index 0000000..9ed4179 --- /dev/null +++ b/test/CodeGen/Generic/call-void.ll @@ -0,0 +1,11 @@ +; RUN: llc < %s + +define void @foo() { + ret void +} + +define i32 @main() { + call void @foo( ) + ret i32 0 +} + diff --git a/test/CodeGen/Generic/call2-ret0.ll b/test/CodeGen/Generic/call2-ret0.ll new file mode 100644 index 0000000..4e57ef8 --- /dev/null +++ b/test/CodeGen/Generic/call2-ret0.ll @@ -0,0 +1,16 @@ +; RUN: llc < %s + +define i32 @bar(i32 %x) { + ret i32 0 +} + +define i32 @foo(i32 %x) { + %q = call i32 @bar( i32 1 ) ; <i32> [#uses=1] + ret i32 %q +} + +define i32 @main() { + %r = call i32 @foo( i32 2 ) ; <i32> [#uses=1] + ret i32 %r +} + diff --git a/test/CodeGen/Generic/cast-fp.ll b/test/CodeGen/Generic/cast-fp.ll new file mode 100644 index 0000000..590b7ce --- /dev/null +++ b/test/CodeGen/Generic/cast-fp.ll @@ -0,0 +1,33 @@ +; RUN: llc < %s +@a_fstr = internal constant [8 x i8] c"a = %f\0A\00" ; <[8 x i8]*> [#uses=1] +@a_lstr = internal constant [10 x i8] c"a = %lld\0A\00" ; <[10 x i8]*> [#uses=1] +@a_dstr = internal constant [8 x i8] c"a = %d\0A\00" ; <[8 x i8]*> [#uses=1] +@b_dstr = internal constant [8 x i8] c"b = %d\0A\00" ; <[8 x i8]*> [#uses=1] +@b_fstr = internal constant [8 x i8] c"b = %f\0A\00" ; <[8 x i8]*> [#uses=1] +@A = global double 2.000000e+00 ; <double*> [#uses=1] +@B = global i32 2 ; <i32*> [#uses=1] + +declare i32 @printf(i8*, ...) + +define i32 @main() { + %a = load double* @A ; <double> [#uses=4] + %a_fs = getelementptr [8 x i8]* @a_fstr, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %a_fs, double %a ) ; <i32>:1 [#uses=0] + %a_d2l = fptosi double %a to i64 ; <i64> [#uses=1] + %a_ls = getelementptr [10 x i8]* @a_lstr, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %a_ls, i64 %a_d2l ) ; <i32>:2 [#uses=0] + %a_d2i = fptosi double %a to i32 ; <i32> [#uses=2] + %a_ds = getelementptr [8 x i8]* @a_dstr, i64 0, i64 0 ; <i8*> [#uses=3] + call i32 (i8*, ...)* @printf( i8* %a_ds, i32 %a_d2i ) ; <i32>:3 [#uses=0] + %a_d2sb = fptosi double %a to i8 ; <i8> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %a_ds, i8 %a_d2sb ) ; <i32>:4 [#uses=0] + %a_d2i2sb = trunc i32 %a_d2i to i8 ; <i8> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %a_ds, i8 %a_d2i2sb ) ; <i32>:5 [#uses=0] + %b = load i32* @B ; <i32> [#uses=2] + %b_ds = getelementptr [8 x i8]* @b_dstr, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %b_ds, i32 %b ) ; <i32>:6 [#uses=0] + %b_i2d = sitofp i32 %b to double ; <double> [#uses=1] + %b_fs = getelementptr [8 x i8]* @b_fstr, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %b_fs, double %b_i2d ) ; <i32>:7 [#uses=0] + ret i32 0 +} diff --git a/test/CodeGen/Generic/constindices.ll b/test/CodeGen/Generic/constindices.ll new file mode 100644 index 0000000..7deb30f --- /dev/null +++ b/test/CodeGen/Generic/constindices.ll @@ -0,0 +1,44 @@ +; RUN: llc < %s + +; Test that a sequence of constant indices are folded correctly +; into the equivalent offset at compile-time. + + %MixedA = type { float, [15 x i32], i8, float } + %MixedB = type { float, %MixedA, float } +@fmtArg = internal global [44 x i8] c"sqrt(2) = %g\0Aexp(1) = %g\0Api = %g\0Afive = %g\0A\00" ; <[44 x i8]*> [#uses=1] + +declare i32 @printf(i8*, ...) + +define i32 @main() { + %ScalarA = alloca %MixedA ; <%MixedA*> [#uses=1] + %ScalarB = alloca %MixedB ; <%MixedB*> [#uses=1] + %ArrayA = alloca %MixedA, i32 4 ; <%MixedA*> [#uses=3] + %ArrayB = alloca %MixedB, i32 3 ; <%MixedB*> [#uses=2] + %I1 = getelementptr %MixedA* %ScalarA, i64 0, i32 0 ; <float*> [#uses=2] + store float 0x3FF6A09020000000, float* %I1 + %I2 = getelementptr %MixedB* %ScalarB, i64 0, i32 1, i32 0 ; <float*> [#uses=2] + store float 0x4005BF1420000000, float* %I2 + %fptrA = getelementptr %MixedA* %ArrayA, i64 1, i32 0 ; <float*> [#uses=1] + %fptrB = getelementptr %MixedB* %ArrayB, i64 2, i32 1, i32 0 ; <float*> [#uses=1] + store float 0x400921CAC0000000, float* %fptrA + store float 5.000000e+00, float* %fptrB + + ;; Test that a sequence of GEPs with constant indices are folded right + %fptrA1 = getelementptr %MixedA* %ArrayA, i64 3 ; <%MixedA*> [#uses=1] + %fptrA2 = getelementptr %MixedA* %fptrA1, i64 0, i32 1 ; <[15 x i32]*> [#uses=1] + %fptrA3 = getelementptr [15 x i32]* %fptrA2, i64 0, i64 8 ; <i32*> [#uses=1] + store i32 5, i32* %fptrA3 + %sqrtTwo = load float* %I1 ; <float> [#uses=1] + %exp = load float* %I2 ; <float> [#uses=1] + %I3 = getelementptr %MixedA* %ArrayA, i64 1, i32 0 ; <float*> [#uses=1] + %pi = load float* %I3 ; <float> [#uses=1] + %I4 = getelementptr %MixedB* %ArrayB, i64 2, i32 1, i32 0 ; <float*> [#uses=1] + %five = load float* %I4 ; <float> [#uses=1] + %dsqrtTwo = fpext float %sqrtTwo to double ; <double> [#uses=1] + %dexp = fpext float %exp to double ; <double> [#uses=1] + %dpi = fpext float %pi to double ; <double> [#uses=1] + %dfive = fpext float %five to double ; <double> [#uses=1] + %castFmt = getelementptr [44 x i8]* @fmtArg, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %castFmt, double %dsqrtTwo, double %dexp, double %dpi, double %dfive ) ; <i32>:1 [#uses=0] + ret i32 0 +} diff --git a/test/CodeGen/Generic/debug-info.ll b/test/CodeGen/Generic/debug-info.ll new file mode 100644 index 0000000..20d9f91 --- /dev/null +++ b/test/CodeGen/Generic/debug-info.ll @@ -0,0 +1,19 @@ +; RUN: llc < %s + + %lldb.compile_unit = type { i32, i16, i16, i8*, i8*, i8*, { }* } +@d.compile_unit7 = external global %lldb.compile_unit ; <%lldb.compile_unit*> [#uses=1] + +declare void @llvm.dbg.stoppoint(i32, i32, %lldb.compile_unit*) + +define void @rb_raise(i32, ...) { +entry: + br i1 false, label %strlen.exit, label %no_exit.i + +no_exit.i: ; preds = %entry + ret void + +strlen.exit: ; preds = %entry + call void @llvm.dbg.stoppoint( i32 4358, i32 0, %lldb.compile_unit* @d.compile_unit7 ) + unreachable +} + diff --git a/test/CodeGen/Generic/dg.exp b/test/CodeGen/Generic/dg.exp new file mode 100644 index 0000000..f200589 --- /dev/null +++ b/test/CodeGen/Generic/dg.exp @@ -0,0 +1,3 @@ +load_lib llvm.exp + +RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] 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..246cd03 --- /dev/null +++ b/test/CodeGen/Generic/div-neg-power-2.ll @@ -0,0 +1,7 @@ +; RUN: llc < %s + +define i32 @test(i32 %X) { + %Y = sdiv i32 %X, -2 ; <i32> [#uses=1] + ret i32 %Y +} + diff --git a/test/CodeGen/Generic/empty-load-store.ll b/test/CodeGen/Generic/empty-load-store.ll new file mode 100644 index 0000000..bca7305 --- /dev/null +++ b/test/CodeGen/Generic/empty-load-store.ll @@ -0,0 +1,18 @@ +; RUN: llc < %s +; PR2612 + +@current_foo = internal global { } zeroinitializer + +define i32 @foo() { +entry: + %retval = alloca i32 + store i32 0, i32* %retval + %local_foo = alloca { } + load { }* @current_foo + store { } %0, { }* %local_foo + br label %return + +return: + load i32* %retval + ret i32 %1 +} diff --git a/test/CodeGen/Generic/externally_available.ll b/test/CodeGen/Generic/externally_available.ll new file mode 100644 index 0000000..7976cc9 --- /dev/null +++ b/test/CodeGen/Generic/externally_available.ll @@ -0,0 +1,10 @@ +; RUN: llc < %s | not grep test_ + +; test_function should not be emitted to the .s file. +define available_externally i32 @test_function() { + ret i32 4 +} + +; test_global should not be emitted to the .s file. +@test_global = available_externally global i32 4 + diff --git a/test/CodeGen/Generic/fastcall.ll b/test/CodeGen/Generic/fastcall.ll new file mode 100644 index 0000000..35e04f1 --- /dev/null +++ b/test/CodeGen/Generic/fastcall.ll @@ -0,0 +1,14 @@ +; Test fastcc works. Test from bug 2770. +; RUN: llc < %s -relocation-model=pic + + +%struct.__gcov_var = type { i32 } +@__gcov_var = external global %struct.__gcov_var + +define fastcc void @gcov_read_words(i32 %words) { +entry: + store i32 %words, i32* getelementptr (%struct.__gcov_var* +@__gcov_var, +i32 0, i32 0) + ret void +} diff --git a/test/CodeGen/Generic/fneg-fabs.ll b/test/CodeGen/Generic/fneg-fabs.ll new file mode 100644 index 0000000..2f2f597 --- /dev/null +++ b/test/CodeGen/Generic/fneg-fabs.ll @@ -0,0 +1,26 @@ +; RUN: llc < %s + +define double @fneg(double %X) { + %Y = fsub double -0.000000e+00, %X ; <double> [#uses=1] + ret double %Y +} + +define float @fnegf(float %X) { + %Y = fsub float -0.000000e+00, %X ; <float> [#uses=1] + ret float %Y +} + +declare double @fabs(double) + +declare float @fabsf(float) + +define double @fabstest(double %X) { + %Y = call double @fabs( double %X ) ; <double> [#uses=1] + ret double %Y +} + +define float @fabsftest(float %X) { + %Y = call float @fabsf( float %X ) ; <float> [#uses=1] + ret float %Y +} + diff --git a/test/CodeGen/Generic/fp-to-int-invalid.ll b/test/CodeGen/Generic/fp-to-int-invalid.ll new file mode 100644 index 0000000..cdcc3a2 --- /dev/null +++ b/test/CodeGen/Generic/fp-to-int-invalid.ll @@ -0,0 +1,18 @@ +; RUN: llc < %s +; PR4057 +define void @test_cast_float_to_char(i8* %result) nounwind { +entry: + %result_addr = alloca i8* ; <i8**> [#uses=2] + %test = alloca float ; <float*> [#uses=2] + %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] + store i8* %result, i8** %result_addr + store float 0x40B2AFA160000000, float* %test, align 4 + %0 = load float* %test, align 4 ; <float> [#uses=1] + %1 = fptosi float %0 to i8 ; <i8> [#uses=1] + %2 = load i8** %result_addr, align 4 ; <i8*> [#uses=1] + store i8 %1, i8* %2, align 1 + br label %return + +return: ; preds = %entry + ret void +} diff --git a/test/CodeGen/Generic/fp_to_int.ll b/test/CodeGen/Generic/fp_to_int.ll new file mode 100644 index 0000000..ad94413 --- /dev/null +++ b/test/CodeGen/Generic/fp_to_int.ll @@ -0,0 +1,81 @@ +; RUN: llc < %s + +define i8 @test1(double %X) { + %tmp.1 = fptosi double %X to i8 ; <i8> [#uses=1] + ret i8 %tmp.1 +} + +define i16 @test2(double %X) { + %tmp.1 = fptosi double %X to i16 ; <i16> [#uses=1] + ret i16 %tmp.1 +} + +define i32 @test3(double %X) { + %tmp.1 = fptosi double %X to i32 ; <i32> [#uses=1] + ret i32 %tmp.1 +} + +define i64 @test4(double %X) { + %tmp.1 = fptosi double %X to i64 ; <i64> [#uses=1] + ret i64 %tmp.1 +} + +define i8 @test1u(double %X) { + %tmp.1 = fptoui double %X to i8 ; <i8> [#uses=1] + ret i8 %tmp.1 +} + +define i16 @test2u(double %X) { + %tmp.1 = fptoui double %X to i16 ; <i16> [#uses=1] + ret i16 %tmp.1 +} + +define i32 @test3u(double %X) { + %tmp.1 = fptoui double %X to i32 ; <i32> [#uses=1] + ret i32 %tmp.1 +} + +define i64 @test4u(double %X) { + %tmp.1 = fptoui double %X to i64 ; <i64> [#uses=1] + ret i64 %tmp.1 +} + +define i8 @test1f(float %X) { + %tmp.1 = fptosi float %X to i8 ; <i8> [#uses=1] + ret i8 %tmp.1 +} + +define i16 @test2f(float %X) { + %tmp.1 = fptosi float %X to i16 ; <i16> [#uses=1] + ret i16 %tmp.1 +} + +define i32 @test3f(float %X) { + %tmp.1 = fptosi float %X to i32 ; <i32> [#uses=1] + ret i32 %tmp.1 +} + +define i64 @test4f(float %X) { + %tmp.1 = fptosi float %X to i64 ; <i64> [#uses=1] + ret i64 %tmp.1 +} + +define i8 @test1uf(float %X) { + %tmp.1 = fptoui float %X to i8 ; <i8> [#uses=1] + ret i8 %tmp.1 +} + +define i16 @test2uf(float %X) { + %tmp.1 = fptoui float %X to i16 ; <i16> [#uses=1] + ret i16 %tmp.1 +} + +define i32 @test3uf(float %X) { + %tmp.1 = fptoui float %X to i32 ; <i32> [#uses=1] + ret i32 %tmp.1 +} + +define i64 @test4uf(float %X) { + %tmp.1 = fptoui float %X to i64 ; <i64> [#uses=1] + ret i64 %tmp.1 +} diff --git a/test/CodeGen/Generic/fpowi-promote.ll b/test/CodeGen/Generic/fpowi-promote.ll new file mode 100644 index 0000000..8dacebe --- /dev/null +++ b/test/CodeGen/Generic/fpowi-promote.ll @@ -0,0 +1,11 @@ +; RUN: llc < %s + +; 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..6b38f04 --- /dev/null +++ b/test/CodeGen/Generic/fwdtwice.ll @@ -0,0 +1,29 @@ +; RUN: llc < %s + +;; +;; 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 the 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. + +define i32 @SumArray(i32 %Num) { + %Num.upgrd.1 = alloca i32 ; <i32*> [#uses=2] + br label %Top + +Top: ; preds = %Top, %0 + store i32 %Num, i32* %Num.upgrd.1 + %reg108 = load i32* %Num.upgrd.1 ; <i32> [#uses=1] + %cast1006 = bitcast i32 %reg108 to i32 ; <i32> [#uses=1] + %cond1001 = icmp ule i32 %cast1006, 0 ; <i1> [#uses=1] + br i1 %cond1001, label %bb6, label %Top + +bb6: ; preds = %Top + ret i32 42 +} + diff --git a/test/CodeGen/Generic/getresult-undef.ll b/test/CodeGen/Generic/getresult-undef.ll new file mode 100644 index 0000000..c675535 --- /dev/null +++ b/test/CodeGen/Generic/getresult-undef.ll @@ -0,0 +1,6 @@ +; RUN: llc < %s + +define double @foo() { + %t = getresult {double, double} undef, 1 + ret double %t +} diff --git a/test/CodeGen/Generic/global-ret0.ll b/test/CodeGen/Generic/global-ret0.ll new file mode 100644 index 0000000..74bff87 --- /dev/null +++ b/test/CodeGen/Generic/global-ret0.ll @@ -0,0 +1,8 @@ +; RUN: llc < %s + +@g = global i32 0 ; <i32*> [#uses=1] + +define i32 @main() { + %h = load i32* @g ; <i32> [#uses=1] + ret i32 %h +} diff --git a/test/CodeGen/Generic/hello.ll b/test/CodeGen/Generic/hello.ll new file mode 100644 index 0000000..705945c --- /dev/null +++ b/test/CodeGen/Generic/hello.ll @@ -0,0 +1,11 @@ +; RUN: llc < %s + +@.str_1 = internal constant [7 x i8] c"hello\0A\00" ; <[7 x i8]*> [#uses=1] + +declare i32 @printf(i8*, ...) + +define i32 @main() { + %s = getelementptr [7 x i8]* @.str_1, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %s ) ; <i32>:1 [#uses=0] + ret i32 0 +} diff --git a/test/CodeGen/Generic/i128-addsub.ll b/test/CodeGen/Generic/i128-addsub.ll new file mode 100644 index 0000000..e7cbf4a --- /dev/null +++ b/test/CodeGen/Generic/i128-addsub.ll @@ -0,0 +1,39 @@ +; RUN: llc < %s + +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..cf10463 --- /dev/null +++ b/test/CodeGen/Generic/i128-arith.ll @@ -0,0 +1,11 @@ +; RUN: llc < %s + +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/inline-asm-special-strings.ll b/test/CodeGen/Generic/inline-asm-special-strings.ll new file mode 100644 index 0000000..d18221e --- /dev/null +++ b/test/CodeGen/Generic/inline-asm-special-strings.ll @@ -0,0 +1,6 @@ +; RUN: llc < %s | grep "foo 0 0" + +define void @bar() nounwind { + tail call void asm sideeffect "foo ${:uid} ${:uid}", ""() nounwind + ret void +} diff --git a/test/CodeGen/Generic/intrinsics.ll b/test/CodeGen/Generic/intrinsics.ll new file mode 100644 index 0000000..29bc499 --- /dev/null +++ b/test/CodeGen/Generic/intrinsics.ll @@ -0,0 +1,40 @@ +; RUN: llc < %s + +;; SQRT +declare float @llvm.sqrt.f32(float) + +declare double @llvm.sqrt.f64(double) + +define double @test_sqrt(float %F) { + %G = call float @llvm.sqrt.f32( float %F ) ; <float> [#uses=1] + %H = fpext float %G to double ; <double> [#uses=1] + %I = call double @llvm.sqrt.f64( double %H ) ; <double> [#uses=1] + ret double %I +} + + +; SIN +declare float @sinf(float) readonly + +declare double @sin(double) readonly + +define double @test_sin(float %F) { + %G = call float @sinf( float %F ) ; <float> [#uses=1] + %H = fpext float %G to double ; <double> [#uses=1] + %I = call double @sin( double %H ) ; <double> [#uses=1] + ret double %I +} + + +; COS +declare float @cosf(float) readonly + +declare double @cos(double) readonly + +define double @test_cos(float %F) { + %G = call float @cosf( float %F ) ; <float> [#uses=1] + %H = fpext float %G to double ; <double> [#uses=1] + %I = call double @cos( double %H ) ; <double> [#uses=1] + ret double %I +} + diff --git a/test/CodeGen/Generic/invalid-memcpy.ll b/test/CodeGen/Generic/invalid-memcpy.ll new file mode 100644 index 0000000..8448565 --- /dev/null +++ b/test/CodeGen/Generic/invalid-memcpy.ll @@ -0,0 +1,19 @@ +; RUN: llc < %s + +; This testcase is invalid (the alignment specified for memcpy is +; greater than the alignment guaranteed for Qux or C.0.1173), but it +; should compile, not crash the code generator. + +@C.0.1173 = external constant [33 x i8] ; <[33 x i8]*> [#uses=1] + +define void @Bork() { +entry: + %Qux = alloca [33 x i8] ; <[33 x i8]*> [#uses=1] + %Qux1 = bitcast [33 x i8]* %Qux to i8* ; <i8*> [#uses=1] + call void @llvm.memcpy.i64( i8* %Qux1, i8* getelementptr ([33 x i8]* @C.0.1173, i32 0, i32 0), i64 33, i32 8 ) + ret void +} + +declare void @llvm.memcpy.i64(i8*, i8*, i64, i32) + + diff --git a/test/CodeGen/Generic/isunord.ll b/test/CodeGen/Generic/isunord.ll new file mode 100644 index 0000000..ebbba01 --- /dev/null +++ b/test/CodeGen/Generic/isunord.ll @@ -0,0 +1,9 @@ +; RUN: llc < %s + +declare i1 @llvm.isunordered.f64(double, double) + +define i1 @test(double %X, double %Y) { + %tmp27 = fcmp uno double %X, %Y ; <i1> [#uses=1] + ret i1 %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..1db7549 --- /dev/null +++ b/test/CodeGen/Generic/llvm-ct-intrinsics.ll @@ -0,0 +1,62 @@ +; Make sure this testcase is supported by all code generators +; RUN: llc < %s + +declare i64 @llvm.ctpop.i64(i64) + +declare i32 @llvm.ctpop.i32(i32) + +declare i16 @llvm.ctpop.i16(i16) + +declare i8 @llvm.ctpop.i8(i8) + +define void @ctpoptest(i8 %A, i16 %B, i32 %C, i64 %D, i8* %AP, i16* %BP, i32* %CP, i64* %DP) { + %a = call i8 @llvm.ctpop.i8( i8 %A ) ; <i8> [#uses=1] + %b = call i16 @llvm.ctpop.i16( i16 %B ) ; <i16> [#uses=1] + %c = call i32 @llvm.ctpop.i32( i32 %C ) ; <i32> [#uses=1] + %d = call i64 @llvm.ctpop.i64( i64 %D ) ; <i64> [#uses=1] + store i8 %a, i8* %AP + store i16 %b, i16* %BP + store i32 %c, i32* %CP + store i64 %d, i64* %DP + ret void +} + +declare i64 @llvm.ctlz.i64(i64) + +declare i32 @llvm.ctlz.i32(i32) + +declare i16 @llvm.ctlz.i16(i16) + +declare i8 @llvm.ctlz.i8(i8) + +define void @ctlztest(i8 %A, i16 %B, i32 %C, i64 %D, i8* %AP, i16* %BP, i32* %CP, i64* %DP) { + %a = call i8 @llvm.ctlz.i8( i8 %A ) ; <i8> [#uses=1] + %b = call i16 @llvm.ctlz.i16( i16 %B ) ; <i16> [#uses=1] + %c = call i32 @llvm.ctlz.i32( i32 %C ) ; <i32> [#uses=1] + %d = call i64 @llvm.ctlz.i64( i64 %D ) ; <i64> [#uses=1] + store i8 %a, i8* %AP + store i16 %b, i16* %BP + store i32 %c, i32* %CP + store i64 %d, i64* %DP + ret void +} + +declare i64 @llvm.cttz.i64(i64) + +declare i32 @llvm.cttz.i32(i32) + +declare i16 @llvm.cttz.i16(i16) + +declare i8 @llvm.cttz.i8(i8) + +define void @cttztest(i8 %A, i16 %B, i32 %C, i64 %D, i8* %AP, i16* %BP, i32* %CP, i64* %DP) { + %a = call i8 @llvm.cttz.i8( i8 %A ) ; <i8> [#uses=1] + %b = call i16 @llvm.cttz.i16( i16 %B ) ; <i16> [#uses=1] + %c = call i32 @llvm.cttz.i32( i32 %C ) ; <i32> [#uses=1] + %d = call i64 @llvm.cttz.i64( i64 %D ) ; <i64> [#uses=1] + store i8 %a, i8* %AP + store i16 %b, i16* %BP + store i32 %c, i32* %CP + store i64 %d, i64* %DP + ret void +} diff --git a/test/CodeGen/Generic/multiple-return-values-cross-block-with-invoke.ll b/test/CodeGen/Generic/multiple-return-values-cross-block-with-invoke.ll new file mode 100644 index 0000000..282e973 --- /dev/null +++ b/test/CodeGen/Generic/multiple-return-values-cross-block-with-invoke.ll @@ -0,0 +1,18 @@ +; RUN: llc < %s + +declare { i64, double } @wild() + +define void @foo(i64* %p, double* %q) nounwind { + %t = invoke { i64, double } @wild() to label %normal unwind label %handler + +normal: + %mrv_gr = getresult { i64, double } %t, 0 + store i64 %mrv_gr, i64* %p + %mrv_gr12681 = getresult { i64, double } %t, 1 + store double %mrv_gr12681, double* %q + ret void + +handler: + ret void +} + diff --git a/test/CodeGen/Generic/negintconst.ll b/test/CodeGen/Generic/negintconst.ll new file mode 100644 index 0000000..67d775e --- /dev/null +++ b/test/CodeGen/Generic/negintconst.ll @@ -0,0 +1,47 @@ +; RUN: llc < %s + +; 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 i8] c"ioff = %u\09fval = 0x%p\09&fval[2] = 0x%p\0A\00" ; <[39 x i8]*> [#uses=1] + +declare i32 @printf(i8*, ...) + +define i32 @main() { + %fval = alloca %Results, i32 4 ; <%Results*> [#uses=2] + %i = add i32 1, 0 ; <i32> [#uses=1] + %iscale = mul i32 %i, -1 ; <i32> [#uses=1] + %ioff = add i32 %iscale, 3 ; <i32> [#uses=2] + %ioff.upgrd.1 = zext i32 %ioff to i64 ; <i64> [#uses=1] + %fptr = getelementptr %Results* %fval, i64 %ioff.upgrd.1 ; <%Results*> [#uses=1] + %castFmt = getelementptr [39 x i8]* @fmtArg, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %castFmt, i32 %ioff, %Results* %fval, %Results* %fptr ) ; <i32>:1 [#uses=0] + ret i32 0 +} + diff --git a/test/CodeGen/Generic/nested-select.ll b/test/CodeGen/Generic/nested-select.ll new file mode 100644 index 0000000..f81fed3 --- /dev/null +++ b/test/CodeGen/Generic/nested-select.ll @@ -0,0 +1,19 @@ +; RUN: llc < %s -o /dev/null + +; Test that select of a select works + +%typedef.tree = type opaque + +define i32 @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 = zext i1 false to i32 ; <i32> [#uses=1] + %tmp.55 = fcmp oge double 0.000000e+00, 1.000000e+00 ; <i1> [#uses=1] + %tmp.66 = fdiv double 0.000000e+00, 0.000000e+00 ; <double> [#uses=1] + br label %N + +N: ; preds = %0 + %result.1.1 = select i1 %tmp.55, i32 0, i32 %result.1.0 ; <i32> [#uses=1] + %tmp.75 = fcmp oge double %tmp.66, 1.000000e+00 ; <i1> [#uses=1] + %retval1 = select i1 %tmp.75, i32 0, i32 %result.1.1 ; <i32> [#uses=1] + ret i32 %retval1 +} + diff --git a/test/CodeGen/Generic/pr2625.ll b/test/CodeGen/Generic/pr2625.ll new file mode 100644 index 0000000..3e3dc4b --- /dev/null +++ b/test/CodeGen/Generic/pr2625.ll @@ -0,0 +1,17 @@ +; RUN: llc < %s +; PR2625 + +define i32 @main({ i32, { i32 } }*) { +entry: + %state = alloca { i32, { i32 } }* ; <{ i32, { i32 } }**> [#uses=2] + store { i32, { i32 } }* %0, { i32, { i32 } }** %state + %retval = alloca i32 ; <i32*> [#uses=2] + store i32 0, i32* %retval + load { i32, { i32 } }** %state ; <{ i32, { i32 } }*>:1 [#uses=1] + store { i32, { i32 } } zeroinitializer, { i32, { i32 } }* %1 + br label %return + +return: ; preds = %entry + load i32* %retval ; <i32>:2 [#uses=1] + ret i32 %2 +} diff --git a/test/CodeGen/Generic/pr3288.ll b/test/CodeGen/Generic/pr3288.ll new file mode 100644 index 0000000..b62710f --- /dev/null +++ b/test/CodeGen/Generic/pr3288.ll @@ -0,0 +1,67 @@ +; RUN: llc < %s +; PR3288 + +define void @a() { + %i = insertvalue [2 x [2 x i32]] undef, [2 x i32] undef, 1 + ret void +} +define void @b() { + %i = insertvalue {{i32,float},{i16,double}} undef, {i16,double} undef, 1 + ret void +} +define void @c() { + %i = insertvalue [2 x [2 x i32]] zeroinitializer, [2 x i32] zeroinitializer, 1 + ret void +} +define void @d() { + %i = insertvalue {{i32,float},{i16,double}} zeroinitializer, {i16,double} zeroinitializer, 1 + ret void +} +define void @e() { + %i = insertvalue [2 x [2 x i32]] undef, [2 x i32] undef, 0 + ret void +} +define void @f() { + %i = insertvalue {{i32,float},{i16,double}} undef, {i32,float} undef, 0 + ret void +} +define void @g() { + %i = insertvalue [2 x [2 x i32]] zeroinitializer, [2 x i32] zeroinitializer, 0 + ret void +} +define void @h() { + %i = insertvalue {{i32,float},{i16,double}} zeroinitializer, {i32,float} zeroinitializer, 0 + ret void +} +define void @ax() { + %i = insertvalue [2 x [2 x i32]] undef, i32 undef, 1, 1 + ret void +} +define void @bx() { + %i = insertvalue {{i32,float},{i16,double}} undef, double undef, 1, 1 + ret void +} +define void @cx() { + %i = insertvalue [2 x [2 x i32]] zeroinitializer, i32 zeroinitializer, 1, 1 + ret void +} +define void @dx() { + %i = insertvalue {{i32,float},{i16,double}} zeroinitializer, double zeroinitializer, 1, 1 + ret void +} +define void @ex() { + %i = insertvalue [2 x [2 x i32]] undef, i32 undef, 0, 1 + ret void +} +define void @fx() { + %i = insertvalue {{i32,float},{i16,double}} undef, float undef, 0, 1 + ret void +} +define void @gx() { + %i = insertvalue [2 x [2 x i32]] zeroinitializer, i32 zeroinitializer, 0, 1 + ret void +} +define void @hx() { + %i = insertvalue {{i32,float},{i16,double}} zeroinitializer, float zeroinitializer, 0, 1 + ret void +} diff --git a/test/CodeGen/Generic/print-add.ll b/test/CodeGen/Generic/print-add.ll new file mode 100644 index 0000000..95608dc --- /dev/null +++ b/test/CodeGen/Generic/print-add.ll @@ -0,0 +1,18 @@ +; RUN: llc < %s + +@.str_1 = internal constant [4 x i8] c"%d\0A\00" ; <[4 x i8]*> [#uses=1] + +declare i32 @printf(i8*, ...) + +define i32 @main() { + %f = getelementptr [4 x i8]* @.str_1, i64 0, i64 0 ; <i8*> [#uses=3] + %d = add i32 1, 0 ; <i32> [#uses=3] + call i32 (i8*, ...)* @printf( i8* %f, i32 %d ) ; <i32>:1 [#uses=0] + %e = add i32 38, 2 ; <i32> [#uses=2] + call i32 (i8*, ...)* @printf( i8* %f, i32 %e ) ; <i32>:2 [#uses=0] + %g = add i32 %d, %d ; <i32> [#uses=1] + %h = add i32 %e, %g ; <i32> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %f, i32 %h ) ; <i32>:3 [#uses=0] + ret i32 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..d129ff8 --- /dev/null +++ b/test/CodeGen/Generic/print-arith-fp.ll @@ -0,0 +1,61 @@ +; RUN: llc < %s +@a_str = internal constant [8 x i8] c"a = %f\0A\00" ; <[8 x i8]*> [#uses=1] +@b_str = internal constant [8 x i8] c"b = %f\0A\00" ; <[8 x i8]*> [#uses=1] +@add_str = internal constant [12 x i8] c"a + b = %f\0A\00" ; <[12 x i8]*> [#uses=1] +@sub_str = internal constant [12 x i8] c"a - b = %f\0A\00" ; <[12 x i8]*> [#uses=1] +@mul_str = internal constant [12 x i8] c"a * b = %f\0A\00" ; <[12 x i8]*> [#uses=1] +@div_str = internal constant [12 x i8] c"b / a = %f\0A\00" ; <[12 x i8]*> [#uses=1] +@rem_str = internal constant [13 x i8] c"b %% a = %f\0A\00" ; <[13 x i8]*> [#uses=1] +@lt_str = internal constant [12 x i8] c"a < b = %d\0A\00" ; <[12 x i8]*> [#uses=1] +@le_str = internal constant [13 x i8] c"a <= b = %d\0A\00" ; <[13 x i8]*> [#uses=1] +@gt_str = internal constant [12 x i8] c"a > b = %d\0A\00" ; <[12 x i8]*> [#uses=1] +@ge_str = internal constant [13 x i8] c"a >= b = %d\0A\00" ; <[13 x i8]*> [#uses=1] +@eq_str = internal constant [13 x i8] c"a == b = %d\0A\00" ; <[13 x i8]*> [#uses=1] +@ne_str = internal constant [13 x i8] c"a != b = %d\0A\00" ; <[13 x i8]*> [#uses=1] +@A = global double 2.000000e+00 ; <double*> [#uses=1] +@B = global double 5.000000e+00 ; <double*> [#uses=1] + +declare i32 @printf(i8*, ...) + +define i32 @main() { + %a = load double* @A ; <double> [#uses=12] + %b = load double* @B ; <double> [#uses=12] + %a_s = getelementptr [8 x i8]* @a_str, i64 0, i64 0 ; <i8*> [#uses=1] + %b_s = getelementptr [8 x i8]* @b_str, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %a_s, double %a ) ; <i32>:1 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %b_s, double %b ) ; <i32>:2 [#uses=0] + %add_r = fadd double %a, %b ; <double> [#uses=1] + %sub_r = fsub double %a, %b ; <double> [#uses=1] + %mul_r = fmul double %a, %b ; <double> [#uses=1] + %div_r = fdiv double %b, %a ; <double> [#uses=1] + %rem_r = frem double %b, %a ; <double> [#uses=1] + %add_s = getelementptr [12 x i8]* @add_str, i64 0, i64 0 ; <i8*> [#uses=1] + %sub_s = getelementptr [12 x i8]* @sub_str, i64 0, i64 0 ; <i8*> [#uses=1] + %mul_s = getelementptr [12 x i8]* @mul_str, i64 0, i64 0 ; <i8*> [#uses=1] + %div_s = getelementptr [12 x i8]* @div_str, i64 0, i64 0 ; <i8*> [#uses=1] + %rem_s = getelementptr [13 x i8]* @rem_str, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %add_s, double %add_r ) ; <i32>:3 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %sub_s, double %sub_r ) ; <i32>:4 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %mul_s, double %mul_r ) ; <i32>:5 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %div_s, double %div_r ) ; <i32>:6 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %rem_s, double %rem_r ) ; <i32>:7 [#uses=0] + %lt_r = fcmp olt double %a, %b ; <i1> [#uses=1] + %le_r = fcmp ole double %a, %b ; <i1> [#uses=1] + %gt_r = fcmp ogt double %a, %b ; <i1> [#uses=1] + %ge_r = fcmp oge double %a, %b ; <i1> [#uses=1] + %eq_r = fcmp oeq double %a, %b ; <i1> [#uses=1] + %ne_r = fcmp une double %a, %b ; <i1> [#uses=1] + %lt_s = getelementptr [12 x i8]* @lt_str, i64 0, i64 0 ; <i8*> [#uses=1] + %le_s = getelementptr [13 x i8]* @le_str, i64 0, i64 0 ; <i8*> [#uses=1] + %gt_s = getelementptr [12 x i8]* @gt_str, i64 0, i64 0 ; <i8*> [#uses=1] + %ge_s = getelementptr [13 x i8]* @ge_str, i64 0, i64 0 ; <i8*> [#uses=1] + %eq_s = getelementptr [13 x i8]* @eq_str, i64 0, i64 0 ; <i8*> [#uses=1] + %ne_s = getelementptr [13 x i8]* @ne_str, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %lt_s, i1 %lt_r ) ; <i32>:8 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %le_s, i1 %le_r ) ; <i32>:9 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %gt_s, i1 %gt_r ) ; <i32>:10 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %ge_s, i1 %ge_r ) ; <i32>:11 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %eq_s, i1 %eq_r ) ; <i32>:12 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %ne_s, i1 %ne_r ) ; <i32>:13 [#uses=0] + ret i32 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..ce938cf --- /dev/null +++ b/test/CodeGen/Generic/print-arith-int.ll @@ -0,0 +1,84 @@ +; RUN: llc < %s +@a_str = internal constant [8 x i8] c"a = %d\0A\00" ; <[8 x i8]*> [#uses=1] +@b_str = internal constant [8 x i8] c"b = %d\0A\00" ; <[8 x i8]*> [#uses=1] +@add_str = internal constant [12 x i8] c"a + b = %d\0A\00" ; <[12 x i8]*> [#uses=1] +@sub_str = internal constant [12 x i8] c"a - b = %d\0A\00" ; <[12 x i8]*> [#uses=1] +@mul_str = internal constant [12 x i8] c"a * b = %d\0A\00" ; <[12 x i8]*> [#uses=1] +@div_str = internal constant [12 x i8] c"b / a = %d\0A\00" ; <[12 x i8]*> [#uses=1] +@rem_str = internal constant [13 x i8] c"b \5C% a = %d\0A\00" ; <[13 x i8]*> [#uses=1] +@lt_str = internal constant [12 x i8] c"a < b = %d\0A\00" ; <[12 x i8]*> [#uses=1] +@le_str = internal constant [13 x i8] c"a <= b = %d\0A\00" ; <[13 x i8]*> [#uses=1] +@gt_str = internal constant [12 x i8] c"a > b = %d\0A\00" ; <[12 x i8]*> [#uses=1] +@ge_str = internal constant [13 x i8] c"a >= b = %d\0A\00" ; <[13 x i8]*> [#uses=1] +@eq_str = internal constant [13 x i8] c"a == b = %d\0A\00" ; <[13 x i8]*> [#uses=1] +@ne_str = internal constant [13 x i8] c"a != b = %d\0A\00" ; <[13 x i8]*> [#uses=1] +@and_str = internal constant [12 x i8] c"a & b = %d\0A\00" ; <[12 x i8]*> [#uses=1] +@or_str = internal constant [12 x i8] c"a | b = %d\0A\00" ; <[12 x i8]*> [#uses=1] +@xor_str = internal constant [12 x i8] c"a ^ b = %d\0A\00" ; <[12 x i8]*> [#uses=1] +@shl_str = internal constant [13 x i8] c"b << a = %d\0A\00" ; <[13 x i8]*> [#uses=1] +@shr_str = internal constant [13 x i8] c"b >> a = %d\0A\00" ; <[13 x i8]*> [#uses=1] +@A = global i32 2 ; <i32*> [#uses=1] +@B = global i32 5 ; <i32*> [#uses=1] + +declare i32 @printf(i8*, ...) + +define i32 @main() { + %a = load i32* @A ; <i32> [#uses=16] + %b = load i32* @B ; <i32> [#uses=17] + %a_s = getelementptr [8 x i8]* @a_str, i64 0, i64 0 ; <i8*> [#uses=1] + %b_s = getelementptr [8 x i8]* @b_str, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %a_s, i32 %a ) ; <i32>:1 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %b_s, i32 %b ) ; <i32>:2 [#uses=0] + %add_r = add i32 %a, %b ; <i32> [#uses=1] + %sub_r = sub i32 %a, %b ; <i32> [#uses=1] + %mul_r = mul i32 %a, %b ; <i32> [#uses=1] + %div_r = sdiv i32 %b, %a ; <i32> [#uses=1] + %rem_r = srem i32 %b, %a ; <i32> [#uses=1] + %add_s = getelementptr [12 x i8]* @add_str, i64 0, i64 0 ; <i8*> [#uses=1] + %sub_s = getelementptr [12 x i8]* @sub_str, i64 0, i64 0 ; <i8*> [#uses=1] + %mul_s = getelementptr [12 x i8]* @mul_str, i64 0, i64 0 ; <i8*> [#uses=1] + %div_s = getelementptr [12 x i8]* @div_str, i64 0, i64 0 ; <i8*> [#uses=1] + %rem_s = getelementptr [13 x i8]* @rem_str, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %add_s, i32 %add_r ) ; <i32>:3 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %sub_s, i32 %sub_r ) ; <i32>:4 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %mul_s, i32 %mul_r ) ; <i32>:5 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %div_s, i32 %div_r ) ; <i32>:6 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %rem_s, i32 %rem_r ) ; <i32>:7 [#uses=0] + %lt_r = icmp slt i32 %a, %b ; <i1> [#uses=1] + %le_r = icmp sle i32 %a, %b ; <i1> [#uses=1] + %gt_r = icmp sgt i32 %a, %b ; <i1> [#uses=1] + %ge_r = icmp sge i32 %a, %b ; <i1> [#uses=1] + %eq_r = icmp eq i32 %a, %b ; <i1> [#uses=1] + %ne_r = icmp ne i32 %a, %b ; <i1> [#uses=1] + %lt_s = getelementptr [12 x i8]* @lt_str, i64 0, i64 0 ; <i8*> [#uses=1] + %le_s = getelementptr [13 x i8]* @le_str, i64 0, i64 0 ; <i8*> [#uses=1] + %gt_s = getelementptr [12 x i8]* @gt_str, i64 0, i64 0 ; <i8*> [#uses=1] + %ge_s = getelementptr [13 x i8]* @ge_str, i64 0, i64 0 ; <i8*> [#uses=1] + %eq_s = getelementptr [13 x i8]* @eq_str, i64 0, i64 0 ; <i8*> [#uses=1] + %ne_s = getelementptr [13 x i8]* @ne_str, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %lt_s, i1 %lt_r ) ; <i32>:8 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %le_s, i1 %le_r ) ; <i32>:9 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %gt_s, i1 %gt_r ) ; <i32>:10 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %ge_s, i1 %ge_r ) ; <i32>:11 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %eq_s, i1 %eq_r ) ; <i32>:12 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %ne_s, i1 %ne_r ) ; <i32>:13 [#uses=0] + %and_r = and i32 %a, %b ; <i32> [#uses=1] + %or_r = or i32 %a, %b ; <i32> [#uses=1] + %xor_r = xor i32 %a, %b ; <i32> [#uses=1] + %u = trunc i32 %a to i8 ; <i8> [#uses=2] + %shift.upgrd.1 = zext i8 %u to i32 ; <i32> [#uses=1] + %shl_r = shl i32 %b, %shift.upgrd.1 ; <i32> [#uses=1] + %shift.upgrd.2 = zext i8 %u to i32 ; <i32> [#uses=1] + %shr_r = ashr i32 %b, %shift.upgrd.2 ; <i32> [#uses=1] + %and_s = getelementptr [12 x i8]* @and_str, i64 0, i64 0 ; <i8*> [#uses=1] + %or_s = getelementptr [12 x i8]* @or_str, i64 0, i64 0 ; <i8*> [#uses=1] + %xor_s = getelementptr [12 x i8]* @xor_str, i64 0, i64 0 ; <i8*> [#uses=1] + %shl_s = getelementptr [13 x i8]* @shl_str, i64 0, i64 0 ; <i8*> [#uses=1] + %shr_s = getelementptr [13 x i8]* @shr_str, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %and_s, i32 %and_r ) ; <i32>:14 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %or_s, i32 %or_r ) ; <i32>:15 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %xor_s, i32 %xor_r ) ; <i32>:16 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %shl_s, i32 %shl_r ) ; <i32>:17 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %shr_s, i32 %shr_r ) ; <i32>:18 [#uses=0] + ret i32 0 +} diff --git a/test/CodeGen/Generic/print-int.ll b/test/CodeGen/Generic/print-int.ll new file mode 100644 index 0000000..7ca4b3d --- /dev/null +++ b/test/CodeGen/Generic/print-int.ll @@ -0,0 +1,13 @@ +; RUN: llc < %s + +@.str_1 = internal constant [4 x i8] c"%d\0A\00" ; <[4 x i8]*> [#uses=1] + +declare i32 @printf(i8*, ...) + +define i32 @main() { + %f = getelementptr [4 x i8]* @.str_1, i64 0, i64 0 ; <i8*> [#uses=1] + %d = add i32 0, 0 ; <i32> [#uses=1] + %tmp.0 = call i32 (i8*, ...)* @printf( i8* %f, i32 %d ) ; <i32> [#uses=0] + ret i32 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..90fc55b --- /dev/null +++ b/test/CodeGen/Generic/print-mul-exp.ll @@ -0,0 +1,55 @@ +; RUN: llc < %s + +@a_str = internal constant [8 x i8] c"a = %d\0A\00" ; <[8 x i8]*> [#uses=1] +@a_mul_str = internal constant [13 x i8] c"a * %d = %d\0A\00" ; <[13 x i8]*> [#uses=1] +@A = global i32 2 ; <i32*> [#uses=1] + +declare i32 @printf(i8*, ...) + +define i32 @main() { + %a = load i32* @A ; <i32> [#uses=21] + %a_s = getelementptr [8 x i8]* @a_str, i64 0, i64 0 ; <i8*> [#uses=1] + %a_mul_s = getelementptr [13 x i8]* @a_mul_str, i64 0, i64 0 ; <i8*> [#uses=20] + call i32 (i8*, ...)* @printf( i8* %a_s, i32 %a ) ; <i32>:1 [#uses=0] + %r_0 = mul i32 %a, 0 ; <i32> [#uses=1] + %r_1 = mul i32 %a, 1 ; <i32> [#uses=1] + %r_2 = mul i32 %a, 2 ; <i32> [#uses=1] + %r_3 = mul i32 %a, 3 ; <i32> [#uses=1] + %r_4 = mul i32 %a, 4 ; <i32> [#uses=1] + %r_5 = mul i32 %a, 5 ; <i32> [#uses=1] + %r_6 = mul i32 %a, 6 ; <i32> [#uses=1] + %r_7 = mul i32 %a, 7 ; <i32> [#uses=1] + %r_8 = mul i32 %a, 8 ; <i32> [#uses=1] + %r_9 = mul i32 %a, 9 ; <i32> [#uses=1] + %r_10 = mul i32 %a, 10 ; <i32> [#uses=1] + %r_11 = mul i32 %a, 11 ; <i32> [#uses=1] + %r_12 = mul i32 %a, 12 ; <i32> [#uses=1] + %r_13 = mul i32 %a, 13 ; <i32> [#uses=1] + %r_14 = mul i32 %a, 14 ; <i32> [#uses=1] + %r_15 = mul i32 %a, 15 ; <i32> [#uses=1] + %r_16 = mul i32 %a, 16 ; <i32> [#uses=1] + %r_17 = mul i32 %a, 17 ; <i32> [#uses=1] + %r_18 = mul i32 %a, 18 ; <i32> [#uses=1] + %r_19 = mul i32 %a, 19 ; <i32> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 0, i32 %r_0 ) ; <i32>:2 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 1, i32 %r_1 ) ; <i32>:3 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 2, i32 %r_2 ) ; <i32>:4 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 3, i32 %r_3 ) ; <i32>:5 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 4, i32 %r_4 ) ; <i32>:6 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 5, i32 %r_5 ) ; <i32>:7 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 6, i32 %r_6 ) ; <i32>:8 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 7, i32 %r_7 ) ; <i32>:9 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 8, i32 %r_8 ) ; <i32>:10 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 9, i32 %r_9 ) ; <i32>:11 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 10, i32 %r_10 ) ; <i32>:12 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 11, i32 %r_11 ) ; <i32>:13 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 12, i32 %r_12 ) ; <i32>:14 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 13, i32 %r_13 ) ; <i32>:15 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 14, i32 %r_14 ) ; <i32>:16 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 15, i32 %r_15 ) ; <i32>:17 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 16, i32 %r_16 ) ; <i32>:18 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 17, i32 %r_17 ) ; <i32>:19 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 18, i32 %r_18 ) ; <i32>:20 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 19, i32 %r_19 ) ; <i32>:21 [#uses=0] + ret i32 0 +} diff --git a/test/CodeGen/Generic/print-mul.ll b/test/CodeGen/Generic/print-mul.ll new file mode 100644 index 0000000..0707f3c --- /dev/null +++ b/test/CodeGen/Generic/print-mul.ll @@ -0,0 +1,32 @@ +; RUN: llc < %s + +@a_str = internal constant [8 x i8] c"a = %d\0A\00" ; <[8 x i8]*> [#uses=1] +@b_str = internal constant [8 x i8] c"b = %d\0A\00" ; <[8 x i8]*> [#uses=1] +@a_mul_str = internal constant [13 x i8] c"a * %d = %d\0A\00" ; <[13 x i8]*> [#uses=1] +@A = global i32 2 ; <i32*> [#uses=1] +@B = global i32 5 ; <i32*> [#uses=1] + +declare i32 @printf(i8*, ...) + +define i32 @main() { +entry: + %a = load i32* @A ; <i32> [#uses=2] + %b = load i32* @B ; <i32> [#uses=1] + %a_s = getelementptr [8 x i8]* @a_str, i64 0, i64 0 ; <i8*> [#uses=1] + %b_s = getelementptr [8 x i8]* @b_str, i64 0, i64 0 ; <i8*> [#uses=1] + %a_mul_s = getelementptr [13 x i8]* @a_mul_str, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %a_s, i32 %a ) ; <i32>:0 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %b_s, i32 %b ) ; <i32>:1 [#uses=0] + br label %shl_test + +shl_test: ; preds = %shl_test, %entry + %s = phi i32 [ 0, %entry ], [ %s_inc, %shl_test ] ; <i32> [#uses=4] + %result = mul i32 %a, %s ; <i32> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 %s, i32 %result ) ; <i32>:2 [#uses=0] + %s_inc = add i32 %s, 1 ; <i32> [#uses=1] + %done = icmp eq i32 %s, 256 ; <i1> [#uses=1] + br i1 %done, label %fini, label %shl_test + +fini: ; preds = %shl_test + ret i32 0 +} diff --git a/test/CodeGen/Generic/print-shift.ll b/test/CodeGen/Generic/print-shift.ll new file mode 100644 index 0000000..6c5d222 --- /dev/null +++ b/test/CodeGen/Generic/print-shift.ll @@ -0,0 +1,34 @@ +; RUN: llc < %s + +@a_str = internal constant [8 x i8] c"a = %d\0A\00" ; <[8 x i8]*> [#uses=1] +@b_str = internal constant [8 x i8] c"b = %d\0A\00" ; <[8 x i8]*> [#uses=1] +@a_shl_str = internal constant [14 x i8] c"a << %d = %d\0A\00" ; <[14 x i8]*> [#uses=1] +@A = global i32 2 ; <i32*> [#uses=1] +@B = global i32 5 ; <i32*> [#uses=1] + +declare i32 @printf(i8*, ...) + +define i32 @main() { +entry: + %a = load i32* @A ; <i32> [#uses=2] + %b = load i32* @B ; <i32> [#uses=1] + %a_s = getelementptr [8 x i8]* @a_str, i64 0, i64 0 ; <i8*> [#uses=1] + %b_s = getelementptr [8 x i8]* @b_str, i64 0, i64 0 ; <i8*> [#uses=1] + %a_shl_s = getelementptr [14 x i8]* @a_shl_str, i64 0, i64 0 ; <i8*> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %a_s, i32 %a ) ; <i32>:0 [#uses=0] + call i32 (i8*, ...)* @printf( i8* %b_s, i32 %b ) ; <i32>:1 [#uses=0] + br label %shl_test + +shl_test: ; preds = %shl_test, %entry + %s = phi i8 [ 0, %entry ], [ %s_inc, %shl_test ] ; <i8> [#uses=4] + %shift.upgrd.1 = zext i8 %s to i32 ; <i32> [#uses=1] + %result = shl i32 %a, %shift.upgrd.1 ; <i32> [#uses=1] + call i32 (i8*, ...)* @printf( i8* %a_shl_s, i8 %s, i32 %result ) ; <i32>:2 [#uses=0] + %s_inc = add i8 %s, 1 ; <i8> [#uses=1] + %done = icmp eq i8 %s, 32 ; <i1> [#uses=1] + br i1 %done, label %fini, label %shl_test + +fini: ; preds = %shl_test + ret i32 0 +} + diff --git a/test/CodeGen/Generic/ret0.ll b/test/CodeGen/Generic/ret0.ll new file mode 100644 index 0000000..9e628a1 --- /dev/null +++ b/test/CodeGen/Generic/ret0.ll @@ -0,0 +1,5 @@ +; RUN: llc < %s + +define i32 @main() { + ret i32 0 +} diff --git a/test/CodeGen/Generic/ret42.ll b/test/CodeGen/Generic/ret42.ll new file mode 100644 index 0000000..f5cd33d --- /dev/null +++ b/test/CodeGen/Generic/ret42.ll @@ -0,0 +1,5 @@ +; RUN: llc < %s + +define i32 @main() { + ret i32 42 +} diff --git a/test/CodeGen/Generic/select-cc.ll b/test/CodeGen/Generic/select-cc.ll new file mode 100644 index 0000000..b653e2a --- /dev/null +++ b/test/CodeGen/Generic/select-cc.ll @@ -0,0 +1,9 @@ +; RUN: llc < %s +; PR2504 + +define <2 x double> @vector_select(<2 x double> %x, <2 x double> %y) nounwind { + %x.lo = extractelement <2 x double> %x, i32 0 ; <double> [#uses=1] + %x.lo.ge = fcmp oge double %x.lo, 0.000000e+00 ; <i1> [#uses=1] + %a.d = select i1 %x.lo.ge, <2 x double> %y, <2 x double> %x ; <<2 x double>> [#uses=1] + ret <2 x double> %a.d +} diff --git a/test/CodeGen/Generic/select.ll b/test/CodeGen/Generic/select.ll new file mode 100644 index 0000000..63052c1 --- /dev/null +++ b/test/CodeGen/Generic/select.ll @@ -0,0 +1,187 @@ +; RUN: llc < %s + +%Domain = type { i8*, i32, i32*, i32, i32, i32*, %Domain* } +@AConst = constant i32 123 ; <i32*> [#uses=1] + +; Test setting values of different constants in registers. +; +define void @testConsts(i32 %N, float %X) { + %a = add i32 %N, 1 ; <i32> [#uses=0] + %i = add i32 %N, 12345678 ; <i32> [#uses=0] + %b = add i16 4, 3 ; <i16> [#uses=0] + %c = fadd float %X, 0.000000e+00 ; <float> [#uses=0] + %d = fadd float %X, 0x400921CAC0000000 ; <float> [#uses=0] + %f = add i32 -1, 10 ; <i32> [#uses=0] + %g = add i16 20, -1 ; <i16> [#uses=0] + %j = add i16 -1, 30 ; <i16> [#uses=0] + %h = add i8 40, -1 ; <i8> [#uses=0] + %k = add i8 -1, 50 ; <i8> [#uses=0] + ret void +} + +; 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. +; +define void @unusedBool(i32* %x, i32* %y) { + icmp eq i32* %x, %y ; <i1>:1 [#uses=1] + xor i1 %1, true ; <i1>:2 [#uses=0] + icmp ne i32* %x, %y ; <i1>:3 [#uses=0] + ret void +} + +; 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 +; +define void @mergeConstants(i32* %x, i32* %y) { +; <label>:0 + br label %Top + +Top: ; preds = %Next, %Top, %0 + phi i32 [ 0, %0 ], [ 1, %Top ], [ 524288, %Next ] ; <i32>:1 [#uses=0] + phi float [ 0.000000e+00, %0 ], [ 1.000000e+00, %Top ], [ 2.000000e+00, %Next ] ; <float>:2 [#uses=0] + phi double [ 5.000000e-01, %0 ], [ 1.500000e+00, %Top ], [ 2.500000e+00, %Next ] + phi i1 [ true, %0 ], [ false, %Top ], [ true, %Next ] ; <i1>:4 [#uses=0] + br i1 true, label %Top, label %Next + +Next: ; preds = %Top + br label %Top +} + + + +; 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 +; +define i32* @castconst(float) { + %castbig = trunc i64 99999999 to i32 ; <i32> [#uses=1] + %castsmall = trunc i64 1 to i32 ; <i32> [#uses=1] + %usebig = add i32 %castbig, %castsmall ; <i32> [#uses=0] + %castglob = bitcast i32* @AConst to i64* ; <i64*> [#uses=1] + %dummyl = load i64* %castglob ; <i64> [#uses=0] + %castnull = inttoptr i64 0 to i32* ; <i32*> [#uses=1] + ret i32* %castnull +} + +; Test branch-on-comparison-with-zero, in two ways: +; 1. can be folded +; 2. cannot be folded because result of comparison is used twice +; +define void @testbool(i32 %A, i32 %B) { + br label %Top + +Top: ; preds = %loop, %0 + %D = add i32 %A, %B ; <i32> [#uses=2] + %E = sub i32 %D, -4 ; <i32> [#uses=1] + %C = icmp sle i32 %E, 0 ; <i1> [#uses=1] + br i1 %C, label %retlbl, label %loop + +loop: ; preds = %loop, %Top + %F = add i32 %A, %B ; <i32> [#uses=0] + %G = sub i32 %D, -4 ; <i32> [#uses=1] + %D.upgrd.1 = icmp sle i32 %G, 0 ; <i1> [#uses=1] + %E.upgrd.2 = xor i1 %D.upgrd.1, true ; <i1> [#uses=1] + br i1 %E.upgrd.2, label %loop, label %Top + +retlbl: ; preds = %Top + ret void +} + + +;; Test use of a boolean result in cast operations. +;; Requires converting a condition code result into a 0/1 value in a reg. +;; +define i32 @castbool(i32 %A, i32 %B) { +bb0: + %cond213 = icmp slt i32 %A, %B ; <i1> [#uses=1] + %cast110 = zext i1 %cond213 to i8 ; <i8> [#uses=1] + %cast109 = zext i8 %cast110 to i32 ; <i32> [#uses=1] + ret i32 %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. +;; +define i1 @boolexpr(i1 %b, i32 %N) { + %b2 = icmp sge i32 %N, 0 ; <i1> [#uses=1] + %b3 = and i1 %b, %b2 ; <i1> [#uses=1] + ret i1 %b3 +} + +; Test branch on floating point comparison +; +define void @testfloatbool(float %x, float %y) { + br label %Top + +Top: ; preds = %Top, %0 + %p = fadd float %x, %y ; <float> [#uses=1] + %z = fsub float %x, %y ; <float> [#uses=1] + %b = fcmp ole float %p, %z ; <i1> [#uses=2] + %c = xor i1 %b, true ; <i1> [#uses=0] + br i1 %b, label %Top, label %goon + +goon: ; preds = %Top + ret void +} + + +; 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. +; +define i32 @checkForward(i32 %N, i32* %A) { +bb2: + %reg114 = shl i32 %N, 2 ; <i32> [#uses=1] + %cast115 = sext i32 %reg114 to i64 ; <i64> [#uses=1] + %cast116 = ptrtoint i32* %A to i64 ; <i64> [#uses=1] + %reg116 = add i64 %cast116, %cast115 ; <i64> [#uses=1] + %castPtr = inttoptr i64 %reg116 to i32* ; <i32*> [#uses=1] + %reg118 = load i32* %castPtr ; <i32> [#uses=1] + %cast117 = sext i32 %reg118 to i64 ; <i64> [#uses=2] + %reg159 = add i64 1234567, %cast117 ; <i64> [#uses=0] + %reg160 = add i64 7654321, %cast117 ; <i64> [#uses=0] + ret i32 0 +} + + +; Test case for unary NOT operation constructed from XOR. +; +define void @checkNot(i1 %b, i32 %i) { + %notB = xor i1 %b, true ; <i1> [#uses=1] + %notI = xor i32 %i, -1 ; <i32> [#uses=2] + %F = icmp sge i32 %notI, 100 ; <i1> [#uses=1] + %J = add i32 %i, %i ; <i32> [#uses=1] + %andNotB = and i1 %F, %notB ; <i1> [#uses=0] + %andNotI = and i32 %J, %notI ; <i32> [#uses=0] + %notB2 = xor i1 true, %b ; <i1> [#uses=0] + %notI2 = xor i32 -1, %i ; <i32> [#uses=0] + ret void +} + +; Test case for folding getelementptr into a load/store +; +define i32 @checkFoldGEP(%Domain* %D, i64 %idx) { + %reg841 = getelementptr %Domain* %D, i64 0, i32 1 ; <i32*> [#uses=1] + %reg820 = load i32* %reg841 ; <i32> [#uses=1] + ret i32 %reg820 +} + diff --git a/test/CodeGen/Generic/shift-int64.ll b/test/CodeGen/Generic/shift-int64.ll new file mode 100644 index 0000000..670ef20 --- /dev/null +++ b/test/CodeGen/Generic/shift-int64.ll @@ -0,0 +1,12 @@ +; RUN: llc < %s + +define i64 @test_imm(i64 %X) { + %Y = ashr i64 %X, 17 ; <i64> [#uses=1] + ret i64 %Y +} + +define i64 @test_variable(i64 %X, i8 %Amt) { + %shift.upgrd.1 = zext i8 %Amt to i64 ; <i64> [#uses=1] + %Y = ashr i64 %X, %shift.upgrd.1 ; <i64> [#uses=1] + ret i64 %Y +} diff --git a/test/CodeGen/Generic/spillccr.ll b/test/CodeGen/Generic/spillccr.ll new file mode 100644 index 0000000..0a774c6 --- /dev/null +++ b/test/CodeGen/Generic/spillccr.ll @@ -0,0 +1,49 @@ +; RUN: llc < %s + +; 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*, i32 (i32)*, i32 } + %struct.hash_entry = type { i32, i8*, %HashEntry } + %struct.vert_st = type { i32, %Vertex, %Hash } +@HashRange = external global i32 ; <i32*> [#uses=0] +@.LC0 = internal global [13 x i8] c"Make phase 2\00" ; <[13 x i8]*> [#uses=0] +@.LC1 = internal global [13 x i8] c"Make phase 3\00" ; <[13 x i8]*> [#uses=0] +@.LC2 = internal global [13 x i8] c"Make phase 4\00" ; <[13 x i8]*> [#uses=0] +@.LC3 = internal global [15 x i8] c"Make returning\00" ; <[15 x i8]*> [#uses=0] + +define %Graph @MakeGraph(i32 %numvert, i32 %numproc) { +bb1: + %reg111 = add i32 %numproc, -1 ; <i32> [#uses=2] + %cond275 = icmp slt i32 %reg111, 1 ; <i1> [#uses=1] + %cond276 = icmp sle i32 %reg111, 0 ; <i1> [#uses=1] + %cond277 = icmp sge i32 %numvert, 0 ; <i1> [#uses=1] + %reg162 = add i32 %numvert, 3 ; <i32> [#uses=0] + br i1 %cond275, label %bb7, label %bb4 + +bb4: ; preds = %bb1 + br i1 %cond276, label %bb7, label %bb5 + +bb5: ; preds = %bb4 + br i1 %cond277, label %bb7, label %bb6 + +bb6: ; preds = %bb5 + ret %Graph null + +bb7: ; preds = %bb5, %bb4, %bb1 + ret %Graph null +} + diff --git a/test/CodeGen/Generic/stack-protector.ll b/test/CodeGen/Generic/stack-protector.ll new file mode 100644 index 0000000..a59c649 --- /dev/null +++ b/test/CodeGen/Generic/stack-protector.ll @@ -0,0 +1,25 @@ +; RUN: llc < %s -o - | grep {__stack_chk_guard} +; RUN: llc < %s -o - | grep {__stack_chk_fail} + +@"\01LC" = internal constant [11 x i8] c"buf == %s\0A\00" ; <[11 x i8]*> [#uses=1] + +define void @test(i8* %a) nounwind ssp { +entry: + %a_addr = alloca i8* ; <i8**> [#uses=2] + %buf = alloca [8 x i8] ; <[8 x i8]*> [#uses=2] + %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] + store i8* %a, i8** %a_addr + %buf1 = bitcast [8 x i8]* %buf to i8* ; <i8*> [#uses=1] + %0 = load i8** %a_addr, align 4 ; <i8*> [#uses=1] + %1 = call i8* @strcpy(i8* %buf1, i8* %0) nounwind ; <i8*> [#uses=0] + %buf2 = bitcast [8 x i8]* %buf to i8* ; <i8*> [#uses=1] + %2 = call i32 (i8*, ...)* @printf(i8* getelementptr ([11 x i8]* @"\01LC", i32 0, i32 0), i8* %buf2) nounwind ; <i32> [#uses=0] + br label %return + +return: ; preds = %entry + ret void +} + +declare i8* @strcpy(i8*, i8*) nounwind + +declare i32 @printf(i8*, ...) nounwind diff --git a/test/CodeGen/Generic/stacksave-restore.ll b/test/CodeGen/Generic/stacksave-restore.ll new file mode 100644 index 0000000..b124b5f --- /dev/null +++ b/test/CodeGen/Generic/stacksave-restore.ll @@ -0,0 +1,14 @@ +; RUN: llc < %s + +declare i8* @llvm.stacksave() + +declare void @llvm.stackrestore(i8*) + +define i32* @test(i32 %N) { + %tmp = call i8* @llvm.stacksave( ) ; <i8*> [#uses=1] + %P = alloca i32, i32 %N ; <i32*> [#uses=1] + call void @llvm.stackrestore( i8* %tmp ) + %Q = alloca i32, i32 %N ; <i32*> [#uses=0] + ret i32* %P +} + diff --git a/test/CodeGen/Generic/storetrunc-fp.ll b/test/CodeGen/Generic/storetrunc-fp.ll new file mode 100644 index 0000000..7f7c7f7 --- /dev/null +++ b/test/CodeGen/Generic/storetrunc-fp.ll @@ -0,0 +1,8 @@ +; RUN: llc < %s + +define void @foo(double %a, double %b, float* %fp) { + %c = fadd double %a, %b + %d = fptrunc double %c to float + store float %d, float* %fp + ret void +} diff --git a/test/CodeGen/Generic/switch-lower-feature.ll b/test/CodeGen/Generic/switch-lower-feature.ll new file mode 100644 index 0000000..1e9dbee --- /dev/null +++ b/test/CodeGen/Generic/switch-lower-feature.ll @@ -0,0 +1,63 @@ +; RUN: llc < %s + +define i32 @test(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 +} + +define i32 @test2(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.ll b/test/CodeGen/Generic/switch-lower.ll new file mode 100644 index 0000000..1cefe82 --- /dev/null +++ b/test/CodeGen/Generic/switch-lower.ll @@ -0,0 +1,348 @@ +; RUN: llc < %s + + +; PR5421 +define void @test1() { +entry: + switch i128 undef, label %exit [ + i128 55340232221128654848, label %exit + i128 92233720368547758080, label %exit + i128 73786976294838206464, label %exit + i128 147573952589676412928, label %exit + ] +exit: + unreachable +} + + +; PR1197 +define void @test2() { +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/trap.ll b/test/CodeGen/Generic/trap.ll new file mode 100644 index 0000000..67d1a7a --- /dev/null +++ b/test/CodeGen/Generic/trap.ll @@ -0,0 +1,9 @@ +; RUN: llc < %s +define i32 @test() noreturn nounwind { +entry: + tail call void @llvm.trap( ) + unreachable +} + +declare void @llvm.trap() nounwind + diff --git a/test/CodeGen/Generic/v-split.ll b/test/CodeGen/Generic/v-split.ll new file mode 100644 index 0000000..634b562 --- /dev/null +++ b/test/CodeGen/Generic/v-split.ll @@ -0,0 +1,11 @@ +; RUN: llc < %s +%f8 = type <8 x float> + +define void @test_f8(%f8 *%P, %f8* %Q, %f8 *%S) { + %p = load %f8* %P + %q = load %f8* %Q + %R = fadd %f8 %p, %q + store %f8 %R, %f8 *%S + ret void +} + diff --git a/test/CodeGen/Generic/vector-casts.ll b/test/CodeGen/Generic/vector-casts.ll new file mode 100644 index 0000000..a26918b --- /dev/null +++ b/test/CodeGen/Generic/vector-casts.ll @@ -0,0 +1,45 @@ +; RUN: llc < %s +; PR2671 + +define void @a(<2 x double>* %p, <2 x i8>* %q) { + %t = load <2 x double>* %p + %r = fptosi <2 x double> %t to <2 x i8> + store <2 x i8> %r, <2 x i8>* %q + ret void +} +define void @b(<2 x double>* %p, <2 x i8>* %q) { + %t = load <2 x double>* %p + %r = fptoui <2 x double> %t to <2 x i8> + store <2 x i8> %r, <2 x i8>* %q + ret void +} +define void @c(<2 x i8>* %p, <2 x double>* %q) { + %t = load <2 x i8>* %p + %r = sitofp <2 x i8> %t to <2 x double> + store <2 x double> %r, <2 x double>* %q + ret void +} +define void @d(<2 x i8>* %p, <2 x double>* %q) { + %t = load <2 x i8>* %p + %r = uitofp <2 x i8> %t to <2 x double> + store <2 x double> %r, <2 x double>* %q + ret void +} +define void @e(<2 x i8>* %p, <2 x i16>* %q) { + %t = load <2 x i8>* %p + %r = sext <2 x i8> %t to <2 x i16> + store <2 x i16> %r, <2 x i16>* %q + ret void +} +define void @f(<2 x i8>* %p, <2 x i16>* %q) { + %t = load <2 x i8>* %p + %r = zext <2 x i8> %t to <2 x i16> + store <2 x i16> %r, <2 x i16>* %q + ret void +} +define void @g(<2 x i16>* %p, <2 x i8>* %q) { + %t = load <2 x i16>* %p + %r = trunc <2 x i16> %t to <2 x i8> + store <2 x i8> %r, <2 x i8>* %q + ret void +} diff --git a/test/CodeGen/Generic/vector-constantexpr.ll b/test/CodeGen/Generic/vector-constantexpr.ll new file mode 100644 index 0000000..d8e0258 --- /dev/null +++ b/test/CodeGen/Generic/vector-constantexpr.ll @@ -0,0 +1,7 @@ +; RUN: llc < %s + +define void @""(float* %inregs, float* %outregs) { + %a_addr.i = alloca <4 x float> ; <<4 x float>*> [#uses=1] + store <4 x float> < float undef, float undef, float undef, float undef >, <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..332d6d8 --- /dev/null +++ b/test/CodeGen/Generic/vector-identity-shuffle.ll @@ -0,0 +1,17 @@ +; RUN: llc < %s + + +define void @test(<4 x float>* %tmp2.i) { + %tmp2.i.upgrd.1 = load <4 x float>* %tmp2.i ; <<4 x float>> [#uses=4] + %xFloat0.48 = extractelement <4 x float> %tmp2.i.upgrd.1, i32 0 ; <float> [#uses=1] + %inFloat0.49 = insertelement <4 x float> undef, float %xFloat0.48, i32 0 ; <<4 x float>> [#uses=1] + %xFloat1.50 = extractelement <4 x float> %tmp2.i.upgrd.1, i32 1 ; <float> [#uses=1] + %inFloat1.52 = insertelement <4 x float> %inFloat0.49, float %xFloat1.50, i32 1 ; <<4 x float>> [#uses=1] + %xFloat2.53 = extractelement <4 x float> %tmp2.i.upgrd.1, i32 2 ; <float> [#uses=1] + %inFloat2.55 = insertelement <4 x float> %inFloat1.52, float %xFloat2.53, i32 2 ; <<4 x float>> [#uses=1] + %xFloat3.56 = extractelement <4 x float> %tmp2.i.upgrd.1, i32 3 ; <float> [#uses=1] + %inFloat3.58 = insertelement <4 x float> %inFloat2.55, float %xFloat3.56, i32 3 ; <<4 x float>> [#uses=1] + store <4 x float> %inFloat3.58, <4 x 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..a0f9a02 --- /dev/null +++ b/test/CodeGen/Generic/vector.ll @@ -0,0 +1,154 @@ +; Test that vectors are scalarized/lowered correctly. +; RUN: llc < %s + + +%d8 = type <8 x double> +%f1 = type <1 x float> +%f2 = type <2 x float> +%f4 = type <4 x float> +%f8 = type <8 x float> +%i4 = type <4 x i32> + +;;; TEST HANDLING OF VARIOUS VECTOR SIZES + +define void @test_f1(%f1* %P, %f1* %Q, %f1* %S) { + %p = load %f1* %P ; <%f1> [#uses=1] + %q = load %f1* %Q ; <%f1> [#uses=1] + %R = fadd %f1 %p, %q ; <%f1> [#uses=1] + store %f1 %R, %f1* %S + ret void +} + +define void @test_f2(%f2* %P, %f2* %Q, %f2* %S) { + %p = load %f2* %P ; <%f2> [#uses=1] + %q = load %f2* %Q ; <%f2> [#uses=1] + %R = fadd %f2 %p, %q ; <%f2> [#uses=1] + store %f2 %R, %f2* %S + ret void +} + +define void @test_f4(%f4* %P, %f4* %Q, %f4* %S) { + %p = load %f4* %P ; <%f4> [#uses=1] + %q = load %f4* %Q ; <%f4> [#uses=1] + %R = fadd %f4 %p, %q ; <%f4> [#uses=1] + store %f4 %R, %f4* %S + ret void +} + +define void @test_f8(%f8* %P, %f8* %Q, %f8* %S) { + %p = load %f8* %P ; <%f8> [#uses=1] + %q = load %f8* %Q ; <%f8> [#uses=1] + %R = fadd %f8 %p, %q ; <%f8> [#uses=1] + store %f8 %R, %f8* %S + ret void +} + +define void @test_fmul(%f8* %P, %f8* %Q, %f8* %S) { + %p = load %f8* %P ; <%f8> [#uses=1] + %q = load %f8* %Q ; <%f8> [#uses=1] + %R = fmul %f8 %p, %q ; <%f8> [#uses=1] + store %f8 %R, %f8* %S + ret void +} + +define void @test_div(%f8* %P, %f8* %Q, %f8* %S) { + %p = load %f8* %P ; <%f8> [#uses=1] + %q = load %f8* %Q ; <%f8> [#uses=1] + %R = fdiv %f8 %p, %q ; <%f8> [#uses=1] + store %f8 %R, %f8* %S + ret void +} + +;;; TEST VECTOR CONSTRUCTS + + +define void @test_cst(%f4* %P, %f4* %S) { + %p = load %f4* %P ; <%f4> [#uses=1] + %R = fadd %f4 %p, < float 0x3FB99999A0000000, float 1.000000e+00, float 2.000000e+00, float 4.500000e+00 > ; <%f4> [#uses=1] + store %f4 %R, %f4* %S + ret void +} + +define void @test_zero(%f4* %P, %f4* %S) { + %p = load %f4* %P ; <%f4> [#uses=1] + %R = fadd %f4 %p, zeroinitializer ; <%f4> [#uses=1] + store %f4 %R, %f4* %S + ret void +} + +define void @test_undef(%f4* %P, %f4* %S) { + %p = load %f4* %P ; <%f4> [#uses=1] + %R = fadd %f4 %p, undef ; <%f4> [#uses=1] + store %f4 %R, %f4* %S + ret void +} + +define void @test_constant_insert(%f4* %S) { + %R = insertelement %f4 zeroinitializer, float 1.000000e+01, i32 0 ; <%f4> [#uses=1] + store %f4 %R, %f4* %S + ret void +} + +define void @test_variable_buildvector(float %F, %f4* %S) { + %R = insertelement %f4 zeroinitializer, float %F, i32 0 ; <%f4> [#uses=1] + store %f4 %R, %f4* %S + ret void +} + +define void @test_scalar_to_vector(float %F, %f4* %S) { + %R = insertelement %f4 undef, float %F, i32 0 ; <%f4> [#uses=1] + store %f4 %R, %f4* %S + ret void +} + +define float @test_extract_elt(%f8* %P) { + %p = load %f8* %P ; <%f8> [#uses=1] + %R = extractelement %f8 %p, i32 3 ; <float> [#uses=1] + ret float %R +} + +define double @test_extract_elt2(%d8* %P) { + %p = load %d8* %P ; <%d8> [#uses=1] + %R = extractelement %d8 %p, i32 3 ; <double> [#uses=1] + ret double %R +} + +define void @test_cast_1(%f4* %b, %i4* %a) { + %tmp = load %f4* %b ; <%f4> [#uses=1] + %tmp2 = fadd %f4 %tmp, < float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00 > ; <%f4> [#uses=1] + %tmp3 = bitcast %f4 %tmp2 to %i4 ; <%i4> [#uses=1] + %tmp4 = add %i4 %tmp3, < i32 1, i32 2, i32 3, i32 4 > ; <%i4> [#uses=1] + store %i4 %tmp4, %i4* %a + ret void +} + +define void @test_cast_2(%f8* %a, <8 x i32>* %b) { + %T = load %f8* %a ; <%f8> [#uses=1] + %T2 = bitcast %f8 %T to <8 x i32> ; <<8 x i32>> [#uses=1] + store <8 x i32> %T2, <8 x i32>* %b + ret void +} + +;;; TEST IMPORTANT IDIOMS + +define void @splat(%f4* %P, %f4* %Q, float %X) { + %tmp = insertelement %f4 undef, float %X, i32 0 ; <%f4> [#uses=1] + %tmp2 = insertelement %f4 %tmp, float %X, i32 1 ; <%f4> [#uses=1] + %tmp4 = insertelement %f4 %tmp2, float %X, i32 2 ; <%f4> [#uses=1] + %tmp6 = insertelement %f4 %tmp4, float %X, i32 3 ; <%f4> [#uses=1] + %q = load %f4* %Q ; <%f4> [#uses=1] + %R = fadd %f4 %q, %tmp6 ; <%f4> [#uses=1] + store %f4 %R, %f4* %P + ret void +} + +define void @splat_i4(%i4* %P, %i4* %Q, i32 %X) { + %tmp = insertelement %i4 undef, i32 %X, i32 0 ; <%i4> [#uses=1] + %tmp2 = insertelement %i4 %tmp, i32 %X, i32 1 ; <%i4> [#uses=1] + %tmp4 = insertelement %i4 %tmp2, i32 %X, i32 2 ; <%i4> [#uses=1] + %tmp6 = insertelement %i4 %tmp4, i32 %X, i32 3 ; <%i4> [#uses=1] + %q = load %i4* %Q ; <%i4> [#uses=1] + %R = add %i4 %q, %tmp6 ; <%i4> [#uses=1] + store %i4 %R, %i4* %P + ret void +} |