summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorDiego Novillo <dnovillo@google.com>2014-10-30 18:00:06 +0000
committerDiego Novillo <dnovillo@google.com>2014-10-30 18:00:06 +0000
commitc572e92c763f44bddfa30bc43e9027547b72dbfa (patch)
treeaeabaa930d4db8badc1d18835bc8eaebc4dfb4ee /llvm/lib/Transforms
parent98b6546dded3a531dcab29318ad44169215915b0 (diff)
downloadbcm5719-llvm-c572e92c763f44bddfa30bc43e9027547b72dbfa.tar.gz
bcm5719-llvm-c572e92c763f44bddfa30bc43e9027547b72dbfa.zip
Add profile writing capabilities for sampling profiles.
Summary: This patch finishes up support for handling sampling profiles in both text and binary formats. The new binary format uses uleb128 encoding to represent numeric values. This makes profiles files about 25% smaller. The profile writer class can write profiles in the existing text and the new binary format. In subsequent patches, I will add the capability to read (and perhaps write) profiles in the gcov format used by GCC. Additionally, I will be adding support in llvm-profdata to manipulate sampling profiles. There was a bit of refactoring needed to separate some code that was in the reader files, but is actually common to both the reader and writer. The new test checks that reading the same profile encoded as text or raw, produces the same results. Reviewers: bogner, dexonsmith Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D6000 llvm-svn: 220915
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/Scalar/SampleProfile.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Scalar/SampleProfile.cpp b/llvm/lib/Transforms/Scalar/SampleProfile.cpp
index fedbcf3a7c0..8d5480c7cb5 100644
--- a/llvm/lib/Transforms/Scalar/SampleProfile.cpp
+++ b/llvm/lib/Transforms/Scalar/SampleProfile.cpp
@@ -737,8 +737,14 @@ INITIALIZE_PASS_END(SampleProfileLoader, "sample-profile",
"Sample Profile loader", false, false)
bool SampleProfileLoader::doInitialization(Module &M) {
- Reader.reset(new SampleProfileReader(M, Filename));
- ProfileIsValid = Reader->load();
+ if (std::error_code EC =
+ SampleProfileReader::create(Filename, Reader, M.getContext())) {
+ std::string Msg = "Could not open profile: " + EC.message();
+ DiagnosticInfoSampleProfile Diag(Filename.data(), Msg);
+ M.getContext().diagnose(Diag);
+ return false;
+ }
+ ProfileIsValid = (Reader->read() == sampleprof_error::success);
return true;
}
OpenPOWER on IntegriCloud