diff options
author | Dehao Chen <dehao@google.com> | 2016-03-03 18:09:32 +0000 |
---|---|---|
committer | Dehao Chen <dehao@google.com> | 2016-03-03 18:09:32 +0000 |
commit | 57d1dda5581594ebdfabcb899bd224d037105a1a (patch) | |
tree | 6773547961c94d7a8218d714778f0e2086409f57 /llvm/lib/ProfileData/SampleProfReader.cpp | |
parent | 022afe253865ce20a9af2cb4dec31e10a3977aa6 (diff) | |
download | llvm-57d1dda5581594ebdfabcb899bd224d037105a1a.zip llvm-57d1dda5581594ebdfabcb899bd224d037105a1a.tar.gz llvm-57d1dda5581594ebdfabcb899bd224d037105a1a.tar.bz2 |
Use LineLocation instead of CallsiteLocation to index callsite profile.
Summary: With discriminator, LineLocation can uniquely identify a callsite without the need to specifying callee name. Remove Callee function name from the key, and put it in the value (FunctionSamples).
Reviewers: davidxl, dnovillo
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D17827
llvm-svn: 262634
Diffstat (limited to 'llvm/lib/ProfileData/SampleProfReader.cpp')
-rw-r--r-- | llvm/lib/ProfileData/SampleProfReader.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/llvm/lib/ProfileData/SampleProfReader.cpp b/llvm/lib/ProfileData/SampleProfReader.cpp index 205e34d..a96c4fc 100644 --- a/llvm/lib/ProfileData/SampleProfReader.cpp +++ b/llvm/lib/ProfileData/SampleProfReader.cpp @@ -69,11 +69,8 @@ static bool ParseHead(const StringRef &Input, StringRef &FName, return true; } - /// \brief Returns true if line offset \p L is legal (only has 16 bits). -static bool isOffsetLegal(unsigned L) { - return (L & 0xffff) == L; -} +static bool isOffsetLegal(unsigned L) { return (L & 0xffff) == L; } /// \brief Parse \p Input as line sample. /// @@ -181,6 +178,7 @@ std::error_code SampleProfileReaderText::read() { } Profiles[FName] = FunctionSamples(); FunctionSamples &FProfile = Profiles[FName]; + FProfile.setName(FName); MergeResult(Result, FProfile.addTotalSamples(NumSamples)); MergeResult(Result, FProfile.addHeadSamples(NumHeadSamples)); InlineStack.clear(); @@ -203,7 +201,8 @@ std::error_code SampleProfileReaderText::read() { InlineStack.pop_back(); } FunctionSamples &FSamples = InlineStack.back()->functionSamplesAt( - CallsiteLocation(LineOffset, Discriminator, FName)); + LineLocation(LineOffset, Discriminator)); + FSamples.setName(FName); MergeResult(Result, FSamples.addTotalSamples(NumSamples)); InlineStack.push_back(&FSamples); } else { @@ -354,8 +353,9 @@ SampleProfileReaderBinary::readProfile(FunctionSamples &FProfile) { if (std::error_code EC = FName.getError()) return EC; - FunctionSamples &CalleeProfile = FProfile.functionSamplesAt( - CallsiteLocation(*LineOffset, *Discriminator, *FName)); + FunctionSamples &CalleeProfile = + FProfile.functionSamplesAt(LineLocation(*LineOffset, *Discriminator)); + CalleeProfile.setName(*FName); if (std::error_code EC = readProfile(CalleeProfile)) return EC; } @@ -375,6 +375,7 @@ std::error_code SampleProfileReaderBinary::read() { Profiles[*FName] = FunctionSamples(); FunctionSamples &FProfile = Profiles[*FName]; + FProfile.setName(*FName); FProfile.addHeadSamples(*NumHeadSamples); @@ -625,8 +626,9 @@ std::error_code SampleProfileReaderGCC::readOneFunctionProfile( uint32_t LineOffset = Offset >> 16; uint32_t Discriminator = Offset & 0xffff; FProfile = &CallerProfile->functionSamplesAt( - CallsiteLocation(LineOffset, Discriminator, Name)); + LineLocation(LineOffset, Discriminator)); } + FProfile->setName(Name); for (uint32_t I = 0; I < NumPosCounts; ++I) { uint32_t Offset; |