This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: PATCH for PR 2828: Testers needed!


On Fri, May 18, 2001 at 04:54:32PM -0700, Mark Mitchell wrote:
> + 	/* A conditionally-executed SET must be handled
> + 	   conservatively.  If the condition is false, the register
> + 	   will not be set so whatever value it had before this point
> + 	   will remain live.  In other words, the register is not
> + 	   necessarily killed at this point, so we treat it as used.  */
> + 	if (cond)
> + 	  mark_dest = 1;

You've just disabled quite a lot of code that attempts to track
conditional life.  What will happen is that mark_set_1 will
record the conditional death of the destination, and this patch
will make it come live again for the exact same condition,
yielding the earlier bookkeeping moot.

IF we cannot find a solution to this problem, we should explicitly
disable or remove this code, rather than hamstring it.

The test case was quite difficult for me to grok when I poked at
it earlier today -- the cycle appeared to be large.  Did you happen
to notice which register was oscilating in which block?

One solution may be to allow registers to go dead under certain
circumstances (e.g. in cond_local_set) and for calculate_global_regs_live
to force those bits to stay on.  This may require that verify_live_at_start
be tweeked in the same way, depending on how the system converges
under these new conditions.

IA-64 does not bootstrap on the gcc3 branch at the moment.  I'll
have to fix this before I can properly evaluate any patches for
this problem.



r~


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]