This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Patch to fix incorrect hard register life information
- To: Bernd Schmidt <crux at pool dot informatik dot rwth-aachen dot de>
- Subject: Re: Patch to fix incorrect hard register life information
- From: Jeffrey A Law <law at cygnus dot com>
- Date: Fri, 04 Sep 1998 03:07:18 -0600
- cc: Jason Merrill <jason at cygnus dot com>, egcs-patches at cygnus dot com
- Reply-To: law at cygnus dot com
In message <Pine.GSO.4.02A.9809021459580.21122-100000@matula.informatik.rwth-aachen.de>you write:
> The real problem is that flow makes edges in the cfg from the basic blocks
> that contain REG_LABEL notes for the eh_stub labels, but those labels are
> in fact reached from the last basic block.
If that's the case, then the solution is to fix the cfg we product. An
inaccurate cfg leads to all kinds of problems.
So let's make sure I understand the problem. There is one weird function
in libgcc2 where the last block needs an edge to a magic label?
By last block do we really mean the epilogue?
And presumably there's no way to identify this magic label other than
by having except.c keep track of it for us when it expands __builtin_eh_sub?
(either by marking the label specially or keeping a pointer to it which
we can check in flow)
Jason -- is there any other place where __builtin_eh_stub could be
expanded? Is that particular builtin ever something a user can/should
use?
Normally I don't think you can assume the last block reaches the
epilogue -- consider function which don't have an epilogue because
they never return or unconditionally calls a nonreturning function.
But I think in this case we are probably safe.
jeff