diff options
Diffstat (limited to 'llvm/test')
33 files changed, 287 insertions, 391 deletions
diff --git a/llvm/test/Transforms/CrossDSOCFI/basic.ll b/llvm/test/Transforms/CrossDSOCFI/basic.ll index c408449d2d6..d54e60e0e26 100644 --- a/llvm/test/Transforms/CrossDSOCFI/basic.ll +++ b/llvm/test/Transforms/CrossDSOCFI/basic.ll @@ -16,52 +16,48 @@ ; CHECK-NEXT: br label %[[EXIT]] ; CHECK: [[L1]]: -; CHECK-NEXT: call i1 @llvm.bitset.test(i8* %[[ADDR]], metadata i64 111) +; CHECK-NEXT: call i1 @llvm.type.test(i8* %[[ADDR]], metadata i64 111) ; CHECK-NEXT: br {{.*}} label %[[EXIT]], label %[[FAIL]] ; CHECK: [[L2]]: -; CHECK-NEXT: call i1 @llvm.bitset.test(i8* %[[ADDR]], metadata i64 222) +; CHECK-NEXT: call i1 @llvm.type.test(i8* %[[ADDR]], metadata i64 222) ; CHECK-NEXT: br {{.*}} label %[[EXIT]], label %[[FAIL]] ; CHECK: [[L3]]: -; CHECK-NEXT: call i1 @llvm.bitset.test(i8* %[[ADDR]], metadata i64 333) +; CHECK-NEXT: call i1 @llvm.type.test(i8* %[[ADDR]], metadata i64 333) ; CHECK-NEXT: br {{.*}} label %[[EXIT]], label %[[FAIL]] ; CHECK: [[L4]]: -; CHECK-NEXT: call i1 @llvm.bitset.test(i8* %[[ADDR]], metadata i64 444) +; CHECK-NEXT: call i1 @llvm.type.test(i8* %[[ADDR]], metadata i64 444) ; CHECK-NEXT: br {{.*}} label %[[EXIT]], label %[[FAIL]] target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" -@_ZTV1A = constant i8 0 -@_ZTI1A = constant i8 0 -@_ZTS1A = constant i8 0 -@_ZTV1B = constant i8 0 -@_ZTI1B = constant i8 0 -@_ZTS1B = constant i8 0 +@_ZTV1A = constant i8 0, !type !4, !type !5 +@_ZTV1B = constant i8 0, !type !4, !type !5, !type !6, !type !7 -define signext i8 @f11() { +define signext i8 @f11() !type !0 !type !1 { entry: ret i8 1 } -define signext i8 @f12() { +define signext i8 @f12() !type !0 !type !1 { entry: ret i8 2 } -define signext i8 @f13() { +define signext i8 @f13() !type !0 !type !1 { entry: ret i8 3 } -define i32 @f21() { +define i32 @f21() !type !2 !type !3 { entry: ret i32 4 } -define i32 @f22() { +define i32 @f22() !type !2 !type !3 { entry: ret i32 5 } @@ -71,23 +67,14 @@ entry: ret void } -!llvm.bitsets = !{!0, !1, !2, !3, !4, !7, !8, !9, !10, !11, !12, !13, !14, !15} -!llvm.module.flags = !{!17} - -!0 = !{!"_ZTSFcvE", i8 ()* @f11, i64 0} -!1 = !{i64 111, i8 ()* @f11, i64 0} -!2 = !{!"_ZTSFcvE", i8 ()* @f12, i64 0} -!3 = !{i64 111, i8 ()* @f12, i64 0} -!4 = !{!"_ZTSFcvE", i8 ()* @f13, i64 0} -!5 = !{i64 111, i8 ()* @f13, i64 0} -!6 = !{!"_ZTSFivE", i32 ()* @f21, i64 0} -!7 = !{i64 222, i32 ()* @f21, i64 0} -!8 = !{!"_ZTSFivE", i32 ()* @f22, i64 0} -!9 = !{i64 222, i32 ()* @f22, i64 0} -!10 = !{!"_ZTS1A", i8* @_ZTV1A, i64 16} -!11 = !{i64 333, i8* @_ZTV1A, i64 16} -!12 = !{!"_ZTS1A", i8* @_ZTV1B, i64 16} -!13 = !{i64 333, i8* @_ZTV1B, i64 16} -!14 = !{!"_ZTS1B", i8* @_ZTV1B, i64 16} -!15 = !{i64 444, i8* @_ZTV1B, i64 16} -!17= !{i32 4, !"Cross-DSO CFI", i32 1} +!llvm.module.flags = !{!8} + +!0 = !{i64 0, !"_ZTSFcvE"} +!1 = !{i64 0, i64 111} +!2 = !{i64 0, !"_ZTSFivE"} +!3 = !{i64 0, i64 222} +!4 = !{i64 16, !"_ZTS1A"} +!5 = !{i64 16, i64 333} +!6 = !{i64 16, !"_ZTS1B"} +!7 = !{i64 16, i64 444} +!8 = !{i32 4, !"Cross-DSO CFI", i32 1} diff --git a/llvm/test/Transforms/LowerBitSets/constant.ll b/llvm/test/Transforms/LowerBitSets/constant.ll deleted file mode 100644 index 99c925914f7..00000000000 --- a/llvm/test/Transforms/LowerBitSets/constant.ll +++ /dev/null @@ -1,34 +0,0 @@ -; RUN: opt -S -lowerbitsets < %s | FileCheck %s - -target datalayout = "e-p:32:32" - -@a = constant i32 1 -@b = constant [2 x i32] [i32 2, i32 3] - -!0 = !{!"bitset1", i32* @a, i32 0} -!1 = !{!"bitset1", [2 x i32]* @b, i32 4} - -!llvm.bitsets = !{ !0, !1 } - -declare i1 @llvm.bitset.test(i8* %ptr, metadata %bitset) nounwind readnone - -; CHECK: @foo( -define i1 @foo() { - ; CHECK: ret i1 true - %x = call i1 @llvm.bitset.test(i8* bitcast (i32* @a to i8*), metadata !"bitset1") - ret i1 %x -} - -; CHECK: @bar( -define i1 @bar() { - ; CHECK: ret i1 true - %x = call i1 @llvm.bitset.test(i8* bitcast (i32* getelementptr ([2 x i32], [2 x i32]* @b, i32 0, i32 1) to i8*), metadata !"bitset1") - ret i1 %x -} - -; CHECK: @baz( -define i1 @baz() { - ; CHECK-NOT: ret i1 true - %x = call i1 @llvm.bitset.test(i8* bitcast (i32* getelementptr ([2 x i32], [2 x i32]* @b, i32 0, i32 0) to i8*), metadata !"bitset1") - ret i1 %x -} diff --git a/llvm/test/Transforms/LowerBitSets/layout.ll b/llvm/test/Transforms/LowerBitSets/layout.ll deleted file mode 100644 index a0c6e77a57f..00000000000 --- a/llvm/test/Transforms/LowerBitSets/layout.ll +++ /dev/null @@ -1,35 +0,0 @@ -; RUN: opt -S -lowerbitsets < %s | FileCheck %s - -target datalayout = "e-p:32:32" - -; Tests that this set of globals is laid out according to our layout algorithm -; (see GlobalLayoutBuilder in include/llvm/Transforms/IPO/LowerBitSets.h). -; The chosen layout in this case is a, e, b, d, c. - -; CHECK: private constant { i32, [0 x i8], i32, [0 x i8], i32, [0 x i8], i32, [0 x i8], i32 } { i32 1, [0 x i8] zeroinitializer, i32 5, [0 x i8] zeroinitializer, i32 2, [0 x i8] zeroinitializer, i32 4, [0 x i8] zeroinitializer, i32 3 } -@a = constant i32 1 -@b = constant i32 2 -@c = constant i32 3 -@d = constant i32 4 -@e = constant i32 5 - -!0 = !{!"bitset1", i32* @a, i32 0} -!1 = !{!"bitset1", i32* @b, i32 0} -!2 = !{!"bitset1", i32* @c, i32 0} - -!3 = !{!"bitset2", i32* @b, i32 0} -!4 = !{!"bitset2", i32* @d, i32 0} - -!5 = !{!"bitset3", i32* @a, i32 0} -!6 = !{!"bitset3", i32* @e, i32 0} - -!llvm.bitsets = !{ !0, !1, !2, !3, !4, !5, !6 } - -declare i1 @llvm.bitset.test(i8* %ptr, metadata %bitset) nounwind readnone - -define void @foo() { - %x = call i1 @llvm.bitset.test(i8* undef, metadata !"bitset1") - %y = call i1 @llvm.bitset.test(i8* undef, metadata !"bitset2") - %z = call i1 @llvm.bitset.test(i8* undef, metadata !"bitset3") - ret void -} diff --git a/llvm/test/Transforms/LowerBitSets/nonglobal.ll b/llvm/test/Transforms/LowerBitSets/nonglobal.ll deleted file mode 100644 index 7591e31e352..00000000000 --- a/llvm/test/Transforms/LowerBitSets/nonglobal.ll +++ /dev/null @@ -1,19 +0,0 @@ -; RUN: opt -S -lowerbitsets < %s | FileCheck %s - -target datalayout = "e-p:32:32" - -; CHECK-NOT: @b = alias -@a = constant i32 1 -@b = constant [2 x i32] [i32 2, i32 3] - -!0 = !{!"bitset1", i32* @a, i32 0} -!1 = !{!"bitset1", i32* bitcast ([2 x i32]* @b to i32*), i32 0} - -!llvm.bitsets = !{ !0, !1 } - -declare i1 @llvm.bitset.test(i8* %ptr, metadata %bitset) nounwind readnone - -define i1 @foo(i8* %p) { - %x = call i1 @llvm.bitset.test(i8* %p, metadata !"bitset1") - ret i1 %x -} diff --git a/llvm/test/Transforms/LowerBitSets/pr25902.ll b/llvm/test/Transforms/LowerBitSets/pr25902.ll deleted file mode 100644 index b9a1203ec0e..00000000000 --- a/llvm/test/Transforms/LowerBitSets/pr25902.ll +++ /dev/null @@ -1,21 +0,0 @@ -; PR25902: gold plugin crash. -; RUN: opt -mtriple=i686-pc -S -lowerbitsets < %s - -define void @f(void ()* %p) { -entry: - %a = bitcast void ()* %p to i8*, !nosanitize !1 - %b = call i1 @llvm.bitset.test(i8* %a, metadata !"_ZTSFvvE"), !nosanitize !1 - ret void -} - -define void @g() { -entry: - ret void -} - -declare i1 @llvm.bitset.test(i8*, metadata) - -!llvm.bitsets = !{!0} - -!0 = !{!"_ZTSFvvE", void ()* @g, i64 0} -!1 = !{} diff --git a/llvm/test/Transforms/LowerBitSets/unnamed.ll b/llvm/test/Transforms/LowerBitSets/unnamed.ll deleted file mode 100644 index 6f108e22d02..00000000000 --- a/llvm/test/Transforms/LowerBitSets/unnamed.ll +++ /dev/null @@ -1,20 +0,0 @@ -; RUN: opt -S -lowerbitsets < %s | FileCheck %s - -target datalayout = "e-p:32:32" - -; CHECK: @{{[0-9]+}} = alias -; CHECK: @{{[0-9]+}} = alias -@0 = constant i32 1 -@1 = constant [2 x i32] [i32 2, i32 3] - -!0 = !{!"bitset1", i32* @0, i32 0} -!1 = !{!"bitset1", [2 x i32]* @1, i32 4} - -!llvm.bitsets = !{ !0, !1 } - -declare i1 @llvm.bitset.test(i8* %ptr, metadata %bitset) nounwind readnone - -define i1 @foo(i8* %p) { - %x = call i1 @llvm.bitset.test(i8* %p, metadata !"bitset1") - ret i1 %x -} diff --git a/llvm/test/Transforms/LowerTypeTests/constant.ll b/llvm/test/Transforms/LowerTypeTests/constant.ll new file mode 100644 index 00000000000..4ddf14916ba --- /dev/null +++ b/llvm/test/Transforms/LowerTypeTests/constant.ll @@ -0,0 +1,32 @@ +; RUN: opt -S -lowertypetests < %s | FileCheck %s + +target datalayout = "e-p:32:32" + +@a = constant i32 1, !type !0 +@b = constant [2 x i32] [i32 2, i32 3], !type !1 + +!0 = !{i32 0, !"typeid1"} +!1 = !{i32 4, !"typeid1"} + +declare i1 @llvm.type.test(i8* %ptr, metadata %bitset) nounwind readnone + +; CHECK: @foo( +define i1 @foo() { + ; CHECK: ret i1 true + %x = call i1 @llvm.type.test(i8* bitcast (i32* @a to i8*), metadata !"typeid1") + ret i1 %x +} + +; CHECK: @bar( +define i1 @bar() { + ; CHECK: ret i1 true + %x = call i1 @llvm.type.test(i8* bitcast (i32* getelementptr ([2 x i32], [2 x i32]* @b, i32 0, i32 1) to i8*), metadata !"typeid1") + ret i1 %x +} + +; CHECK: @baz( +define i1 @baz() { + ; CHECK-NOT: ret i1 true + %x = call i1 @llvm.type.test(i8* bitcast (i32* getelementptr ([2 x i32], [2 x i32]* @b, i32 0, i32 0) to i8*), metadata !"typeid1") + ret i1 %x +} diff --git a/llvm/test/Transforms/LowerBitSets/function-ext.ll b/llvm/test/Transforms/LowerTypeTests/function-ext.ll index 2a83bef2f07..45dcc5e6de3 100644 --- a/llvm/test/Transforms/LowerBitSets/function-ext.ll +++ b/llvm/test/Transforms/LowerTypeTests/function-ext.ll @@ -1,22 +1,20 @@ -; RUN: opt -S -lowerbitsets < %s | FileCheck %s +; RUN: opt -S -lowertypetests < %s | FileCheck %s ; Tests that we correctly handle external references, including the case where ; all functions in a bitset are external references. target triple = "x86_64-unknown-linux-gnu" -declare void @foo() +declare !type !0 void @foo() ; CHECK: @[[JT:.*]] = private constant [1 x <{ i8, i32, i8, i8, i8 }>] [<{ i8, i32, i8, i8, i8 }> <{ i8 -23, i32 trunc (i64 sub (i64 sub (i64 ptrtoint (void ()* @foo to i64), i64 ptrtoint ([1 x <{ i8, i32, i8, i8, i8 }>]* @[[JT]] to i64)), i64 5) to i32), i8 -52, i8 -52, i8 -52 }>], section ".text" define i1 @bar(i8* %ptr) { ; CHECK: icmp eq i64 {{.*}}, ptrtoint ([1 x <{ i8, i32, i8, i8, i8 }>]* @[[JT]] to i64) - %p = call i1 @llvm.bitset.test(i8* %ptr, metadata !"void") + %p = call i1 @llvm.type.test(i8* %ptr, metadata !"void") ret i1 %p } -declare i1 @llvm.bitset.test(i8* %ptr, metadata %bitset) nounwind readnone +declare i1 @llvm.type.test(i8* %ptr, metadata %bitset) nounwind readnone -!0 = !{!"void", void ()* @foo, i64 0} - -!llvm.bitsets = !{!0} +!0 = !{i64 0, !"void"} diff --git a/llvm/test/Transforms/LowerBitSets/function.ll b/llvm/test/Transforms/LowerTypeTests/function.ll index bf4043d61c4..662d1e2a197 100644 --- a/llvm/test/Transforms/LowerBitSets/function.ll +++ b/llvm/test/Transforms/LowerTypeTests/function.ll @@ -1,4 +1,4 @@ -; RUN: opt -S -lowerbitsets < %s | FileCheck %s +; RUN: opt -S -lowertypetests < %s | FileCheck %s ; Tests that we correctly create a jump table for bitsets containing 2 or more ; functions. @@ -11,25 +11,22 @@ target datalayout = "e-p:64:64" ; CHECK: @f = alias void (), bitcast ([2 x <{ i8, i32, i8, i8, i8 }>]* @[[JT]] to void ()*) ; CHECK: @g = alias void (), bitcast (<{ i8, i32, i8, i8, i8 }>* getelementptr inbounds ([2 x <{ i8, i32, i8, i8, i8 }>], [2 x <{ i8, i32, i8, i8, i8 }>]* @[[JT]], i64 0, i64 1) to void ()*) -; CHECK: define private void @[[FNAME]]() { -define void @f() { +; CHECK: define private void @[[FNAME]]() +define void @f() !type !0 { ret void } -; CHECK: define private void @[[GNAME]]() { -define void @g() { +; CHECK: define private void @[[GNAME]]() +define void @g() !type !0 { ret void } -!0 = !{!"bitset1", void ()* @f, i32 0} -!1 = !{!"bitset1", void ()* @g, i32 0} +!0 = !{i32 0, !"typeid1"} -!llvm.bitsets = !{ !0, !1 } - -declare i1 @llvm.bitset.test(i8* %ptr, metadata %bitset) nounwind readnone +declare i1 @llvm.type.test(i8* %ptr, metadata %bitset) nounwind readnone define i1 @foo(i8* %p) { ; CHECK: sub i64 {{.*}}, ptrtoint ([2 x <{ i8, i32, i8, i8, i8 }>]* @[[JT]] to i64) - %x = call i1 @llvm.bitset.test(i8* %p, metadata !"bitset1") + %x = call i1 @llvm.type.test(i8* %p, metadata !"typeid1") ret i1 %x } diff --git a/llvm/test/Transforms/LowerTypeTests/layout.ll b/llvm/test/Transforms/LowerTypeTests/layout.ll new file mode 100644 index 00000000000..7075955790d --- /dev/null +++ b/llvm/test/Transforms/LowerTypeTests/layout.ll @@ -0,0 +1,27 @@ +; RUN: opt -S -lowertypetests < %s | FileCheck %s + +target datalayout = "e-p:32:32" + +; Tests that this set of globals is laid out according to our layout algorithm +; (see GlobalLayoutBuilder in include/llvm/Transforms/IPO/LowerTypeTests.h). +; The chosen layout in this case is a, e, b, d, c. + +; CHECK: private constant { i32, [0 x i8], i32, [0 x i8], i32, [0 x i8], i32, [0 x i8], i32 } { i32 1, [0 x i8] zeroinitializer, i32 5, [0 x i8] zeroinitializer, i32 2, [0 x i8] zeroinitializer, i32 4, [0 x i8] zeroinitializer, i32 3 } +@a = constant i32 1, !type !0, !type !2 +@b = constant i32 2, !type !0, !type !1 +@c = constant i32 3, !type !0 +@d = constant i32 4, !type !1 +@e = constant i32 5, !type !2 + +!0 = !{i32 0, !"typeid1"} +!1 = !{i32 0, !"typeid2"} +!2 = !{i32 0, !"typeid3"} + +declare i1 @llvm.type.test(i8* %ptr, metadata %bitset) nounwind readnone + +define void @foo() { + %x = call i1 @llvm.type.test(i8* undef, metadata !"typeid1") + %y = call i1 @llvm.type.test(i8* undef, metadata !"typeid2") + %z = call i1 @llvm.type.test(i8* undef, metadata !"typeid3") + ret void +} diff --git a/llvm/test/Transforms/LowerBitSets/nonstring.ll b/llvm/test/Transforms/LowerTypeTests/nonstring.ll index e61c9123e08..306dd1f3db1 100644 --- a/llvm/test/Transforms/LowerBitSets/nonstring.ll +++ b/llvm/test/Transforms/LowerTypeTests/nonstring.ll @@ -1,4 +1,4 @@ -; RUN: opt -S -lowerbitsets < %s | FileCheck %s +; RUN: opt -S -lowertypetests < %s | FileCheck %s ; Tests that non-string metadata nodes may be used as bitset identifiers. @@ -7,28 +7,26 @@ target datalayout = "e-p:32:32" ; CHECK: @[[ANAME:.*]] = private constant { i32 } ; CHECK: @[[BNAME:.*]] = private constant { [2 x i32] } -@a = constant i32 1 -@b = constant [2 x i32] [i32 2, i32 3] +@a = constant i32 1, !type !0 +@b = constant [2 x i32] [i32 2, i32 3], !type !1 -!0 = !{!2, i32* @a, i32 0} -!1 = !{!3, [2 x i32]* @b, i32 0} +!0 = !{i32 0, !2} +!1 = !{i32 0, !3} !2 = distinct !{} !3 = distinct !{} -!llvm.bitsets = !{ !0, !1 } - -declare i1 @llvm.bitset.test(i8* %ptr, metadata %bitset) nounwind readnone +declare i1 @llvm.type.test(i8* %ptr, metadata %bitset) nounwind readnone ; CHECK-LABEL: @foo define i1 @foo(i8* %p) { ; CHECK: icmp eq i32 {{.*}}, ptrtoint ({ i32 }* @[[ANAME]] to i32) - %x = call i1 @llvm.bitset.test(i8* %p, metadata !2) + %x = call i1 @llvm.type.test(i8* %p, metadata !2) ret i1 %x } ; CHECK-LABEL: @bar define i1 @bar(i8* %p) { ; CHECK: icmp eq i32 {{.*}}, ptrtoint ({ [2 x i32] }* @[[BNAME]] to i32) - %x = call i1 @llvm.bitset.test(i8* %p, metadata !3) + %x = call i1 @llvm.type.test(i8* %p, metadata !3) ret i1 %x } diff --git a/llvm/test/Transforms/LowerTypeTests/pr25902.ll b/llvm/test/Transforms/LowerTypeTests/pr25902.ll new file mode 100644 index 00000000000..dda283ca668 --- /dev/null +++ b/llvm/test/Transforms/LowerTypeTests/pr25902.ll @@ -0,0 +1,19 @@ +; PR25902: gold plugin crash. +; RUN: opt -mtriple=i686-pc -S -lowertypetests < %s + +define void @f(void ()* %p) { +entry: + %a = bitcast void ()* %p to i8*, !nosanitize !1 + %b = call i1 @llvm.type.test(i8* %a, metadata !"_ZTSFvvE"), !nosanitize !1 + ret void +} + +define void @g() !type !0 { +entry: + ret void +} + +declare i1 @llvm.type.test(i8*, metadata) + +!0 = !{i64 0, !"_ZTSFvvE"} +!1 = !{} diff --git a/llvm/test/Transforms/LowerBitSets/section.ll b/llvm/test/Transforms/LowerTypeTests/section.ll index d5f94148676..7884acfaec3 100644 --- a/llvm/test/Transforms/LowerBitSets/section.ll +++ b/llvm/test/Transforms/LowerTypeTests/section.ll @@ -1,7 +1,7 @@ ; Test that functions with "section" attribute are accepted, and jumptables are ; emitted in ".text". -; RUN: opt -S -lowerbitsets < %s | FileCheck %s +; RUN: opt -S -lowertypetests < %s | FileCheck %s target triple = "x86_64-unknown-linux-gnu" @@ -9,18 +9,17 @@ target triple = "x86_64-unknown-linux-gnu" ; CHECK: @f = alias void (), bitcast ({{.*}}* @[[A]] to void ()*) ; CHECK: define private void {{.*}} section "xxx" -define void @f() section "xxx" { +define void @f() section "xxx" !type !0 { entry: ret void } define i1 @g() { entry: - %0 = call i1 @llvm.bitset.test(i8* bitcast (void ()* @f to i8*), metadata !"_ZTSFvE") + %0 = call i1 @llvm.type.test(i8* bitcast (void ()* @f to i8*), metadata !"_ZTSFvE") ret i1 %0 } -declare i1 @llvm.bitset.test(i8*, metadata) nounwind readnone +declare i1 @llvm.type.test(i8*, metadata) nounwind readnone -!llvm.bitsets = !{!0} -!0 = !{!"_ZTSFvE", void ()* @f, i64 0} +!0 = !{i64 0, !"_ZTSFvE"} diff --git a/llvm/test/Transforms/LowerBitSets/simple.ll b/llvm/test/Transforms/LowerTypeTests/simple.ll index a22d998e200..0628951868c 100644 --- a/llvm/test/Transforms/LowerBitSets/simple.ll +++ b/llvm/test/Transforms/LowerTypeTests/simple.ll @@ -1,42 +1,34 @@ -; RUN: opt -S -lowerbitsets < %s | FileCheck %s -; RUN: opt -S -lowerbitsets -mtriple=x86_64-apple-macosx10.8.0 < %s | FileCheck -check-prefix=CHECK-DARWIN %s +; RUN: opt -S -lowertypetests < %s | FileCheck %s +; RUN: opt -S -lowertypetests -mtriple=x86_64-apple-macosx10.8.0 < %s | FileCheck -check-prefix=CHECK-DARWIN %s ; RUN: opt -S -O3 < %s | FileCheck -check-prefix=CHECK-NODISCARD %s target datalayout = "e-p:32:32" ; CHECK: [[G:@[^ ]*]] = private constant { i32, [0 x i8], [63 x i32], [4 x i8], i32, [0 x i8], [2 x i32] } { i32 1, [0 x i8] zeroinitializer, [63 x i32] zeroinitializer, [4 x i8] zeroinitializer, i32 3, [0 x i8] zeroinitializer, [2 x i32] [i32 4, i32 5] } -@a = constant i32 1 -@b = hidden constant [63 x i32] zeroinitializer -@c = protected constant i32 3 -@d = constant [2 x i32] [i32 4, i32 5] +@a = constant i32 1, !type !0, !type !2 +@b = hidden constant [63 x i32] zeroinitializer, !type !0, !type !1 +@c = protected constant i32 3, !type !1, !type !2 +@d = constant [2 x i32] [i32 4, i32 5], !type !3 + +; CHECK-NODISCARD: !type +; CHECK-NODISCARD: !type +; CHECK-NODISCARD: !type +; CHECK-NODISCARD: !type +; CHECK-NODISCARD: !type +; CHECK-NODISCARD: !type +; CHECK-NODISCARD: !type ; CHECK: [[BA:@[^ ]*]] = private constant [68 x i8] c"\03\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02\00\01" ; Offset 0, 4 byte alignment -!0 = !{!"bitset1", i32* @a, i32 0} -; CHECK-NODISCARD-DAG: !{!"bitset1", i32* @a, i32 0} -!1 = !{!"bitset1", [63 x i32]* @b, i32 0} -; CHECK-NODISCARD-DAG: !{!"bitset1", [63 x i32]* @b, i32 0} -!2 = !{!"bitset1", [2 x i32]* @d, i32 4} -; CHECK-NODISCARD-DAG: !{!"bitset1", [2 x i32]* @d, i32 4} +!0 = !{i32 0, !"typeid1"} +!3 = !{i32 4, !"typeid1"} ; Offset 4, 256 byte alignment -!3 = !{!"bitset2", [63 x i32]* @b, i32 0} -; CHECK-NODISCARD-DAG: !{!"bitset2", [63 x i32]* @b, i32 0} -!4 = !{!"bitset2", i32* @c, i32 0} -; CHECK-NODISCARD-DAG: !{!"bitset2", i32* @c, i32 0} - -; Entries whose second operand is null (the result of a global being DCE'd) -; should be ignored. -!5 = !{!"bitset2", null, i32 0} +!1 = !{i32 0, !"typeid2"} ; Offset 0, 4 byte alignment -!6 = !{!"bitset3", i32* @a, i32 0} -; CHECK-NODISCARD-DAG: !{!"bitset3", i32* @a, i32 0} -!7 = !{!"bitset3", i32* @c, i32 0} -; CHECK-NODISCARD-DAG: !{!"bitset3", i32* @c, i32 0} - -!llvm.bitsets = !{ !0, !1, !2, !3, !4, !5, !6, !7 } +!2 = !{i32 0, !"typeid3"} ; CHECK: @bits_use{{[0-9]*}} = private alias i8, i8* @bits{{[0-9]*}} ; CHECK: @bits_use.{{[0-9]*}} = private alias i8, i8* @bits{{[0-9]*}} @@ -64,11 +56,11 @@ target datalayout = "e-p:32:32" ; CHECK: @bits{{[0-9]*}} = private alias i8, getelementptr inbounds ([68 x i8], [68 x i8]* [[BA]], i32 0, i32 0) ; CHECK: @bits.{{[0-9]*}} = private alias i8, getelementptr inbounds ([68 x i8], [68 x i8]* [[BA]], i32 0, i32 0) -declare i1 @llvm.bitset.test(i8* %ptr, metadata %bitset) nounwind readnone +declare i1 @llvm.type.test(i8* %ptr, metadata %bitset) nounwind readnone ; CHECK: @foo(i32* [[A0:%[^ ]*]]) define i1 @foo(i32* %p) { - ; CHECK-NOT: llvm.bitset.test + ; CHECK-NOT: llvm.type.test ; CHECK: [[R0:%[^ ]*]] = bitcast i32* [[A0]] to i8* %pi8 = bitcast i32* %p to i8* @@ -86,10 +78,10 @@ define i1 @foo(i32* %p) { ; CHECK: [[R11:%[^ ]*]] = icmp ne i8 [[R10]], 0 ; CHECK: [[R16:%[^ ]*]] = phi i1 [ false, {{%[^ ]*}} ], [ [[R11]], {{%[^ ]*}} ] - %x = call i1 @llvm.bitset.test(i8* %pi8, metadata !"bitset1") + %x = call i1 @llvm.type.test(i8* %pi8, metadata !"typeid1") - ; CHECK-NOT: llvm.bitset.test - %y = call i1 @llvm.bitset.test(i8* %pi8, metadata !"bitset1") + ; CHECK-NOT: llvm.type.test + %y = call i1 @llvm.type.test(i8* %pi8, metadata !"typeid1") ; CHECK: ret i1 [[R16]] ret i1 %x @@ -105,7 +97,7 @@ define i1 @bar(i32* %p) { ; CHECK: [[S4:%[^ ]*]] = shl i32 [[S2]], 24 ; CHECK: [[S5:%[^ ]*]] = or i32 [[S3]], [[S4]] ; CHECK: [[S6:%[^ ]*]] = icmp ult i32 [[S5]], 2 - %x = call i1 @llvm.bitset.test(i8* %pi8, metadata !"bitset2") + %x = call i1 @llvm.type.test(i8* %pi8, metadata !"typeid2") ; CHECK: ret i1 [[S6]] ret i1 %x @@ -123,15 +115,13 @@ define i1 @baz(i32* %p) { ; CHECK: [[T6:%[^ ]*]] = icmp ult i32 [[T5]], 66 ; CHECK: br i1 [[T6]] - ; CHECK: [[T8:%[^ ]*]] = getelementptr i8, i8* @bits_use.{{[0-9]*}}, i32 [[T5]] + ; CHECK: [[T8:%[^ ]*]] = getelementptr i8, i8* @bits_use{{(\.[0-9]*)?}}, i32 [[T5]] ; CHECK: [[T9:%[^ ]*]] = load i8, i8* [[T8]] ; CHECK: [[T10:%[^ ]*]] = and i8 [[T9]], 2 ; CHECK: [[T11:%[^ ]*]] = icmp ne i8 [[T10]], 0 ; CHECK: [[T16:%[^ ]*]] = phi i1 [ false, {{%[^ ]*}} ], [ [[T11]], {{%[^ ]*}} ] - %x = call i1 @llvm.bitset.test(i8* %pi8, metadata !"bitset3") + %x = call i1 @llvm.type.test(i8* %pi8, metadata !"typeid3") ; CHECK: ret i1 [[T16]] ret i1 %x } - -; CHECK-NOT: !llvm.bitsets diff --git a/llvm/test/Transforms/LowerBitSets/single-offset.ll b/llvm/test/Transforms/LowerTypeTests/single-offset.ll index 57194f42e09..6dd37984df9 100644 --- a/llvm/test/Transforms/LowerBitSets/single-offset.ll +++ b/llvm/test/Transforms/LowerTypeTests/single-offset.ll @@ -1,25 +1,22 @@ -; RUN: opt -S -lowerbitsets < %s | FileCheck %s +; RUN: opt -S -lowertypetests < %s | FileCheck %s target datalayout = "e-p:32:32" ; CHECK: [[G:@[^ ]*]] = private constant { i32, [0 x i8], i32 } -@a = constant i32 1 -@b = constant i32 2 +@a = constant i32 1, !type !0, !type !1 +@b = constant i32 2, !type !0, !type !2 -!0 = !{!"bitset1", i32* @a, i32 0} -!1 = !{!"bitset1", i32* @b, i32 0} -!2 = !{!"bitset2", i32* @a, i32 0} -!3 = !{!"bitset3", i32* @b, i32 0} +!0 = !{i32 0, !"typeid1"} +!1 = !{i32 0, !"typeid2"} +!2 = !{i32 0, !"typeid3"} -!llvm.bitsets = !{ !0, !1, !2, !3 } - -declare i1 @llvm.bitset.test(i8* %ptr, metadata %bitset) nounwind readnone +declare i1 @llvm.type.test(i8* %ptr, metadata %bitset) nounwind readnone ; CHECK: @foo(i8* [[A0:%[^ ]*]]) define i1 @foo(i8* %p) { ; CHECK: [[R0:%[^ ]*]] = ptrtoint i8* [[A0]] to i32 ; CHECK: [[R1:%[^ ]*]] = icmp eq i32 [[R0]], ptrtoint ({ i32, [0 x i8], i32 }* [[G]] to i32) - %x = call i1 @llvm.bitset.test(i8* %p, metadata !"bitset2") + %x = call i1 @llvm.type.test(i8* %p, metadata !"typeid2") ; CHECK: ret i1 [[R1]] ret i1 %x } @@ -28,13 +25,13 @@ define i1 @foo(i8* %p) { define i1 @bar(i8* %p) { ; CHECK: [[S0:%[^ ]*]] = ptrtoint i8* [[B0]] to i32 ; CHECK: [[S1:%[^ ]*]] = icmp eq i32 [[S0]], add (i32 ptrtoint ({ i32, [0 x i8], i32 }* [[G]] to i32), i32 4) - %x = call i1 @llvm.bitset.test(i8* %p, metadata !"bitset3") + %x = call i1 @llvm.type.test(i8* %p, metadata !"typeid3") ; CHECK: ret i1 [[S1]] ret i1 %x } ; CHECK: @x( define i1 @x(i8* %p) { - %x = call i1 @llvm.bitset.test(i8* %p, metadata !"bitset1") + %x = call i1 @llvm.type.test(i8* %p, metadata !"typeid1") ret i1 %x } diff --git a/llvm/test/Transforms/LowerTypeTests/unnamed.ll b/llvm/test/Transforms/LowerTypeTests/unnamed.ll new file mode 100644 index 00000000000..4bb2fd97208 --- /dev/null +++ b/llvm/test/Transforms/LowerTypeTests/unnamed.ll @@ -0,0 +1,18 @@ +; RUN: opt -S -lowertypetests < %s | FileCheck %s + +target datalayout = "e-p:32:32" + +; CHECK: @{{[0-9]+}} = alias +; CHECK: @{{[0-9]+}} = alias +@0 = constant i32 1, !type !0 +@1 = constant [2 x i32] [i32 2, i32 3], !type !1 + +!0 = !{i32 0, !"typeid1"} +!1 = !{i32 4, !"typeid1"} + +declare i1 @llvm.type.test(i8* %ptr, metadata %bitset) nounwind readnone + +define i1 @foo(i8* %p) { + %x = call i1 @llvm.type.test(i8* %p, metadata !"typeid1") + ret i1 %x +} diff --git a/llvm/test/Transforms/WholeProgramDevirt/bad-read-from-vtable.ll b/llvm/test/Transforms/WholeProgramDevirt/bad-read-from-vtable.ll index 9402076adf0..97445efb101 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/bad-read-from-vtable.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/bad-read-from-vtable.ll @@ -3,7 +3,7 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -@vt = global [2 x i8*] [i8* zeroinitializer, i8* bitcast (void (i8*)* @vf to i8*)] +@vt = global [2 x i8*] [i8* zeroinitializer, i8* bitcast (void (i8*)* @vf to i8*)], !type !0 define void @vf(i8* %this) { ret void @@ -14,7 +14,7 @@ define void @unaligned(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr i8, i8* %vtablei8, i32 1 %fptrptr_casted = bitcast i8* %fptrptr to i8** @@ -30,7 +30,7 @@ define void @outofbounds(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr i8, i8* %vtablei8, i32 16 %fptrptr_casted = bitcast i8* %fptrptr to i8** @@ -46,7 +46,7 @@ define void @nonfunction(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr i8, i8* %vtablei8, i32 0 %fptrptr_casted = bitcast i8* %fptrptr to i8** @@ -57,8 +57,7 @@ define void @nonfunction(i8* %obj) { ret void } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) -!0 = !{!"bitset", [2 x i8*]* @vt, i32 0} -!llvm.bitsets = !{!0} +!0 = !{i32 0, !"typeid"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/constant-arg.ll b/llvm/test/Transforms/WholeProgramDevirt/constant-arg.ll index e26759faedc..08047033aef 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/constant-arg.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/constant-arg.ll @@ -9,10 +9,10 @@ target triple = "x86_64-unknown-linux-gnu" ; CHECK: private constant { [8 x i8], [1 x i8*], [0 x i8] } { [8 x i8] c"\00\00\00\00\00\00\00\01", [1 x i8*] [i8* bitcast (i1 (i8*, i32)* @vf4 to i8*)], [0 x i8] zeroinitializer } ; CHECK: private constant { [8 x i8], [1 x i8*], [0 x i8] } { [8 x i8] c"\00\00\00\00\00\00\00\02", [1 x i8*] [i8* bitcast (i1 (i8*, i32)* @vf8 to i8*)], [0 x i8] zeroinitializer } -@vt1 = constant [1 x i8*] [i8* bitcast (i1 (i8*, i32)* @vf1 to i8*)] -@vt2 = constant [1 x i8*] [i8* bitcast (i1 (i8*, i32)* @vf2 to i8*)] -@vt4 = constant [1 x i8*] [i8* bitcast (i1 (i8*, i32)* @vf4 to i8*)] -@vt8 = constant [1 x i8*] [i8* bitcast (i1 (i8*, i32)* @vf8 to i8*)] +@vt1 = constant [1 x i8*] [i8* bitcast (i1 (i8*, i32)* @vf1 to i8*)], !type !0 +@vt2 = constant [1 x i8*] [i8* bitcast (i1 (i8*, i32)* @vf2 to i8*)], !type !0 +@vt4 = constant [1 x i8*] [i8* bitcast (i1 (i8*, i32)* @vf4 to i8*)], !type !0 +@vt8 = constant [1 x i8*] [i8* bitcast (i1 (i8*, i32)* @vf8 to i8*)], !type !0 define i1 @vf1(i8* %this, i32 %arg) readnone { %and = and i32 %arg, 1 @@ -43,7 +43,7 @@ define i1 @call1(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -59,7 +59,7 @@ define i1 @call2(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -70,11 +70,7 @@ define i1 @call2(i8* %obj) { ret i1 %result } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) -!0 = !{!"bitset", [1 x i8*]* @vt1, i32 0} -!1 = !{!"bitset", [1 x i8*]* @vt2, i32 0} -!2 = !{!"bitset", [1 x i8*]* @vt4, i32 0} -!3 = !{!"bitset", [1 x i8*]* @vt8, i32 0} -!llvm.bitsets = !{!0, !1, !2, !3} +!0 = !{i32 0, !"typeid"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll b/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll index 85041551f67..7d665f534a5 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/devirt-single-impl.ll @@ -3,8 +3,8 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -@vt1 = constant [1 x i8*] [i8* bitcast (void (i8*)* @vf to i8*)] -@vt2 = constant [1 x i8*] [i8* bitcast (void (i8*)* @vf to i8*)] +@vt1 = constant [1 x i8*] [i8* bitcast (void (i8*)* @vf to i8*)], !type !0 +@vt2 = constant [1 x i8*] [i8* bitcast (void (i8*)* @vf to i8*)], !type !0 define void @vf(i8* %this) { ret void @@ -15,7 +15,7 @@ define void @call(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -25,9 +25,7 @@ define void @call(i8* %obj) { ret void } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) -!0 = !{!"bitset", [1 x i8*]* @vt1, i32 0} -!1 = !{!"bitset", [1 x i8*]* @vt2, i32 0} -!llvm.bitsets = !{!0, !1} +!0 = !{i32 0, !"typeid"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/non-array-vtable.ll b/llvm/test/Transforms/WholeProgramDevirt/non-array-vtable.ll index d6befd591e9..e9c2db79fcb 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/non-array-vtable.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/non-array-vtable.ll @@ -3,7 +3,7 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -@vt = constant i8* bitcast (void (i8*)* @vf to i8*) +@vt = constant i8* bitcast (void (i8*)* @vf to i8*), !type !0 define void @vf(i8* %this) { ret void @@ -14,7 +14,7 @@ define void @call(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -24,8 +24,7 @@ define void @call(i8* %obj) { ret void } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) -!0 = !{!"bitset", i8** @vt, i32 0} -!llvm.bitsets = !{!0} +!0 = !{i32 0, !"typeid"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/non-constant-vtable.ll b/llvm/test/Transforms/WholeProgramDevirt/non-constant-vtable.ll index 394f5e6c37a..f66409093c4 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/non-constant-vtable.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/non-constant-vtable.ll @@ -3,7 +3,7 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -@vt = global [1 x i8*] [i8* bitcast (void (i8*)* @vf to i8*)] +@vt = global [1 x i8*] [i8* bitcast (void (i8*)* @vf to i8*)], !type !0 define void @vf(i8* %this) { ret void @@ -14,7 +14,7 @@ define void @call(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -24,8 +24,7 @@ define void @call(i8* %obj) { ret void } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) -!0 = !{!"bitset", [1 x i8*]* @vt, i32 0} -!llvm.bitsets = !{!0} +!0 = !{i32 0, !"typeid"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/uniform-retval-invoke.ll b/llvm/test/Transforms/WholeProgramDevirt/uniform-retval-invoke.ll index d34a529daa4..8fea9bc7b24 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/uniform-retval-invoke.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/uniform-retval-invoke.ll @@ -3,8 +3,8 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -@vt1 = constant [1 x i8*] [i8* bitcast (i32 (i8*)* @vf1 to i8*)] -@vt2 = constant [1 x i8*] [i8* bitcast (i32 (i8*)* @vf2 to i8*)] +@vt1 = constant [1 x i8*] [i8* bitcast (i32 (i8*)* @vf1 to i8*)], !type !0 +@vt2 = constant [1 x i8*] [i8* bitcast (i32 (i8*)* @vf2 to i8*)], !type !0 define i32 @vf1(i8* %this) readnone { ret i32 123 @@ -19,7 +19,7 @@ define i32 @call(i8* %obj) personality i8* undef { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -37,9 +37,7 @@ ret: ret i32 %result } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) -!0 = !{!"bitset", [1 x i8*]* @vt1, i32 0} -!1 = !{!"bitset", [1 x i8*]* @vt2, i32 0} -!llvm.bitsets = !{!0, !1} +!0 = !{i32 0, !"typeid"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/uniform-retval.ll b/llvm/test/Transforms/WholeProgramDevirt/uniform-retval.ll index f6433c32aba..ef3a7e49b52 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/uniform-retval.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/uniform-retval.ll @@ -3,8 +3,8 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -@vt1 = constant [1 x i8*] [i8* bitcast (i32 (i8*)* @vf1 to i8*)] -@vt2 = constant [1 x i8*] [i8* bitcast (i32 (i8*)* @vf2 to i8*)] +@vt1 = constant [1 x i8*] [i8* bitcast (i32 (i8*)* @vf1 to i8*)], !type !0 +@vt2 = constant [1 x i8*] [i8* bitcast (i32 (i8*)* @vf2 to i8*)], !type !0 define i32 @vf1(i8* %this) readnone { ret i32 123 @@ -19,7 +19,7 @@ define i32 @call(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -30,9 +30,7 @@ define i32 @call(i8* %obj) { ret i32 %result } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) -!0 = !{!"bitset", [1 x i8*]* @vt1, i32 0} -!1 = !{!"bitset", [1 x i8*]* @vt2, i32 0} -!llvm.bitsets = !{!0, !1} +!0 = !{i32 0, !"typeid"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/unique-retval.ll b/llvm/test/Transforms/WholeProgramDevirt/unique-retval.ll index 41aa3e59e8a..50b938c43e4 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/unique-retval.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/unique-retval.ll @@ -3,10 +3,10 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -@vt1 = constant [1 x i8*] [i8* bitcast (i1 (i8*)* @vf0 to i8*)] -@vt2 = constant [1 x i8*] [i8* bitcast (i1 (i8*)* @vf0 to i8*)] -@vt3 = constant [1 x i8*] [i8* bitcast (i1 (i8*)* @vf1 to i8*)] -@vt4 = constant [1 x i8*] [i8* bitcast (i1 (i8*)* @vf1 to i8*)] +@vt1 = constant [1 x i8*] [i8* bitcast (i1 (i8*)* @vf0 to i8*)], !type !0 +@vt2 = constant [1 x i8*] [i8* bitcast (i1 (i8*)* @vf0 to i8*)], !type !0, !type !1 +@vt3 = constant [1 x i8*] [i8* bitcast (i1 (i8*)* @vf1 to i8*)], !type !0, !type !1 +@vt4 = constant [1 x i8*] [i8* bitcast (i1 (i8*)* @vf1 to i8*)], !type !1 define i1 @vf0(i8* %this) readnone { ret i1 0 @@ -22,7 +22,7 @@ define i1 @call1(i8* %obj) { %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr ; CHECK: [[VT1:%[^ ]*]] = bitcast [1 x i8*]* {{.*}} to i8* %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset1") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid1") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -39,7 +39,7 @@ define i1 @call2(i8* %obj) { %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr ; CHECK: [[VT2:%[^ ]*]] = bitcast [1 x i8*]* {{.*}} to i8* %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset2") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid2") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -49,13 +49,8 @@ define i1 @call2(i8* %obj) { ret i1 %result } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) -!0 = !{!"bitset1", [1 x i8*]* @vt1, i32 0} -!1 = !{!"bitset1", [1 x i8*]* @vt2, i32 0} -!2 = !{!"bitset1", [1 x i8*]* @vt3, i32 0} -!3 = !{!"bitset2", [1 x i8*]* @vt2, i32 0} -!4 = !{!"bitset2", [1 x i8*]* @vt3, i32 0} -!5 = !{!"bitset2", [1 x i8*]* @vt4, i32 0} -!llvm.bitsets = !{!0, !1, !2, !3, !4, !5} +!0 = !{i32 0, !"typeid1"} +!1 = !{i32 0, !"typeid2"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/vcp-accesses-memory.ll b/llvm/test/Transforms/WholeProgramDevirt/vcp-accesses-memory.ll index f963d18e164..b5d51f2d463 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/vcp-accesses-memory.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/vcp-accesses-memory.ll @@ -3,8 +3,8 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -@vt1 = global [1 x i8*] [i8* bitcast (i32 (i8*, i32)* @vf1 to i8*)] -@vt2 = global [1 x i8*] [i8* bitcast (i32 (i8*, i32)* @vf2 to i8*)] +@vt1 = global [1 x i8*] [i8* bitcast (i32 (i8*, i32)* @vf1 to i8*)], !type !0 +@vt2 = global [1 x i8*] [i8* bitcast (i32 (i8*, i32)* @vf2 to i8*)], !type !0 define i32 @vf1(i8* %this, i32 %arg) { ret i32 %arg @@ -19,7 +19,7 @@ define i32 @call(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -29,9 +29,7 @@ define i32 @call(i8* %obj) { ret i32 %result } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) -!0 = !{!"bitset", [1 x i8*]* @vt1, i32 0} -!1 = !{!"bitset", [1 x i8*]* @vt2, i32 0} -!llvm.bitsets = !{!0} +!0 = !{i32 0, !"typeid"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/vcp-no-this.ll b/llvm/test/Transforms/WholeProgramDevirt/vcp-no-this.ll index 28d39e169e8..c564665471c 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/vcp-no-this.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/vcp-no-this.ll @@ -3,8 +3,8 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -@vt1 = global [1 x i8*] [i8* bitcast (i32 ()* @vf1 to i8*)] -@vt2 = global [1 x i8*] [i8* bitcast (i32 ()* @vf2 to i8*)] +@vt1 = global [1 x i8*] [i8* bitcast (i32 ()* @vf1 to i8*)], !type !0 +@vt2 = global [1 x i8*] [i8* bitcast (i32 ()* @vf2 to i8*)], !type !0 define i32 @vf1() readnone { ret i32 1 @@ -19,7 +19,7 @@ define i32 @call(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -29,9 +29,7 @@ define i32 @call(i8* %obj) { ret i32 %result } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) -!0 = !{!"bitset", [1 x i8*]* @vt1, i32 0} -!1 = !{!"bitset", [1 x i8*]* @vt2, i32 0} -!llvm.bitsets = !{!0} +!0 = !{i32 0, !"typeid"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/vcp-non-constant-arg.ll b/llvm/test/Transforms/WholeProgramDevirt/vcp-non-constant-arg.ll index c056832de6d..197c923c3a1 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/vcp-non-constant-arg.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/vcp-non-constant-arg.ll @@ -3,8 +3,8 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -@vt1 = global [1 x i8*] [i8* bitcast (i32 (i8*, i32)* @vf1 to i8*)] -@vt2 = global [1 x i8*] [i8* bitcast (i32 (i8*, i32)* @vf2 to i8*)] +@vt1 = global [1 x i8*] [i8* bitcast (i32 (i8*, i32)* @vf1 to i8*)], !type !0 +@vt2 = global [1 x i8*] [i8* bitcast (i32 (i8*, i32)* @vf2 to i8*)], !type !0 define i32 @vf1(i8* %this, i32 %arg) readnone { ret i32 %arg @@ -19,7 +19,7 @@ define void @call(i8* %obj, i32 %arg) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -29,9 +29,7 @@ define void @call(i8* %obj, i32 %arg) { ret void } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) -!0 = !{!"bitset", [1 x i8*]* @vt1, i32 0} -!1 = !{!"bitset", [1 x i8*]* @vt2, i32 0} -!llvm.bitsets = !{!0} +!0 = !{i32 0, !"typeid"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/vcp-too-wide-ints.ll b/llvm/test/Transforms/WholeProgramDevirt/vcp-too-wide-ints.ll index 4dbbc1b458b..93936d5e1d2 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/vcp-too-wide-ints.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/vcp-too-wide-ints.ll @@ -3,8 +3,8 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -@vt1 = global [1 x i8*] [i8* bitcast (i128 (i8*, i128)* @vf1 to i8*)] -@vt2 = global [1 x i8*] [i8* bitcast (i128 (i8*, i128)* @vf2 to i8*)] +@vt1 = global [1 x i8*] [i8* bitcast (i128 (i8*, i128)* @vf1 to i8*)], !type !0 +@vt2 = global [1 x i8*] [i8* bitcast (i128 (i8*, i128)* @vf2 to i8*)], !type !0 define i128 @vf1(i8* %this, i128 %arg) readnone { ret i128 %arg @@ -19,7 +19,7 @@ define i128 @call(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -29,9 +29,7 @@ define i128 @call(i8* %obj) { ret i128 %result } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) -!0 = !{!"bitset", [1 x i8*]* @vt1, i32 0} -!1 = !{!"bitset", [1 x i8*]* @vt2, i32 0} -!llvm.bitsets = !{!0} +!0 = !{i32 0, !"typeid"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/vcp-type-mismatch.ll b/llvm/test/Transforms/WholeProgramDevirt/vcp-type-mismatch.ll index 6dff4d17a2b..3124889a707 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/vcp-type-mismatch.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/vcp-type-mismatch.ll @@ -3,8 +3,8 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -@vt1 = global [1 x i8*] [i8* bitcast (i32 (i8*, i32)* @vf1 to i8*)] -@vt2 = global [1 x i8*] [i8* bitcast (i32 (i8*, i32)* @vf2 to i8*)] +@vt1 = global [1 x i8*] [i8* bitcast (i32 (i8*, i32)* @vf1 to i8*)], !type !0 +@vt2 = global [1 x i8*] [i8* bitcast (i32 (i8*, i32)* @vf2 to i8*)], !type !0 define i32 @vf1(i8* %this, i32 %arg) readnone { ret i32 %arg @@ -19,7 +19,7 @@ define i32 @bad_arg_type(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -34,7 +34,7 @@ define i32 @bad_arg_count(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -49,7 +49,7 @@ define i64 @bad_return_type(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -59,9 +59,7 @@ define i64 @bad_return_type(i8* %obj) { ret i64 %result } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) -!0 = !{!"bitset", [1 x i8*]* @vt1, i32 0} -!1 = !{!"bitset", [1 x i8*]* @vt2, i32 0} -!llvm.bitsets = !{!0} +!0 = !{i32 0, !"typeid"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/vcp-uses-this.ll b/llvm/test/Transforms/WholeProgramDevirt/vcp-uses-this.ll index 39a63c62f44..fc4dee37dba 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/vcp-uses-this.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/vcp-uses-this.ll @@ -3,8 +3,8 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -@vt1 = global [1 x i8*] [i8* bitcast (i32 (i8*)* @vf1 to i8*)] -@vt2 = global [1 x i8*] [i8* bitcast (i32 (i8*)* @vf2 to i8*)] +@vt1 = global [1 x i8*] [i8* bitcast (i32 (i8*)* @vf1 to i8*)], !type !0 +@vt2 = global [1 x i8*] [i8* bitcast (i32 (i8*)* @vf2 to i8*)], !type !0 define i32 @vf1(i8* %this) readnone { %this_int = ptrtoint i8* %this to i32 @@ -21,7 +21,7 @@ define i32 @call(i8* %obj) { %vtableptr = bitcast i8* %obj to [1 x i8*]** %vtable = load [1 x i8*]*, [1 x i8*]** %vtableptr %vtablei8 = bitcast [1 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [1 x i8*], [1 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -31,9 +31,7 @@ define i32 @call(i8* %obj) { ret i32 %result } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) -!0 = !{!"bitset", [1 x i8*]* @vt1, i32 0} -!1 = !{!"bitset", [1 x i8*]* @vt2, i32 0} -!llvm.bitsets = !{!0} +!0 = !{i32 0, !"typeid"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-begin.ll b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-begin.ll index 3686f8aca3e..f65b8a28288 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-begin.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-begin.ll @@ -8,34 +8,34 @@ target triple = "x86_64-unknown-linux-gnu" i8* bitcast (i1 (i8*)* @vf0i1 to i8*), i8* bitcast (i1 (i8*)* @vf1i1 to i8*), i8* bitcast (i32 (i8*)* @vf1i32 to i8*) -], section "vt1sec" +], section "vt1sec", !type !0 ; CHECK: [[VT2DATA:@[^ ]*]] = private constant { [8 x i8], [3 x i8*], [0 x i8] } { [8 x i8] c"\00\00\00\02\02\00\00\00", [3 x i8*] [i8* bitcast (i1 (i8*)* @vf1i1 to i8*), i8* bitcast (i1 (i8*)* @vf0i1 to i8*), i8* bitcast (i32 (i8*)* @vf2i32 to i8*)], [0 x i8] zeroinitializer }{{$}} @vt2 = constant [3 x i8*] [ i8* bitcast (i1 (i8*)* @vf1i1 to i8*), i8* bitcast (i1 (i8*)* @vf0i1 to i8*), i8* bitcast (i32 (i8*)* @vf2i32 to i8*) -] +], !type !0 ; CHECK: [[VT3DATA:@[^ ]*]] = private constant { [8 x i8], [3 x i8*], [0 x i8] } { [8 x i8] c"\00\00\00\01\03\00\00\00", [3 x i8*] [i8* bitcast (i1 (i8*)* @vf0i1 to i8*), i8* bitcast (i1 (i8*)* @vf1i1 to i8*), i8* bitcast (i32 (i8*)* @vf3i32 to i8*)], [0 x i8] zeroinitializer }{{$}} @vt3 = constant [3 x i8*] [ i8* bitcast (i1 (i8*)* @vf0i1 to i8*), i8* bitcast (i1 (i8*)* @vf1i1 to i8*), i8* bitcast (i32 (i8*)* @vf3i32 to i8*) -] +], !type !0 ; CHECK: [[VT4DATA:@[^ ]*]] = private constant { [8 x i8], [3 x i8*], [0 x i8] } { [8 x i8] c"\00\00\00\02\04\00\00\00", [3 x i8*] [i8* bitcast (i1 (i8*)* @vf1i1 to i8*), i8* bitcast (i1 (i8*)* @vf0i1 to i8*), i8* bitcast (i32 (i8*)* @vf4i32 to i8*)], [0 x i8] zeroinitializer }{{$}} @vt4 = constant [3 x i8*] [ i8* bitcast (i1 (i8*)* @vf1i1 to i8*), i8* bitcast (i1 (i8*)* @vf0i1 to i8*), i8* bitcast (i32 (i8*)* @vf4i32 to i8*) -] +], !type !0 @vt5 = constant [3 x i8*] [ i8* bitcast (void ()* @__cxa_pure_virtual to i8*), i8* bitcast (void ()* @__cxa_pure_virtual to i8*), i8* bitcast (void ()* @__cxa_pure_virtual to i8*) -] +], !type !0 ; CHECK: @vt1 = alias [3 x i8*], getelementptr inbounds ({ [8 x i8], [3 x i8*], [0 x i8] }, { [8 x i8], [3 x i8*], [0 x i8] }* [[VT1DATA]], i32 0, i32 1) ; CHECK: @vt2 = alias [3 x i8*], getelementptr inbounds ({ [8 x i8], [3 x i8*], [0 x i8] }, { [8 x i8], [3 x i8*], [0 x i8] }* [[VT2DATA]], i32 0, i32 1) @@ -72,7 +72,7 @@ define i1 @call1(i8* %obj) { %vtable = load [3 x i8*]*, [3 x i8*]** %vtableptr ; CHECK: [[VT1:%[^ ]*]] = bitcast [3 x i8*]* {{.*}} to i8* %vtablei8 = bitcast [3 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [3 x i8*], [3 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -92,7 +92,7 @@ define i1 @call2(i8* %obj) { %vtable = load [3 x i8*]*, [3 x i8*]** %vtableptr ; CHECK: [[VT2:%[^ ]*]] = bitcast [3 x i8*]* {{.*}} to i8* %vtablei8 = bitcast [3 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [3 x i8*], [3 x i8*]* %vtable, i32 0, i32 1 %fptr = load i8*, i8** %fptrptr @@ -112,7 +112,7 @@ define i32 @call3(i8* %obj) { %vtable = load [3 x i8*]*, [3 x i8*]** %vtableptr ; CHECK: [[VT3:%[^ ]*]] = bitcast [3 x i8*]* {{.*}} to i8* %vtablei8 = bitcast [3 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [3 x i8*], [3 x i8*]* %vtable, i32 0, i32 2 %fptr = load i8*, i8** %fptrptr @@ -125,13 +125,8 @@ define i32 @call3(i8* %obj) { ret i32 %result } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) declare void @__cxa_pure_virtual() -!0 = !{!"bitset", [3 x i8*]* @vt1, i32 0} -!1 = !{!"bitset", [3 x i8*]* @vt2, i32 0} -!2 = !{!"bitset", [3 x i8*]* @vt3, i32 0} -!3 = !{!"bitset", [3 x i8*]* @vt4, i32 0} -!4 = !{!"bitset", [3 x i8*]* @vt5, i32 0} -!llvm.bitsets = !{!0, !1, !2, !3, !4} +!0 = !{i32 0, !"typeid"} diff --git a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-end.ll b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-end.ll index 44608cf67a3..04c89ddb026 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-end.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-end.ll @@ -9,14 +9,14 @@ i8* null, i8* bitcast (i1 (i8*)* @vf0i1 to i8*), i8* bitcast (i1 (i8*)* @vf1i1 to i8*), i8* bitcast (i32 (i8*)* @vf1i32 to i8*) -] +], !type !1 ; CHECK: [[VT2DATA:@[^ ]*]] = private constant { [0 x i8], [3 x i8*], [8 x i8] } { [0 x i8] zeroinitializer, [3 x i8*] [i8* bitcast (i1 (i8*)* @vf1i1 to i8*), i8* bitcast (i1 (i8*)* @vf0i1 to i8*), i8* bitcast (i32 (i8*)* @vf2i32 to i8*)], [8 x i8] c"\02\00\00\00\02\00\00\00" } @vt2 = constant [3 x i8*] [ i8* bitcast (i1 (i8*)* @vf1i1 to i8*), i8* bitcast (i1 (i8*)* @vf0i1 to i8*), i8* bitcast (i32 (i8*)* @vf2i32 to i8*) -] +], !type !0 ; CHECK: [[VT3DATA:@[^ ]*]] = private constant { [0 x i8], [4 x i8*], [8 x i8] } { [0 x i8] zeroinitializer, [4 x i8*] [i8* null, i8* bitcast (i1 (i8*)* @vf0i1 to i8*), i8* bitcast (i1 (i8*)* @vf1i1 to i8*), i8* bitcast (i32 (i8*)* @vf3i32 to i8*)], [8 x i8] c"\03\00\00\00\01\00\00\00" } @vt3 = constant [4 x i8*] [ @@ -24,14 +24,14 @@ i8* null, i8* bitcast (i1 (i8*)* @vf0i1 to i8*), i8* bitcast (i1 (i8*)* @vf1i1 to i8*), i8* bitcast (i32 (i8*)* @vf3i32 to i8*) -] +], !type !1 ; CHECK: [[VT4DATA:@[^ ]*]] = private constant { [0 x i8], [3 x i8*], [8 x i8] } { [0 x i8] zeroinitializer, [3 x i8*] [i8* bitcast (i1 (i8*)* @vf1i1 to i8*), i8* bitcast (i1 (i8*)* @vf0i1 to i8*), i8* bitcast (i32 (i8*)* @vf4i32 to i8*)], [8 x i8] c"\04\00\00\00\02\00\00\00" } @vt4 = constant [3 x i8*] [ i8* bitcast (i1 (i8*)* @vf1i1 to i8*), i8* bitcast (i1 (i8*)* @vf0i1 to i8*), i8* bitcast (i32 (i8*)* @vf4i32 to i8*) -] +], !type !0 ; CHECK: @vt1 = alias [4 x i8*], getelementptr inbounds ({ [0 x i8], [4 x i8*], [8 x i8] }, { [0 x i8], [4 x i8*], [8 x i8] }* [[VT1DATA]], i32 0, i32 1) ; CHECK: @vt2 = alias [3 x i8*], getelementptr inbounds ({ [0 x i8], [3 x i8*], [8 x i8] }, { [0 x i8], [3 x i8*], [8 x i8] }* [[VT2DATA]], i32 0, i32 1) @@ -68,7 +68,7 @@ define i1 @call1(i8* %obj) { %vtable = load [3 x i8*]*, [3 x i8*]** %vtableptr ; CHECK: [[VT1:%[^ ]*]] = bitcast [3 x i8*]* {{.*}} to i8* %vtablei8 = bitcast [3 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [3 x i8*], [3 x i8*]* %vtable, i32 0, i32 0 %fptr = load i8*, i8** %fptrptr @@ -88,7 +88,7 @@ define i1 @call2(i8* %obj) { %vtable = load [3 x i8*]*, [3 x i8*]** %vtableptr ; CHECK: [[VT2:%[^ ]*]] = bitcast [3 x i8*]* {{.*}} to i8* %vtablei8 = bitcast [3 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [3 x i8*], [3 x i8*]* %vtable, i32 0, i32 1 %fptr = load i8*, i8** %fptrptr @@ -108,7 +108,7 @@ define i32 @call3(i8* %obj) { %vtable = load [3 x i8*]*, [3 x i8*]** %vtableptr ; CHECK: [[VT3:%[^ ]*]] = bitcast [3 x i8*]* {{.*}} to i8* %vtablei8 = bitcast [3 x i8*]* %vtable to i8* - %p = call i1 @llvm.bitset.test(i8* %vtablei8, metadata !"bitset") + %p = call i1 @llvm.type.test(i8* %vtablei8, metadata !"typeid") call void @llvm.assume(i1 %p) %fptrptr = getelementptr [3 x i8*], [3 x i8*]* %vtable, i32 0, i32 2 %fptr = load i8*, i8** %fptrptr @@ -121,11 +121,8 @@ define i32 @call3(i8* %obj) { ret i32 %result } -declare i1 @llvm.bitset.test(i8*, metadata) +declare i1 @llvm.type.test(i8*, metadata) declare void @llvm.assume(i1) -!0 = !{!"bitset", [4 x i8*]* @vt1, i32 8} -!1 = !{!"bitset", [3 x i8*]* @vt2, i32 0} -!2 = !{!"bitset", [4 x i8*]* @vt3, i32 8} -!3 = !{!"bitset", [3 x i8*]* @vt4, i32 0} -!llvm.bitsets = !{!0, !1, !2, !3} +!0 = !{i32 0, !"typeid"} +!1 = !{i32 8, !"typeid"} diff --git a/llvm/test/tools/gold/X86/opt-level.ll b/llvm/test/tools/gold/X86/opt-level.ll index 3deb0af37a7..a3cd844a142 100644 --- a/llvm/test/tools/gold/X86/opt-level.ll +++ b/llvm/test/tools/gold/X86/opt-level.ll @@ -34,17 +34,18 @@ end: ret i32 %r } -define void @baz() { +define i1 @baz() { call void @foo() %c = call i32 @bar(i1 true) - ret void + %p = call i1 @llvm.type.test(i8* undef, metadata !"typeid1") + ret i1 %p } -@a = constant i32 1 +; CHECK-O0-NOT: !type +; CHECK-O1-NOT: !type +; CHECK-O2-NOT: !type +@a = constant i32 1, !type !0 -!0 = !{!"bitset1", i32* @a, i32 0} +!0 = !{i32 0, !"typeid1"} -; CHECK-O0-NOT: llvm.bitsets -; CHECK-O1-NOT: llvm.bitsets -; CHECK-O2-NOT: llvm.bitsets -!llvm.bitsets = !{ !0 } +declare i1 @llvm.type.test(i8* %ptr, metadata %bitset) nounwind readnone |