summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ProfileData/InstrProfTest.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2018-10-10 21:09:37 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2018-10-10 21:09:37 +0000
commitceed4eb13d406821ca729a5566aaa19836010cec (patch)
tree8e55ef54a49d2cedaf3039d20150c4fdab8bbc91 /llvm/unittests/ProfileData/InstrProfTest.cpp
parentc0b28d55a7f578db6023c8d8856d98293ea76ce4 (diff)
downloadbcm5719-llvm-ceed4eb13d406821ca729a5566aaa19836010cec.tar.gz
bcm5719-llvm-ceed4eb13d406821ca729a5566aaa19836010cec.zip
Support for remapping profile data when symbols change, for
instrumentation-based profiling. Reviewers: davidxl, tejohnson, dlj, erik.pilkington Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D51247 llvm-svn: 344184
Diffstat (limited to 'llvm/unittests/ProfileData/InstrProfTest.cpp')
-rw-r--r--llvm/unittests/ProfileData/InstrProfTest.cpp44
1 files changed, 42 insertions, 2 deletions
diff --git a/llvm/unittests/ProfileData/InstrProfTest.cpp b/llvm/unittests/ProfileData/InstrProfTest.cpp
index 0c99f7fde65..2d915d44598 100644
--- a/llvm/unittests/ProfileData/InstrProfTest.cpp
+++ b/llvm/unittests/ProfileData/InstrProfTest.cpp
@@ -42,8 +42,10 @@ struct InstrProfTest : ::testing::Test {
void SetUp() { Writer.setOutputSparse(false); }
- void readProfile(std::unique_ptr<MemoryBuffer> Profile) {
- auto ReaderOrErr = IndexedInstrProfReader::create(std::move(Profile));
+ void readProfile(std::unique_ptr<MemoryBuffer> Profile,
+ std::unique_ptr<MemoryBuffer> Remapping = nullptr) {
+ auto ReaderOrErr = IndexedInstrProfReader::create(std::move(Profile),
+ std::move(Remapping));
EXPECT_THAT_ERROR(ReaderOrErr.takeError(), Succeeded());
Reader = std::move(ReaderOrErr.get());
}
@@ -990,6 +992,44 @@ TEST_P(MaybeSparseInstrProfTest, instr_prof_symtab_compression_test) {
}
}
+TEST_P(MaybeSparseInstrProfTest, remapping_test) {
+ Writer.addRecord({"_Z3fooi", 0x1234, {1, 2, 3, 4}}, Err);
+ Writer.addRecord({"file:_Z3barf", 0x567, {5, 6, 7}}, Err);
+ auto Profile = Writer.writeBuffer();
+ readProfile(std::move(Profile), llvm::MemoryBuffer::getMemBuffer(R"(
+ type i l
+ name 3bar 4quux
+ )"));
+
+ std::vector<uint64_t> Counts;
+ for (StringRef FooName : {"_Z3fooi", "_Z3fool"}) {
+ EXPECT_THAT_ERROR(Reader->getFunctionCounts(FooName, 0x1234, Counts),
+ Succeeded());
+ ASSERT_EQ(4u, Counts.size());
+ EXPECT_EQ(1u, Counts[0]);
+ EXPECT_EQ(2u, Counts[1]);
+ EXPECT_EQ(3u, Counts[2]);
+ EXPECT_EQ(4u, Counts[3]);
+ }
+
+ for (StringRef BarName : {"file:_Z3barf", "file:_Z4quuxf"}) {
+ EXPECT_THAT_ERROR(Reader->getFunctionCounts(BarName, 0x567, Counts),
+ Succeeded());
+ ASSERT_EQ(3u, Counts.size());
+ EXPECT_EQ(5u, Counts[0]);
+ EXPECT_EQ(6u, Counts[1]);
+ EXPECT_EQ(7u, Counts[2]);
+ }
+
+ for (StringRef BadName : {"_Z3foof", "_Z4quuxi", "_Z3barl", "", "_ZZZ",
+ "_Z3barf", "otherfile:_Z4quuxf"}) {
+ EXPECT_THAT_ERROR(Reader->getFunctionCounts(BadName, 0x1234, Counts),
+ Failed());
+ EXPECT_THAT_ERROR(Reader->getFunctionCounts(BadName, 0x567, Counts),
+ Failed());
+ }
+}
+
TEST_F(SparseInstrProfTest, preserve_no_records) {
Writer.addRecord({"foo", 0x1234, {0}}, Err);
Writer.addRecord({"bar", 0x4321, {0, 0}}, Err);
OpenPOWER on IntegriCloud