diff options
| -rw-r--r-- | llvm/test/tools/llvm-profdata/roundtrip.test | 6 | ||||
| -rw-r--r-- | llvm/tools/llvm-profdata/llvm-profdata.cpp | 8 |
2 files changed, 12 insertions, 2 deletions
diff --git a/llvm/test/tools/llvm-profdata/roundtrip.test b/llvm/test/tools/llvm-profdata/roundtrip.test new file mode 100644 index 00000000000..eda2720f454 --- /dev/null +++ b/llvm/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 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: " |

