http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44777
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Attachment #26239|0 |1 is obsolete| | --- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-01-04 19:41:17 UTC --- Created attachment 26242 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26242 gcc47-pr44777.patch Unfortunately that patch regressed tree-prof/pr34999.c on i?86. The bb's of __builtin_setjmp_receiver (and __builtin_setjmp_dispatcher) contain abnormal incoming and outgoing edges, therefore with the patch we want to split them, which apparently is nothing the __builtin_setjmp_* expansion is prepared for. In particular the code was first "optimized" so that the 64-bit counters are in some places shadowed in local stack slots, but accessing those slots using %ebp before the blockage from __builtin_setjmp_receiver means %ebp contains some bad value rather than the correct one that __builtin_setjmp_receiver computes. So, either we don't split bbs starting with these two builtins as done in this new version of the patch, or perhaps we should just ignore some of the edges between the 3 __builtin_setjmp_* builtins altogether for profiling purposes.