SamplePGO - Add initial support for inliner annotations.
authorDiego Novillo <dnovillo@google.com>
Fri, 27 Nov 2015 23:14:51 +0000 (23:14 +0000)
committerDiego Novillo <dnovillo@google.com>
Fri, 27 Nov 2015 23:14:51 +0000 (23:14 +0000)
commitc738af5a7f115bed34f6b05660d8ce35c03726f2
treec1c0ac4d2a7a5e6664ab14ad9ce9e994ec6ddb46
parent2badfee8a86a6b91d29138c3d9ca15e88db293c4
SamplePGO - Add initial support for inliner annotations.

This adds two thresholds to the sample profiler to affect inlining
decisions: the concept of global hotness and coldness.

Functions that have accumulated more than a certain fraction of samples at
runtime, are annotated with the InlineHint attribute. Conversely,
functions that accumulate less than a certain fraction of samples, are
annotated with the Cold attribute.

This is very similar to the hints emitted by Clang when using
instrumentation profiles.

Notice that this is a very blunt instrument. A function may have
globally collected a significant fraction of samples, but that does not
necessarily mean that every callsite for that function is hot.

Ideally, we would annotate each callsite with the samples collected at
that callsite. This way, the inliner can incorporate all these weights
into its cost model.

Once the inliner offers this functionality, we can change the hints
emitted here to a more precise per-callsite annotation. For now, this is
providing some measure of speedups with our internal benchmarks. I've
observed speedups of up to 23% (though the geo mean is about 3%). I expect
these numbers to improve as the inliner gets better annotations.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254212 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/IPO/SampleProfile.cpp
test/Transforms/SampleProfile/Inputs/inline-hint.prof [new file with mode: 0644]
test/Transforms/SampleProfile/inline-hint.ll [new file with mode: 0644]