aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2007-01-16 18:08:22 +0000
committerReid Spencer <rspencer@reidspencer.com>2007-01-16 18:08:22 +0000
commitc0948366f6cbec12d2c87f9cb4a1cea1435cf02a (patch)
tree5b7576753297038f1b9434f916c513132b9f5f3e
parenta80cc93f103a3033f90a47d5e316c32d5e5a8826 (diff)
New test cases for bit accurate integers developed by Guoling Han.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33259 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--test/Integer/.cvsignore1
-rw-r--r--test/Integer/BitArith.ll26
-rw-r--r--test/Integer/BitBit.ll26
-rw-r--r--test/Integer/BitCast.ll28
-rw-r--r--test/Integer/BitIcmp.ll46
-rw-r--r--test/Integer/BitMem.ll34
-rw-r--r--test/Integer/BitMisc.ll25
-rw-r--r--test/Integer/BitPacked.ll23
-rw-r--r--test/Integer/a15.ll23
-rw-r--r--test/Integer/a15.ll.out18
-rw-r--r--test/Integer/a17.ll22
-rw-r--r--test/Integer/a17.ll.out18
-rw-r--r--test/Integer/a31.ll22
-rw-r--r--test/Integer/a31.ll.out18
-rw-r--r--test/Integer/a33.ll23
-rw-r--r--test/Integer/a33.ll.out18
-rw-r--r--test/Integer/a63.ll22
-rw-r--r--test/Integer/a63.ll.out18
-rw-r--r--test/Integer/a7.ll23
-rw-r--r--test/Integer/a7.ll.out18
-rw-r--r--test/Integer/a9.ll23
-rw-r--r--test/Integer/a9.ll.out18
-rw-r--r--test/Integer/alignment_bt.ll21
-rw-r--r--test/Integer/basictest_bt.ll34
-rw-r--r--test/Integer/calltest_bt.ll35
-rw-r--r--test/Integer/cfgstructures_bt.ll57
-rw-r--r--test/Integer/constexpr_bt.ll84
-rw-r--r--test/Integer/constpointer_bt.ll33
-rw-r--r--test/Integer/dg.exp3
-rw-r--r--test/Integer/fold-fpcast_bt.ll18
-rw-r--r--test/Integer/forwardreftest_bt.ll34
-rw-r--r--test/Integer/globalredefinition_bt.ll18
-rw-r--r--test/Integer/globalvars_bt.ll27
-rw-r--r--test/Integer/indirectcall2_bt.ll25
-rw-r--r--test/Integer/indirectcall_bt.ll54
-rw-r--r--test/Integer/instructions_bt.ll26
-rw-r--r--test/Integer/newcasts_bt.ll28
-rw-r--r--test/Integer/opaquetypes_bt.ll61
-rw-r--r--test/Integer/packed_bt.ll17
-rw-r--r--test/Integer/packed_cmp_bt.ll58
-rw-r--r--test/Integer/packed_struct_bt.ll33
-rw-r--r--test/Integer/paramattrs_bt.ll20
-rw-r--r--test/Integer/properties_bt.ll10
-rw-r--r--test/Integer/prototype_bt.ll14
-rw-r--r--test/Integer/recursivetype_bt.ll109
-rw-r--r--test/Integer/simplecalltest_bt.ll29
-rw-r--r--test/Integer/small_bt.ll14
-rw-r--r--test/Integer/testalloca_bt.ll29
-rw-r--r--test/Integer/testarith_bt.ll19
-rw-r--r--test/Integer/testconstants_bt.ll33
-rw-r--r--test/Integer/testicmp_bt.ll24
-rw-r--r--test/Integer/testlogical_bt.ll14
-rw-r--r--test/Integer/testlogical_new_bt.ll16
-rw-r--r--test/Integer/testmemory_bt.ll46
-rw-r--r--test/Integer/testswitch_bt.ll25
-rw-r--r--test/Integer/testvarargs_bt.ll15
-rw-r--r--test/Integer/undefined_bt.ll19
-rw-r--r--test/Integer/unreachable_bt.ll17
-rw-r--r--test/Integer/varargs_bt.ll24
-rw-r--r--test/Integer/varargs_new_bt.ll33
60 files changed, 1669 insertions, 0 deletions
diff --git a/test/Integer/.cvsignore b/test/Integer/.cvsignore
new file mode 100644
index 0000000000..83260f862f
--- /dev/null
+++ b/test/Integer/.cvsignore
@@ -0,0 +1 @@
+Output
diff --git a/test/Integer/BitArith.ll b/test/Integer/BitArith.ll
new file mode 100644
index 0000000000..cf5e7e6a01
--- /dev/null
+++ b/test/Integer/BitArith.ll
@@ -0,0 +1,26 @@
+; RUN: llvm-as %s -o - | llvm-dis > %t1.ll
+; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
+; RUN: diff %t1.ll %t2.ll
+
+
+declare void "foo"(i31 %i, i63 %j, i10 %k)
+
+implementation
+
+; foo test basic arith operations
+define void "foo"(i31 %i, i63 %j, i10 %k)
+begin
+ %t1 = trunc i63 %j to i31
+ %t2 = add i31 %t1, %i
+ %t20 = add i31 3, %t1
+ %t3 = zext i31 %i to i63
+ %t4 = sub i63 %t3, %j
+ %t40 = sub i63 %j, -100
+ %t5 = mul i10 %k, 7
+ %t6 = sdiv i63 %j, -2
+ %t7 = udiv i63 %j, %t3
+ %t8 = urem i10 %k, 10
+ %t9 = srem i10 %k, -10
+ ret void
+end
+
diff --git a/test/Integer/BitBit.ll b/test/Integer/BitBit.ll
new file mode 100644
index 0000000000..02969bc931
--- /dev/null
+++ b/test/Integer/BitBit.ll
@@ -0,0 +1,26 @@
+; RUN: llvm-as %s -o - | llvm-dis > %t1.ll
+; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
+; RUN: diff %t1.ll %t2.ll
+
+
+
+declare void "foo"(i31 %i, i17 %j)
+
+implementation
+
+; foo test basic bitwise operations
+define void "foo"(i31 %i, i33 %j)
+begin
+ %t1 = trunc i33 %j to i31
+ %t2 = and i31 %t1, %i
+ %t3 = sext i31 %i to i33
+ %t4 = or i33 %t3, %j
+ %t5 = xor i31 %t2, 7
+ %t6 = shl i31 %i, i8 2
+ %t7 = trunc i31 %i to i8
+ %t8 = shl i8 %t7, i8 3
+ %t9 = lshr i33 %j, i8 31
+ %t10 = ashr i33 %j, i8 %t7
+ ret void
+end
+
diff --git a/test/Integer/BitCast.ll b/test/Integer/BitCast.ll
new file mode 100644
index 0000000000..b1849bbab1
--- /dev/null
+++ b/test/Integer/BitCast.ll
@@ -0,0 +1,28 @@
+; RUN: llvm-as %s -o - | llvm-dis > %t1.ll
+; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
+; RUN: diff %t1.ll %t2.ll
+
+
+declare void "foo"(i31 %i, i1280 %j, i1 %k, float %f)
+
+implementation
+
+; foo test basic arith operations
+define void "foo"(i31 %i, i1280 %j, i1 %k, float %f)
+begin
+ %t1 = trunc i1280 %j to i31
+ %t2 = trunc i31 %t1 to i1
+
+ %t3 = zext i31 %i to i1280
+ %t4 = sext i31 %i to i1280
+
+ %t5 = fptoui float 3.14159 to i31
+ %t6 = uitofp i31 %t5 to double
+
+ %t7 = fptosi double -1234.5678 to i28
+ %t8 = sitofp i8 -1 to double
+ %t9 = uitofp i8 255 to double
+
+ ret void
+end
+
diff --git a/test/Integer/BitIcmp.ll b/test/Integer/BitIcmp.ll
new file mode 100644
index 0000000000..d4475bf76b
--- /dev/null
+++ b/test/Integer/BitIcmp.ll
@@ -0,0 +1,46 @@
+; RUN: llvm-as %s -o - | llvm-dis > %t1.ll
+; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
+; RUN: diff %t1.ll %t2.ll
+
+
+
+implementation
+
+define i55 "simpleIcmp"(i55 %i0, i55 %j0)
+begin
+ %t1 = icmp eq i55 %i0, %j0
+ %t2 = icmp ne i55 %i0, %j0
+ %t3 = icmp ult i55 %i0, %j0
+ %t4 = icmp sgt i55 %i0, %j0
+ %t5 = icmp ule i55 %i0, %j0
+ %t6 = icmp sge i55 %i0, %j0
+
+ %t7 = icmp eq i55 %i0, 1098765432
+ %t8 = icmp ne i55 %i0, -31415926
+
+ %t9 = icmp ult i55 10000, %j0
+ %t10 = icmp sgt i55 -10000, %j0
+
+ ret i55 %i0
+end
+
+define i31 "phitest"(i12 %i)
+begin
+
+HasArg:
+ %n1 = add i12 1, %i
+ br label %Continue
+
+Continue:
+ %n = phi i12 [%n1, %HasArg], [%next, %Continue]
+ %next = add i12 1, %n
+ br label %Continue
+end
+
+define i18 "select"(i18 %i)
+begin
+ %t = icmp sgt i18 %i, 100
+ %k = select i1 %t, i18 %i, i18 999
+ ret i18 %k
+end
+
diff --git a/test/Integer/BitMem.ll b/test/Integer/BitMem.ll
new file mode 100644
index 0000000000..4d55a92566
--- /dev/null
+++ b/test/Integer/BitMem.ll
@@ -0,0 +1,34 @@
+; RUN: llvm-as %s -o - | llvm-dis > %t1.ll
+; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
+; RUN: diff %t1.ll %t2.ll
+
+
+declare void "foo"()
+
+
+implementation
+
+; foo test basic arith operations
+define void "foo"()
+begin
+ %t1 = malloc i31, i32 4
+ %t2 = malloc i31, i32 7, align 1024
+ %t3 = malloc [4 x i15]
+
+
+ %idx = getelementptr [4 x i15]* %t3, i64 0, i64 2
+ store i15 -123, i15* %idx
+
+ free [4 x i15]* %t3
+ free i31* %t2
+ free i31* %t1
+
+ %t4 = alloca i12, i32 100
+ free i12* %t4
+
+ %t5 = alloca i31
+ store i31 -123, i31* %t5
+
+ free i31* %t5
+ ret void
+end
diff --git a/test/Integer/BitMisc.ll b/test/Integer/BitMisc.ll
new file mode 100644
index 0000000000..1aaf62444d
--- /dev/null
+++ b/test/Integer/BitMisc.ll
@@ -0,0 +1,25 @@
+; RUN: llvm-as %s -o - | llvm-dis > %t1.ll
+; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
+; RUN: diff %t1.ll %t2.ll
+
+
+%MyVar = external global i19
+%MyIntList = external global { i39 *, i19 }
+ external global i19 ; i19*:0
+
+%AConst = constant i19 -123
+
+%AString = constant [4 x i8] c"test"
+
+%ZeroInit = global { [100 x i19 ], [40 x float ] } { [100 x i19] zeroinitializer,
+ [40 x float] zeroinitializer }
+
+implementation
+
+define i19 "foo"(i19 %blah)
+begin
+ store i19 5, i19 *%MyVar
+ %idx = getelementptr { i39 *, i19 } * %MyIntList, i64 0, i32 1
+ store i19 12, i19* %idx
+ ret i19 %blah
+end
diff --git a/test/Integer/BitPacked.ll b/test/Integer/BitPacked.ll
new file mode 100644
index 0000000000..267c3fdb41
--- /dev/null
+++ b/test/Integer/BitPacked.ll
@@ -0,0 +1,23 @@
+; RUN: llvm-as %s -o - | llvm-dis > %t1.ll
+; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
+; RUN: diff %t1.ll %t2.ll
+
+
+%foo1 = external global <4 x float>;
+%foo2 = external global <2 x i10>;
+
+implementation ; Functions:
+
+define void %main()
+{
+ store <4 x float> <float 1.0, float 2.0, float 3.0, float 4.0>, <4 x float>* %foo1
+ store <2 x i10> <i10 4, i10 4>, <2 x i10>* %foo2
+ %l1 = load <4 x float>* %foo1
+ %l2 = load <2 x i10>* %foo2
+ %r1 = extractelement <2 x i10> %l2, i32 1
+ %r2 = extractelement <2 x i10> %l2, i32 0
+ %t = mul i10 %r1, %r2
+ %r3 = insertelement <2 x i10> %l2, i10 %t, i32 0
+ store <2 x i10> %r3, <2 x i10>* %foo2
+ ret void
+}
diff --git a/test/Integer/a15.ll b/test/Integer/a15.ll
new file mode 100644
index 0000000000..6c8e9d1dc3
--- /dev/null
+++ b/test/Integer/a15.ll
@@ -0,0 +1,23 @@
+; RUN: llvm-as %s -o - | llvm-dis > %t.ll
+; RUN: diff %t.ll %s.out
+
+; test 15 bits
+;
+%b = constant i15 add(i15 32767, i15 1)
+%c = constant i15 add(i15 32767, i15 32767)
+%d = constant i15 add(i15 32760, i15 8)
+%e = constant i15 sub(i15 0 , i15 1)
+%f = constant i15 sub(i15 0 , i15 32767)
+%g = constant i15 sub(i15 2 , i15 32767)
+
+%h = constant i15 shl(i15 1 , i8 15)
+%i = constant i15 shl(i15 1 , i8 14)
+%j = constant i15 lshr(i15 32767 , i8 14)
+%k = constant i15 lshr(i15 32767 , i8 15)
+%l = constant i15 ashr(i15 32767 , i8 14)
+%m = constant i15 ashr(i15 32767 , i8 15)
+
+%n = constant i15 mul(i15 32767, i15 2)
+%o = constant i15 trunc( i16 32768 to i15 )
+%p = constant i15 trunc( i16 32767 to i15 )
+
diff --git a/test/Integer/a15.ll.out b/test/Integer/a15.ll.out
new file mode 100644
index 0000000000..ee0f12c3ac
--- /dev/null
+++ b/test/Integer/a15.ll.out
@@ -0,0 +1,18 @@
+; ModuleID = '<stdin>'
+%b = constant i15 0 ; <i15*> [#uses=0]
+%c = constant i15 -2 ; <i15*> [#uses=0]
+%d = constant i15 0 ; <i15*> [#uses=0]
+%e = constant i15 -1 ; <i15*> [#uses=0]
+%f = constant i15 1 ; <i15*> [#uses=0]
+%g = constant i15 3 ; <i15*> [#uses=0]
+%h = constant i15 0 ; <i15*> [#uses=0]
+%i = constant i15 -16384 ; <i15*> [#uses=0]
+%j = constant i15 1 ; <i15*> [#uses=0]
+%k = constant i15 0 ; <i15*> [#uses=0]
+%l = constant i15 -1 ; <i15*> [#uses=0]
+%m = constant i15 -1 ; <i15*> [#uses=0]
+%n = constant i15 -2 ; <i15*> [#uses=0]
+%o = constant i15 0 ; <i15*> [#uses=0]
+%p = constant i15 -1 ; <i15*> [#uses=0]
+
+implementation ; Functions:
diff --git a/test/Integer/a17.ll b/test/Integer/a17.ll
new file mode 100644
index 0000000000..207f85e1c9
--- /dev/null
+++ b/test/Integer/a17.ll
@@ -0,0 +1,22 @@
+; RUN: llvm-as %s -o - | llvm-dis > %t.ll
+; RUN: diff %t.ll %s.out
+
+; test 17 bits
+;
+%b = constant i17 add(i17 131071, i17 1)
+%c = constant i17 add(i17 131071, i17 131071)
+%d = constant i17 add(i17 131064, i17 8)
+%e = constant i17 sub(i17 0 , i17 1)
+%f = constant i17 sub(i17 0 , i17 131071)
+%g = constant i17 sub(i17 2 , i17 131071)
+
+%h = constant i17 shl(i17 1 , i8 17)
+%i = constant i17 shl(i17 1 , i8 16)
+%j = constant i17 lshr(i17 131071 , i8 16)
+%k = constant i17 lshr(i17 131071 , i8 17)
+%l = constant i17 ashr(i17 131071 , i8 16)
+%m = constant i17 ashr(i17 131071 , i8 17)
+
+%n = constant i17 mul(i17 131071, i17 2)
+%o = constant i17 trunc( i18 131072 to i17 )
+%p = constant i17 trunc( i18 131071 to i17 )
diff --git a/test/Integer/a17.ll.out b/test/Integer/a17.ll.out
new file mode 100644
index 0000000000..bb6093858c
--- /dev/null
+++ b/test/Integer/a17.ll.out
@@ -0,0 +1,18 @@
+; ModuleID = '<stdin>'
+%b = constant i17 0 ; <i17*> [#uses=0]
+%c = constant i17 -2 ; <i17*> [#uses=0]
+%d = constant i17 0 ; <i17*> [#uses=0]
+%e = constant i17 -1 ; <i17*> [#uses=0]
+%f = constant i17 1 ; <i17*> [#uses=0]
+%g = constant i17 3 ; <i17*> [#uses=0]
+%h = constant i17 0 ; <i17*> [#uses=0]
+%i = constant i17 -65536 ; <i17*> [#uses=0]
+%j = constant i17 1 ; <i17*> [#uses=0]
+%k = constant i17 0 ; <i17*> [#uses=0]
+%l = constant i17 -1 ; <i17*> [#uses=0]
+%m = constant i17 -1 ; <i17*> [#uses=0]
+%n = constant i17 -2 ; <i17*> [#uses=0]
+%o = constant i17 0 ; <i17*> [#uses=0]
+%p = constant i17 -1 ; <i17*> [#uses=0]
+
+implementation ; Functions:
diff --git a/test/Integer/a31.ll b/test/Integer/a31.ll
new file mode 100644
index 0000000000..6db33f6aa7
--- /dev/null
+++ b/test/Integer/a31.ll
@@ -0,0 +1,22 @@
+; RUN: llvm-as %s -o - | llvm-dis > %t.ll
+; RUN: diff %t.ll %s.out
+
+; test 31 bits
+;
+%b = constant i31 add(i31 2147483647, i31 1)
+%c = constant i31 add(i31 2147483647, i31 2147483647)
+%d = constant i31 add(i31 2147483640, i31 8)
+%e = constant i31 sub(i31 0 , i31 1)
+%f = constant i31 sub(i31 0 , i31 2147483647)
+%g = constant i31 sub(i31 2 , i31 2147483647)
+
+%h = constant i31 shl(i31 1 , i8 31)
+%i = constant i31 shl(i31 1 , i8 30)
+%j = constant i31 lshr(i31 2147483647 , i8 30)
+%k = constant i31 lshr(i31 2147483647 , i8 31)
+%l = constant i31 ashr(i31 2147483647 , i8 30)
+%m = constant i31 ashr(i31 2147483647 , i8 31)
+
+%n = constant i31 mul(i31 2147483647, i31 2)
+%o = constant i31 trunc( i32 2147483648 to i31 )
+%p = constant i31 trunc( i32 2147483647 to i31 )
diff --git a/test/Integer/a31.ll.out b/test/Integer/a31.ll.out
new file mode 100644
index 0000000000..1dcdc08f7e
--- /dev/null
+++ b/test/Integer/a31.ll.out
@@ -0,0 +1,18 @@
+; ModuleID = '<stdin>'
+%b = constant i31 0 ; <i31*> [#uses=0]
+%c = constant i31 -2 ; <i31*> [#uses=0]
+%d = constant i31 0 ; <i31*> [#uses=0]
+%e = constant i31 -1 ; <i31*> [#uses=0]
+%f = constant i31 1 ; <i31*> [#uses=0]
+%g = constant i31 3 ; <i31*> [#uses=0]
+%h = constant i31 0 ; <i31*> [#uses=0]
+%i = constant i31 -1073741824 ; <i31*> [#uses=0]
+%j = constant i31 1 ; <i31*> [#uses=0]
+%k = constant i31 0 ; <i31*> [#uses=0]
+%l = constant i31 -1 ; <i31*> [#uses=0]
+%m = constant i31 -1 ; <i31*> [#uses=0]
+%n = constant i31 -2 ; <i31*> [#uses=0]
+%o = constant i31 0 ; <i31*> [#uses=0]
+%p = constant i31 -1 ; <i31*> [#uses=0]
+
+implementation ; Functions:
diff --git a/test/Integer/a33.ll b/test/Integer/a33.ll
new file mode 100644
index 0000000000..90f31b3f07
--- /dev/null
+++ b/test/Integer/a33.ll
@@ -0,0 +1,23 @@
+; RUN: llvm-as %s -o - | llvm-dis > %t.ll
+; RUN: diff %t.ll %s.out
+
+; test 33 bits
+;
+%b = constant i33 add(i33 8589934591, i33 1)
+%c = constant i33 add(i33 8589934591, i33 8589934591)
+%d = constant i33 add(i33 8589934584, i33 8)
+%e = constant i33 sub(i33 0 , i33 1)
+%f = constant i33 sub(i33 0 , i33 8589934591)
+%g = constant i33 sub(i33 2 , i33 8589934591)
+
+%h = constant i33 shl(i33 1 , i8 33)
+%i = constant i33 shl(i33 1 , i8 32)
+%j = constant i33 lshr(i33 8589934591 , i8 32)
+%k = constant i33 lshr(i33 8589934591 , i8 33)
+%l = constant i33 ashr(i33 8589934591 , i8 32)
+%m = constant i33 ashr(i33 8589934591 , i8 33)
+
+%n = constant i33 mul(i33 8589934591, i33 2)
+%o = constant i33 trunc( i34 8589934592 to i33 )
+%p = constant i33 trunc( i34 8589934591 to i33 )
+
diff --git a/test/Integer/a33.ll.out b/test/Integer/a33.ll.out
new file mode 100644
index 0000000000..3fc306c508
--- /dev/null
+++ b/test/Integer/a33.ll.out
@@ -0,0 +1,18 @@
+; ModuleID = '<stdin>'
+%b = constant i33 0 ; <i33*> [#uses=0]
+%c = constant i33 -2 ; <i33*> [#uses=0]
+%d = constant i33 0 ; <i33*> [#uses=0]
+%e = constant i33 -1 ; <i33*> [#uses=0]
+%f = constant i33 1 ; <i33*> [#uses=0]
+%g = constant i33 3 ; <i33*> [#uses=0]
+%h = constant i33 0 ; <i33*> [#uses=0]
+%i = constant i33 -4294967296 ; <i33*> [#uses=0]
+%j = constant i33 1 ; <i33*> [#uses=0]
+%k = constant i33 0 ; <i33*> [#uses=0]
+%l = constant i33 -1 ; <i33*> [#uses=0]
+%m = constant i33 -1 ; <i33*> [#uses=0]
+%n = constant i33 -2 ; <i33*> [#uses=0]
+%o = constant i33 0 ; <i33*> [#uses=0]
+%p = constant i33 -1 ; <i33*> [#uses=0]
+
+implementation ; Functions:
diff --git a/test/Integer/a63.ll b/test/Integer/a63.ll
new file mode 100644
index 0000000000..9f039ed35c
--- /dev/null
+++ b/test/Integer/a63.ll
@@ -0,0 +1,22 @@
+; RUN: llvm-as %s -o - | llvm-dis > %t.ll
+; RUN: diff %t.ll %s.out
+
+; test 63 bits
+;
+%b = constant i63 add(i63 9223372036854775807, i63 1)
+%c = constant i63 add(i63 9223372036854775807, i63 9223372036854775807)
+%d = constant i63 add(i63 9223372036854775800, i63 8)
+%e = constant i63 sub(i63 0 , i63 1)
+%f = constant i63 sub(i63 0 , i63 9223372036854775807)
+%g = constant i63 sub(i63 2 , i63 9223372036854775807)
+
+%h = constant i63 shl(i63 1 , i8 63)
+%i = constant i63 shl(i63 1 , i8 62)
+%j = constant i63 lshr(i63 9223372036854775807 , i8 62)
+%k = constant i63 lshr(i63 9223372036854775807 , i8 63)
+%l = constant i63 ashr(i63 9223372036854775807 , i8 62)
+%m = constant i63 ashr(i63 9223372036854775807 , i8 63)
+
+%n = constant i63 mul(i63 9223372036854775807, i63 2)
+%o = constant i63 trunc( i64 9223372036854775808 to i63 )
+%p = constant i63 trunc( i64 9223372036854775807 to i63 )
diff --git a/test/Integer/a63.ll.out b/test/Integer/a63.ll.out
new file mode 100644
index 0000000000..d2d0ce8f46
--- /dev/null
+++ b/test/Integer/a63.ll.out
@@ -0,0 +1,18 @@
+; ModuleID = '<stdin>'
+%b = constant i63 0 ; <i63*> [#uses=0]
+%c = constant i63 -2 ; <i63*> [#uses=0]
+%d = constant i63 0 ; <i63*> [#uses=0]
+%e = constant i63 -1 ; <i63*> [#uses=0]
+%f = constant i63 1 ; <i63*> [#uses=0]
+%g = constant i63 3 ; <i63*> [#uses=0]
+%h = constant i63 0 ; <i63*> [#uses=0]
+%i = constant i63 -4611686018427387904 ; <i63*> [#uses=0]
+%j = constant i63 1 ; <i63*> [#uses=0]
+%k = constant i63 0 ; <i63*> [#uses=0]
+%l = constant i63 -1 ; <i63*> [#uses=0]
+%m = constant i63 -1 ; <i63*> [#uses=0]
+%n = constant i63 -2 ; <i63*> [#uses=0]
+%o = constant i63 0 ; <i63*> [#uses=0]
+%p = constant i63 -1 ; <i63*> [#uses=0]
+
+implementation ; Functions:
diff --git a/test/Integer/a7.ll b/test/Integer/a7.ll
new file mode 100644
index 0000000000..e055c61e2e
--- /dev/null
+++ b/test/Integer/a7.ll
@@ -0,0 +1,23 @@
+; RUN: llvm-as %s -o - | llvm-dis > %t.ll
+; RUN: diff %t.ll %s.out
+
+; test 7 bits
+;
+%b = constant i7 add(i7 127, i7 1)
+%c = constant i7 add(i7 127, i7 127)
+%d = constant i7 add(i7 120, i7 8)
+%e = constant i7 sub(i7 0 , i7 1)
+%f = constant i7 sub(i7 0 , i7 127)
+%g = constant i7 sub(i7 2 , i7 127)
+
+%h = constant i7 shl(i7 1 , i8 7)
+%i = constant i7 shl(i7 1 , i8 6)
+%j = constant i7 lshr(i7 127 , i8 6)
+%k = constant i7 lshr(i7 127 , i8 7)
+%l = constant i7 ashr(i7 127 , i8 6)
+%m = constant i7 ashr(i7 127 , i8 7)
+
+%n = constant i7 mul(i7 127, i7 2)
+%o = constant i7 trunc( i8 128 to i7 )
+%p = constant i7 trunc( i8 255 to i7 )
+
diff --git a/test/Integer/a7.ll.out b/test/Integer/a7.ll.out
new file mode 100644
index 0000000000..3f71ea7ead
--- /dev/null
+++ b/test/Integer/a7.ll.out
@@ -0,0 +1,18 @@
+; ModuleID = '<stdin>'
+%b = constant i7 0 ; <i7*> [#uses=0]
+%c = constant i7 -2 ; <i7*> [#uses=0]
+%d = constant i7 0 ; <i7*> [#uses=0]
+%e = constant i7 -1 ; <i7*> [#uses=0]
+%f = constant i7 1 ; <i7*> [#uses=0]
+%g = constant i7 3 ; <i7*> [#uses=0]
+%h = constant i7 0 ; <i7*> [#uses=0]
+%i = constant i7 -64 ; <i7*> [#uses=0]
+%j = constant i7 1 ; <i7*> [#uses=0]
+%k = constant i7 0 ; <i7*> [#uses=0]
+%l = constant i7 -1 ; <i7*> [#uses=0]
+%m = constant i7 -1 ; <i7*> [#uses=0]
+%n = constant i7 -2 ; <i7*> [#uses=0]
+%o = constant i7 0 ; <i7*> [#uses=0]
+%p = constant i7 -1 ; <i7*> [#uses=0]
+
+implementation ; Functions:
diff --git a/test/Integer/a9.ll b/test/Integer/a9.ll
new file mode 100644
index 0000000000..907ac2b7a0
--- /dev/null
+++ b/test/Integer/a9.ll
@@ -0,0 +1,23 @@
+; RUN: llvm-as %s -o - | llvm-dis > %t.ll
+; RUN: diff %t.ll %s.out
+
+; test 9 bits
+;
+%b = constant i9 add(i9 511, i9 1)
+%c = constant i9 add(i9 511, i9 511)
+%d = constant i9 add(i9 504, i9 8)
+%e = constant i9 sub(i9 0 , i9 1)
+%f = constant i9 sub(i9 0 , i9 511)
+%g = constant i9 sub(i9 2 , i9 511)
+
+%h = constant i9 shl(i9 1 , i8 9)
+%i = constant i9 shl(i9 1 , i8 8)
+%j = constant i9 lshr(i9 511 , i8 8)
+%k = constant i9 lshr(i9 511 , i8 9)
+%l = constant i9 ashr(i9 511 , i8 8)
+%m = constant i9 ashr(i9 511 , i8 9)
+
+%n = constant i9 mul(i9 511, i9 2)
+%o = constant i9 trunc( i10 512 to i9 )
+%p = constant i9 trunc( i10 511 to i9 )
+
diff --git a/test/Integer/a9.ll.out b/test/Integer/a9.ll.out
new file mode 100644
index 0000000000..4968167bea
--- /dev/null
+++ b/test/Integer/a9.ll.out
@@ -0,0 +1,18 @@