[PATCH] D51188: make llvm-profdata show -text work as advertised in the documentation

Richard Smith - zygoloid via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 23 15:20:46 PDT 2018


rsmith created this revision.
rsmith added a reviewer: davidxl.
Herald added a subscriber: llvm-commits.

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 doesn't currently 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.


Repository:
  rL LLVM

https://reviews.llvm.org/D51188

Files:
  test/tools/llvm-profdata/roundtrip.test
  tools/llvm-profdata/llvm-profdata.cpp


Index: tools/llvm-profdata/llvm-profdata.cpp
===================================================================
--- tools/llvm-profdata/llvm-profdata.cpp
+++ tools/llvm-profdata/llvm-profdata.cpp
@@ -600,12 +600,16 @@
                       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 @@
   if (Reader->hasError())
     exitWithError(Reader->getError(), Filename);
 
-  if (ShowCounts && TextFormat)
+  if (TextFormat)
     return 0;
   std::unique_ptr<ProfileSummary> PS(Builder.getSummary());
   OS << "Instrumentation level: "
Index: test/tools/llvm-profdata/roundtrip.test
===================================================================
--- test/tools/llvm-profdata/roundtrip.test
+++ test/tools/llvm-profdata/roundtrip.test
@@ -0,0 +1,6 @@
+RUN: llvm-profdata merge -o %t.0.profdata %S/Inputs/IR_profile.proftext
+RUN: llvm-profdata show -o %t.0.proftext -all-functions -text %t.0.profdata 
+RUN: diff %t.0.proftext %S/Inputs/IR_profile.proftext
+RUN: llvm-profdata merge -o %t.1.profdata %t.0.proftext
+RUN: llvm-profdata show -o %t.1.proftext -all-functions -text %t.1.profdata 
+RUN: diff %t.1.proftext %S/Inputs/IR_profile.proftext


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D51188.162273.patch
Type: text/x-patch
Size: 1686 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180823/2979702d/attachment.bin>


More information about the llvm-commits mailing list