[llvm] r340592 - Make llvm-profdata show -text work as advertised in the documentation.

Richard Smith via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 23 18:34:46 PDT 2018


Author: rsmith
Date: Thu Aug 23 18:34:45 2018
New Revision: 340592

URL: http://llvm.org/viewvc/llvm-project?rev=340592&view=rev
Log:
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

Added:
    llvm/trunk/test/tools/llvm-profdata/roundtrip.test
Modified:
    llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp

Added: llvm/trunk/test/tools/llvm-profdata/roundtrip.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-profdata/roundtrip.test?rev=340592&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-profdata/roundtrip.test (added)
+++ llvm/trunk/test/tools/llvm-profdata/roundtrip.test Thu Aug 23 18:34:45 2018
@@ -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

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=340592&r1=340591&r2=340592&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp (original)
+++ llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp Thu Aug 23 18:34:45 2018
@@ -600,12 +600,16 @@ static int showInstrProfile(const std::s
                       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::s
   if (Reader->hasError())
     exitWithError(Reader->getError(), Filename);
 
-  if (ShowCounts && TextFormat)
+  if (TextFormat)
     return 0;
   std::unique_ptr<ProfileSummary> PS(Builder.getSummary());
   OS << "Instrumentation level: "




More information about the llvm-commits mailing list