Genericize tests

llvm-svn: 10091
diff --git a/llvm/test/Regression/ExecutionEngine/2002-12-16-ArgTest.ll b/llvm/test/Regression/ExecutionEngine/2002-12-16-ArgTest.ll
new file mode 100644
index 0000000..5125614
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2002-12-16-ArgTest.ll
@@ -0,0 +1,44 @@
+%.LC0 = internal global [10 x sbyte] c"argc: %d\0A\00"
+
+implementation   ; Functions:
+
+declare int %puts(sbyte*)
+
+void %getoptions(int* %argc) {
+bb0:		; No predecessors!
+	ret void
+}
+
+declare int %printf(sbyte*, ...)
+
+int %main(int %argc, sbyte** %argv) {
+bb0:		; No predecessors!
+	call int (sbyte*, ...)* %printf( sbyte* getelementptr ([10 x sbyte]* %.LC0, long 0, long 0), int %argc)
+	%cast224 = cast sbyte** %argv to sbyte*		; <sbyte*> [#uses=1]
+	%local = alloca sbyte*		; <sbyte**> [#uses=3]
+	store sbyte* %cast224, sbyte** %local
+	%cond226 = setle int %argc, 0		; <bool> [#uses=1]
+	br bool %cond226, label %bb3, label %bb2
+
+bb2:		; preds = %bb2, %bb0
+	%cann-indvar = phi int [ 0, %bb0 ], [ %add1-indvar, %bb2 ]		; <int> [#uses=2]
+	%add1-indvar = add int %cann-indvar, 1		; <int> [#uses=2]
+	%cann-indvar-idxcast = cast int %cann-indvar to long		; <long> [#uses=1]
+	;%reg115 = load sbyte** %local		; <sbyte*> [#uses=1]
+	;%cann-indvar-idxcast-scale = mul long %cann-indvar-idxcast, 8		; <long> [#uses=1]
+	;%reg232 = getelementptr sbyte* %reg115, long %cann-indvar-idxcast-scale		; <sbyte*> [#uses=1]
+	;%cast235 = cast sbyte* %reg232 to sbyte**		; <sbyte**> [#uses=1]
+	%CT = cast sbyte**  %local to sbyte***
+	%reg115 = load sbyte*** %CT
+	%cast235 = getelementptr sbyte** %reg115, long %cann-indvar-idxcast
+
+	%reg117 = load sbyte** %cast235		; <sbyte*> [#uses=1]
+	%reg236 = call int %puts( sbyte* %reg117 )		; <int> [#uses=0]
+	%cond239 = setlt int %add1-indvar, %argc		; <bool> [#uses=1]
+	br bool %cond239, label %bb2, label %bb3
+
+bb3:		; preds = %bb2, %bb0
+	%cast243 = cast sbyte** %local to int*		; <int*> [#uses=1]
+	call void %getoptions( int* %cast243 )
+	ret int 0
+}
diff --git a/llvm/test/Regression/ExecutionEngine/2003-01-04-ArgumentBug.ll b/llvm/test/Regression/ExecutionEngine/2003-01-04-ArgumentBug.ll
new file mode 100644
index 0000000..792913d
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2003-01-04-ArgumentBug.ll
@@ -0,0 +1,13 @@
+
+implementation   ; Functions:
+
+int %foo(int %X, int %Y, double %A) {
+	%cond212 = setne double %A, 1.000000e+00		; <bool> [#uses=1]
+	%cast110 = cast bool %cond212 to int		; <int> [#uses=1]
+	ret int %cast110
+}
+
+int %main() {
+	%reg212 = call int %foo( int 0, int 1, double 1.000000e+00 )		; <int> [#uses=1]
+	ret int %reg212
+}
diff --git a/llvm/test/Regression/ExecutionEngine/2003-01-04-LoopTest.ll b/llvm/test/Regression/ExecutionEngine/2003-01-04-LoopTest.ll
new file mode 100644
index 0000000..4aedd2d
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2003-01-04-LoopTest.ll
@@ -0,0 +1,22 @@
+implementation
+
+int %main() {
+	call int %mylog(int 4)
+	ret int 0
+}
+
+internal int %mylog(int %num) {
+bb0:            ; No predecessors!
+	br label %bb2
+
+bb2:
+        %reg112 = phi int [ 10, %bb2 ], [ 1, %bb0 ]
+        %cann-indvar = phi int [ %cann-indvar, %bb2 ], [0, %bb0]
+        %reg114 = add int %reg112, 1
+        %cond222 = setlt int %reg114, %num
+        br bool %cond222, label %bb2, label %bb3
+
+bb3:            ; preds = %bb2, %bb0
+	ret int %reg114
+}
+
diff --git a/llvm/test/Regression/ExecutionEngine/2003-01-04-PhiTest.ll b/llvm/test/Regression/ExecutionEngine/2003-01-04-PhiTest.ll
new file mode 100644
index 0000000..34e1620
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2003-01-04-PhiTest.ll
@@ -0,0 +1,8 @@
+int %main() {
+	br label %Loop
+Loop:
+	%X = phi int [0, %0], [1, %Loop]
+	br bool true, label %Out, label %Loop
+Out:
+	ret int %X
+}
diff --git a/llvm/test/Regression/ExecutionEngine/2003-01-09-SARTest.ll b/llvm/test/Regression/ExecutionEngine/2003-01-09-SARTest.ll
new file mode 100644
index 0000000..b19a931
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2003-01-09-SARTest.ll
@@ -0,0 +1,8 @@
+; We were accidentally inverting the signedness of right shifts.  Whoops.
+
+int %main() {
+  %X = shr int -1, ubyte 16
+  %Y = shr int %X, ubyte 16
+  %Z = add int %Y, 1
+  ret int %Z
+}
diff --git a/llvm/test/Regression/ExecutionEngine/2003-01-10-FUCOM.ll b/llvm/test/Regression/ExecutionEngine/2003-01-10-FUCOM.ll
new file mode 100644
index 0000000..37448f0
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2003-01-10-FUCOM.ll
@@ -0,0 +1,8 @@
+
+int %main() {
+	%X = add double 0.0, 1.0
+	%Y = sub double 0.0, 1.0
+	%Z = seteq double %X, %Y
+	add double %Y, 0.0
+	ret int 0
+}
diff --git a/llvm/test/Regression/ExecutionEngine/2003-01-15-AlignmentTest.ll b/llvm/test/Regression/ExecutionEngine/2003-01-15-AlignmentTest.ll
new file mode 100644
index 0000000..5304a81
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2003-01-15-AlignmentTest.ll
@@ -0,0 +1,16 @@
+
+int %bar(sbyte* %X) {
+	%P = alloca double   ; pointer should be 4 byte aligned!
+	%R = cast double* %P to int
+	%A = and int %R, 3
+	ret int %A
+}
+
+int %main() {
+	%SP = alloca sbyte
+	%X = add uint 0, 0
+	alloca sbyte, uint %X
+
+	call int %bar(sbyte* %SP)
+	ret int %0
+}
diff --git a/llvm/test/Regression/ExecutionEngine/2003-05-06-LivenessClobber.llx b/llvm/test/Regression/ExecutionEngine/2003-05-06-LivenessClobber.llx
new file mode 100644
index 0000000..3164dd8
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2003-05-06-LivenessClobber.llx
@@ -0,0 +1,20 @@
+; This testcase shoudl return with an exit code of 1.
+;
+; RUN: llvm-as < %s | not lli
+
+%test = global long 0
+implementation
+
+
+internal long %test() {
+        %tmp.0 = load long* %test               ; <long> [#uses=1]
+        %tmp.1 = add long %tmp.0, 1             ; <long> [#uses=1]
+        ret long %tmp.1
+}
+
+int %main() {
+	%L = call long %test()
+	%I = cast long %L to int
+	ret int %I
+}
+
diff --git a/llvm/test/Regression/ExecutionEngine/2003-05-07-ArgumentTest.llx b/llvm/test/Regression/ExecutionEngine/2003-05-07-ArgumentTest.llx
new file mode 100644
index 0000000..47b40c3
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2003-05-07-ArgumentTest.llx
@@ -0,0 +1,13 @@
+; RUN: llvm-as < %s | lli - test
+
+implementation  
+
+declare int %puts(sbyte*)
+
+int %main(int %argc.1, sbyte** %argv.1) {
+	%tmp.5 = getelementptr sbyte** %argv.1, long 1		; <sbyte**> [#uses=1]
+	%tmp.6 = load sbyte** %tmp.5		; <sbyte*> [#uses=1]
+	%tmp.0 = call int %puts( sbyte* %tmp.6 )		; <int> [#uses=0]
+	ret int 0
+}
+
diff --git a/llvm/test/Regression/ExecutionEngine/2003-05-11-PHIRegAllocBug.ll b/llvm/test/Regression/ExecutionEngine/2003-05-11-PHIRegAllocBug.ll
new file mode 100644
index 0000000..d59a635
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2003-05-11-PHIRegAllocBug.ll
@@ -0,0 +1,15 @@
+target endian = little
+target pointersize = 32
+
+implementation
+
+int %main() {
+entry:
+	br label %endif
+then:
+	br label %endif
+endif:
+	%x = phi uint [ 4, %entry ], [ 27, %then ]
+	%result = phi int [ 32, %then ], [ 0, %entry ]
+	ret int 0
+}
diff --git a/llvm/test/Regression/ExecutionEngine/2003-06-04-bzip2-bug.ll b/llvm/test/Regression/ExecutionEngine/2003-06-04-bzip2-bug.ll
new file mode 100644
index 0000000..2e71d91
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2003-06-04-bzip2-bug.ll
@@ -0,0 +1,19 @@
+; Testcase distilled from 256.bzip2.
+
+target endian = little
+target pointersize = 32
+
+int %main() {
+entry:
+	br label %loopentry.0
+
+loopentry.0:
+	%h.0 = phi int [ %tmp.2, %loopentry.0 ], [ -1, %entry ]
+	%tmp.2 = add int %h.0, 1
+	%tmp.4 = setne int %tmp.2, 0
+	br bool %tmp.4, label %loopentry.0, label %loopentry.1
+
+loopentry.1:
+	%h.1 = phi int [ %tmp.2, %loopentry.0 ]
+	ret int %h.1
+}
diff --git a/llvm/test/Regression/ExecutionEngine/2003-06-05-PHIBug.ll b/llvm/test/Regression/ExecutionEngine/2003-06-05-PHIBug.ll
new file mode 100644
index 0000000..0abe5d8
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2003-06-05-PHIBug.ll
@@ -0,0 +1,16 @@
+; Testcase distilled from 256.bzip2.
+
+target endian = little
+target pointersize = 32
+
+int %main() {
+entry:
+	%X = add int 1, -1
+	br label %Next
+
+Next:
+	%A = phi int [ %X, %entry ]
+	%B = phi int [ %X, %entry ]
+	%C = phi int [ %X, %entry ]
+	ret int %C
+}
diff --git a/llvm/test/Regression/ExecutionEngine/2003-08-15-AllocaAssertion.ll b/llvm/test/Regression/ExecutionEngine/2003-08-15-AllocaAssertion.ll
new file mode 100644
index 0000000..35248d1
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2003-08-15-AllocaAssertion.ll
@@ -0,0 +1,9 @@
+; This testcase failed to work because two variable sized allocas confused the
+; local register allocator.
+
+int %main(uint %X) {
+  %A = alloca uint, uint %X
+
+  %B = alloca float, uint %X
+  ret int 0
+}
diff --git a/llvm/test/Regression/ExecutionEngine/2003-08-21-EnvironmentTest.ll b/llvm/test/Regression/ExecutionEngine/2003-08-21-EnvironmentTest.ll
new file mode 100644
index 0000000..388f82c
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2003-08-21-EnvironmentTest.ll
@@ -0,0 +1,20 @@
+;
+; Regression Test: EnvironmentTest.ll
+;
+; Description:
+;	This is a regression test that verifies that the JIT passes the
+;	environment to the main() function.
+;
+
+implementation
+
+declare uint %strlen(sbyte*)
+
+int %main(int %argc.1, sbyte** %argv.1, sbyte** %envp.1) {
+	%tmp.2 = load sbyte** %envp.1
+	%tmp.3 = call uint %strlen( sbyte* %tmp.2 )
+	%T = seteq uint %tmp.3, 0
+	%R = cast bool %T to int	
+	ret int %R
+}
+
diff --git a/llvm/test/Regression/ExecutionEngine/2003-08-23-RegisterAllocatePhysReg.ll b/llvm/test/Regression/ExecutionEngine/2003-08-23-RegisterAllocatePhysReg.ll
new file mode 100644
index 0000000..fa7df62
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2003-08-23-RegisterAllocatePhysReg.ll
@@ -0,0 +1,30 @@
+; This testcase exposes a bug in the local register allocator where it runs out
+; of registers (due to too many overlapping live ranges), but then attempts to
+; use the ESP register (which is not allocatable) to hold a value.
+
+int %main(uint %A) {
+	%Ap2 = alloca uint, uint %A   ; ESP gets used again...
+	%B = add uint %A, 1 	      ; Produce lots of overlapping live ranges
+	%C = add uint %A, 2
+	%D = add uint %A, 3
+	%E = add uint %A, 4
+	%F = add uint %A, 5
+	%G = add uint %A, 6
+	%H = add uint %A, 7
+	%I = add uint %A, 8
+	%J = add uint %A, 9
+	%K = add uint %A, 10
+
+	store uint %A, uint *%Ap2      ; Uses of all of the values
+	store uint %B, uint *%Ap2
+	store uint %C, uint *%Ap2
+	store uint %D, uint *%Ap2
+	store uint %E, uint *%Ap2
+	store uint %F, uint *%Ap2
+	store uint %G, uint *%Ap2
+	store uint %H, uint *%Ap2
+	store uint %I, uint *%Ap2
+	store uint %J, uint *%Ap2
+	store uint %K, uint *%Ap2
+	ret int 0
+}
diff --git a/llvm/test/Regression/ExecutionEngine/2003-10-18-PHINode-ConstantExpr-CondCode-Failure.ll b/llvm/test/Regression/ExecutionEngine/2003-10-18-PHINode-ConstantExpr-CondCode-Failure.ll
new file mode 100644
index 0000000..e488ea8
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/2003-10-18-PHINode-ConstantExpr-CondCode-Failure.ll
@@ -0,0 +1,29 @@
+; RUN: llvm-as < %s | lli -force-interpreter=false
+
+%A = global int 0
+
+int %main() {
+	%Ret = call int %test(bool true, int 0)	
+	ret int %Ret
+}
+
+int %test(bool %c, int %A) {
+	br bool %c, label %Taken1, label %NotTaken
+
+Cont:
+	%V = phi int [0, %NotTaken], 
+	              [ sub (int cast (int* %A to int), int 1234), %Taken1]
+	ret int 0
+
+NotTaken:
+	br label %Cont	
+
+Taken1:
+	%B = seteq int %A, 0
+	; Code got inserted here, breaking the condition code.
+	br bool %B, label %Cont, label %ExitError
+
+ExitError:
+	ret int 12
+
+}
diff --git a/llvm/test/Regression/ExecutionEngine/hello.ll b/llvm/test/Regression/ExecutionEngine/hello.ll
new file mode 100644
index 0000000..1f8c77b
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/hello.ll
@@ -0,0 +1,11 @@
+%.LC0 = internal global [12 x sbyte] c"Hello World\00"
+
+implementation
+
+declare int %puts(sbyte*)
+
+int %main() {
+        %reg210 = call int %puts( sbyte* getelementptr ([12 x sbyte]* %.LC0, long 0, long 0) )
+        ret int 0
+}
+
diff --git a/llvm/test/Regression/ExecutionEngine/hello2.ll b/llvm/test/Regression/ExecutionEngine/hello2.ll
new file mode 100644
index 0000000..48d7688
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/hello2.ll
@@ -0,0 +1,19 @@
+
+%X = global int 7
+%msg = internal global [13 x sbyte] c"Hello World\0A\00"
+
+
+implementation
+
+declare void %printf([13 x sbyte]*)
+
+void %bar() {
+  call void %printf([13 x sbyte]* %msg)
+  ret void 
+}
+
+int %main() {
+        call void %bar()
+        ret int 0
+}
+
diff --git a/llvm/test/Regression/ExecutionEngine/simplesttest.ll b/llvm/test/Regression/ExecutionEngine/simplesttest.ll
new file mode 100644
index 0000000..e5d8cb0
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/simplesttest.ll
@@ -0,0 +1,7 @@
+
+implementation
+
+int %main() {
+        ret int 0
+}
+
diff --git a/llvm/test/Regression/ExecutionEngine/simpletest.ll b/llvm/test/Regression/ExecutionEngine/simpletest.ll
new file mode 100644
index 0000000..79ff9ac
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/simpletest.ll
@@ -0,0 +1,9 @@
+implementation
+
+int %bar() { ret int 0 }
+
+int %main() {
+        %r = call int %bar()
+        ret int %r
+}
+
diff --git a/llvm/test/Regression/ExecutionEngine/test-arith.ll b/llvm/test/Regression/ExecutionEngine/test-arith.ll
new file mode 100644
index 0000000..86512da
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/test-arith.ll
@@ -0,0 +1,35 @@
+int %main() {
+	%A = add sbyte 0, 12
+	%B = sub sbyte %A, 1
+	%C = mul sbyte %B, %B
+	%D = div sbyte %C, %C
+	%E = rem sbyte %D, %D
+	%F = div ubyte 5, 6
+	%G = rem ubyte 6, 5
+
+	%A = add short 0, 12
+	%B = sub short %A, 1
+	%C = mul short %B, %B
+	%D = div short %C, %C
+	%E = rem short %D, %D
+	%F = div ushort 5, 6
+	%G = rem uint 6, 5
+
+	%A = add int 0, 12
+	%B = sub int %A, 1
+	%C = mul int %B, %B
+	%D = div int %C, %C
+	%E = rem int %D, %D
+	%F = div uint 5, 6
+	%G = rem uint 6, 5
+
+	%A = add long 0, 12
+	%B = sub long %A, 1
+	%C = mul long %B, %B
+	%D = div long %C, %C
+	%E = rem long %D, %D
+	%F = div ulong 5, 6
+	%G = rem ulong 6, 5
+
+	ret int 0
+}
diff --git a/llvm/test/Regression/ExecutionEngine/test-branch.ll b/llvm/test/Regression/ExecutionEngine/test-branch.ll
new file mode 100644
index 0000000..d3559d8
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/test-branch.ll
@@ -0,0 +1,9 @@
+; test unconditional branch
+int %main() {
+	br label %Test
+Test:
+	%X = seteq int 0, 4
+	br bool %X, label %Test, label %Label
+Label:
+	ret int 0
+}
diff --git a/llvm/test/Regression/ExecutionEngine/test-call.ll b/llvm/test/Regression/ExecutionEngine/test-call.ll
new file mode 100644
index 0000000..50f0e6e
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/test-call.ll
@@ -0,0 +1,18 @@
+
+declare void %exit(int)
+
+int %test(sbyte %C, short %S) {
+  %X = cast short %S to int
+  ret int %X
+}
+
+void %FP(void(int) * %F) {
+	%X = call int %test(sbyte 123, short 1024)
+	call void %F(int %X)
+	ret void
+}
+
+int %main() {
+	call void %FP(void(int)* %exit)
+	ret int 1
+}
diff --git a/llvm/test/Regression/ExecutionEngine/test-cast.ll b/llvm/test/Regression/ExecutionEngine/test-cast.ll
new file mode 100644
index 0000000..753c9fa
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/test-cast.ll
@@ -0,0 +1,86 @@
+
+
+int %foo() {
+  ret int 0
+}
+
+int %main() {
+  ; cast bool to ...
+  cast bool true to bool
+  cast bool true to int
+  cast bool true to long
+  cast bool true to ulong
+  cast bool true to float
+  cast bool true to double
+
+  ; cast sbyte to ...
+  cast sbyte 0 to sbyte
+  cast sbyte 4 to short
+  cast sbyte 4 to long
+  cast sbyte 4 to ulong
+  cast sbyte 4 to double
+
+  ; cast ubyte to ...
+  cast ubyte 0 to float
+  cast ubyte 0 to double
+
+  ; cast short to ...
+  cast short 0 to short
+  cast short 0 to long
+  cast short 0 to ulong
+  cast short 0 to double
+
+  ; cast ushort to ...
+  cast ushort 0 to float
+  cast ushort 0 to double
+
+  ; cast int to ...
+  cast int 6 to bool
+  cast int 6 to short
+  cast int 0 to int
+  cast int 0 to long
+  cast int 0 to ulong
+  cast int 0 to float
+  cast int 0 to double
+
+  ; cast uint to ...
+  cast uint 0 to long
+  cast uint 0 to ulong
+  cast uint 0 to float
+  cast uint 0 to double
+
+  ; cast long to ...
+  cast long 0 to bool
+  cast long 0 to sbyte
+  cast long 0 to ubyte
+  cast long 0 to short
+  cast long 0 to ushort
+  cast long 0 to int
+  cast long 0 to uint
+  cast long 0 to long
+  cast long 0 to ulong
+  cast long 0 to float
+  cast long 0 to double
+
+  cast ulong 0 to bool
+  
+  ; cast float to ...
+  ;cast float 0.0 to bool
+  cast float 0.0 to float
+  cast float 0.0 to double
+
+  ; cast double to ...
+  ;cast double 0.0 to bool
+  cast double 0.0 to sbyte
+  cast double 0.0 to ubyte
+  cast double 0.0 to short
+  cast double 0.0 to ushort
+  cast double 0.0 to int
+  cast double 0.0 to uint
+  cast double 0.0 to long
+  ;cast double 0.0 to ulong
+  cast double 0.0 to float
+  cast double 0.0 to double
+
+  ret int 0
+}
diff --git a/llvm/test/Regression/ExecutionEngine/test-constantexpr.ll b/llvm/test/Regression/ExecutionEngine/test-constantexpr.ll
new file mode 100644
index 0000000..ce723f9
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/test-constantexpr.ll
@@ -0,0 +1,11 @@
+; This tests to make sure that we can evaluate wierd constant expressions
+%A = global int 5
+%B = global int 6
+
+implementation
+
+int %main() {
+	%A = or bool false, setlt (int* %A, int* %B)  ; Which is lower in memory?
+	ret int 0
+}
+
diff --git a/llvm/test/Regression/ExecutionEngine/test-fp.ll b/llvm/test/Regression/ExecutionEngine/test-fp.ll
new file mode 100644
index 0000000..6d32ecb
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/test-fp.ll
@@ -0,0 +1,20 @@
+
+double %test(double* %DP, double %Arg) {
+	%D = load double* %DP
+	%V = add double %D, 1.0
+	%W = sub double %V, %V
+	%X = mul double %W, %W
+	%Y = div double %X, %X
+	%Z = rem double %Y, %Y
+	%Z = div double %Z, %W
+	%Q = add double %Z, %Arg
+	%R = cast double %Q to double
+	store double %R, double* %DP
+	ret double %Z
+}
+
+int %main() { 
+  %X = alloca double
+  call double %test(double* %X, double 2.0)
+  ret int 0 
+}
diff --git a/llvm/test/Regression/ExecutionEngine/test-loadstore.ll b/llvm/test/Regression/ExecutionEngine/test-loadstore.ll
new file mode 100644
index 0000000..35a2c5f
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/test-loadstore.ll
@@ -0,0 +1,34 @@
+
+void %test(sbyte* %P, short* %P, int* %P, long* %P) {
+	%V = load sbyte* %P
+	store sbyte %V, sbyte* %P
+
+	%V = load short* %P
+	store short %V, short* %P
+
+	%V = load int* %P
+	store int %V, int* %P
+
+	%V = load long* %P
+	store long %V, long* %P
+
+	ret void
+}
+
+uint %varalloca(uint %Size) {
+	%X = alloca uint, uint %Size        ;; Variable sized alloca
+	store uint %Size, uint* %X
+	%Y = load uint* %X
+	ret uint %Y
+}
+
+int %main() {
+	%A = alloca sbyte
+	%B = alloca short
+	%C = alloca int
+	%D = alloca long
+	call void %test(sbyte* %A, short* %B, int* %C, long* %D)
+	call uint %varalloca(uint 7)
+
+	ret int 0
+}
diff --git a/llvm/test/Regression/ExecutionEngine/test-logical.ll b/llvm/test/Regression/ExecutionEngine/test-logical.ll
new file mode 100644
index 0000000..e6b628a
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/test-logical.ll
@@ -0,0 +1,20 @@
+
+int %main() {
+	%A = and sbyte 4, 8
+	%B = or sbyte %A, 7
+	%C = xor sbyte %B, %A
+
+	%A = and short 4, 8
+	%B = or short %A, 7
+	%C = xor short %B, %A
+
+	%A = and int 4, 8
+	%B = or int %A, 7
+	%C = xor int %B, %A
+
+	%A = and long 4, 8
+	%B = or long %A, 7
+	%C = xor long %B, %A
+
+	ret int 0
+}
diff --git a/llvm/test/Regression/ExecutionEngine/test-loop.ll b/llvm/test/Regression/ExecutionEngine/test-loop.ll
new file mode 100644
index 0000000..b84da830
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/test-loop.ll
@@ -0,0 +1,12 @@
+
+
+int %main() {
+	br label %Loop
+Loop:
+	%I = phi int [0, %0], [%i2, %Loop]
+	%i2 = add int %I, 1
+	%C = seteq int %i2, 10
+	br bool %C, label %Out, label %Loop
+Out:
+	ret int 0
+}
diff --git a/llvm/test/Regression/ExecutionEngine/test-malloc.ll b/llvm/test/Regression/ExecutionEngine/test-malloc.ll
new file mode 100644
index 0000000..701d02b
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/test-malloc.ll
@@ -0,0 +1,11 @@
+
+int %main() {
+   %X = malloc int                ; constant size
+   %Y = malloc int, uint 100      ; constant size
+   %u = add uint 1, 2
+   %Z = malloc int, uint %u       ; variable size
+   free int* %X
+   free int* %Y
+   free int* %Z
+   ret int 0
+}
diff --git a/llvm/test/Regression/ExecutionEngine/test-phi.ll b/llvm/test/Regression/ExecutionEngine/test-phi.ll
new file mode 100644
index 0000000..9e21438
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/test-phi.ll
@@ -0,0 +1,29 @@
+; test phi node
+
+%Y = global int 6
+
+void %blah(int *%X) {
+	br label %T
+T:
+	phi int* [%X, %0], [%Y, %Dead]
+	ret void
+Dead:
+	br label %T
+}
+
+int %test(bool %C) {
+	br bool %C, label %T, label %T
+T:
+	%X = phi int [123, %0], [123, %0]
+	ret int %X
+}
+
+int %main() {
+	br label %Test
+Test:
+	%X = phi int [0, %0], [%Y, %Dead]
+	ret int %X
+Dead:
+	%Y = shr int 12, ubyte 4
+	br label %Test
+}
diff --git a/llvm/test/Regression/ExecutionEngine/test-ret.ll b/llvm/test/Regression/ExecutionEngine/test-ret.ll
new file mode 100644
index 0000000..02195dd
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/test-ret.ll
@@ -0,0 +1,13 @@
+; test return instructions
+
+void %test() { ret void }
+sbyte %test() { ret sbyte 1 }
+ubyte %test() { ret ubyte 1 }
+short %test() { ret short -1 }
+ushort %test() { ret ushort 65535 }
+int  %main() { ret int 0 }
+uint %test() { ret uint 4 }
+long %test() { ret long 0 }
+ulong %test() { ret ulong 0 }
+float %test() { ret float 1.0 }
+double %test() { ret double 2.0 }
diff --git a/llvm/test/Regression/ExecutionEngine/test-setcond-fp.ll b/llvm/test/Regression/ExecutionEngine/test-setcond-fp.ll
new file mode 100644
index 0000000..66724d8
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/test-setcond-fp.ll
@@ -0,0 +1,20 @@
+
+int %main() {
+	%double1 = add double 0.0, 0.0
+	%double2 = add double 0.0, 0.0
+	%float1 = add float 0.0, 0.0
+	%float2 = add float 0.0, 0.0
+	%test49 = seteq float %float1, %float2
+	%test50 = setge float %float1, %float2
+	%test51 = setgt float %float1, %float2
+	%test52 = setle float %float1, %float2
+	%test53 = setlt float %float1, %float2
+	%test54 = setne float %float1, %float2
+	%test55 = seteq double %double1, %double2
+	%test56 = setge double %double1, %double2
+	%test57 = setgt double %double1, %double2
+	%test58 = setle double %double1, %double2
+	%test59 = setlt double %double1, %double2
+	%test60 = setne double %double1, %double2
+	ret int 0
+}
diff --git a/llvm/test/Regression/ExecutionEngine/test-setcond-int.ll b/llvm/test/Regression/ExecutionEngine/test-setcond-int.ll
new file mode 100644
index 0000000..2de9d4d
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/test-setcond-int.ll
@@ -0,0 +1,68 @@
+
+int %main() {
+	%int1 = add int 0, 0
+	%int2 = add int 0, 0
+	%long1 = add long 0, 0
+	%long2 = add long 0, 0
+	%sbyte1 = add sbyte 0, 0
+	%sbyte2 = add sbyte 0, 0
+	%short1 = add short 0, 0
+	%short2 = add short 0, 0
+	%ubyte1 = add ubyte 0, 0
+	%ubyte2 = add ubyte 0, 0
+	%uint1 = add uint 0, 0
+	%uint2 = add uint 0, 0
+	%ulong1 = add ulong 0, 0
+	%ulong2 = add ulong 0, 0
+	%ushort1 = add ushort 0, 0
+	%ushort2 = add ushort 0, 0
+	%test1 = seteq ubyte %ubyte1, %ubyte2
+	%test2 = setge ubyte %ubyte1, %ubyte2
+	%test3 = setgt ubyte %ubyte1, %ubyte2
+	%test4 = setle ubyte %ubyte1, %ubyte2
+	%test5 = setlt ubyte %ubyte1, %ubyte2
+	%test6 = setne ubyte %ubyte1, %ubyte2
+	%test7 = seteq ushort %ushort1, %ushort2
+	%test8 = setge ushort %ushort1, %ushort2
+	%test9 = setgt ushort %ushort1, %ushort2
+	%test10 = setle ushort %ushort1, %ushort2
+	%test11 = setlt ushort %ushort1, %ushort2
+	%test12 = setne ushort %ushort1, %ushort2
+	%test13 = seteq uint %uint1, %uint2
+	%test14 = setge uint %uint1, %uint2
+	%test15 = setgt uint %uint1, %uint2
+	%test16 = setle uint %uint1, %uint2
+	%test17 = setlt uint %uint1, %uint2
+	%test18 = setne uint %uint1, %uint2
+	%test19 = seteq ulong %ulong1, %ulong2
+	%test20 = setge ulong %ulong1, %ulong2
+	%test21 = setgt ulong %ulong1, %ulong2
+	%test22 = setle ulong %ulong1, %ulong2
+	%test23 = setlt ulong %ulong1, %ulong2
+	%test24 = setne ulong %ulong1, %ulong2
+	%test25 = seteq sbyte %sbyte1, %sbyte2
+	%test26 = setge sbyte %sbyte1, %sbyte2
+	%test27 = setgt sbyte %sbyte1, %sbyte2
+	%test28 = setle sbyte %sbyte1, %sbyte2
+	%test29 = setlt sbyte %sbyte1, %sbyte2
+	%test30 = setne sbyte %sbyte1, %sbyte2
+	%test31 = seteq short %short1, %short2
+	%test32 = setge short %short1, %short2
+	%test33 = setgt short %short1, %short2
+	%test34 = setle short %short1, %short2
+	%test35 = setlt short %short1, %short2
+	%test36 = setne short %short1, %short2
+	%test37 = seteq int %int1, %int2
+	%test38 = setge int %int1, %int2
+	%test39 = setgt int %int1, %int2
+	%test40 = setle int %int1, %int2
+	%test41 = setlt int %int1, %int2
+	%test42 = setne int %int1, %int2
+	%test43 = seteq long %long1, %long2
+	%test44 = setge long %long1, %long2
+	%test45 = setgt long %long1, %long2
+	%test46 = setle long %long1, %long2
+	%test47 = setlt long %long1, %long2
+	%test48 = setne long %long1, %long2
+	ret int 0
+}
diff --git a/llvm/test/Regression/ExecutionEngine/test-shift.ll b/llvm/test/Regression/ExecutionEngine/test-shift.ll
new file mode 100644
index 0000000..5137613
--- /dev/null
+++ b/llvm/test/Regression/ExecutionEngine/test-shift.ll
@@ -0,0 +1,37 @@
+; test shifts
+int %main() {
+    %shamt = add ubyte 0, 1
+
+    ; Left shifts...
+    %t1 = shl int 1, ubyte %shamt
+    %t2 = shl int 1, ubyte 4
+
+    %t1 = shl uint 1, ubyte %shamt
+    %t2 = shl uint 1, ubyte 5
+
+    ;%t1 = shl long 1, ubyte %shamt
+    %t2 = shl long 1, ubyte 4
+
+    ;%t1 = shl ulong 1, ubyte %shamt
+    %t2 = shl ulong 1, ubyte 5
+
+    ; Right shifts...
+    %t1 = shr int 1, ubyte %shamt
+    %t2 = shr int 1, ubyte 4
+
+    %t1 = shr uint 1, ubyte %shamt
+    %t2 = shr uint 1, ubyte 5
+
+    ;%t1 = shr long 1, ubyte %shamt
+    %t1 = shr long 1, ubyte 4
+    %t2 = shr long 1, ubyte %shamt
+    %t3 = shl long 1, ubyte 4
+    %t4 = shl long 1, ubyte %shamt
+
+    ;%t1 = shr ulong 1, ubyte %shamt
+    %t1 = shr ulong 1, ubyte 5
+    %t2 = shr ulong 1, ubyte %shamt
+    %t3 = shl ulong 1, ubyte 5
+    %t4 = shl ulong 1, ubyte %shamt
+    ret int 0
+}