mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-16 08:29:43 +00:00
Add value site truncation unit test
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@257153 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9baf25537d
commit
5dcdd411ac
@ -290,12 +290,11 @@ TEST_F(InstrProfTest, get_icall_data_merge1) {
|
||||
{uint64_t(callee4), 4}};
|
||||
Record11.addValueData(IPVK_IndirectCallTarget, 0, VD0, 4, nullptr);
|
||||
|
||||
// No valeu profile data at the second site.
|
||||
// No value profile data at the second site.
|
||||
Record11.addValueData(IPVK_IndirectCallTarget, 1, nullptr, 0, nullptr);
|
||||
|
||||
InstrProfValueData VD2[] = {{uint64_t(callee1), 1},
|
||||
{uint64_t(callee2), 2},
|
||||
{uint64_t(callee3), 3}};
|
||||
InstrProfValueData VD2[] = {
|
||||
{uint64_t(callee1), 1}, {uint64_t(callee2), 2}, {uint64_t(callee3), 3}};
|
||||
Record11.addValueData(IPVK_IndirectCallTarget, 2, VD2, 3, nullptr);
|
||||
|
||||
InstrProfValueData VD3[] = {{uint64_t(callee1), 1}};
|
||||
@ -308,16 +307,14 @@ TEST_F(InstrProfTest, get_icall_data_merge1) {
|
||||
|
||||
// A differnt record for the same caller.
|
||||
Record12.reserveSites(IPVK_IndirectCallTarget, 5);
|
||||
InstrProfValueData VD02[] = {{uint64_t(callee2), 5},
|
||||
{uint64_t(callee3), 3}};
|
||||
InstrProfValueData VD02[] = {{uint64_t(callee2), 5}, {uint64_t(callee3), 3}};
|
||||
Record12.addValueData(IPVK_IndirectCallTarget, 0, VD02, 2, nullptr);
|
||||
|
||||
// No valeu profile data at the second site.
|
||||
// No value profile data at the second site.
|
||||
Record12.addValueData(IPVK_IndirectCallTarget, 1, nullptr, 0, nullptr);
|
||||
|
||||
InstrProfValueData VD22[] = {{uint64_t(callee2), 1},
|
||||
{uint64_t(callee3), 3},
|
||||
{uint64_t(callee4), 4}};
|
||||
InstrProfValueData VD22[] = {
|
||||
{uint64_t(callee2), 1}, {uint64_t(callee3), 3}, {uint64_t(callee4), 4}};
|
||||
Record12.addValueData(IPVK_IndirectCallTarget, 2, VD22, 3, nullptr);
|
||||
|
||||
Record12.addValueData(IPVK_IndirectCallTarget, 3, nullptr, 0, nullptr);
|
||||
@ -436,6 +433,55 @@ TEST_F(InstrProfTest, get_icall_data_merge1_saturation) {
|
||||
ASSERT_EQ(Max, VD[0].Count);
|
||||
}
|
||||
|
||||
// This test tests that when there are too many values
|
||||
// for a given site, the merged results are properly
|
||||
// truncated.
|
||||
TEST_F(InstrProfTest, get_icall_data_merge_site_trunc) {
|
||||
static const char caller[] = "caller";
|
||||
|
||||
InstrProfRecord Record11(caller, 0x1234, {1, 2});
|
||||
InstrProfRecord Record12(caller, 0x1234, {1, 2});
|
||||
|
||||
// 2 value sites.
|
||||
Record11.reserveSites(IPVK_IndirectCallTarget, 2);
|
||||
InstrProfValueData VD0[255];
|
||||
for (int I = 0; I < 255; I++) {
|
||||
VD0[I].Value = 2 * I;
|
||||
VD0[I].Count = 2 * I + 1000;
|
||||
}
|
||||
|
||||
Record11.addValueData(IPVK_IndirectCallTarget, 0, VD0, 255, nullptr);
|
||||
Record11.addValueData(IPVK_IndirectCallTarget, 1, nullptr, 0, nullptr);
|
||||
|
||||
Record12.reserveSites(IPVK_IndirectCallTarget, 2);
|
||||
InstrProfValueData VD1[255];
|
||||
for (int I = 0; I < 255; I++) {
|
||||
VD1[I].Value = 2 * I + 1;
|
||||
VD1[I].Count = 2 * I + 1001;
|
||||
}
|
||||
|
||||
Record12.addValueData(IPVK_IndirectCallTarget, 0, VD1, 255, nullptr);
|
||||
Record12.addValueData(IPVK_IndirectCallTarget, 1, nullptr, 0, nullptr);
|
||||
|
||||
Writer.addRecord(std::move(Record11));
|
||||
// Merge profile data.
|
||||
Writer.addRecord(std::move(Record12));
|
||||
|
||||
auto Profile = Writer.writeBuffer();
|
||||
readProfile(std::move(Profile));
|
||||
|
||||
ErrorOr<InstrProfRecord> R = Reader->getInstrProfRecord("caller", 0x1234);
|
||||
ASSERT_TRUE(NoError(R.getError()));
|
||||
std::unique_ptr<InstrProfValueData[]> VD(
|
||||
R.get().getValueForSite(IPVK_IndirectCallTarget, 0));
|
||||
ASSERT_EQ(2U, R.get().getNumValueSites(IPVK_IndirectCallTarget));
|
||||
ASSERT_EQ(255U, R.get().getNumValueDataForSite(IPVK_IndirectCallTarget, 0));
|
||||
for (int I = 0; I < 255; I++) {
|
||||
ASSERT_EQ(VD[I].Value, 509 - I);
|
||||
ASSERT_EQ(VD[I].Count, 1509 - I);
|
||||
}
|
||||
}
|
||||
|
||||
// Synthesize runtime value profile data.
|
||||
ValueProfNode Site1Values[5] = {{{uint64_t("callee1"), 400}, &Site1Values[1]},
|
||||
{{uint64_t("callee2"), 1000}, &Site1Values[2]},
|
||||
|
Loading…
Reference in New Issue
Block a user