-fnon-call-exceptions + -fprofile-arcs on x86
Nathan Sidwell
nathan@codesourcery.com
Mon May 10 16:20:00 GMT 2004
Eric Botcazou wrote:
Hi,
We ran into a problem with -fnon-call-exceptions + -fprofile-arcs on x86.
Now -fnon-call-exception is the default for Ada, so the problem is already
present with -fprofile-arcs for the Ada compiler (and further exacerbated by
-fstack-check).
-fprofile-arcs needs to add increment insns on some edges of the CFG. The
'add' insns on x86 clobber the condition code register so -fprofile-arcs
wreaks havoc when the condition code register is live on the edges it adds
insns on.
It's possible (and very easy with -fstack-check) to have the condition code
register live on edges with -fnon-call-exceptions: a compare-and-jump
construct whose operands are trapping MEMs is sufficient. This leads to
wrong code because the compare is eventually deleted.
Now to the question: is this fixable in profile.c?
I don't see how, one of the two edges must be counted. The exceptional
edge cannot be, because there's no actual flow there. So profile must
add the incrementing code on the fall through edge.
> If no, would a patch that
prevents the middle-end from generating compare-and-jump constructs that
span two basic blocks be acceptable?
I guess what needs to happen is that (when -fprofile-arcs is on) cc0 is
clobbered at the end of every block.
nathan
--
Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery LLC
nathan@codesourcery.com :: http://www.planetfall.pwp.blueyonder.co.uk
More information about the Gcc
mailing list