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.

B.2) above can be done today for improved usability. 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).


In the real longer term, I think IR based instrumentation can also be
used for coverage testing too (by disabling some pre-optimizations and
pre-inlining needed for PGO purpose) -- but this is a different topic
to be discussed.

thanks,

David









On Thu, Jan 21, 2016 at 7:40 PM, Sean Silva <chisophu...@gmail.com> wrote:
> silvas added a comment.
>
> @bogner btw, did you say that at Apple you guys have a requirement of 
> supporting existing profdata? I.e. users can pass older profdata to a newer 
> compiler?
>
> Realistically, it would be nice if our PGO offering defaulted to the IR stuff 
> (since it seems like it is going to be the focus of optimization work and so 
> is likely to be our best-performing offering). But if we need to support 
> profdata across versions of clang, that puts us in a thorny situation because 
> suddenly `clang -c foo.c 
> -fprofile-instr-use=old-profdata-from-frontend-instrumentation.profdata` has 
> a default meaning equivalent to `clang -c foo.c -fir-level-instrumentation 
> -fprofile-instr-use=old-profdata-from-frontend-instrumentation.profdata` 
> (setting aside the flag name issue), which is a case we want to error on due 
> to mismatch between frontend and IR-level instrumentation.
>
>
> http://reviews.llvm.org/D15829
>
>
>
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to