Skip to content

Commit 167d5ce

Browse files
use a compiler-rt test
1 parent a61c8a4 commit 167d5ce

File tree

6 files changed

+146
-315
lines changed

6 files changed

+146
-315
lines changed
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
2+
// REQUIRES: lld-available
3+
4+
// RUN: rm -rf %t && split-file %s %t && cd %t
5+
//
6+
// RUN: %clangxx_pgogen -fuse-ld=lld -O2 -g -fprofile-generate=. -mllvm -enable-vtable-value-profiling test.cpp -o test
7+
// RUN: env LLVM_PROFILE_FILE=test.profraw ./test
8+
9+
// Show vtable profiles from raw profile.
10+
// RUN: llvm-profdata show --function=main --ic-targets -show-vtables test.profraw | FileCheck %s --check-prefixes=COMMON,RAW
11+
12+
// Generate indexed profile from raw profile and show the data.
13+
// RUN: llvm-profdata merge test.profraw -o test.profdata
14+
// RUN: llvm-profdata show --function=main --ic-targets --show-vtables test.profdata | FileCheck %s --check-prefixes=COMMON,INDEXED
15+
16+
// Generate text profile from raw and indexed profiles respectively and show the data.
17+
// RUN: llvm-profdata merge --text test.profraw -o raw.proftext
18+
// RUN: llvm-profdata show --function=main --ic-targets --show-vtables --text raw.proftext | FileCheck %s --check-prefix=ICTEXT
19+
// RUN: llvm-profdata merge --text test.profdata -o indexed.proftext
20+
// RUN: llvm-profdata show --function=main --ic-targets --show-vtables --text indexed.proftext | FileCheck %s --check-prefix=ICTEXT
21+
22+
// Generate indexed profile from text profiles and show the data
23+
// RUN: llvm-profdata merge --binary raw.proftext -o text.profraw
24+
// RUN: llvm-profdata show --function=main --ic-targets --show-vtables text.profraw | FileCheck %s --check-prefixes=COMMON,INDEXED
25+
// RUN: llvm-profdata merge --binary indexed.proftext -o text.profdata
26+
// RUN: llvm-profdata show --function=main --ic-targets --show-vtables text.profdata | FileCheck %s --check-prefixes=COMMON,INDEXED
27+
28+
// COMMON: Counters:
29+
// COMMON-NEXT: main:
30+
// COMMON-NEXT: Hash: 0x0f9a16fe6d398548
31+
// COMMON-NEXT: Counters: 2
32+
// COMMON-NEXT: Indirect Call Site Count: 2
33+
// COMMON-NEXT: Number of instrumented vtables: 2
34+
// RAW: Indirect Target Results:
35+
// RAW-NEXT: [ 0, _ZN8Derived15func1Eii, 250 ] (25.00%)
36+
// RAW-NEXT: [ 0, test.cpp;_ZN12_GLOBAL__N_18Derived25func1Eii, 750 ] (75.00%)
37+
// RAW-NEXT: [ 1, _ZN8Derived15func2Eii, 250 ] (25.00%)
38+
// RAW-NEXT: [ 1, test.cpp;_ZN12_GLOBAL__N_18Derived25func2Eii, 750 ] (75.00%)
39+
// RAW-NEXT: VTable Results:
40+
// RAW-NEXT: [ 0, _ZTV8Derived1, 250 ] (25.00%)
41+
// RAW-NEXT: [ 0, test.cpp;_ZTVN12_GLOBAL__N_18Derived2E, 750 ] (75.00%)
42+
// RAW-NEXT: [ 1, _ZTV8Derived1, 250 ] (25.00%)
43+
// RAW-NEXT: [ 1, test.cpp;_ZTVN12_GLOBAL__N_18Derived2E, 750 ] (75.00%)
44+
// INDEXED: Indirect Target Results:
45+
// INDEXED-NEXT: [ 0, test.cpp;_ZN12_GLOBAL__N_18Derived25func1Eii, 750 ] (75.00%)
46+
// INDEXED-NEXT: [ 0, _ZN8Derived15func1Eii, 250 ] (25.00%)
47+
// INDEXED-NEXT: [ 1, test.cpp;_ZN12_GLOBAL__N_18Derived25func2Eii, 750 ] (75.00%)
48+
// INDEXED-NEXT: [ 1, _ZN8Derived15func2Eii, 250 ] (25.00%)
49+
// INDEXED-NEXT: VTable Results:
50+
// INDEXED-NEXT: [ 0, test.cpp;_ZTVN12_GLOBAL__N_18Derived2E, 750 ] (75.00%)
51+
// INDEXED-NEXT: [ 0, _ZTV8Derived1, 250 ] (25.00%)
52+
// INDEXED-NEXT: [ 1, test.cpp;_ZTVN12_GLOBAL__N_18Derived2E, 750 ] (75.00%)
53+
// INDEXED-NEXT: [ 1, _ZTV8Derived1, 250 ] (25.00%)
54+
// COMMON: Instrumentation level: IR entry_first = 0
55+
// COMMON-NEXT: Functions shown: 1
56+
// COMMON-NEXT: Total functions: 6
57+
// COMMON-NEXT: Maximum function count: 1000
58+
// COMMON-NEXT: Maximum internal block count: 250
59+
// COMMON-NEXT: Statistics for indirect call sites profile:
60+
// COMMON-NEXT: Total number of sites: 2
61+
// COMMON-NEXT: Total number of sites with values: 2
62+
// COMMON-NEXT: Total number of profiled values: 4
63+
// COMMON-NEXT: Value sites histogram:
64+
// COMMON-NEXT: NumTargets, SiteCount
65+
// COMMON-NEXT: 2, 2
66+
// COMMON-NEXT: Statistics for vtable profile:
67+
// COMMON-NEXT: Total number of sites: 2
68+
// COMMON-NEXT: Total number of sites with values: 2
69+
// COMMON-NEXT: Total number of profiled values: 4
70+
// COMMON-NEXT: Value sites histogram:
71+
// COMMON-NEXT: NumTargets, SiteCount
72+
// COMMON-NEXT: 2, 2
73+
74+
// ICTEXT: :ir
75+
// ICTEXT: main
76+
// ICTEXT: # Func Hash:
77+
// ICTEXT: 1124236338992350536
78+
// ICTEXT: # Num Counters:
79+
// ICTEXT: 2
80+
// ICTEXT: # Counter Values:
81+
// ICTEXT: 1000
82+
// ICTEXT: 1
83+
// ICTEXT: # Num Value Kinds:
84+
// ICTEXT: 2
85+
// ICTEXT: # ValueKind = IPVK_IndirectCallTarget:
86+
// ICTEXT: 0
87+
// ICTEXT: # NumValueSites:
88+
// ICTEXT: 2
89+
// ICTEXT: 2
90+
// ICTEXT: test.cpp;_ZN12_GLOBAL__N_18Derived25func1Eii:750
91+
// ICTEXT: _ZN8Derived15func1Eii:250
92+
// ICTEXT: 2
93+
// ICTEXT: test.cpp;_ZN12_GLOBAL__N_18Derived25func2Eii:750
94+
// ICTEXT: _ZN8Derived15func2Eii:250
95+
// ICTEXT: # ValueKind = IPVK_VTableTarget:
96+
// ICTEXT: 2
97+
// ICTEXT: # NumValueSites:
98+
// ICTEXT: 2
99+
// ICTEXT: 2
100+
// ICTEXT: test.cpp;_ZTVN12_GLOBAL__N_18Derived2E:750
101+
// ICTEXT: _ZTV8Derived1:250
102+
// ICTEXT: 2
103+
// ICTEXT: test.cpp;_ZTVN12_GLOBAL__N_18Derived2E:750
104+
// ICTEXT: _ZTV8Derived1:250
105+
106+
//--- test.cpp
107+
#include <cstdio>
108+
#include <cstdlib>
109+
class Base {
110+
public:
111+
virtual int func1(int a, int b) = 0;
112+
virtual int func2(int a, int b) = 0;
113+
};
114+
class Derived1 : public Base {
115+
public:
116+
int func1(int a, int b) override { return a + b; }
117+
118+
int func2(int a, int b) override { return a * b; }
119+
};
120+
namespace {
121+
class Derived2 : public Base {
122+
public:
123+
int func1(int a, int b) override { return a - b; }
124+
125+
int func2(int a, int b) override { return a * (a - b); }
126+
};
127+
} // namespace
128+
__attribute__((noinline)) Base *createType(int a) {
129+
Base *base = nullptr;
130+
if (a % 4 == 0)
131+
base = new Derived1();
132+
else
133+
base = new Derived2();
134+
return base;
135+
}
136+
int main(int argc, char **argv) {
137+
int sum = 0;
138+
for (int i = 0; i < 1000; i++) {
139+
int a = rand();
140+
int b = rand();
141+
Base *ptr = createType(i);
142+
sum += ptr->func1(a, b) + ptr->func2(b, a);
143+
}
144+
printf("sum is %d\n", sum);
145+
return 0;
146+
}

llvm/test/tools/llvm-profdata/Inputs/update_vtable_value_prof_inputs.sh

Lines changed: 0 additions & 102 deletions
This file was deleted.
Binary file not shown.

llvm/test/tools/llvm-profdata/Inputs/vtable-value-prof.proftext

Lines changed: 0 additions & 73 deletions
This file was deleted.

0 commit comments

Comments
 (0)