summaryrefslogtreecommitdiff
path: root/llvm/unittests/ProfileData/InstrProfTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/ProfileData/InstrProfTest.cpp')
-rw-r--r--llvm/unittests/ProfileData/InstrProfTest.cpp199
1 files changed, 101 insertions, 98 deletions
diff --git a/llvm/unittests/ProfileData/InstrProfTest.cpp b/llvm/unittests/ProfileData/InstrProfTest.cpp
index 924d848176e7..a2cda2ba52df 100644
--- a/llvm/unittests/ProfileData/InstrProfTest.cpp
+++ b/llvm/unittests/ProfileData/InstrProfTest.cpp
@@ -829,7 +829,7 @@ TEST_P(InstrProfReaderWriterTest, icall_and_vtable_data_read_write) {
{getCalleeAddress(vtable2), 2},
};
Record1.addValueData(IPVK_VTableTarget, 0, VD0, 3, nullptr);
- Record1.addValueData(IPVK_VTableTarget, 2, VD2, 2, nullptr);
+ Record1.addValueData(IPVK_VTableTarget, 1, VD2, 2, nullptr);
}
Writer.addRecord(std::move(Record1), getProfWeight(), Err);
@@ -854,41 +854,37 @@ TEST_P(InstrProfReaderWriterTest, icall_and_vtable_data_read_write) {
// Test the number of instrumented indirect call sites and the number of
// profiled values at each site.
ASSERT_EQ(4U, R->getNumValueSites(IPVK_IndirectCallTarget));
- EXPECT_EQ(3U, R->getNumValueDataForSite(IPVK_IndirectCallTarget, 0));
- EXPECT_EQ(0U, R->getNumValueDataForSite(IPVK_IndirectCallTarget, 1));
- EXPECT_EQ(2U, R->getNumValueDataForSite(IPVK_IndirectCallTarget, 2));
- EXPECT_EQ(2U, R->getNumValueDataForSite(IPVK_IndirectCallTarget, 3));
// Test the number of instrumented vtable sites and the number of profiled
// values at each site.
ASSERT_EQ(R->getNumValueSites(IPVK_VTableTarget), 2U);
- EXPECT_EQ(R->getNumValueDataForSite(IPVK_VTableTarget, 0), 3U);
- EXPECT_EQ(R->getNumValueDataForSite(IPVK_VTableTarget, 1), 2U);
// First indirect site.
{
- uint64_t TotalC;
- auto VD = R->getValueForSite(IPVK_IndirectCallTarget, 0, &TotalC);
+ auto VD = R->getValueArrayForSite(IPVK_IndirectCallTarget, 0);
+ ASSERT_THAT(VD, SizeIs(3));
EXPECT_EQ(VD[0].Count, 3U * getProfWeight());
EXPECT_EQ(VD[1].Count, 2U * getProfWeight());
EXPECT_EQ(VD[2].Count, 1U * getProfWeight());
- EXPECT_EQ(TotalC, 6U * getProfWeight());
EXPECT_STREQ((const char *)VD[0].Value, "callee3");
EXPECT_STREQ((const char *)VD[1].Value, "callee2");
EXPECT_STREQ((const char *)VD[2].Value, "callee1");
}
+ EXPECT_THAT(R->getValueArrayForSite(IPVK_IndirectCallTarget, 1), SizeIs(0));
+ EXPECT_THAT(R->getValueArrayForSite(IPVK_IndirectCallTarget, 2), SizeIs(2));
+ EXPECT_THAT(R->getValueArrayForSite(IPVK_IndirectCallTarget, 3), SizeIs(2));
+
// First vtable site.
{
- uint64_t TotalC;
- auto VD = R->getValueForSite(IPVK_VTableTarget, 0, &TotalC);
+ auto VD = R->getValueArrayForSite(IPVK_VTableTarget, 0);
+ ASSERT_THAT(VD, SizeIs(3));
EXPECT_EQ(VD[0].Count, 3U * getProfWeight());
EXPECT_EQ(VD[1].Count, 2U * getProfWeight());
EXPECT_EQ(VD[2].Count, 1U * getProfWeight());
- EXPECT_EQ(TotalC, 6U * getProfWeight());
EXPECT_EQ(VD[0].Value, getCalleeAddress(vtable3));
EXPECT_EQ(VD[1].Value, getCalleeAddress(vtable2));
@@ -897,12 +893,11 @@ TEST_P(InstrProfReaderWriterTest, icall_and_vtable_data_read_write) {
// Second vtable site.
{
- uint64_t TotalC;
- auto VD = R->getValueForSite(IPVK_VTableTarget, 1, &TotalC);
+ auto VD = R->getValueArrayForSite(IPVK_VTableTarget, 1);
+ ASSERT_THAT(VD, SizeIs(2));
EXPECT_EQ(VD[0].Count, 2U * getProfWeight());
EXPECT_EQ(VD[1].Count, 1U * getProfWeight());
- EXPECT_EQ(TotalC, 3U * getProfWeight());
EXPECT_EQ(VD[0].Value, getCalleeAddress(vtable2));
EXPECT_EQ(VD[1].Value, getCalleeAddress(vtable1));
@@ -947,12 +942,11 @@ TEST_P(MaybeSparseInstrProfTest, annotate_vp_data) {
Instruction *Inst2 = Builder.CreateCondBr(Builder.getTrue(), TBB, FBB);
annotateValueSite(*M, *Inst, R.get(), IPVK_IndirectCallTarget, 0);
- InstrProfValueData ValueData[5];
uint32_t N;
uint64_t T;
- bool Res = getValueProfDataFromInst(*Inst, IPVK_IndirectCallTarget, 5,
- ValueData, N, T);
- ASSERT_TRUE(Res);
+ auto ValueData =
+ getValueProfDataFromInst(*Inst, IPVK_IndirectCallTarget, 5, N, T);
+ ASSERT_NE(ValueData, nullptr);
ASSERT_EQ(3U, N);
ASSERT_EQ(21U, T);
// The result should be sorted already:
@@ -962,23 +956,21 @@ TEST_P(MaybeSparseInstrProfTest, annotate_vp_data) {
ASSERT_EQ(5U, ValueData[1].Count);
ASSERT_EQ(4000U, ValueData[2].Value);
ASSERT_EQ(4U, ValueData[2].Count);
- Res = getValueProfDataFromInst(*Inst, IPVK_IndirectCallTarget, 1, ValueData,
- N, T);
- ASSERT_TRUE(Res);
+ ValueData = getValueProfDataFromInst(*Inst, IPVK_IndirectCallTarget, 1, N, T);
+ ASSERT_NE(ValueData, nullptr);
ASSERT_EQ(1U, N);
ASSERT_EQ(21U, T);
- Res = getValueProfDataFromInst(*Inst2, IPVK_IndirectCallTarget, 5, ValueData,
- N, T);
- ASSERT_FALSE(Res);
+ ValueData =
+ getValueProfDataFromInst(*Inst2, IPVK_IndirectCallTarget, 5, N, T);
+ ASSERT_EQ(ValueData, nullptr);
// Remove the MD_prof metadata
Inst->setMetadata(LLVMContext::MD_prof, 0);
// Annotate 5 records this time.
annotateValueSite(*M, *Inst, R.get(), IPVK_IndirectCallTarget, 0, 5);
- Res = getValueProfDataFromInst(*Inst, IPVK_IndirectCallTarget, 5,
- ValueData, N, T);
- ASSERT_TRUE(Res);
+ ValueData = getValueProfDataFromInst(*Inst, IPVK_IndirectCallTarget, 5, N, T);
+ ASSERT_NE(ValueData, nullptr);
ASSERT_EQ(5U, N);
ASSERT_EQ(21U, T);
ASSERT_EQ(6000U, ValueData[0].Value);
@@ -999,9 +991,8 @@ TEST_P(MaybeSparseInstrProfTest, annotate_vp_data) {
{5000, 2}, {6000, 1}};
annotateValueSite(*M, *Inst, ArrayRef(VD0Sorted).slice(2), 10,
IPVK_IndirectCallTarget, 5);
- Res = getValueProfDataFromInst(*Inst, IPVK_IndirectCallTarget, 5,
- ValueData, N, T);
- ASSERT_TRUE(Res);
+ ValueData = getValueProfDataFromInst(*Inst, IPVK_IndirectCallTarget, 5, N, T);
+ ASSERT_NE(ValueData, nullptr);
ASSERT_EQ(4U, N);
ASSERT_EQ(10U, T);
ASSERT_EQ(3000U, ValueData[0].Value);
@@ -1059,7 +1050,7 @@ TEST_P(MaybeSparseInstrProfTest, icall_and_vtable_data_merge) {
InstrProfValueData VD4[] = {{getCalleeAddress(vtable1), 1},
{getCalleeAddress(vtable2), 2},
{getCalleeAddress(vtable3), 3}};
- Record11.addValueData(IPVK_VTableTarget, 3, VD4, 3, nullptr);
+ Record11.addValueData(IPVK_VTableTarget, 2, VD4, 3, nullptr);
}
// A different record for the same caller.
@@ -1095,7 +1086,7 @@ TEST_P(MaybeSparseInstrProfTest, icall_and_vtable_data_merge) {
InstrProfValueData VD4[] = {{getCalleeAddress(vtable1), 1},
{getCalleeAddress(vtable2), 2},
{getCalleeAddress(vtable3), 3}};
- Record12.addValueData(IPVK_VTableTarget, 3, VD4, 3, nullptr);
+ Record12.addValueData(IPVK_VTableTarget, 2, VD4, 3, nullptr);
}
Writer.addRecord(std::move(Record11), Err);
@@ -1118,20 +1109,13 @@ TEST_P(MaybeSparseInstrProfTest, icall_and_vtable_data_merge) {
EXPECT_THAT_ERROR(R.takeError(), Succeeded());
// For indirect calls.
ASSERT_EQ(5U, R->getNumValueSites(IPVK_IndirectCallTarget));
- ASSERT_EQ(4U, R->getNumValueDataForSite(IPVK_IndirectCallTarget, 0));
- ASSERT_EQ(0U, R->getNumValueDataForSite(IPVK_IndirectCallTarget, 1));
- ASSERT_EQ(4U, R->getNumValueDataForSite(IPVK_IndirectCallTarget, 2));
- ASSERT_EQ(2U, R->getNumValueDataForSite(IPVK_IndirectCallTarget, 3));
- ASSERT_EQ(3U, R->getNumValueDataForSite(IPVK_IndirectCallTarget, 4));
// For vtables.
ASSERT_EQ(R->getNumValueSites(IPVK_VTableTarget), 3U);
- ASSERT_EQ(R->getNumValueDataForSite(IPVK_VTableTarget, 0), 4U);
- ASSERT_EQ(R->getNumValueDataForSite(IPVK_VTableTarget, 1), 4U);
- ASSERT_EQ(R->getNumValueDataForSite(IPVK_VTableTarget, 2), 3U);
// Test the merged values for indirect calls.
{
- auto VD = R->getValueForSite(IPVK_IndirectCallTarget, 0);
+ auto VD = R->getValueArrayForSite(IPVK_IndirectCallTarget, 0);
+ ASSERT_THAT(VD, SizeIs(4));
EXPECT_STREQ((const char *)VD[0].Value, "callee2");
EXPECT_EQ(VD[0].Count, 7U);
EXPECT_STREQ((const char *)VD[1].Value, "callee3");
@@ -1141,7 +1125,10 @@ TEST_P(MaybeSparseInstrProfTest, icall_and_vtable_data_merge) {
EXPECT_STREQ((const char *)VD[3].Value, "callee1");
EXPECT_EQ(VD[3].Count, 1U);
- auto VD_2(R->getValueForSite(IPVK_IndirectCallTarget, 2));
+ ASSERT_THAT(R->getValueArrayForSite(IPVK_IndirectCallTarget, 1), SizeIs(0));
+
+ auto VD_2 = R->getValueArrayForSite(IPVK_IndirectCallTarget, 2);
+ ASSERT_THAT(VD_2, SizeIs(4));
EXPECT_STREQ((const char *)VD_2[0].Value, "callee3");
EXPECT_EQ(VD_2[0].Count, 6U);
EXPECT_STREQ((const char *)VD_2[1].Value, "callee4");
@@ -1151,13 +1138,15 @@ TEST_P(MaybeSparseInstrProfTest, icall_and_vtable_data_merge) {
EXPECT_STREQ((const char *)VD_2[3].Value, "callee1");
EXPECT_EQ(VD_2[3].Count, 1U);
- auto VD_3(R->getValueForSite(IPVK_IndirectCallTarget, 3));
+ auto VD_3 = R->getValueArrayForSite(IPVK_IndirectCallTarget, 3);
+ ASSERT_THAT(VD_3, SizeIs(2));
EXPECT_STREQ((const char *)VD_3[0].Value, "callee8");
EXPECT_EQ(VD_3[0].Count, 2U);
EXPECT_STREQ((const char *)VD_3[1].Value, "callee7");
EXPECT_EQ(VD_3[1].Count, 1U);
- auto VD_4(R->getValueForSite(IPVK_IndirectCallTarget, 4));
+ auto VD_4 = R->getValueArrayForSite(IPVK_IndirectCallTarget, 4);
+ ASSERT_THAT(VD_4, SizeIs(3));
EXPECT_STREQ((const char *)VD_4[0].Value, "callee3");
EXPECT_EQ(VD_4[0].Count, 6U);
EXPECT_STREQ((const char *)VD_4[1].Value, "callee2");
@@ -1168,7 +1157,8 @@ TEST_P(MaybeSparseInstrProfTest, icall_and_vtable_data_merge) {
// Test the merged values for vtables
{
- auto VD0 = R->getValueForSite(IPVK_VTableTarget, 0);
+ auto VD0 = R->getValueArrayForSite(IPVK_VTableTarget, 0);
+ ASSERT_THAT(VD0, SizeIs(4));
EXPECT_EQ(VD0[0].Value, getCalleeAddress(vtable2));
EXPECT_EQ(VD0[0].Count, 7U);
EXPECT_EQ(VD0[1].Value, getCalleeAddress(vtable3));
@@ -1178,7 +1168,8 @@ TEST_P(MaybeSparseInstrProfTest, icall_and_vtable_data_merge) {
EXPECT_EQ(VD0[3].Value, getCalleeAddress(vtable1));
EXPECT_EQ(VD0[3].Count, 1U);
- auto VD1 = R->getValueForSite(IPVK_VTableTarget, 1);
+ auto VD1 = R->getValueArrayForSite(IPVK_VTableTarget, 1);
+ ASSERT_THAT(VD1, SizeIs(4));
EXPECT_EQ(VD1[0].Value, getCalleeAddress(vtable3));
EXPECT_EQ(VD1[0].Count, 6U);
EXPECT_EQ(VD1[1].Value, getCalleeAddress(vtable4));
@@ -1188,7 +1179,8 @@ TEST_P(MaybeSparseInstrProfTest, icall_and_vtable_data_merge) {
EXPECT_EQ(VD1[3].Value, getCalleeAddress(vtable1));
EXPECT_EQ(VD1[3].Count, 1U);
- auto VD2 = R->getValueForSite(IPVK_VTableTarget, 2);
+ auto VD2 = R->getValueArrayForSite(IPVK_VTableTarget, 2);
+ ASSERT_THAT(VD2, SizeIs(3));
EXPECT_EQ(VD2[0].Value, getCalleeAddress(vtable3));
EXPECT_EQ(VD2[0].Count, 6U);
EXPECT_EQ(VD2[1].Value, getCalleeAddress(vtable2));
@@ -1261,8 +1253,7 @@ TEST_P(ValueProfileMergeEdgeCaseTest, value_profile_data_merge_saturation) {
Reader->getInstrProfRecord("baz", 0x5678);
ASSERT_TRUE(bool(ReadRecord2));
ASSERT_EQ(1U, ReadRecord2->getNumValueSites(ValueKind));
- std::unique_ptr<InstrProfValueData[]> VD =
- ReadRecord2->getValueForSite(ValueKind, 0);
+ auto VD = ReadRecord2->getValueArrayForSite(ValueKind, 0);
EXPECT_EQ(ProfiledValue, VD[0].Value);
EXPECT_EQ(MaxValCount, VD[0].Count);
}
@@ -1306,9 +1297,9 @@ TEST_P(ValueProfileMergeEdgeCaseTest, value_profile_data_merge_site_trunc) {
Expected<InstrProfRecord> R = Reader->getInstrProfRecord("caller", 0x1234);
ASSERT_THAT_ERROR(R.takeError(), Succeeded());
- std::unique_ptr<InstrProfValueData[]> VD(R->getValueForSite(ValueKind, 0));
ASSERT_EQ(2U, R->getNumValueSites(ValueKind));
- EXPECT_EQ(255U, R->getNumValueDataForSite(ValueKind, 0));
+ auto VD = R->getValueArrayForSite(ValueKind, 0);
+ EXPECT_THAT(VD, SizeIs(255));
for (unsigned I = 0; I < 255; I++) {
EXPECT_EQ(VD[I].Value, 509 - I);
EXPECT_EQ(VD[I].Count, 1509 - I);
@@ -1388,20 +1379,15 @@ TEST(ValueProfileReadWriteTest, value_prof_data_read_write) {
// Now read data from Record and sanity check the data
ASSERT_EQ(6U, Record.getNumValueSites(IPVK_IndirectCallTarget));
- ASSERT_EQ(5U, Record.getNumValueDataForSite(IPVK_IndirectCallTarget, 0));
- ASSERT_EQ(4U, Record.getNumValueDataForSite(IPVK_IndirectCallTarget, 1));
- ASSERT_EQ(3U, Record.getNumValueDataForSite(IPVK_IndirectCallTarget, 2));
- ASSERT_EQ(2U, Record.getNumValueDataForSite(IPVK_IndirectCallTarget, 3));
- ASSERT_EQ(0U, Record.getNumValueDataForSite(IPVK_IndirectCallTarget, 4));
- ASSERT_EQ(2U, Record.getNumValueDataForSite(IPVK_IndirectCallTarget, 5));
auto Cmp = [](const InstrProfValueData &VD1, const InstrProfValueData &VD2) {
return VD1.Count > VD2.Count;
};
- std::unique_ptr<InstrProfValueData[]> VD_0(
- Record.getValueForSite(IPVK_IndirectCallTarget, 0));
- llvm::sort(&VD_0[0], &VD_0[5], Cmp);
+ SmallVector<InstrProfValueData> VD_0(
+ Record.getValueArrayForSite(IPVK_IndirectCallTarget, 0));
+ ASSERT_THAT(VD_0, SizeIs(5));
+ llvm::sort(VD_0, Cmp);
EXPECT_STREQ((const char *)VD_0[0].Value, "callee2");
EXPECT_EQ(1000U, VD_0[0].Count);
EXPECT_STREQ((const char *)VD_0[1].Value, "callee3");
@@ -1413,9 +1399,10 @@ TEST(ValueProfileReadWriteTest, value_prof_data_read_write) {
EXPECT_STREQ((const char *)VD_0[4].Value, "callee5");
EXPECT_EQ(100U, VD_0[4].Count);
- std::unique_ptr<InstrProfValueData[]> VD_1(
- Record.getValueForSite(IPVK_IndirectCallTarget, 1));
- llvm::sort(&VD_1[0], &VD_1[4], Cmp);
+ SmallVector<InstrProfValueData> VD_1(
+ Record.getValueArrayForSite(IPVK_IndirectCallTarget, 1));
+ ASSERT_THAT(VD_1, SizeIs(4));
+ llvm::sort(VD_1, Cmp);
EXPECT_STREQ((const char *)VD_1[0].Value, "callee2");
EXPECT_EQ(VD_1[0].Count, 2500U);
EXPECT_STREQ((const char *)VD_1[1].Value, "callee1");
@@ -1425,9 +1412,10 @@ TEST(ValueProfileReadWriteTest, value_prof_data_read_write) {
EXPECT_STREQ((const char *)VD_1[3].Value, "callee5");
EXPECT_EQ(VD_1[3].Count, 800U);
- std::unique_ptr<InstrProfValueData[]> VD_2(
- Record.getValueForSite(IPVK_IndirectCallTarget, 2));
- llvm::sort(&VD_2[0], &VD_2[3], Cmp);
+ SmallVector<InstrProfValueData> VD_2(
+ Record.getValueArrayForSite(IPVK_IndirectCallTarget, 2));
+ ASSERT_THAT(VD_2, SizeIs(3));
+ llvm::sort(VD_2, Cmp);
EXPECT_STREQ((const char *)VD_2[0].Value, "callee4");
EXPECT_EQ(VD_2[0].Count, 5500U);
EXPECT_STREQ((const char *)VD_2[1].Value, "callee3");
@@ -1435,22 +1423,26 @@ TEST(ValueProfileReadWriteTest, value_prof_data_read_write) {
EXPECT_STREQ((const char *)VD_2[2].Value, "callee6");
EXPECT_EQ(VD_2[2].Count, 800U);
- std::unique_ptr<InstrProfValueData[]> VD_3(
- Record.getValueForSite(IPVK_IndirectCallTarget, 3));
- llvm::sort(&VD_3[0], &VD_3[2], Cmp);
+ SmallVector<InstrProfValueData> VD_3(
+ Record.getValueArrayForSite(IPVK_IndirectCallTarget, 3));
+ ASSERT_THAT(VD_3, SizeIs(2));
+ llvm::sort(VD_3, Cmp);
EXPECT_STREQ((const char *)VD_3[0].Value, "callee3");
EXPECT_EQ(VD_3[0].Count, 2000U);
EXPECT_STREQ((const char *)VD_3[1].Value, "callee2");
EXPECT_EQ(VD_3[1].Count, 1800U);
+ ASSERT_THAT(Record.getValueArrayForSite(IPVK_IndirectCallTarget, 4),
+ SizeIs(0));
+ ASSERT_THAT(Record.getValueArrayForSite(IPVK_IndirectCallTarget, 5),
+ SizeIs(2));
+
ASSERT_EQ(Record.getNumValueSites(IPVK_VTableTarget), 4U);
- ASSERT_EQ(Record.getNumValueDataForSite(IPVK_VTableTarget, 0), 5U);
- ASSERT_EQ(Record.getNumValueDataForSite(IPVK_VTableTarget, 1), 4U);
- ASSERT_EQ(Record.getNumValueDataForSite(IPVK_VTableTarget, 2), 3U);
- ASSERT_EQ(Record.getNumValueDataForSite(IPVK_VTableTarget, 3), 2U);
- auto VD0(Record.getValueForSite(IPVK_VTableTarget, 0));
- llvm::sort(&VD0[0], &VD0[5], Cmp);
+ SmallVector<InstrProfValueData> VD0(
+ Record.getValueArrayForSite(IPVK_VTableTarget, 0));
+ ASSERT_THAT(VD0, SizeIs(5));
+ llvm::sort(VD0, Cmp);
EXPECT_EQ(VD0[0].Value, getCalleeAddress(vtable2));
EXPECT_EQ(VD0[0].Count, 1000U);
EXPECT_EQ(VD0[1].Value, getCalleeAddress(vtable3));
@@ -1462,8 +1454,10 @@ TEST(ValueProfileReadWriteTest, value_prof_data_read_write) {
EXPECT_EQ(VD0[4].Value, getCalleeAddress(vtable5));
EXPECT_EQ(VD0[4].Count, 100U);
- auto VD1(Record.getValueForSite(IPVK_VTableTarget, 1));
- llvm::sort(&VD1[0], &VD1[4], Cmp);
+ SmallVector<InstrProfValueData> VD1(
+ Record.getValueArrayForSite(IPVK_VTableTarget, 1));
+ ASSERT_THAT(VD1, SizeIs(4));
+ llvm::sort(VD1, Cmp);
EXPECT_EQ(VD1[0].Value, getCalleeAddress(vtable2));
EXPECT_EQ(VD1[0].Count, 2500U);
EXPECT_EQ(VD1[1].Value, getCalleeAddress(vtable1));
@@ -1473,8 +1467,10 @@ TEST(ValueProfileReadWriteTest, value_prof_data_read_write) {
EXPECT_EQ(VD1[3].Value, getCalleeAddress(vtable5));
EXPECT_EQ(VD1[3].Count, 800U);
- auto VD2(Record.getValueForSite(IPVK_VTableTarget, 2));
- llvm::sort(&VD2[0], &VD2[3], Cmp);
+ SmallVector<InstrProfValueData> VD2(
+ Record.getValueArrayForSite(IPVK_VTableTarget, 2));
+ ASSERT_THAT(VD2, SizeIs(3));
+ llvm::sort(VD2, Cmp);
EXPECT_EQ(VD2[0].Value, getCalleeAddress(vtable4));
EXPECT_EQ(VD2[0].Count, 5500U);
EXPECT_EQ(VD2[1].Value, getCalleeAddress(vtable3));
@@ -1482,8 +1478,10 @@ TEST(ValueProfileReadWriteTest, value_prof_data_read_write) {
EXPECT_EQ(VD2[2].Value, getCalleeAddress(vtable6));
EXPECT_EQ(VD2[2].Count, 800U);
- auto VD3(Record.getValueForSite(IPVK_VTableTarget, 3));
- llvm::sort(&VD3[0], &VD3[2], Cmp);
+ SmallVector<InstrProfValueData> VD3(
+ Record.getValueArrayForSite(IPVK_VTableTarget, 3));
+ ASSERT_THAT(VD3, SizeIs(2));
+ llvm::sort(VD3, Cmp);
EXPECT_EQ(VD3[0].Value, getCalleeAddress(vtable3));
EXPECT_EQ(VD3[0].Count, 2000U);
EXPECT_EQ(VD3[1].Value, getCalleeAddress(vtable2));
@@ -1528,7 +1526,6 @@ TEST(ValueProfileReadWriteTest, symtab_mapping) {
// Now read data from Record and sanity check the data
ASSERT_EQ(Record.getNumValueSites(IPVK_IndirectCallTarget), 6U);
- ASSERT_EQ(Record.getNumValueDataForSite(IPVK_IndirectCallTarget, 0), 5U);
// Look up the value correpsonding to the middle of a vtable in symtab and
// test that it's the hash of the name.
@@ -1544,8 +1541,10 @@ TEST(ValueProfileReadWriteTest, symtab_mapping) {
auto Cmp = [](const InstrProfValueData &VD1, const InstrProfValueData &VD2) {
return VD1.Count > VD2.Count;
};
- auto VD_0(Record.getValueForSite(IPVK_IndirectCallTarget, 0));
- llvm::sort(&VD_0[0], &VD_0[5], Cmp);
+ SmallVector<InstrProfValueData> VD_0(
+ Record.getValueArrayForSite(IPVK_IndirectCallTarget, 0));
+ ASSERT_THAT(VD_0, SizeIs(5));
+ llvm::sort(VD_0, Cmp);
ASSERT_EQ(VD_0[0].Value, 0x2000ULL);
ASSERT_EQ(VD_0[0].Count, 1000U);
ASSERT_EQ(VD_0[1].Value, 0x3000ULL);
@@ -1561,9 +1560,10 @@ TEST(ValueProfileReadWriteTest, symtab_mapping) {
{
// The first vtable site.
- auto VD(Record.getValueForSite(IPVK_VTableTarget, 0));
- ASSERT_EQ(Record.getNumValueDataForSite(IPVK_VTableTarget, 0), 5U);
- llvm::sort(&VD[0], &VD[5], Cmp);
+ SmallVector<InstrProfValueData> VD(
+ Record.getValueArrayForSite(IPVK_VTableTarget, 0));
+ ASSERT_THAT(VD, SizeIs(5));
+ llvm::sort(VD, Cmp);
EXPECT_EQ(VD[0].Count, 1000U);
EXPECT_EQ(VD[0].Value, MD5Hash("vtable2"));
EXPECT_EQ(VD[1].Count, 500U);
@@ -1580,9 +1580,10 @@ TEST(ValueProfileReadWriteTest, symtab_mapping) {
{
// The second vtable site.
- auto VD(Record.getValueForSite(IPVK_VTableTarget, 1));
- ASSERT_EQ(Record.getNumValueDataForSite(IPVK_VTableTarget, 1), 4U);
- llvm::sort(&VD[0], &VD[4], Cmp);
+ SmallVector<InstrProfValueData> VD(
+ Record.getValueArrayForSite(IPVK_VTableTarget, 1));
+ ASSERT_THAT(VD, SizeIs(4));
+ llvm::sort(VD, Cmp);
EXPECT_EQ(VD[0].Value, MD5Hash("vtable2"));
EXPECT_EQ(VD[0].Count, 2500U);
EXPECT_EQ(VD[1].Value, MD5Hash("vtable1"));
@@ -1597,9 +1598,10 @@ TEST(ValueProfileReadWriteTest, symtab_mapping) {
{
// The third vtable site.
- auto VD(Record.getValueForSite(IPVK_VTableTarget, 2));
- ASSERT_EQ(Record.getNumValueDataForSite(IPVK_VTableTarget, 2), 3U);
- llvm::sort(&VD[0], &VD[3], Cmp);
+ SmallVector<InstrProfValueData> VD(
+ Record.getValueArrayForSite(IPVK_VTableTarget, 2));
+ ASSERT_THAT(VD, SizeIs(3));
+ llvm::sort(VD, Cmp);
EXPECT_EQ(VD[0].Count, 5500U);
EXPECT_EQ(VD[0].Value, MD5Hash("vtable4"));
EXPECT_EQ(VD[1].Count, 1000U);
@@ -1611,9 +1613,10 @@ TEST(ValueProfileReadWriteTest, symtab_mapping) {
{
// The fourth vtable site.
- auto VD(Record.getValueForSite(IPVK_VTableTarget, 3));
- ASSERT_EQ(Record.getNumValueDataForSite(IPVK_VTableTarget, 3), 2U);
- llvm::sort(&VD[0], &VD[2], Cmp);
+ SmallVector<InstrProfValueData> VD(
+ Record.getValueArrayForSite(IPVK_VTableTarget, 3));
+ ASSERT_THAT(VD, SizeIs(2));
+ llvm::sort(VD, Cmp);
EXPECT_EQ(VD[0].Count, 2000U);
EXPECT_EQ(VD[0].Value, MD5Hash("vtable3"));
EXPECT_EQ(VD[1].Count, 1800U);