diff options
author | Vedant Kumar <vsk@apple.com> | 2016-01-29 22:54:45 +0000 |
---|---|---|
committer | Vedant Kumar <vsk@apple.com> | 2016-01-29 22:54:45 +0000 |
commit | 00dab22853e7e49186783cdf64232e8a97274573 (patch) | |
tree | eda404a9c6b25786748f57e010cb491cd249fd33 /llvm/tools/llvm-profdata/llvm-profdata.cpp | |
parent | b046154ae9c09c8b9e1dd96fdc09998e0e50fb15 (diff) | |
download | bcm5719-llvm-00dab22853e7e49186783cdf64232e8a97274573.tar.gz bcm5719-llvm-00dab22853e7e49186783cdf64232e8a97274573.zip |
[Profiling] Add a -sparse mode to llvm-profdata merge
Add an option to llvm-profdata merge for writing out sparse indexed
profiles. These profiles omit InstrProfRecords for functions which are
never executed.
Differential Revision: http://reviews.llvm.org/D16727
llvm-svn: 259258
Diffstat (limited to 'llvm/tools/llvm-profdata/llvm-profdata.cpp')
-rw-r--r-- | llvm/tools/llvm-profdata/llvm-profdata.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/llvm/tools/llvm-profdata/llvm-profdata.cpp b/llvm/tools/llvm-profdata/llvm-profdata.cpp index c6efacb3554..9d926531503 100644 --- a/llvm/tools/llvm-profdata/llvm-profdata.cpp +++ b/llvm/tools/llvm-profdata/llvm-profdata.cpp @@ -107,7 +107,7 @@ typedef SmallVector<WeightedFile, 5> WeightedFileVector; static void mergeInstrProfile(const WeightedFileVector &Inputs, StringRef OutputFilename, - ProfileFormat OutputFormat) { + ProfileFormat OutputFormat, bool OutputSparse) { if (OutputFilename.compare("-") == 0) exitWithError("Cannot write indexed profdata format to stdout."); @@ -119,7 +119,7 @@ static void mergeInstrProfile(const WeightedFileVector &Inputs, if (EC) exitWithErrorCode(EC, OutputFilename); - InstrProfWriter Writer; + InstrProfWriter Writer(OutputSparse); SmallSet<std::error_code, 4> WriterErrorCodes; for (const auto &Input : Inputs) { auto ReaderOrErr = InstrProfReader::create(Input.Filename); @@ -228,6 +228,9 @@ static int merge_main(int argc, const char *argv[]) { "GCC encoding (only meaningful for -sample)"), clEnumValEnd)); + cl::opt<bool> OutputSparse("sparse", cl::init(false), + cl::desc("Generate a sparse profile (only meaningful for -instr)")); + cl::ParseCommandLineOptions(argc, argv, "LLVM profile data merger\n"); if (InputFilenames.empty() && WeightedInputFilenames.empty()) @@ -241,7 +244,8 @@ static int merge_main(int argc, const char *argv[]) { WeightedInputs.push_back(parseWeightedFile(WeightedFilename)); if (ProfileKind == instr) - mergeInstrProfile(WeightedInputs, OutputFilename, OutputFormat); + mergeInstrProfile(WeightedInputs, OutputFilename, OutputFormat, + OutputSparse); else mergeSampleProfile(WeightedInputs, OutputFilename, OutputFormat); |