summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-profdata/llvm-profdata.cpp
diff options
context:
space:
mode:
authorVedant Kumar <vsk@apple.com>2016-01-29 22:54:45 +0000
committerVedant Kumar <vsk@apple.com>2016-01-29 22:54:45 +0000
commit00dab22853e7e49186783cdf64232e8a97274573 (patch)
treeeda404a9c6b25786748f57e010cb491cd249fd33 /llvm/tools/llvm-profdata/llvm-profdata.cpp
parentb046154ae9c09c8b9e1dd96fdc09998e0e50fb15 (diff)
downloadbcm5719-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.cpp10
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);
OpenPOWER on IntegriCloud