summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ProfileData
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2018-10-10 21:31:01 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2018-10-10 21:31:01 +0000
commit2843635829c21e9606988429697c875c1667d62f (patch)
tree0a019554e09e3949d66e6534e3559aedf0d3269a /llvm/unittests/ProfileData
parent6ef8002c2ce4cb1120d42dcfbaa13b8baecc7c8b (diff)
downloadbcm5719-llvm-2843635829c21e9606988429697c875c1667d62f.tar.gz
bcm5719-llvm-2843635829c21e9606988429697c875c1667d62f.zip
Support for remapping profile data when symbols change, for sample-based
profiling. Reviewers: davidxl, tejohnson, dlj, erik.pilkington Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D51248 llvm-svn: 344187
Diffstat (limited to 'llvm/unittests/ProfileData')
-rw-r--r--llvm/unittests/ProfileData/SampleProfTest.cpp59
1 files changed, 40 insertions, 19 deletions
diff --git a/llvm/unittests/ProfileData/SampleProfTest.cpp b/llvm/unittests/ProfileData/SampleProfTest.cpp
index 73e8088b638..67e6e9fc95b 100644
--- a/llvm/unittests/ProfileData/SampleProfTest.cpp
+++ b/llvm/unittests/ProfileData/SampleProfTest.cpp
@@ -58,7 +58,7 @@ struct SampleProfTest : ::testing::Test {
Reader->collectFuncsToUse(M);
}
- void testRoundTrip(SampleProfileFormat Format) {
+ void testRoundTrip(SampleProfileFormat Format, bool Remap) {
SmallVector<char, 128> ProfilePath;
ASSERT_TRUE(NoError(llvm::sys::fs::createTemporaryFile("profile", "", ProfilePath)));
StringRef Profile(ProfilePath.data(), ProfilePath.size());
@@ -108,22 +108,35 @@ struct SampleProfTest : ::testing::Test {
EC = Reader->read();
ASSERT_TRUE(NoError(EC));
- StringMap<FunctionSamples> &ReadProfiles = Reader->getProfiles();
- ASSERT_EQ(2u, ReadProfiles.size());
-
- std::string FooGUID;
- StringRef FooRep = getRepInFormat(FooName, Format, FooGUID);
- FunctionSamples &ReadFooSamples = ReadProfiles[FooRep];
- ASSERT_EQ(7711u, ReadFooSamples.getTotalSamples());
- ASSERT_EQ(610u, ReadFooSamples.getHeadSamples());
-
- std::string BarGUID;
- StringRef BarRep = getRepInFormat(BarName, Format, BarGUID);
- FunctionSamples &ReadBarSamples = ReadProfiles[BarRep];
- ASSERT_EQ(20301u, ReadBarSamples.getTotalSamples());
- ASSERT_EQ(1437u, ReadBarSamples.getHeadSamples());
+ if (Remap) {
+ auto MemBuffer = llvm::MemoryBuffer::getMemBuffer(R"(
+ # Types 'int' and 'long' are equivalent
+ type i l
+ # Function names 'foo' and 'faux' are equivalent
+ name 3foo 4faux
+ )");
+ Reader.reset(new SampleProfileReaderItaniumRemapper(
+ std::move(MemBuffer), Context, std::move(Reader)));
+ FooName = "_Z4fauxi";
+ BarName = "_Z3barl";
+
+ EC = Reader->read();
+ ASSERT_TRUE(NoError(EC));
+ }
+
+ ASSERT_EQ(2u, Reader->getProfiles().size());
+
+ FunctionSamples *ReadFooSamples = Reader->getSamplesFor(FooName);
+ ASSERT_TRUE(ReadFooSamples != nullptr);
+ ASSERT_EQ(7711u, ReadFooSamples->getTotalSamples());
+ ASSERT_EQ(610u, ReadFooSamples->getHeadSamples());
+
+ FunctionSamples *ReadBarSamples = Reader->getSamplesFor(BarName);
+ ASSERT_TRUE(ReadBarSamples != nullptr);
+ ASSERT_EQ(20301u, ReadBarSamples->getTotalSamples());
+ ASSERT_EQ(1437u, ReadBarSamples->getHeadSamples());
ErrorOr<SampleRecord::CallTargetMap> CTMap =
- ReadBarSamples.findCallTargetMapAt(1, 0);
+ ReadBarSamples->findCallTargetMapAt(1, 0);
ASSERT_FALSE(CTMap.getError());
std::string MconstructGUID;
@@ -184,15 +197,23 @@ struct SampleProfTest : ::testing::Test {
};
TEST_F(SampleProfTest, roundtrip_text_profile) {
- testRoundTrip(SampleProfileFormat::SPF_Text);
+ testRoundTrip(SampleProfileFormat::SPF_Text, false);
}
TEST_F(SampleProfTest, roundtrip_raw_binary_profile) {
- testRoundTrip(SampleProfileFormat::SPF_Binary);
+ testRoundTrip(SampleProfileFormat::SPF_Binary, false);
}
TEST_F(SampleProfTest, roundtrip_compact_binary_profile) {
- testRoundTrip(SampleProfileFormat::SPF_Compact_Binary);
+ testRoundTrip(SampleProfileFormat::SPF_Compact_Binary, false);
+}
+
+TEST_F(SampleProfTest, remap_text_profile) {
+ testRoundTrip(SampleProfileFormat::SPF_Text, true);
+}
+
+TEST_F(SampleProfTest, remap_raw_binary_profile) {
+ testRoundTrip(SampleProfileFormat::SPF_Binary, true);
}
TEST_F(SampleProfTest, sample_overflow_saturation) {
OpenPOWER on IntegriCloud