Automatic PGO - Initial implementation (1/N)

Evan Cheng evan.cheng at apple.com
Wed Sep 25 17:54:06 PDT 2013


On Sep 25, 2013, at 9:29 AM, Diego Novillo <dnovillo at google.com> wrote:

> On Wed, Sep 25, 2013 at 12:11 PM, Evan Cheng <evan.cheng at apple.com> wrote:
>> Hi Diego,
>> 
>> I am curious. Why is this called automatic PGO? Why is it automatic?
> 
> The name is derived from the first implementation that we implemented
> at Google (http://gcc.gnu.org/wiki/AutoFDO). It's "automatic" because
> it does not rely on instrumentation. The goal is to use external
> sources of profile (the most common example is Perf or Oprofile),
> which provide low overhead and can be applied to production
> deployments. So, we can also get rid of the traditional training
> phase.
> 
>> Also, why is the auto-profile part done as a scalar transformation pass? Did you consider alternatives?
> 
> This may be just me not knowing where to do this properly. Initially,
> I had implemented it as an analysis, but since it modifies the code I
> was violating the principle that analyses are not supposed to modify
> the IR. The transformation does not need interprocedural information,
> so putting it in the scalar transformations module seemed like a good
> fit.
> 
> I'm open to better options, of course.

Hmm. Scalar transformation seems *wrong* but you are right it can't an analysis pass. A couple of ideas:

1. Can we implement it not as a pass but a utility that clients can use?
2. Move it to lib/Transform/Instrumentation?

Evan

> 
> 
> Diego.




More information about the llvm-commits mailing list