Index: llvm/trunk/test/tools/llvm-profdata/roundtrip.test =================================================================== --- llvm/trunk/test/tools/llvm-profdata/roundtrip.test +++ llvm/trunk/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 Index: llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp =================================================================== --- llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp +++ llvm/trunk/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 PS(Builder.getSummary()); OS << "Instrumentation level: "