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