Check in LLVM r95781.
diff --git a/test/Bitcode/2006-12-11-Cast-ConstExpr.ll b/test/Bitcode/2006-12-11-Cast-ConstExpr.ll
new file mode 100644
index 0000000..6df8711
--- /dev/null
+++ b/test/Bitcode/2006-12-11-Cast-ConstExpr.ll
@@ -0,0 +1,10 @@
+; This test ensures that we get a bitcast constant expression in and out,
+; not a sitofp constant expression. 
+; RUN: llvm-as < %s | llvm-dis | \
+; RUN:   grep {bitcast (}
+
+@G = external global i32
+
+define float @tryit(i32 %A) {
+   ret float bitcast( i32 ptrtoint (i32* @G to i32) to float)
+}
diff --git a/test/Bitcode/2009-06-11-FirstClassAggregateConstant.ll b/test/Bitcode/2009-06-11-FirstClassAggregateConstant.ll
new file mode 100644
index 0000000..415f88e
--- /dev/null
+++ b/test/Bitcode/2009-06-11-FirstClassAggregateConstant.ll
@@ -0,0 +1,12 @@
+; RUN: llvm-as < %s | llvm-dis -disable-output
+; PR4373
+
+@foo = weak global { i32 } zeroinitializer              
+@bar = weak global i32 0                
+
+define void @test() {
+entry:
+        store { i32 } zeroinitializer, { i32 }* @foo
+        store i32 1, i32* @bar
+        ret void
+}
diff --git a/test/Bitcode/AutoUpgradeIntrinsics.ll b/test/Bitcode/AutoUpgradeIntrinsics.ll
new file mode 100644
index 0000000..5f9bcd5
--- /dev/null
+++ b/test/Bitcode/AutoUpgradeIntrinsics.ll
@@ -0,0 +1,10 @@
+; This isn't really an assembly file. It just runs test on bitcode to ensure
+; it is auto-upgraded.
+; RUN: llvm-dis < %s.bc | not grep {i32 @llvm\\.ct}
+; RUN: llvm-dis < %s.bc | \
+; RUN:   not grep {llvm\\.part\\.set\\.i\[0-9\]*\\.i\[0-9\]*\\.i\[0-9\]*}
+; RUN: llvm-dis < %s.bc | \
+; RUN:   not grep {llvm\\.part\\.select\\.i\[0-9\]*\\.i\[0-9\]*}
+; RUN: llvm-dis < %s.bc | \
+; RUN:   not grep {llvm\\.bswap\\.i\[0-9\]*\\.i\[0-9\]*}
+
diff --git a/test/Bitcode/AutoUpgradeIntrinsics.ll.bc b/test/Bitcode/AutoUpgradeIntrinsics.ll.bc
new file mode 100644
index 0000000..9de756b
--- /dev/null
+++ b/test/Bitcode/AutoUpgradeIntrinsics.ll.bc
Binary files differ
diff --git a/test/Bitcode/dg.exp b/test/Bitcode/dg.exp
new file mode 100644
index 0000000..f200589
--- /dev/null
+++ b/test/Bitcode/dg.exp
@@ -0,0 +1,3 @@
+load_lib llvm.exp
+
+RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]]
diff --git a/test/Bitcode/extractelement.ll b/test/Bitcode/extractelement.ll
new file mode 100644
index 0000000..d88f811
--- /dev/null
+++ b/test/Bitcode/extractelement.ll
@@ -0,0 +1,8 @@
+; RUN: opt < %s -constprop | llvm-dis
+; PR3465
+
+define double @test() {
+  %tmp24 = extractelement <2 x double> bitcast (<1 x i128> < i128 85070591730234615870450834276742070272 > to <2 x double>), i32 0
+  ret double %tmp24
+}
+
diff --git a/test/Bitcode/flags.ll b/test/Bitcode/flags.ll
new file mode 100644
index 0000000..7b0c5b5
--- /dev/null
+++ b/test/Bitcode/flags.ll
@@ -0,0 +1,27 @@
+; RUN: llvm-as < %s | llvm-dis > %t0
+; RUN: opt -S < %s > %t1
+; RUN: diff %t0 %t1
+; PR6140
+
+; Make sure the flags are serialized/deserialized properly for both
+; forward and backward references.
+
+define void @foo() nounwind {
+entry:
+  br label %first
+
+second:                                           ; preds = %first
+  %u = add nuw i32 %a, 0                          ; <i32> [#uses=0]
+  %s = add nsw i32 %a, 0                          ; <i32> [#uses=0]
+  %us = add nuw nsw i32 %a, 0                     ; <i32> [#uses=0]
+  %z = add i32 %a, 0                              ; <i32> [#uses=0]
+  unreachable
+
+first:                                            ; preds = %entry
+  %a = bitcast i32 0 to i32                       ; <i32> [#uses=8]
+  %uu = add nuw i32 %a, 0                         ; <i32> [#uses=0]
+  %ss = add nsw i32 %a, 0                         ; <i32> [#uses=0]
+  %uuss = add nuw nsw i32 %a, 0                   ; <i32> [#uses=0]
+  %zz = add i32 %a, 0                             ; <i32> [#uses=0]
+  br label %second
+}
diff --git a/test/Bitcode/memcpy.ll b/test/Bitcode/memcpy.ll
new file mode 100644
index 0000000..85b95fe
--- /dev/null
+++ b/test/Bitcode/memcpy.ll
@@ -0,0 +1,21 @@
+; RUN: llvm-as %s -o /dev/null
+
+define void @test(i32* %P, i32* %Q) {
+entry:
+        %tmp.1 = bitcast i32* %P to i8*         ; <i8*> [#uses=3]
+        %tmp.3 = bitcast i32* %Q to i8*         ; <i8*> [#uses=4]
+        tail call void @llvm.memcpy.i32( i8* %tmp.1, i8* %tmp.3, i32 100000, i32 1 )
+        tail call void @llvm.memcpy.i64( i8* %tmp.1, i8* %tmp.3, i64 100000, i32 1 )
+        tail call void @llvm.memset.i32( i8* %tmp.3, i8 14, i32 10000, i32 0 )
+        tail call void @llvm.memmove.i32( i8* %tmp.1, i8* %tmp.3, i32 123124, i32 1 )
+        ret void
+}
+
+declare void @llvm.memcpy.i32(i8*, i8*, i32, i32)
+
+declare void @llvm.memcpy.i64(i8*, i8*, i64, i32)
+
+declare void @llvm.memset.i32(i8*, i8, i32, i32)
+
+declare void @llvm.memmove.i32(i8*, i8*, i32, i32)
+
diff --git a/test/Bitcode/metadata-2.ll b/test/Bitcode/metadata-2.ll
new file mode 100644
index 0000000..1a59ce6
--- /dev/null
+++ b/test/Bitcode/metadata-2.ll
@@ -0,0 +1,87 @@
+; RUN: llvm-as < %s | llvm-dis -o /dev/null
+	type { %object.ModuleInfo.__vtbl*, i8*, %"byte[]", %1, %"ClassInfo[]", i32, void ()*, void ()*, void ()*, i8*, void ()* }		; type %0
+	type { i64, %object.ModuleInfo* }		; type %1
+	type { i32, void ()* }		; type %2
+	%"ClassInfo[]" = type { i64, %object.ClassInfo** }
+	%"Interface[]" = type { i64, %object.Interface* }
+	%"ModuleInfo[]" = type { i64, %object.ModuleInfo** }
+	%ModuleReference = type { %ModuleReference*, %object.ModuleInfo* }
+	%"OffsetTypeInfo[]" = type { i64, %object.OffsetTypeInfo* }
+	%"byte[]" = type { i64, i8* }
+	%object.ClassInfo = type { %object.ClassInfo.__vtbl*, i8*, %"byte[]", %"byte[]", %"void*[]", %"Interface[]", %object.ClassInfo*, i8*, i8*, i32, i8*, %"OffsetTypeInfo[]", i8*, %object.TypeInfo* }
+	%object.ClassInfo.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i64 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %object.Object* (%object.ClassInfo*)* }
+	%object.Interface = type { %object.ClassInfo*, %"void*[]", i64 }
+	%object.ModuleInfo = type { %object.ModuleInfo.__vtbl*, i8*, %"byte[]", %"ModuleInfo[]", %"ClassInfo[]", i32, void ()*, void ()*, void ()*, i8*, void ()* }
+	%object.ModuleInfo.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i64 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* }
+	%object.Object = type { %object.ModuleInfo.__vtbl*, i8* }
+	%object.OffsetTypeInfo = type { i64, %object.TypeInfo* }
+	%object.TypeInfo = type { %object.TypeInfo.__vtbl*, i8* }
+	%object.TypeInfo.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i64 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i64 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i64 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* }
+	%"void*[]" = type { i64, i8** }
+@_D10ModuleInfo6__vtblZ = external constant %object.ModuleInfo.__vtbl		; <%object.ModuleInfo.__vtbl*> [#uses=1]
+@.str = internal constant [20 x i8] c"tango.core.BitManip\00"		; <[20 x i8]*> [#uses=1]
+@_D5tango4core8BitManip8__ModuleZ = global %0 { %object.ModuleInfo.__vtbl* @_D10ModuleInfo6__vtblZ, i8* null, %"byte[]" { i64 19, i8* getelementptr ([20 x i8]* @.str, i32 0, i32 0) }, %1 zeroinitializer, %"ClassInfo[]" zeroinitializer, i32 4, void ()* null, void ()* null, void ()* null, i8* null, void ()* null }		; <%0*> [#uses=1]
+@_D5tango4core8BitManip11__moduleRefZ = internal global %ModuleReference { %ModuleReference* null, %object.ModuleInfo* bitcast (%0* @_D5tango4core8BitManip8__ModuleZ to %object.ModuleInfo*) }		; <%ModuleReference*> [#uses=2]
+@_Dmodule_ref = external global %ModuleReference*		; <%ModuleReference**> [#uses=2]
+@llvm.global_ctors = appending constant [1 x %2] [%2 { i32 65535, void ()* @_D5tango4core8BitManip16__moduleinfoCtorZ }]		; <[1 x %2]*> [#uses=0]
+
+define fastcc i32 @_D5tango4core8BitManip6popcntFkZi(i32 %x_arg) nounwind readnone {
+entry:
+	%tmp1 = lshr i32 %x_arg, 1		; <i32> [#uses=1]
+	%tmp2 = and i32 %tmp1, 1431655765		; <i32> [#uses=1]
+	%tmp4 = sub i32 %x_arg, %tmp2		; <i32> [#uses=2]
+	%tmp6 = lshr i32 %tmp4, 2		; <i32> [#uses=1]
+	%tmp7 = and i32 %tmp6, 858993459		; <i32> [#uses=1]
+	%tmp9 = and i32 %tmp4, 858993459		; <i32> [#uses=1]
+	%tmp10 = add i32 %tmp7, %tmp9		; <i32> [#uses=2]
+	%tmp12 = lshr i32 %tmp10, 4		; <i32> [#uses=1]
+	%tmp14 = add i32 %tmp12, %tmp10		; <i32> [#uses=1]
+	%tmp16 = and i32 %tmp14, 252645135		; <i32> [#uses=2]
+	%tmp18 = lshr i32 %tmp16, 8		; <i32> [#uses=1]
+	%tmp20 = add i32 %tmp18, %tmp16		; <i32> [#uses=1]
+	%tmp22 = and i32 %tmp20, 16711935		; <i32> [#uses=2]
+	%tmp24 = lshr i32 %tmp22, 16		; <i32> [#uses=1]
+	%tmp26 = add i32 %tmp24, %tmp22		; <i32> [#uses=1]
+	%tmp28 = and i32 %tmp26, 65535		; <i32> [#uses=1]
+	ret i32 %tmp28
+}
+
+define fastcc i32 @_D5tango4core8BitManip7bitswapFkZk(i32 %x_arg) nounwind readnone {
+entry:
+	%tmp1 = lshr i32 %x_arg, 1		; <i32> [#uses=1]
+	%tmp2 = and i32 %tmp1, 1431655765		; <i32> [#uses=1]
+	%tmp4 = shl i32 %x_arg, 1		; <i32> [#uses=1]
+	%tmp5 = and i32 %tmp4, -1431655766		; <i32> [#uses=1]
+	%tmp6 = or i32 %tmp2, %tmp5		; <i32> [#uses=2]
+	%tmp8 = lshr i32 %tmp6, 2		; <i32> [#uses=1]
+	%tmp9 = and i32 %tmp8, 858993459		; <i32> [#uses=1]
+	%tmp11 = shl i32 %tmp6, 2		; <i32> [#uses=1]
+	%tmp12 = and i32 %tmp11, -858993460		; <i32> [#uses=1]
+	%tmp13 = or i32 %tmp9, %tmp12		; <i32> [#uses=2]
+	%tmp15 = lshr i32 %tmp13, 4		; <i32> [#uses=1]
+	%tmp16 = and i32 %tmp15, 252645135		; <i32> [#uses=1]
+	%tmp18 = shl i32 %tmp13, 4		; <i32> [#uses=1]
+	%tmp19 = and i32 %tmp18, -252645136		; <i32> [#uses=1]
+	%tmp20 = or i32 %tmp16, %tmp19		; <i32> [#uses=2]
+	%tmp22 = lshr i32 %tmp20, 8		; <i32> [#uses=1]
+	%tmp23 = and i32 %tmp22, 16711935		; <i32> [#uses=1]
+	%tmp25 = shl i32 %tmp20, 8		; <i32> [#uses=1]
+	%tmp26 = and i32 %tmp25, -16711936		; <i32> [#uses=1]
+	%tmp27 = or i32 %tmp23, %tmp26		; <i32> [#uses=2]
+	%tmp29 = lshr i32 %tmp27, 16		; <i32> [#uses=1]
+	%tmp31 = shl i32 %tmp27, 16		; <i32> [#uses=1]
+	%tmp32 = or i32 %tmp29, %tmp31		; <i32> [#uses=1]
+	ret i32 %tmp32
+}
+
+define internal void @_D5tango4core8BitManip16__moduleinfoCtorZ() nounwind {
+moduleinfoCtorEntry:
+	%current = load %ModuleReference** @_Dmodule_ref		; <%ModuleReference*> [#uses=1]
+	store %ModuleReference* %current, %ModuleReference** getelementptr (%ModuleReference* @_D5tango4core8BitManip11__moduleRefZ, i32 0, i32 0)
+	store %ModuleReference* @_D5tango4core8BitManip11__moduleRefZ, %ModuleReference** @_Dmodule_ref
+	ret void
+}
+!llvm.ldc.classinfo._D6Object7__ClassZ = !{!0}
+!llvm.ldc.classinfo._D10ModuleInfo7__ClassZ = !{!1}
+!0 = metadata !{%object.Object undef, i1 false, i1 false}
+!1 = metadata !{%object.ModuleInfo undef, i1 false, i1 false}
diff --git a/test/Bitcode/metadata.ll b/test/Bitcode/metadata.ll
new file mode 100644
index 0000000..19db3ea
--- /dev/null
+++ b/test/Bitcode/metadata.ll
@@ -0,0 +1,6 @@
+; RUN: llvm-as < %s | llvm-dis -o /dev/null
+
+!llvm.foo = !{!0}
+!0 = metadata !{i32 42}
+@my.str = internal constant [4 x i8] c"foo\00"
+
diff --git a/test/Bitcode/sse2_loadl_pd.ll b/test/Bitcode/sse2_loadl_pd.ll
new file mode 100644
index 0000000..b0bea16
--- /dev/null
+++ b/test/Bitcode/sse2_loadl_pd.ll
@@ -0,0 +1,2 @@
+; RUN: llvm-dis < %s.bc | not grep {i32 @llvm\\.loadl.pd}
+; RUN: llvm-dis < %s.bc | grep shufflevector
diff --git a/test/Bitcode/sse2_loadl_pd.ll.bc b/test/Bitcode/sse2_loadl_pd.ll.bc
new file mode 100644
index 0000000..402cbe1
--- /dev/null
+++ b/test/Bitcode/sse2_loadl_pd.ll.bc
Binary files differ
diff --git a/test/Bitcode/sse2_movl_dq.ll b/test/Bitcode/sse2_movl_dq.ll
new file mode 100644
index 0000000..093d8213
--- /dev/null
+++ b/test/Bitcode/sse2_movl_dq.ll
@@ -0,0 +1,2 @@
+; RUN: llvm-dis < %s.bc | not grep {i32 @llvm\\.movl.dq}
+; RUN: llvm-dis < %s.bc | grep shufflevector
diff --git a/test/Bitcode/sse2_movl_dq.ll.bc b/test/Bitcode/sse2_movl_dq.ll.bc
new file mode 100644
index 0000000..74d1826
--- /dev/null
+++ b/test/Bitcode/sse2_movl_dq.ll.bc
Binary files differ
diff --git a/test/Bitcode/sse2_movs_d.ll b/test/Bitcode/sse2_movs_d.ll
new file mode 100644
index 0000000..25a35b6
--- /dev/null
+++ b/test/Bitcode/sse2_movs_d.ll
@@ -0,0 +1,2 @@
+; RUN: llvm-dis < %s.bc | not grep {i32 @llvm\\.movs.d}
+; RUN: llvm-dis < %s.bc | grep shufflevector
diff --git a/test/Bitcode/sse2_movs_d.ll.bc b/test/Bitcode/sse2_movs_d.ll.bc
new file mode 100644
index 0000000..719d529
--- /dev/null
+++ b/test/Bitcode/sse2_movs_d.ll.bc
Binary files differ
diff --git a/test/Bitcode/sse2_punpck_qdq.ll b/test/Bitcode/sse2_punpck_qdq.ll
new file mode 100644
index 0000000..b9d711c
--- /dev/null
+++ b/test/Bitcode/sse2_punpck_qdq.ll
@@ -0,0 +1,3 @@
+; RUN: llvm-dis < %s.bc | not grep {i32 @llvm\\.punpckh.qdq}
+; RUN: llvm-dis < %s.bc | not grep {i32 @llvm\\.punpckl.qdq}
+; RUN: llvm-dis < %s.bc | grep shufflevector
diff --git a/test/Bitcode/sse2_punpck_qdq.ll.bc b/test/Bitcode/sse2_punpck_qdq.ll.bc
new file mode 100644
index 0000000..7c1b7ed
--- /dev/null
+++ b/test/Bitcode/sse2_punpck_qdq.ll.bc
Binary files differ
diff --git a/test/Bitcode/sse2_shuf_pd.ll b/test/Bitcode/sse2_shuf_pd.ll
new file mode 100644
index 0000000..5829edb
--- /dev/null
+++ b/test/Bitcode/sse2_shuf_pd.ll
@@ -0,0 +1,2 @@
+; RUN: llvm-dis < %s.bc | not grep {i32 @llvm\\.shuf.pd}
+; RUN: llvm-dis < %s.bc | grep shufflevector
diff --git a/test/Bitcode/sse2_shuf_pd.ll.bc b/test/Bitcode/sse2_shuf_pd.ll.bc
new file mode 100644
index 0000000..832c39e
--- /dev/null
+++ b/test/Bitcode/sse2_shuf_pd.ll.bc
Binary files differ
diff --git a/test/Bitcode/sse2_unpck_pd.ll b/test/Bitcode/sse2_unpck_pd.ll
new file mode 100644
index 0000000..f4e5d54
--- /dev/null
+++ b/test/Bitcode/sse2_unpck_pd.ll
@@ -0,0 +1,3 @@
+; RUN: llvm-dis < %s.bc | not grep {i32 @llvm\\.unpckh.pd}
+; RUN: llvm-dis < %s.bc | not grep {i32 @llvm\\.unpckl.pd}
+; RUN: llvm-dis < %s.bc | grep shufflevector
diff --git a/test/Bitcode/sse2_unpck_pd.ll.bc b/test/Bitcode/sse2_unpck_pd.ll.bc
new file mode 100644
index 0000000..4fb829c
--- /dev/null
+++ b/test/Bitcode/sse2_unpck_pd.ll.bc
Binary files differ