xref: /llvm-project/llvm/test/Transforms/WholeProgramDevirt/export-single-impl.ll (revision 0ecf7965929c4477c8b9821c68e0ad66b012d8fe)
1; RUN: opt -passes=wholeprogramdevirt -whole-program-visibility -wholeprogramdevirt-summary-action=export -wholeprogramdevirt-read-summary=%S/Inputs/export.yaml -wholeprogramdevirt-write-summary=%t -S -o - %s | FileCheck %s
2; RUN: FileCheck --check-prefix=SUMMARY %s < %t
3
4; SUMMARY:      TypeIdMap:
5; SUMMARY-NEXT:   typeid3:
6; SUMMARY-NEXT:     TTRes:
7; SUMMARY-NEXT:       Kind:            Unknown
8; SUMMARY-NEXT:       SizeM1BitWidth:  0
9; SUMMARY-NEXT:       AlignLog2:       0
10; SUMMARY-NEXT:       SizeM1:          0
11; SUMMARY-NEXT:       BitMask:         0
12; SUMMARY-NEXT:       InlineBits:      0
13; SUMMARY-NEXT:     WPDRes:
14; SUMMARY-NEXT:       0:
15; SUMMARY-NEXT:         Kind:            SingleImpl
16; SUMMARY-NEXT:         SingleImplName:  vf3.llvm.merged
17; SUMMARY-NEXT:         ResByArg:
18; SUMMARY-NEXT:   typeid1:
19; SUMMARY-NEXT:     TTRes:
20; SUMMARY-NEXT:       Kind:            Unknown
21; SUMMARY-NEXT:       SizeM1BitWidth:  0
22; SUMMARY-NEXT:       AlignLog2:       0
23; SUMMARY-NEXT:       SizeM1:          0
24; SUMMARY-NEXT:       BitMask:         0
25; SUMMARY-NEXT:       InlineBits:      0
26; SUMMARY-NEXT:     WPDRes:
27; SUMMARY-NEXT:       0:
28; SUMMARY-NEXT:         Kind:            SingleImpl
29; SUMMARY-NEXT:         SingleImplName:  vf1
30; SUMMARY-NEXT:         ResByArg:
31; SUMMARY-NEXT:   typeid2:
32; SUMMARY-NEXT:     TTRes:
33; SUMMARY-NEXT:       Kind:            Unknown
34; SUMMARY-NEXT:       SizeM1BitWidth:  0
35; SUMMARY-NEXT:       AlignLog2:       0
36; SUMMARY-NEXT:       SizeM1:          0
37; SUMMARY-NEXT:       BitMask:         0
38; SUMMARY-NEXT:       InlineBits:      0
39; SUMMARY-NEXT:     WPDRes:
40; SUMMARY-NEXT:       0:
41; SUMMARY-NEXT:         Kind:            SingleImpl
42; SUMMARY-NEXT:         SingleImplName:  vf2
43; SUMMARY-NEXT:         ResByArg:
44; SUMMARY-NEXT:   typeid4:
45; SUMMARY-NEXT:     TTRes:
46; SUMMARY-NEXT:       Kind:            Unknown
47; SUMMARY-NEXT:       SizeM1BitWidth:  0
48; SUMMARY-NEXT:       AlignLog2:       0
49; SUMMARY-NEXT:       SizeM1:          0
50; SUMMARY-NEXT:       BitMask:         0
51; SUMMARY-NEXT:       InlineBits:      0
52; SUMMARY-NEXT:     WPDRes:
53; SUMMARY-NEXT:       0:
54; SUMMARY-NEXT:         Kind:            SingleImpl
55; SUMMARY-NEXT:         SingleImplName:  vf4.llvm.merged
56; SUMMARY-NEXT:         ResByArg:
57; SUMMARY-NEXT: WithGlobalValueDeadStripping: false
58; SUMMARY-NEXT: ...
59
60; CHECK: $vf4.llvm.merged = comdat largest
61$vf4 = comdat largest
62
63; CHECK: @vt1 = constant ptr @vf1
64@vt1 = constant ptr @vf1, !type !0
65
66; CHECK: @vt2 = constant ptr @vf2
67@vt2 = constant ptr @vf2, !type !1
68
69@vt3 = constant ptr @vf3, !type !2
70
71; CHECK: @vt4 = constant ptr @vf4.llvm.merged, comdat($vf4.llvm.merged)
72@vt4 = constant ptr @vf4, comdat($vf4), !type !3
73
74@vt5 = constant ptr @vf5, !type !4
75
76; CHECK: declare void @vf1(ptr)
77declare void @vf1(ptr)
78
79; CHECK: define void @vf2(ptr %0)
80define void @vf2(ptr) {
81  ret void
82}
83
84; CHECK: define hidden void @vf3.llvm.merged(ptr %0) {
85define internal void @vf3(ptr) {
86  ret void
87}
88
89; CHECK: define hidden void @vf4.llvm.merged(ptr %0) comdat {
90define internal void @vf4(ptr) comdat {
91  ret void
92}
93
94declare void @vf5(ptr)
95
96!0 = !{i32 0, !"typeid1"}
97!1 = !{i32 0, !"typeid2"}
98!2 = !{i32 0, !"typeid3"}
99!3 = !{i32 0, !"typeid4"}
100!4 = !{i32 0, !5}
101!5 = distinct !{}
102