From a15a794c43a381877dc5e0925e9d485fab48cbbc Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Sat, 7 Dec 2024 11:08:05 -0800 Subject: [PATCH] [memprof] Compare Frames instead of FrameIds in a unit test When we call IndexedMemProfRecord::toMemProfRecord, we care about getting the original (that is, non-indexed) MemProfRecord back, so we should just verify that, not the hash values, which are intermediaries. There is a remote possibility of hash collisions where call stack {F1, F2} might come back as {F1, F1} if F1.hash() == F2.hash() for example. However, since FrameId uses BLAKE, the hash values should be consistent across architectures. That is, if this test case works on one architecture, it should work on others as well. --- llvm/unittests/ProfileData/MemProfTest.cpp | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/llvm/unittests/ProfileData/MemProfTest.cpp b/llvm/unittests/ProfileData/MemProfTest.cpp index 5e24579baccd3..55feb1c3f60b4 100644 --- a/llvm/unittests/ProfileData/MemProfTest.cpp +++ b/llvm/unittests/ProfileData/MemProfTest.cpp @@ -534,19 +534,10 @@ TEST(MemProf, IndexedMemProfRecordToMemProfRecord) { // Verify the contents of Record. ASSERT_THAT(Record.AllocSites, SizeIs(2)); - ASSERT_THAT(Record.AllocSites[0].CallStack, SizeIs(2)); - EXPECT_EQ(Record.AllocSites[0].CallStack[0].hash(), F1.hash()); - EXPECT_EQ(Record.AllocSites[0].CallStack[1].hash(), F2.hash()); - ASSERT_THAT(Record.AllocSites[1].CallStack, SizeIs(2)); - EXPECT_EQ(Record.AllocSites[1].CallStack[0].hash(), F1.hash()); - EXPECT_EQ(Record.AllocSites[1].CallStack[1].hash(), F3.hash()); - ASSERT_THAT(Record.CallSites, SizeIs(2)); - ASSERT_THAT(Record.CallSites[0], SizeIs(2)); - EXPECT_EQ(Record.CallSites[0][0].hash(), F2.hash()); - EXPECT_EQ(Record.CallSites[0][1].hash(), F3.hash()); - ASSERT_THAT(Record.CallSites[1], SizeIs(2)); - EXPECT_EQ(Record.CallSites[1][0].hash(), F2.hash()); - EXPECT_EQ(Record.CallSites[1][1].hash(), F4.hash()); + EXPECT_THAT(Record.AllocSites[0].CallStack, ElementsAre(F1, F2)); + EXPECT_THAT(Record.AllocSites[1].CallStack, ElementsAre(F1, F3)); + EXPECT_THAT(Record.CallSites, + ElementsAre(ElementsAre(F2, F3), ElementsAre(F2, F4))); } // Populate those fields returned by getHotColdSchema.