aboutsummaryrefslogtreecommitdiffstats
path: root/test/CodeGen/CBackend
diff options
context:
space:
mode:
Diffstat (limited to 'test/CodeGen/CBackend')
-rw-r--r--test/CodeGen/CBackend/2002-05-16-NameCollide.ll7
-rw-r--r--test/CodeGen/CBackend/2002-05-21-MissingReturn.ll17
-rw-r--r--test/CodeGen/CBackend/2002-08-19-ConstPointerRef.ll7
-rw-r--r--test/CodeGen/CBackend/2002-08-19-ConstantExpr.ll9
-rw-r--r--test/CodeGen/CBackend/2002-08-19-DataPointer.ll5
-rw-r--r--test/CodeGen/CBackend/2002-08-19-FunctionPointer.ll5
-rw-r--r--test/CodeGen/CBackend/2002-08-19-HardConstantExpr.ll5
-rw-r--r--test/CodeGen/CBackend/2002-08-20-RecursiveTypes.ll4
-rw-r--r--test/CodeGen/CBackend/2002-08-20-UnnamedArgument.ll11
-rw-r--r--test/CodeGen/CBackend/2002-08-26-IndirectCallTest.ll16
-rw-r--r--test/CodeGen/CBackend/2002-08-30-StructureOrderingTest.ll7
-rw-r--r--test/CodeGen/CBackend/2002-09-20-ArrayTypeFailure.ll10
-rw-r--r--test/CodeGen/CBackend/2002-09-20-VarArgPrototypes.ll6
-rw-r--r--test/CodeGen/CBackend/2002-10-15-OpaqueTypeProblem.ll7
-rw-r--r--test/CodeGen/CBackend/2002-10-16-External.ll4
-rw-r--r--test/CodeGen/CBackend/2002-10-30-FunctionPointerAlloca.ll12
-rw-r--r--test/CodeGen/CBackend/2002-11-06-PrintEscaped.ll12
-rw-r--r--test/CodeGen/CBackend/2003-05-12-IntegerSizeWarning.ll7
-rw-r--r--test/CodeGen/CBackend/2003-05-13-VarArgFunction.ll10
-rw-r--r--test/CodeGen/CBackend/2003-05-31-MissingStructName.ll6
-rw-r--r--test/CodeGen/CBackend/2003-06-01-NullPointerType.ll9
-rw-r--r--test/CodeGen/CBackend/2003-06-11-HexConstant.ll5
-rw-r--r--test/CodeGen/CBackend/2003-06-11-LiteralStringProblem.ll5
-rw-r--r--test/CodeGen/CBackend/2003-06-23-PromotedExprs.llx16
-rw-r--r--test/CodeGen/CBackend/2003-06-28-InvokeSupport.ll14
-rw-r--r--test/CodeGen/CBackend/2003-06-28-LinkOnceGlobalVars.llx4
-rw-r--r--test/CodeGen/CBackend/2003-10-12-NANGlobalInits.ll5
-rw-r--r--test/CodeGen/CBackend/2003-10-23-UnusedType.ll6
-rw-r--r--test/CodeGen/CBackend/2003-10-28-CastToPtrToStruct.ll12
-rw-r--r--test/CodeGen/CBackend/2003-11-21-ConstantShiftExpr.ll12
-rw-r--r--test/CodeGen/CBackend/2004-02-13-FrameReturnAddress.llx14
-rw-r--r--test/CodeGen/CBackend/2004-02-15-PreexistingExternals.llx16
-rw-r--r--test/CodeGen/CBackend/2004-02-26-FPNotPrintableConstants.llx10
-rw-r--r--test/CodeGen/CBackend/2004-02-26-LinkOnceFunctions.llx8
-rw-r--r--test/CodeGen/CBackend/2004-08-09-va-end-null.ll9
-rw-r--r--test/CodeGen/CBackend/2004-11-13-FunctionPointerCast.llx17
-rw-r--r--test/CodeGen/CBackend/2004-12-03-ExternStatics.ll12
-rw-r--r--test/CodeGen/CBackend/2004-12-28-LogicalConstantExprs.ll5
-rw-r--r--test/CodeGen/CBackend/2005-02-14-VolatileOperations.ll7
-rw-r--r--test/CodeGen/CBackend/2005-03-08-RecursiveTypeCrash.ll5
-rw-r--r--test/CodeGen/CBackend/2005-07-14-NegationToMinusMinus.ll20
-rw-r--r--test/CodeGen/CBackend/2005-08-23-Fmod.ll6
-rw-r--r--test/CodeGen/CBackend/2005-09-27-VolatileFuncPtr.ll9
-rw-r--r--test/CodeGen/CBackend/2006-12-11-Float-Bitcast.ll48
-rw-r--r--test/CodeGen/CBackend/2007-01-08-ParamAttr-ICmp.ll27
-rw-r--r--test/CodeGen/CBackend/2007-01-15-NamedArrayType.ll11
-rw-r--r--test/CodeGen/CBackend/2007-01-17-StackSaveNRestore.ll12
-rw-r--r--test/CodeGen/CBackend/2007-02-05-memset.ll13
-rw-r--r--test/CodeGen/CBackend/2007-02-23-NameConflicts.ll13
-rw-r--r--test/CodeGen/CBackend/2007-07-11-PackedStruct.ll9
-rw-r--r--test/CodeGen/CBackend/dg.exp5
51 files changed, 531 insertions, 0 deletions
diff --git a/test/CodeGen/CBackend/2002-05-16-NameCollide.ll b/test/CodeGen/CBackend/2002-05-16-NameCollide.ll
new file mode 100644
index 0000000..249927d
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-05-16-NameCollide.ll
@@ -0,0 +1,7 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+; Make sure that global variables do not collide if they have the same name,
+; but different types.
+
+%X = global int 5
+%X = global long 7
diff --git a/test/CodeGen/CBackend/2002-05-21-MissingReturn.ll b/test/CodeGen/CBackend/2002-05-21-MissingReturn.ll
new file mode 100644
index 0000000..775a762
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-05-21-MissingReturn.ll
@@ -0,0 +1,17 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+; This case was emitting code that looked like this:
+; ...
+; llvm_BB1: /* no statement here */
+; }
+;
+; Which the Sun C compiler rejected, so now we are sure to put a return
+; instruction in there if the basic block is otherwise empty.
+;
+void "test"() {
+ br label %BB1
+BB2:
+ br label %BB2
+BB1:
+ ret void
+}
diff --git a/test/CodeGen/CBackend/2002-08-19-ConstPointerRef.ll b/test/CodeGen/CBackend/2002-08-19-ConstPointerRef.ll
new file mode 100644
index 0000000..c8d1201
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-08-19-ConstPointerRef.ll
@@ -0,0 +1,7 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+; Test const pointer refs & forward references
+
+%t3 = global int * %t1 ;; Forward reference
+%t1 = global int 4
+
diff --git a/test/CodeGen/CBackend/2002-08-19-ConstantExpr.ll b/test/CodeGen/CBackend/2002-08-19-ConstantExpr.ll
new file mode 100644
index 0000000..2842faa
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-08-19-ConstantExpr.ll
@@ -0,0 +1,9 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+global int* cast (float* %0 to int*) ;; Forward numeric reference
+global float* %0 ;; Duplicate forward numeric reference
+global float 0.0
+
+%array = constant [2 x int] [ int 12, int 52 ]
+%arrayPtr = global int* getelementptr ([2 x int]* %array, long 0, long 0) ;; int* &%array[0][0]
+
diff --git a/test/CodeGen/CBackend/2002-08-19-DataPointer.ll b/test/CodeGen/CBackend/2002-08-19-DataPointer.ll
new file mode 100644
index 0000000..ca2af79
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-08-19-DataPointer.ll
@@ -0,0 +1,5 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+%sptr1 = global [11x sbyte]* %somestr ;; Forward ref to a constant
+%somestr = constant [11x sbyte] c"hello world"
+
diff --git a/test/CodeGen/CBackend/2002-08-19-FunctionPointer.ll b/test/CodeGen/CBackend/2002-08-19-FunctionPointer.ll
new file mode 100644
index 0000000..baf7d78
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-08-19-FunctionPointer.ll
@@ -0,0 +1,5 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+%fptr = global void() * %f ;; Forward ref method defn
+declare void "f"() ;; External method
+
diff --git a/test/CodeGen/CBackend/2002-08-19-HardConstantExpr.ll b/test/CodeGen/CBackend/2002-08-19-HardConstantExpr.ll
new file mode 100644
index 0000000..51bc950
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-08-19-HardConstantExpr.ll
@@ -0,0 +1,5 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+%array = constant [2 x int] [ int 12, int 52 ] ; <[2 x int]*> [#uses=1]
+%arrayPtr = global int* getelementptr ([2 x int]* %array, long 0, long 0) ; <int**> [#uses=1]
+
diff --git a/test/CodeGen/CBackend/2002-08-20-RecursiveTypes.ll b/test/CodeGen/CBackend/2002-08-20-RecursiveTypes.ll
new file mode 100644
index 0000000..fdcdeed
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-08-20-RecursiveTypes.ll
@@ -0,0 +1,4 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+%MyIntList = uninitialized global { \2 *, int }
+
diff --git a/test/CodeGen/CBackend/2002-08-20-UnnamedArgument.ll b/test/CodeGen/CBackend/2002-08-20-UnnamedArgument.ll
new file mode 100644
index 0000000..3ec23fb
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-08-20-UnnamedArgument.ll
@@ -0,0 +1,11 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+; The C Writer bombs on this testcase because it tries the print the prototype
+; for the test function, which tries to print the argument name. The function
+; has not been incorporated into the slot calculator, so after it does the name
+; lookup, it tries a slot calculator lookup, which fails.
+
+int %test(int) {
+ ret int 0
+}
+
diff --git a/test/CodeGen/CBackend/2002-08-26-IndirectCallTest.ll b/test/CodeGen/CBackend/2002-08-26-IndirectCallTest.ll
new file mode 100644
index 0000000..4a977e8
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-08-26-IndirectCallTest.ll
@@ -0,0 +1,16 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+; Indirect function call test... found by Joel & Brian
+;
+
+%taskArray = uninitialized global int*
+
+void %test(int %X) {
+ %Y = add int %X, -1 ; <int>:1 [#uses=3]
+ %cast100 = cast int %Y to long ; <uint> [#uses=1]
+ %gep100 = getelementptr int** %taskArray, long %cast100 ; <int**> [#uses=1]
+ %fooPtr = load int** %gep100 ; <int*> [#uses=1]
+ %cast101 = cast int* %fooPtr to void (int)* ; <void (int)*> [#uses=1]
+ call void %cast101( int 1000 )
+ ret void
+}
diff --git a/test/CodeGen/CBackend/2002-08-30-StructureOrderingTest.ll b/test/CodeGen/CBackend/2002-08-30-StructureOrderingTest.ll
new file mode 100644
index 0000000..d8477d5
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-08-30-StructureOrderingTest.ll
@@ -0,0 +1,7 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+; This testcase fails because the C backend does not arrange to output the
+; contents of a structure type before it outputs the structure type itself.
+
+%Y = uninitialized global { {int } }
+%X = uninitialized global { float }
diff --git a/test/CodeGen/CBackend/2002-09-20-ArrayTypeFailure.ll b/test/CodeGen/CBackend/2002-09-20-ArrayTypeFailure.ll
new file mode 100644
index 0000000..6158b2f
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-09-20-ArrayTypeFailure.ll
@@ -0,0 +1,10 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+
+
+implementation
+
+void %test() {
+ %X = alloca [4xint]
+ ret void
+}
diff --git a/test/CodeGen/CBackend/2002-09-20-VarArgPrototypes.ll b/test/CodeGen/CBackend/2002-09-20-VarArgPrototypes.ll
new file mode 100644
index 0000000..f3841f4
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-09-20-VarArgPrototypes.ll
@@ -0,0 +1,6 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+
+declare void %foo(...)
+
+
diff --git a/test/CodeGen/CBackend/2002-10-15-OpaqueTypeProblem.ll b/test/CodeGen/CBackend/2002-10-15-OpaqueTypeProblem.ll
new file mode 100644
index 0000000..1a9cdb7
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-10-15-OpaqueTypeProblem.ll
@@ -0,0 +1,7 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+ %MPI_Comm = type %struct.Comm*
+ %struct.Comm = type opaque
+%thing = global %MPI_Comm* null ; <%MPI_Comm**> [#uses=0]
+
+implementation ; Functions:
diff --git a/test/CodeGen/CBackend/2002-10-16-External.ll b/test/CodeGen/CBackend/2002-10-16-External.ll
new file mode 100644
index 0000000..d60a3d8
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-10-16-External.ll
@@ -0,0 +1,4 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+%bob = external global int ; <int*> [#uses=2]
+
diff --git a/test/CodeGen/CBackend/2002-10-30-FunctionPointerAlloca.ll b/test/CodeGen/CBackend/2002-10-30-FunctionPointerAlloca.ll
new file mode 100644
index 0000000..b887488
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-10-30-FunctionPointerAlloca.ll
@@ -0,0 +1,12 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+
+ %BitField = type int
+ %tokenptr = type %BitField*
+
+implementation
+
+void %test() {
+ %pmf1 = alloca %tokenptr (%tokenptr, sbyte*)*
+ ret void
+}
diff --git a/test/CodeGen/CBackend/2002-11-06-PrintEscaped.ll b/test/CodeGen/CBackend/2002-11-06-PrintEscaped.ll
new file mode 100644
index 0000000..62c0e27
--- /dev/null
+++ b/test/CodeGen/CBackend/2002-11-06-PrintEscaped.ll
@@ -0,0 +1,12 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+%testString = internal constant [18 x sbyte] c "Escaped newline\n\00"
+
+implementation
+
+declare int %printf(sbyte*, ...)
+
+int %main() {
+ call int (sbyte*, ...)* %printf( sbyte* getelementptr ([18 x sbyte]* %testString, long 0, long 0))
+ ret int 0
+}
diff --git a/test/CodeGen/CBackend/2003-05-12-IntegerSizeWarning.ll b/test/CodeGen/CBackend/2003-05-12-IntegerSizeWarning.ll
new file mode 100644
index 0000000..2c6a596
--- /dev/null
+++ b/test/CodeGen/CBackend/2003-05-12-IntegerSizeWarning.ll
@@ -0,0 +1,7 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+; Apparently this constant was unsigned in ISO C 90, but not in C 99.
+
+int %foo() {
+ ret int -2147483648
+}
diff --git a/test/CodeGen/CBackend/2003-05-13-VarArgFunction.ll b/test/CodeGen/CBackend/2003-05-13-VarArgFunction.ll
new file mode 100644
index 0000000..1e08b2d
--- /dev/null
+++ b/test/CodeGen/CBackend/2003-05-13-VarArgFunction.ll
@@ -0,0 +1,10 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+; This testcase breaks the C backend, because gcc doesn't like (...) functions
+; with no arguments at all.
+
+void %test(long %Ptr) {
+ %P = cast long %Ptr to void(...) *
+ call void(...)* %P(long %Ptr)
+ ret void
+}
diff --git a/test/CodeGen/CBackend/2003-05-31-MissingStructName.ll b/test/CodeGen/CBackend/2003-05-31-MissingStructName.ll
new file mode 100644
index 0000000..567d8e4
--- /dev/null
+++ b/test/CodeGen/CBackend/2003-05-31-MissingStructName.ll
@@ -0,0 +1,6 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+; The C backend was dying when there was no typename for a struct type!
+
+declare int %test(int,{ [32 x int] }*)
+
diff --git a/test/CodeGen/CBackend/2003-06-01-NullPointerType.ll b/test/CodeGen/CBackend/2003-06-01-NullPointerType.ll
new file mode 100644
index 0000000..224ba15
--- /dev/null
+++ b/test/CodeGen/CBackend/2003-06-01-NullPointerType.ll
@@ -0,0 +1,9 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+
+%X = type { int, float }
+
+void %test() {
+ getelementptr %X* null, long 0, uint 1
+ ret void
+}
diff --git a/test/CodeGen/CBackend/2003-06-11-HexConstant.ll b/test/CodeGen/CBackend/2003-06-11-HexConstant.ll
new file mode 100644
index 0000000..bc5691f
--- /dev/null
+++ b/test/CodeGen/CBackend/2003-06-11-HexConstant.ll
@@ -0,0 +1,5 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+; Make sure hex constant does not continue into a valid hexadecimal letter/number
+%version = global [3 x sbyte] c"\001\00"
+
diff --git a/test/CodeGen/CBackend/2003-06-11-LiteralStringProblem.ll b/test/CodeGen/CBackend/2003-06-11-LiteralStringProblem.ll
new file mode 100644
index 0000000..7af255b
--- /dev/null
+++ b/test/CodeGen/CBackend/2003-06-11-LiteralStringProblem.ll
@@ -0,0 +1,5 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+
+%version = global [3 x sbyte] c"1\00\00"
+
diff --git a/test/CodeGen/CBackend/2003-06-23-PromotedExprs.llx b/test/CodeGen/CBackend/2003-06-23-PromotedExprs.llx
new file mode 100644
index 0000000..d7f8e56
--- /dev/null
+++ b/test/CodeGen/CBackend/2003-06-23-PromotedExprs.llx
@@ -0,0 +1,16 @@
+
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c > %t1.cbe.c
+; RUN: gcc -B/usr/bin/ %t1.cbe.c -o %t1.cbe
+; RUN: %t1.cbe
+
+bool %doTest(ubyte %x) {
+ %dec.0 = add ubyte %x, 255
+ %tmp.1001 = trunc ubyte %dec.0 to bool
+ ret bool %tmp.1001
+}
+
+int %main () {
+ %result = call bool %doTest(ubyte 1)
+ %p = cast bool %result to int
+ ret int %p
+}
diff --git a/test/CodeGen/CBackend/2003-06-28-InvokeSupport.ll b/test/CodeGen/CBackend/2003-06-28-InvokeSupport.ll
new file mode 100644
index 0000000..f69c7dc
--- /dev/null
+++ b/test/CodeGen/CBackend/2003-06-28-InvokeSupport.ll
@@ -0,0 +1,14 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+
+declare int %callee(int, int)
+
+
+int %test(int %X) {
+ %A = invoke int %callee(int %X, int 5) to label %Ok except label %Threw
+Ok:
+ %B = phi int [%A, %0], [-1, %Threw]
+ ret int %B
+Threw:
+ br label %Ok
+}
diff --git a/test/CodeGen/CBackend/2003-06-28-LinkOnceGlobalVars.llx b/test/CodeGen/CBackend/2003-06-28-LinkOnceGlobalVars.llx
new file mode 100644
index 0000000..75e223d
--- /dev/null
+++ b/test/CodeGen/CBackend/2003-06-28-LinkOnceGlobalVars.llx
@@ -0,0 +1,4 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c | grep common | grep X
+
+%X = linkonce global int 5
+
diff --git a/test/CodeGen/CBackend/2003-10-12-NANGlobalInits.ll b/test/CodeGen/CBackend/2003-10-12-NANGlobalInits.ll
new file mode 100644
index 0000000..a82d7e5
--- /dev/null
+++ b/test/CodeGen/CBackend/2003-10-12-NANGlobalInits.ll
@@ -0,0 +1,5 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+; This is a non-normal FP value: it's a nan.
+%NAN = global { float } { float 0x7FF8000000000000 }
+%NANs = global { float } { float 0x7FF4000000000000 }
diff --git a/test/CodeGen/CBackend/2003-10-23-UnusedType.ll b/test/CodeGen/CBackend/2003-10-23-UnusedType.ll
new file mode 100644
index 0000000..e073928
--- /dev/null
+++ b/test/CodeGen/CBackend/2003-10-23-UnusedType.ll
@@ -0,0 +1,6 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+
+%A = type { uint, sbyte*, { uint, uint, uint, uint, uint, uint, uint, uint }*, ushort }
+
+void %test(%A *) { ret void }
diff --git a/test/CodeGen/CBackend/2003-10-28-CastToPtrToStruct.ll b/test/CodeGen/CBackend/2003-10-28-CastToPtrToStruct.ll
new file mode 100644
index 0000000..4c7ab32
--- /dev/null
+++ b/test/CodeGen/CBackend/2003-10-28-CastToPtrToStruct.ll
@@ -0,0 +1,12 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+; reduced from DOOM.
+%union._XEvent = type { int }
+%.X_event_9 = global %union._XEvent zeroinitializer
+
+implementation ; Functions:
+void %I_InitGraphics() {
+shortcirc_next.3: ; preds = %no_exit.1
+ %tmp.319 = load int* getelementptr ({ int, int }* cast (%union._XEvent* %.X_event_9 to { int, int }*), long 0, uint 1) ; <int> [#uses=1]
+ ret void
+}
diff --git a/test/CodeGen/CBackend/2003-11-21-ConstantShiftExpr.ll b/test/CodeGen/CBackend/2003-11-21-ConstantShiftExpr.ll
new file mode 100644
index 0000000..3866200
--- /dev/null
+++ b/test/CodeGen/CBackend/2003-11-21-ConstantShiftExpr.ll
@@ -0,0 +1,12 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+%y = weak global sbyte 0
+implementation
+uint %testcaseshr() {
+entry:
+ ret uint shr (uint cast (sbyte* %y to uint), ubyte 4)
+}
+uint %testcaseshl() {
+entry:
+ ret uint shl (uint cast (sbyte* %y to uint), ubyte 4)
+}
diff --git a/test/CodeGen/CBackend/2004-02-13-FrameReturnAddress.llx b/test/CodeGen/CBackend/2004-02-13-FrameReturnAddress.llx
new file mode 100644
index 0000000..973e6d8
--- /dev/null
+++ b/test/CodeGen/CBackend/2004-02-13-FrameReturnAddress.llx
@@ -0,0 +1,14 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c | grep builtin_return_address
+
+declare sbyte* %llvm.returnaddress(uint)
+declare sbyte* %llvm.frameaddress(uint)
+
+sbyte *%test1() {
+ %X = call sbyte* %llvm.returnaddress(uint 0)
+ ret sbyte* %X
+}
+
+sbyte *%test2() {
+ %X = call sbyte* %llvm.frameaddress(uint 0)
+ ret sbyte* %X
+}
diff --git a/test/CodeGen/CBackend/2004-02-15-PreexistingExternals.llx b/test/CodeGen/CBackend/2004-02-15-PreexistingExternals.llx
new file mode 100644
index 0000000..1afa47b
--- /dev/null
+++ b/test/CodeGen/CBackend/2004-02-15-PreexistingExternals.llx
@@ -0,0 +1,16 @@
+; The intrinsic lowering pass was lowering intrinsics like llvm.memcpy to
+; explicitly specified prototypes, inserting a new function if the old one
+; didn't exist. This caused there to be two external memcpy functions in
+; this testcase for example, which caused the CBE to mangle one, screwing
+; everything up. :( Test that this does not happen anymore.
+;
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c | not grep _memcpy
+
+declare void %llvm.memcpy.i32(sbyte*, sbyte*, uint,uint)
+declare float* %memcpy(int*, uint,int)
+
+int %test(sbyte *%A, sbyte* %B, int* %C) {
+ call float* %memcpy(int* %C, uint 4, int 17)
+ call void %llvm.memcpy.i32(sbyte* %A, sbyte* %B, uint 123, uint 14)
+ ret int 7
+}
diff --git a/test/CodeGen/CBackend/2004-02-26-FPNotPrintableConstants.llx b/test/CodeGen/CBackend/2004-02-26-FPNotPrintableConstants.llx
new file mode 100644
index 0000000..87a642b
--- /dev/null
+++ b/test/CodeGen/CBackend/2004-02-26-FPNotPrintableConstants.llx
@@ -0,0 +1,10 @@
+; This is a non-normal FP value
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c | grep FPConstant | grep static
+
+float %func () {
+ ret float 0xFFF0000000000000 ; -inf
+}
+
+double %func2() {
+ ret double 0xFF20000000000000 ; -inf
+}
diff --git a/test/CodeGen/CBackend/2004-02-26-LinkOnceFunctions.llx b/test/CodeGen/CBackend/2004-02-26-LinkOnceFunctions.llx
new file mode 100644
index 0000000..997f1c9
--- /dev/null
+++ b/test/CodeGen/CBackend/2004-02-26-LinkOnceFunctions.llx
@@ -0,0 +1,8 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c | grep func1 | grep WEAK
+
+implementation
+
+linkonce int %func1 () {
+ ret int 5
+}
+
diff --git a/test/CodeGen/CBackend/2004-08-09-va-end-null.ll b/test/CodeGen/CBackend/2004-08-09-va-end-null.ll
new file mode 100644
index 0000000..f8e8fe5
--- /dev/null
+++ b/test/CodeGen/CBackend/2004-08-09-va-end-null.ll
@@ -0,0 +1,9 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+declare void %llvm.va_end(sbyte*)
+
+void %test() {
+ call void %llvm.va_end( sbyte* null )
+ ret void
+}
+
diff --git a/test/CodeGen/CBackend/2004-11-13-FunctionPointerCast.llx b/test/CodeGen/CBackend/2004-11-13-FunctionPointerCast.llx
new file mode 100644
index 0000000..99bb602
--- /dev/null
+++ b/test/CodeGen/CBackend/2004-11-13-FunctionPointerCast.llx
@@ -0,0 +1,17 @@
+; The CBE should not emit code that casts the function pointer. This causes
+; GCC to get testy and insert trap instructions instead of doing the right
+; thing. :(
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+implementation
+
+declare void %external(sbyte*)
+
+int %test(int *%X) {
+ %RV = call int (int*)* cast (void(sbyte*)* %external to int(int*)*)(int* %X)
+ ret int %RV
+}
+
+
+
+
diff --git a/test/CodeGen/CBackend/2004-12-03-ExternStatics.ll b/test/CodeGen/CBackend/2004-12-03-ExternStatics.ll
new file mode 100644
index 0000000..a285dae
--- /dev/null
+++ b/test/CodeGen/CBackend/2004-12-03-ExternStatics.ll
@@ -0,0 +1,12 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c | not grep extern.*msg
+
+; This is PR472
+
+%msg = internal global [6 x sbyte] c"hello\00"
+
+implementation ; Functions:
+
+sbyte* %foo() {
+entry:
+ ret sbyte* getelementptr ([6 x sbyte]* %msg, int 0, int 0)
+}
diff --git a/test/CodeGen/CBackend/2004-12-28-LogicalConstantExprs.ll b/test/CodeGen/CBackend/2004-12-28-LogicalConstantExprs.ll
new file mode 100644
index 0000000..ebe4566
--- /dev/null
+++ b/test/CodeGen/CBackend/2004-12-28-LogicalConstantExprs.ll
@@ -0,0 +1,5 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+int %foo() {
+ ret int and (int 123456, int cast (int()* %foo to int))
+}
diff --git a/test/CodeGen/CBackend/2005-02-14-VolatileOperations.ll b/test/CodeGen/CBackend/2005-02-14-VolatileOperations.ll
new file mode 100644
index 0000000..e161e46
--- /dev/null
+++ b/test/CodeGen/CBackend/2005-02-14-VolatileOperations.ll
@@ -0,0 +1,7 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c | grep volatile
+
+void %test(int* %P) {
+ %X = volatile load int*%P
+ volatile store int %X, int* %P
+ ret void
+}
diff --git a/test/CodeGen/CBackend/2005-03-08-RecursiveTypeCrash.ll b/test/CodeGen/CBackend/2005-03-08-RecursiveTypeCrash.ll
new file mode 100644
index 0000000..5349488
--- /dev/null
+++ b/test/CodeGen/CBackend/2005-03-08-RecursiveTypeCrash.ll
@@ -0,0 +1,5 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c
+
+%JNIEnv = type %struct.JNINa*
+%struct.JNINa = type { sbyte*, sbyte*, sbyte*, void (%JNIEnv*)* }
+
diff --git a/test/CodeGen/CBackend/2005-07-14-NegationToMinusMinus.ll b/test/CodeGen/CBackend/2005-07-14-NegationToMinusMinus.ll
new file mode 100644
index 0000000..e73eb63
--- /dev/null
+++ b/test/CodeGen/CBackend/2005-07-14-NegationToMinusMinus.ll
@@ -0,0 +1,20 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c | not grep -- --65535
+; PR596
+
+target endian = little
+target pointersize = 32
+target triple = "i686-pc-linux-gnu"
+
+implementation ; Functions:
+
+declare void %func(int)
+
+void %funcb() {
+entry:
+ %tmp.1 = sub int 0, -65535 ; <int> [#uses=1]
+ call void %func( int %tmp.1 )
+ br label %return
+
+return: ; preds = %entry
+ ret void
+}
diff --git a/test/CodeGen/CBackend/2005-08-23-Fmod.ll b/test/CodeGen/CBackend/2005-08-23-Fmod.ll
new file mode 100644
index 0000000..5ce1e96
--- /dev/null
+++ b/test/CodeGen/CBackend/2005-08-23-Fmod.ll
@@ -0,0 +1,6 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c | grep fmod
+
+double %test(double %A, double %B) {
+ %C = rem double %A, %B
+ ret double %C
+}
diff --git a/test/CodeGen/CBackend/2005-09-27-VolatileFuncPtr.ll b/test/CodeGen/CBackend/2005-09-27-VolatileFuncPtr.ll
new file mode 100644
index 0000000..32a7088
--- /dev/null
+++ b/test/CodeGen/CBackend/2005-09-27-VolatileFuncPtr.ll
@@ -0,0 +1,9 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c | grep {\\* *volatile *\\*}
+
+%G = external global void()*
+
+void %test() {
+ volatile store void()* %test, void()** %G
+ volatile load void()** %G
+ ret void
+}
diff --git a/test/CodeGen/CBackend/2006-12-11-Float-Bitcast.ll b/test/CodeGen/CBackend/2006-12-11-Float-Bitcast.ll
new file mode 100644
index 0000000..5c6babf
--- /dev/null
+++ b/test/CodeGen/CBackend/2006-12-11-Float-Bitcast.ll
@@ -0,0 +1,48 @@
+; RUN: llvm-upgrade < %s | llvm-as | llc -march=c | \
+; RUN: grep __BITCAST | wc -l | grep 14
+
+int %test1(float %F) {
+ %X = bitcast float %F to int
+ ret int %X
+}
+
+float %test2(int %I) {
+ %X = bitcast int %I to float
+ ret float %X
+}
+
+long %test3(double %D) {
+ %X = bitcast double %D to long
+ ret long %X
+}
+
+double %test4(long %L) {
+ %X = bitcast long %L to double
+ ret double %X
+}
+
+double %test5(double %D) {
+ %X = bitcast double %D to double
+ %Y = add double %X, 2.0
+ %Z = bitcast double %Y to long
+ %res = bitcast long %Z to double
+ ret double %res
+}
+
+float %test6(float %F) {
+ %X = bitcast float %F to float
+ %Y = add float %X, 2.0
+ %Z = bitcast float %Y to int
+ %res = bitcast int %Z to float
+ ret float %res
+}
+
+int %main(int %argc, sbyte** %argv) {
+ %a = call int %test1(float 3.1415926)
+ %b = call float %test2(int %a)
+ %c = call long %test3(double 3.1415926)
+ %d = call double %test4(long %c)
+ %e = call double %test5(double 7.0)
+ %f = call float %test6(float 7.0)
+ ret int %a
+}
diff --git a/test/CodeGen/CBackend/2007-01-08-ParamAttr-ICmp.ll b/test/CodeGen/CBackend/2007-01-08-ParamAttr-ICmp.ll
new file mode 100644
index 0000000..359feba
--- /dev/null
+++ b/test/CodeGen/CBackend/2007-01-08-ParamAttr-ICmp.ll
@@ -0,0 +1,27 @@
+; For PR1099
+; RUN: llvm-as < %s | llc -march=c | \
+; RUN: grep {return ((((llvm_cbe_tmp2 == llvm_cbe_b_0_0_val)) ? (1) : (0)))}
+
+target datalayout = "e-p:32:32"
+target triple = "i686-apple-darwin8"
+ %struct.Connector = type { i16, i16, i8, i8, %struct.Connector*, i8* }
+
+
+define i1 @prune_match_entry_2E_ce(%struct.Connector* %a, i16 %b.0.0.val) {
+newFuncRoot:
+ br label %entry.ce
+
+cond_next.exitStub: ; preds = %entry.ce
+ ret i1 true
+
+entry.return_crit_edge.exitStub: ; preds = %entry.ce
+ ret i1 false
+
+entry.ce: ; preds = %newFuncRoot
+ %tmp1 = getelementptr %struct.Connector* %a, i32 0, i32 0 ; <i16*> [#uses=1]
+ %tmp2 = load i16* %tmp1 ; <i16> [#uses=1]
+ %tmp3 = icmp eq i16 %tmp2, %b.0.0.val ; <i1> [#uses=1]
+ br i1 %tmp3, label %cond_next.exitStub, label %entry.return_crit_edge.exitStub
+}
+
+
diff --git a/test/CodeGen/CBackend/2007-01-15-NamedArrayType.ll b/test/CodeGen/CBackend/2007-01-15-NamedArrayType.ll
new file mode 100644
index 0000000..a9eeff3
--- /dev/null
+++ b/test/CodeGen/CBackend/2007-01-15-NamedArrayType.ll
@@ -0,0 +1,11 @@
+; PR918
+; RUN: llvm-as < %s | llc -march=c | not grep fixarray_array3
+
+%structtype_s = type { i32 }
+%fixarray_array3 = type [3 x %structtype_s]
+
+define i32 @witness(%fixarray_array3* %p) {
+ %q = getelementptr %fixarray_array3* %p, i32 0, i32 0, i32 0
+ %v = load i32* %q
+ ret i32 %v
+}
diff --git a/test/CodeGen/CBackend/2007-01-17-StackSaveNRestore.ll b/test/CodeGen/CBackend/2007-01-17-StackSaveNRestore.ll
new file mode 100644
index 0000000..8fe06b7
--- /dev/null
+++ b/test/CodeGen/CBackend/2007-01-17-StackSaveNRestore.ll
@@ -0,0 +1,12 @@
+; RUN: llvm-as < %s | llc -march=c | grep __builtin_stack_save
+; RUN: llvm-as < %s | llc -march=c | grep __builtin_stack_restore
+; PR1028
+
+declare i8* @llvm.stacksave()
+declare void @llvm.stackrestore(i8*)
+
+define i8* @test() {
+ %s = call i8* @llvm.stacksave()
+ call void @llvm.stackrestore(i8* %s)
+ ret i8* %s
+}
diff --git a/test/CodeGen/CBackend/2007-02-05-memset.ll b/test/CodeGen/CBackend/2007-02-05-memset.ll
new file mode 100644
index 0000000..f253b30
--- /dev/null
+++ b/test/CodeGen/CBackend/2007-02-05-memset.ll
@@ -0,0 +1,13 @@
+; RUN: llvm-as < %s | llc -march=c
+; PR1181
+target datalayout = "e-p:64:64"
+target triple = "x86_64-apple-darwin8"
+
+
+declare void @llvm.memset.i64(i8*, i8, i64, i32)
+
+define fastcc void @InitUser_data_unregistered() {
+entry:
+ tail call void @llvm.memset.i64( i8* null, i8 0, i64 65496, i32 1 )
+ ret void
+}
diff --git a/test/CodeGen/CBackend/2007-02-23-NameConflicts.ll b/test/CodeGen/CBackend/2007-02-23-NameConflicts.ll
new file mode 100644
index 0000000..2bc4d51
--- /dev/null
+++ b/test/CodeGen/CBackend/2007-02-23-NameConflicts.ll
@@ -0,0 +1,13 @@
+; PR1164
+; RUN: llvm-as < %s | llc -march=c | grep {llvm_cbe_A = \\*llvm_cbe_G;}
+; RUN: llvm-as < %s | llc -march=c | grep {llvm_cbe_B = \\*(&ltmp_0_1);}
+; RUN: llvm-as < %s | llc -march=c | grep {return (llvm_cbe_A + llvm_cbe_B);}
+@G = global i32 123
+@ltmp_0_1 = global i32 123
+
+define i32 @test(i32 *%G) {
+ %A = load i32* %G
+ %B = load i32* @ltmp_0_1
+ %C = add i32 %A, %B
+ ret i32 %C
+}
diff --git a/test/CodeGen/CBackend/2007-07-11-PackedStruct.ll b/test/CodeGen/CBackend/2007-07-11-PackedStruct.ll
new file mode 100644
index 0000000..6057616
--- /dev/null
+++ b/test/CodeGen/CBackend/2007-07-11-PackedStruct.ll
@@ -0,0 +1,9 @@
+; RUN: llvm-as < %s | llc -march=c | grep {packed}
+
+ %struct.p = type <{ i16 }>
+
+define i32 @main() {
+entry:
+ %t = alloca %struct.p, align 2
+ ret i32 5
+}
diff --git a/test/CodeGen/CBackend/dg.exp b/test/CodeGen/CBackend/dg.exp
new file mode 100644
index 0000000..304b90f
--- /dev/null
+++ b/test/CodeGen/CBackend/dg.exp
@@ -0,0 +1,5 @@
+load_lib llvm.exp
+
+if { [llvm_supports_target CBackend] } {
+ RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,llx,c,cpp,tr}]]
+}