[patch] Prevent -fprofile-arcs and -fbranch-probabilities rtl from diverging
Nathan Sidwell
nathan@codesourcery.com
Mon Mar 15 13:54:00 GMT 2004
Zdenek,
> in code that calls fork or exec functions, the rtl generated for
> -fprofile-arcs slightly differ from the one generated for
> -fbranch-probabilities, since in the former case we insert calls to
> gcov_flush before fork/exec. This may cause the code diverge (as indeed
> happened to me during value profiling enhancement testing) enough so
> that the counters issued with -fprofile-arcs do not those that
> -fbranch-probabilities expects.
>
> This patch fixes it (or better said, moves it closer to the correct
> state) by replacing the fork/exec call by a call to a library function
> that calls gcov_flush and the original function, in the program compiled
> with -fprofile-arcs. This makes the code more similar, thus preventing
> the divergence.
Hmm, it's not immediately obvious to me as to why inserting the
gcov_flush call causes the bb graph to change. Unless there's a
no-return edge being inserted. couldn't we supress that edge
for this particular call?
> Of course this will become unnecesary once the profiling is done on
> trees, since there it won't be a problem to insert the gcov_flush
> calls after the profile feedback stage.
This patch is large and it is a stopgap measure within
the current development series. We run the significant risk of it
remaining in the compiler after ssa obsoletes it.
nathan
--
Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery LLC
nathan@codesourcery.com :: http://www.planetfall.pwp.blueyonder.co.uk
More information about the Gcc-patches
mailing list