diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-08-24 01:34:45 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-08-24 01:34:45 +0000 |
commit | c6ba9ca1696416cd53d86fc79ad8fe2771243e8a (patch) | |
tree | 206f20bcc5574b0504a99ceff39757fa2a9cb29a /llvm/tools/llvm-profdata | |
parent | c5f98d2ab24c466d39434c0e34f6826a77d5a0b7 (diff) | |
download | bcm5719-llvm-c6ba9ca1696416cd53d86fc79ad8fe2771243e8a.tar.gz bcm5719-llvm-c6ba9ca1696416cd53d86fc79ad8fe2771243e8a.zip |
Make llvm-profdata show -text work as advertised in the documentation.
Per LLVM's CommandGuide, llvm-profdata show -text is supposed to produce
textual output that can be passed as input to further llvm-profdata
invocations. This previously didn't work for two reasons:
1) -text was not sufficient to enable the machine-readable text format output;
instead, -text was effectively ignored if -counts was not also specified. (With
this patch, -counts is instead ignored if -text is specified, because the
machine-readable text format always includes counts.)
2) When the input data was an IR-level profile, the :ir marker was missing from
the output, resulting in a text format output that would not be usable as
profiling data due to function hash mismatches.
Differential Revision: https://reviews.llvm.org/D51188
llvm-svn: 340592
Diffstat (limited to 'llvm/tools/llvm-profdata')
-rw-r--r-- | llvm/tools/llvm-profdata/llvm-profdata.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/tools/llvm-profdata/llvm-profdata.cpp b/llvm/tools/llvm-profdata/llvm-profdata.cpp index 1a0b9e127bb..d62505af40e 100644 --- a/llvm/tools/llvm-profdata/llvm-profdata.cpp +++ b/llvm/tools/llvm-profdata/llvm-profdata.cpp @@ -600,12 +600,16 @@ static int showInstrProfile(const std::string &Filename, bool ShowCounts, decltype(MinCmp)> HottestFuncs(MinCmp); + // Add marker so that IR-level instrumentation round-trips properly. + if (TextFormat && IsIRInstr) + OS << ":ir\n"; + for (const auto &Func : *Reader) { bool Show = ShowAllFunctions || (!ShowFunction.empty() && Func.Name.find(ShowFunction) != Func.Name.npos); - bool doTextFormatDump = (Show && ShowCounts && TextFormat); + bool doTextFormatDump = (Show && TextFormat); if (doTextFormatDump) { InstrProfSymtab &Symtab = Reader->getSymtab(); @@ -679,7 +683,7 @@ static int showInstrProfile(const std::string &Filename, bool ShowCounts, if (Reader->hasError()) exitWithError(Reader->getError(), Filename); - if (ShowCounts && TextFormat) + if (TextFormat) return 0; std::unique_ptr<ProfileSummary> PS(Builder.getSummary()); OS << "Instrumentation level: " |