[llvm] r372439 - [SampleFDO] Expose an interface to return the size of a section or the size
Wei Mi via llvm-commits
llvm-commits at lists.llvm.org
Sat Sep 21 12:39:25 PDT 2019
Sorry for the break. Fixed the problem and recommitted at rL372478.
On Sat, Sep 21, 2019 at 2:11 AM Amara Emerson <aemerson at apple.com> wrote:
> Hi,
>
> This commit seems to have broken the Mac build/greendragon bots for a
> while:
> http://green.lab.llvm.org/green/job/clang-stage1-cmake-RA-incremental/2582
>
> I’ve reverted it r372464.
>
> Thanks,
> Amara
>
> > On Sep 20, 2019, at 4:24 PM, Wei Mi via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
> >
> > Author: wmi
> > Date: Fri Sep 20 16:24:50 2019
> > New Revision: 372439
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=372439&view=rev
> > Log:
> > [SampleFDO] Expose an interface to return the size of a section or the
> size
> > of the profile for profile in ExtBinary format.
> >
> > Sometimes we want to limit the size of the profile by stripping some
> functions
> > with low sample count or by stripping some function names with small
> text size
> > from profile symbol list. That requires the profile reader to have the
> > interfaces returning the size of a section or the size of total profile.
> The
> > patch add those interfaces.
> >
> > At the same time, add some dump facility to show the size of each
> section.
> >
> >
> > Added:
> > llvm/trunk/test/tools/llvm-profdata/show-prof-size.test
> > Modified:
> > llvm/trunk/include/llvm/ProfileData/SampleProf.h
> > llvm/trunk/include/llvm/ProfileData/SampleProfReader.h
> > llvm/trunk/lib/ProfileData/SampleProfReader.cpp
> > llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp
> >
> > Modified: llvm/trunk/include/llvm/ProfileData/SampleProf.h
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ProfileData/SampleProf.h?rev=372439&r1=372438&r2=372439&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/include/llvm/ProfileData/SampleProf.h (original)
> > +++ llvm/trunk/include/llvm/ProfileData/SampleProf.h Fri Sep 20 16:24:50
> 2019
> > @@ -125,6 +125,22 @@ enum SecType {
> > SecLBRProfile = SecFuncProfileFirst
> > };
> >
> > +static inline std::string getSecName(SecType Type) {
> > + switch (Type) {
> > + case SecInValid:
> > + return "InvalidSection";
> > + case SecProfSummary:
> > + return "ProfileSummarySection";
> > + case SecNameTable:
> > + return "NameTableSection";
> > + case SecProfileSymbolList:
> > + return "ProfileSymbolListSection";
> > + case SecLBRProfile:
> > + return "LBRProfileSection";
> > + }
> > + llvm_unreachable("A SecType has no name for output");
> > +}
> > +
> > // Entry type of section header table used by
> SampleProfileExtBinaryBaseReader
> > // and SampleProfileExtBinaryBaseWriter.
> > struct SecHdrTableEntry {
> >
> > Modified: llvm/trunk/include/llvm/ProfileData/SampleProfReader.h
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ProfileData/SampleProfReader.h?rev=372439&r1=372438&r2=372439&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/include/llvm/ProfileData/SampleProfReader.h (original)
> > +++ llvm/trunk/include/llvm/ProfileData/SampleProfReader.h Fri Sep 20
> 16:24:50 2019
> > @@ -333,6 +333,7 @@ public:
> > /// It includes all the names that have samples either in outline
> instance
> > /// or inline instance.
> > virtual std::vector<StringRef> *getNameTable() { return nullptr; }
> > + virtual bool dumpSectionInfo(raw_ostream &OS = dbgs()) { return
> false; };
> >
> > protected:
> > /// Map every function to its associated profile.
> > @@ -504,6 +505,12 @@ public:
> >
> > /// Read sample profiles in extensible format from the associated file.
> > std::error_code read() override;
> > +
> > + /// Get the total size of all \p Type sections.
> > + uint64_t getSectionSize(SecType Type);
> > + /// Get the total size of header and all sections.
> > + uint64_t getFileSize();
> > + virtual bool dumpSectionInfo(raw_ostream &OS = dbgs()) override;
> > };
> >
> > class SampleProfileReaderExtBinary : public
> SampleProfileReaderExtBinaryBase {
> >
> > Modified: llvm/trunk/lib/ProfileData/SampleProfReader.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/SampleProfReader.cpp?rev=372439&r1=372438&r2=372439&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/ProfileData/SampleProfReader.cpp (original)
> > +++ llvm/trunk/lib/ProfileData/SampleProfReader.cpp Fri Sep 20 16:24:50
> 2019
> > @@ -667,6 +667,36 @@ std::error_code SampleProfileReaderExtBi
> > return sampleprof_error::success;
> > }
> >
> > +uint64_t SampleProfileReaderExtBinaryBase::getSectionSize(SecType Type)
> {
> > + for (auto &Entry : SecHdrTable) {
> > + if (Entry.Type == Type)
> > + return Entry.Size;
> > + }
> > + return 0;
> > +}
> > +
> > +uint64_t SampleProfileReaderExtBinaryBase::getFileSize() {
> > + auto &LastEntry = SecHdrTable.back();
> > + return LastEntry.Offset + LastEntry.Size;
> > +}
> > +
> > +bool SampleProfileReaderExtBinaryBase::dumpSectionInfo(raw_ostream &OS)
> {
> > + uint64_t TotalSecsSize = 0;
> > + for (auto &Entry : SecHdrTable) {
> > + OS << getSecName(Entry.Type) << " - Offset: " << Entry.Offset
> > + << ", Size: " << Entry.Size << "\n";
> > + TotalSecsSize += getSectionSize(Entry.Type);
> > + }
> > + uint64_t HeaderSize = SecHdrTable.front().Offset;
> > + assert(HeaderSize + TotalSecsSize == getFileSize() &&
> > + "Size of 'header + sections' doesn't match the total size of
> profile");
> > +
> > + OS << "Header Size: " << HeaderSize << "\n";
> > + OS << "Total Sections Size: " << TotalSecsSize << "\n";
> > + OS << "File Size: " << getFileSize() << "\n";
> > + return true;
> > +}
> > +
> > std::error_code SampleProfileReaderBinary::readMagicIdent() {
> > // Read and check the magic identifier.
> > auto Magic = readNumber<uint64_t>();
> >
> > Added: llvm/trunk/test/tools/llvm-profdata/show-prof-size.test
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-profdata/show-prof-size.test?rev=372439&view=auto
> >
> ==============================================================================
> > --- llvm/trunk/test/tools/llvm-profdata/show-prof-size.test (added)
> > +++ llvm/trunk/test/tools/llvm-profdata/show-prof-size.test Fri Sep 20
> 16:24:50 2019
> > @@ -0,0 +1,7 @@
> > +; RUN: llvm-profdata merge -sample -extbinary
> -prof-sym-list=%S/Inputs/profile-symbol-list-1.text
> %S/Inputs/sample-profile.proftext -o %t.1.output
> > +; RUN: ls -l %t.1.output |cut -f5 -d ' ' > %t.txt
> > +; RUN: llvm-profdata show -sample -show-sec-info-only %t.1.output >>
> %t.txt
> > +; RUN: FileCheck %s --input-file=%t.txt
> > +; Check llvm-profdata shows the correct file size.
> > +; CHECK: [[FILESIZE:.*]]
> > +; CHECK: [[FILESIZE]]
> >
> > Modified: llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp?rev=372439&r1=372438&r2=372439&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp (original)
> > +++ llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp Fri Sep 20 16:24:50
> 2019
> > @@ -982,10 +982,21 @@ static int showInstrProfile(const std::s
> > return 0;
> > }
> >
> > +static void showSectionInfo(sampleprof::SampleProfileReader *Reader,
> > + raw_fd_ostream &OS) {
> > + if (!Reader->dumpSectionInfo(OS)) {
> > + WithColor::warning() << "-show-sec-info-only is only supported for "
> > + << "sample profile in extbinary format and is "
> > + << "ignored for other formats.\n";
> > + return;
> > + }
> > +}
> > +
> > static int showSampleProfile(const std::string &Filename, bool
> ShowCounts,
> > bool ShowAllFunctions,
> > const std::string &ShowFunction,
> > - bool ShowProfileSymbolList, raw_fd_ostream
> &OS) {
> > + bool ShowProfileSymbolList,
> > + bool ShowSectionInfoOnly, raw_fd_ostream
> &OS) {
> > using namespace sampleprof;
> > LLVMContext Context;
> > auto ReaderOrErr = SampleProfileReader::create(Filename, Context);
> > @@ -993,6 +1004,12 @@ static int showSampleProfile(const std::
> > exitWithErrorCode(EC, Filename);
> >
> > auto Reader = std::move(ReaderOrErr.get());
> > +
> > + if (ShowSectionInfoOnly) {
> > + showSectionInfo(Reader.get(), OS);
> > + return 0;
> > + }
> > +
> > if (std::error_code EC = Reader->read())
> > exitWithErrorCode(EC, Filename);
> >
> > @@ -1062,6 +1079,11 @@ static int show_main(int argc, const cha
> > cl::opt<bool> ShowProfileSymbolList(
> > "show-prof-sym-list", cl::init(false),
> > cl::desc("Show profile symbol list if it exists in the profile.
> "));
> > + cl::opt<bool> ShowSectionInfoOnly(
> > + "show-sec-info-only", cl::init(false),
> > + cl::desc("Show the information of each section in the sample
> profile. "
> > + "The flag is only usable when the sample profile is in "
> > + "extbinary format"));
> >
> > cl::ParseCommandLineOptions(argc, argv, "LLVM profile data summary\n");
> >
> > @@ -1090,7 +1112,8 @@ static int show_main(int argc, const cha
> > OnlyListBelow, ShowFunction, TextFormat, OS);
> > else
> > return showSampleProfile(Filename, ShowCounts, ShowAllFunctions,
> > - ShowFunction, ShowProfileSymbolList, OS);
> > + ShowFunction, ShowProfileSymbolList,
> > + ShowSectionInfoOnly, OS);
> > }
> >
> > int main(int argc, const char *argv[]) {
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org
> > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190921/52e2e7cd/attachment.html>
More information about the llvm-commits
mailing list