[PATCH] D15829: [PGO] Clang Option that enables IR level PGO instrumentation
Sean Silva via cfe-commits
cfe-commits at lists.llvm.org
Mon Jan 25 12:55:01 PST 2016
On Mon, Jan 25, 2016 at 11:00 AM, Xinliang David Li <davidxl at google.com>
wrote:
> On Fri, Jan 22, 2016 at 1:43 PM, Sean Silva <chisophugis at gmail.com> wrote:
> > silvas added a comment.
> >
> > In http://reviews.llvm.org/D15829#333902, @davidxl wrote:
> >
> >> For the longer term, one possible solution is to make FE based
> >> instrumentation only used for coverage testing which can be turned on
> >> with -fcoverage-mapping option (currently, -fcoverage-mapping can not
> >> be used alone and must be used together with
> >> -fprofile-instr-generate). To summarize:
> >>
> >> A. Current behavior:
> >>
> >> -----------------------
> >>
> >> 1. -fprofile-instr-generate turns on FE based instrumentation
> >> 2. -fprofile-instr-generate -fcoverage-mapping turns on FE based
> instrumentation and coverage mapping data generation.
> >> 3. -fprofile-instr-use=<..> assumes profile data from FE
> instrumentation.
> >>
> >> B. Proposed new behavior:
> >>
> >> --------------------------------
> >>
> >> 1. -fprofile-instr-generate turns on IR late instrumentation
> >> 2. -fcoverage-mapping turns on FE instrumentation and coverage-mapping
> >> 3. -fprofile-instr-generate -fcoverage-mapping result in compiler
> warning
> >> 4. -fprofile-instr-use=<> will automatically determine how to use the
> profile data.
> >
> >
> > Very good observation that we can determine FE or IR automatically based
> on the input profdata. That simplifies things.
> >
> >> B.2) above can be done today for improved usability.
> >
> >
> > I don't see how this improves usability. In fact, it is confusing
> because it hijacks an existing option.
> >
> > Also B.3 causes existing user builds to emit a warning, which is
> annoying.
>
> Since it is pointless to specify -fcoverage-mapping option alone, why
> not do not automatically? Yes it means some behavior change (in a good
> way) and some annoying warnings initially, but those are trivially
> fixable by the user.
>
"trivially fixable" needs to be weighed against the number of times it
needs to be fixed across the user base.
Anyway, emitting a warning for this is clearly a separate discussion
(separate even from the discussion of whether to accept just
`-fcoverage-mapping` without `-fprofile-instr-generate`), so let's not get
hung up on it.
>
>
> >
> > I would propose the following modification of B:
> >
> > C.:
> >
> > 1. -fprofile-instr-generate defaults to IR instrumentation (i.e. behaves
> exactly as before, except that it uses IR instrumentation)
> > 2. -fprofile-instr-generate -fcoverage-mapping turns on frontend
> instrumentation and coverage. (i.e. behaves exactly as before)
>
> I am fine with this -- as long as the user does not need to bear the
> burden of understanding where and how the instrumentation is done.
>
Agreed.
>
> > 3. -fprofile-instr-use=<> automatically determines which method to use
> >
> > All existing user workflows continue to work, except for workflows that
> attempt to `llvm-profdata merge` some old frontend profile data (e.g. they
> have checked-in to version control and represents some special workload)
> with the profile data from new binaries.
> >
> > Concretely, imagine the following workflow:
> >
> > clang -fprofile-instr-generate foo.c -o foo
> > ./foo
> > llvm-profdata merge default.profraw -o new.profdata
> > llvm-profdata merge new.profdata
> /versioncontrol/some-important-but-expensive-to-reproduce-workload.profdata
> -o foo.profdata
> > clang -fprofile-instr-use=foo.profdata foo.c -o foo_pgo
> >
> > I think this is a reasonable breakage. We would need to add a note in
> the release notes. Unfortunately this is not expected breakage if we claim
> to have forward compatibility for profdata (which IIRC Apple requires;
> @bogner?). But I think this case will be rare and exceptional enough that
> we can tolerate it:
> >
>
> The old profile data has to out live the program source versions which
> usually change fast. In reality, I don't expect profile data to live
> too long.
>
I don't either, but it's not unthinkable. E.g. a user may have the sources
of a dependency checked-in, and they only update the profdata for those
sources when they update the dependency.
But overall, I think that release notes mentioning the workaround for this
situation is sufficient.
-- Sean Silva
>
> > - a simple immediate workaround is to specify `-fcoverage-mapping`
> (which also adds some extra stuff, but works around the issue)
>
> This is a reasonable workaround
>
> > - Presumably
> /versioncontrol/some-important-but-expensive-to-reproduce-workload.profdata
> is regenerated with some frequency which is more frequent than upgrading
> the compiler, and so it is likely reasonable to regenerate it alongside a
> compiler upgrade, using the workaround until then.
> >
> >
> >
> >> B.1) needs a
> >
> >> transition period before the IR based instrumentation becomes
> >
> >> stablized (and can be flipped to the default). During the transition
> >
> >> period, the behavior of 1) does not change, but a cc1 option can be
> >
> >> used to turn on IR instrumentation (as proposed by Sean).
> >
> >
> > Just to clarify, users are not allowed to use cc1 options. The cc1
> option is purely for us as compiler developers to do integration and
> testing, put off some discussions for later, etc.
> >
>
> yes.
>
> thanks,
>
> David
>
> >
> > http://reviews.llvm.org/D15829
> >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160125/cd33af5f/attachment-0001.html>
More information about the cfe-commits
mailing list