diff options
author | William Junda Huang <williamjhuang@google.com> | 2024-08-28 20:33:54 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-28 20:33:54 -0400 |
commit | 75e9d191f52b047ea839f75ab2a7a7d9f8c6becd (patch) | |
tree | ca8d64bccd9742ad292fd15406618e705374ef84 /llvm/tools/llvm-profdata/llvm-profdata.cpp | |
parent | a7ba73bf614f6d147bd1cdaddee156bd85e31703 (diff) | |
download | llvm-75e9d191f52b047ea839f75ab2a7a7d9f8c6becd.zip llvm-75e9d191f52b047ea839f75ab2a7a7d9f8c6becd.tar.gz llvm-75e9d191f52b047ea839f75ab2a7a7d9f8c6becd.tar.bz2 |
[llvm-profdata] Enabled functionality to write split-layout profile (#101795)
Using the flag `-split_layout` in llvm-profdata merge, the output
profile can write profiles with and without inlined function into two
different extbinary sections (and their FuncOffsetTable too). The
section without inlined functions are marked with `SecFlagFlat` and is
skipped by ThinLTO because it provides no useful info.
The split layout feature was already implemented in SampleProfWriter but
previously there is no way to use it from llvm-profdata.
Diffstat (limited to 'llvm/tools/llvm-profdata/llvm-profdata.cpp')
-rw-r--r-- | llvm/tools/llvm-profdata/llvm-profdata.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/tools/llvm-profdata/llvm-profdata.cpp b/llvm/tools/llvm-profdata/llvm-profdata.cpp index 1f6c4c6..3b775de 100644 --- a/llvm/tools/llvm-profdata/llvm-profdata.cpp +++ b/llvm/tools/llvm-profdata/llvm-profdata.cpp @@ -207,6 +207,12 @@ cl::opt<bool> GenPartialProfile( "gen-partial-profile", cl::init(false), cl::Hidden, cl::sub(MergeSubcommand), cl::desc("Generate a partial profile (only meaningful for -extbinary)")); +cl::opt<bool> SplitLayout( + "split-layout", cl::init(false), cl::Hidden, + cl::sub(MergeSubcommand), + cl::desc("Split the profile to two sections with one containing sample " + "profiles with inlined functions and the other without (only " + "meaningful for -extbinary)")); cl::opt<std::string> SupplInstrWithSample( "supplement-instr-with-sample", cl::init(""), cl::Hidden, cl::sub(MergeSubcommand), @@ -1467,6 +1473,13 @@ static void handleExtBinaryWriter(sampleprof::SampleProfileWriter &Writer, sampleprof::ProfileSymbolList &WriterList, bool CompressAllSections, bool UseMD5, bool GenPartialProfile) { + if (SplitLayout) { + if (OutputFormat == PF_Binary) + warn("-split-layout is ignored. Specify -extbinary to enable it"); + else + Writer.setUseCtxSplitLayout(); + } + populateProfileSymbolList(Buffer, WriterList); if (WriterList.size() > 0 && OutputFormat != PF_Ext_Binary) warn("Profile Symbol list is not empty but the output format is not " |