Skip to content

Commit bbe9119

Browse files
[ProfileData] Sink the length checks (#95559)
The new API getValueArrayForSite returns ArrayRef<InstrProfValueData>, packaging the array length and contents together. This patch sinks the array length checks just before we check the contents. This way, we check both the array length and contents immediately after calling getValueArrayForSite.
1 parent 180a536 commit bbe9119

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

llvm/unittests/ProfileData/InstrProfTest.cpp

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1381,19 +1381,14 @@ TEST(ValueProfileReadWriteTest, value_prof_data_read_write) {
13811381

13821382
// Now read data from Record and sanity check the data
13831383
ASSERT_EQ(6U, Record.getNumValueSites(IPVK_IndirectCallTarget));
1384-
ASSERT_EQ(5U, Record.getNumValueDataForSite(IPVK_IndirectCallTarget, 0));
1385-
ASSERT_EQ(4U, Record.getNumValueDataForSite(IPVK_IndirectCallTarget, 1));
1386-
ASSERT_EQ(3U, Record.getNumValueDataForSite(IPVK_IndirectCallTarget, 2));
1387-
ASSERT_EQ(2U, Record.getNumValueDataForSite(IPVK_IndirectCallTarget, 3));
1388-
ASSERT_EQ(0U, Record.getNumValueDataForSite(IPVK_IndirectCallTarget, 4));
1389-
ASSERT_EQ(2U, Record.getNumValueDataForSite(IPVK_IndirectCallTarget, 5));
13901384

13911385
auto Cmp = [](const InstrProfValueData &VD1, const InstrProfValueData &VD2) {
13921386
return VD1.Count > VD2.Count;
13931387
};
13941388

13951389
SmallVector<InstrProfValueData> VD_0(
13961390
Record.getValueArrayForSite(IPVK_IndirectCallTarget, 0));
1391+
ASSERT_THAT(VD_0, SizeIs(5));
13971392
llvm::sort(VD_0, Cmp);
13981393
EXPECT_STREQ((const char *)VD_0[0].Value, "callee2");
13991394
EXPECT_EQ(1000U, VD_0[0].Count);
@@ -1408,6 +1403,7 @@ TEST(ValueProfileReadWriteTest, value_prof_data_read_write) {
14081403

14091404
SmallVector<InstrProfValueData> VD_1(
14101405
Record.getValueArrayForSite(IPVK_IndirectCallTarget, 1));
1406+
ASSERT_THAT(VD_1, SizeIs(4));
14111407
llvm::sort(VD_1, Cmp);
14121408
EXPECT_STREQ((const char *)VD_1[0].Value, "callee2");
14131409
EXPECT_EQ(VD_1[0].Count, 2500U);
@@ -1420,6 +1416,7 @@ TEST(ValueProfileReadWriteTest, value_prof_data_read_write) {
14201416

14211417
SmallVector<InstrProfValueData> VD_2(
14221418
Record.getValueArrayForSite(IPVK_IndirectCallTarget, 2));
1419+
ASSERT_THAT(VD_2, SizeIs(3));
14231420
llvm::sort(VD_2, Cmp);
14241421
EXPECT_STREQ((const char *)VD_2[0].Value, "callee4");
14251422
EXPECT_EQ(VD_2[0].Count, 5500U);
@@ -1430,20 +1427,23 @@ TEST(ValueProfileReadWriteTest, value_prof_data_read_write) {
14301427

14311428
SmallVector<InstrProfValueData> VD_3(
14321429
Record.getValueArrayForSite(IPVK_IndirectCallTarget, 3));
1430+
ASSERT_THAT(VD_3, SizeIs(2));
14331431
llvm::sort(VD_3, Cmp);
14341432
EXPECT_STREQ((const char *)VD_3[0].Value, "callee3");
14351433
EXPECT_EQ(VD_3[0].Count, 2000U);
14361434
EXPECT_STREQ((const char *)VD_3[1].Value, "callee2");
14371435
EXPECT_EQ(VD_3[1].Count, 1800U);
14381436

1437+
ASSERT_THAT(Record.getValueArrayForSite(IPVK_IndirectCallTarget, 4),
1438+
SizeIs(0));
1439+
ASSERT_THAT(Record.getValueArrayForSite(IPVK_IndirectCallTarget, 5),
1440+
SizeIs(2));
1441+
14391442
ASSERT_EQ(Record.getNumValueSites(IPVK_VTableTarget), 4U);
1440-
ASSERT_EQ(Record.getNumValueDataForSite(IPVK_VTableTarget, 0), 5U);
1441-
ASSERT_EQ(Record.getNumValueDataForSite(IPVK_VTableTarget, 1), 4U);
1442-
ASSERT_EQ(Record.getNumValueDataForSite(IPVK_VTableTarget, 2), 3U);
1443-
ASSERT_EQ(Record.getNumValueDataForSite(IPVK_VTableTarget, 3), 2U);
14441443

14451444
SmallVector<InstrProfValueData> VD0(
14461445
Record.getValueArrayForSite(IPVK_VTableTarget, 0));
1446+
ASSERT_THAT(VD0, SizeIs(5));
14471447
llvm::sort(VD0, Cmp);
14481448
EXPECT_EQ(VD0[0].Value, getCalleeAddress(vtable2));
14491449
EXPECT_EQ(VD0[0].Count, 1000U);
@@ -1458,6 +1458,7 @@ TEST(ValueProfileReadWriteTest, value_prof_data_read_write) {
14581458

14591459
SmallVector<InstrProfValueData> VD1(
14601460
Record.getValueArrayForSite(IPVK_VTableTarget, 1));
1461+
ASSERT_THAT(VD1, SizeIs(4));
14611462
llvm::sort(VD1, Cmp);
14621463
EXPECT_EQ(VD1[0].Value, getCalleeAddress(vtable2));
14631464
EXPECT_EQ(VD1[0].Count, 2500U);
@@ -1470,6 +1471,7 @@ TEST(ValueProfileReadWriteTest, value_prof_data_read_write) {
14701471

14711472
SmallVector<InstrProfValueData> VD2(
14721473
Record.getValueArrayForSite(IPVK_VTableTarget, 2));
1474+
ASSERT_THAT(VD2, SizeIs(3));
14731475
llvm::sort(VD2, Cmp);
14741476
EXPECT_EQ(VD2[0].Value, getCalleeAddress(vtable4));
14751477
EXPECT_EQ(VD2[0].Count, 5500U);
@@ -1480,6 +1482,7 @@ TEST(ValueProfileReadWriteTest, value_prof_data_read_write) {
14801482

14811483
SmallVector<InstrProfValueData> VD3(
14821484
Record.getValueArrayForSite(IPVK_VTableTarget, 3));
1485+
ASSERT_THAT(VD3, SizeIs(2));
14831486
llvm::sort(VD3, Cmp);
14841487
EXPECT_EQ(VD3[0].Value, getCalleeAddress(vtable3));
14851488
EXPECT_EQ(VD3[0].Count, 2000U);
@@ -1525,7 +1528,6 @@ TEST(ValueProfileReadWriteTest, symtab_mapping) {
15251528

15261529
// Now read data from Record and sanity check the data
15271530
ASSERT_EQ(Record.getNumValueSites(IPVK_IndirectCallTarget), 6U);
1528-
ASSERT_EQ(Record.getNumValueDataForSite(IPVK_IndirectCallTarget, 0), 5U);
15291531

15301532
// Look up the value correpsonding to the middle of a vtable in symtab and
15311533
// test that it's the hash of the name.
@@ -1543,6 +1545,7 @@ TEST(ValueProfileReadWriteTest, symtab_mapping) {
15431545
};
15441546
SmallVector<InstrProfValueData> VD_0(
15451547
Record.getValueArrayForSite(IPVK_IndirectCallTarget, 0));
1548+
ASSERT_THAT(VD_0, SizeIs(5));
15461549
llvm::sort(VD_0, Cmp);
15471550
ASSERT_EQ(VD_0[0].Value, 0x2000ULL);
15481551
ASSERT_EQ(VD_0[0].Count, 1000U);

0 commit comments

Comments
 (0)