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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220915 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Diego Novillo
2014-10-30 18:00:06 +00:00
parent 487dfd6e80
commit e75c2b3e54
12 changed files with 919 additions and 146 deletions

View File

@@ -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;
}