Repost: RFA [4.1]: improvement to if-conversion and cross-jumping (PR20070)

Bernd Schmidt bernds_cb1@t-online.de
Tue Dec 13 12:17:00 GMT 2005


>> This doesn't do anything different from the normal recursive bit at 
>> the end of the function, does it?  If it isn't needed, delete this part.
> 
> 
> It does something different - it first processes set destinations, and 
> then sources.  That is the right thing to do if rvalue == 1.
> However, AFAICS there is no caller left which can cause rvalue == 1 when 
> we are processing a PARALLEL.   Instead, it will
> always be -1, which is  correctly  handled by the default processing.  
> Therefore, I have replaced this code with a gcc_assert and a
> break; .

That's what I meant.  Thanks.

>> Are they really all dead at the end of each block?  It's been a long 
>> time since I looked at reg-stack, but this looks odd to me.
> 
> 
> No, they are not all dead.  But we don't have any up-to-date information 
> on these registers, because reg-stack changes the actual register 
> numbers used, but it doesn't update the global_live_at{start,end}.  And 
> update_live_info lacks the smarts to  do a  proper update.  (The 
> bogosity of the live info is taken care of by not changing register 
> usage by stack regs after reg-stack.)  Since we  are changing some 
> blocks by cross-jumping, we end up with live information on the stack 
> regs that is not only bogus, but also inconsistent between different 
> blocks with identical successors.

Uh, ok.  Sounds like there's a project to rewrite regstack in there 
somewhere, but I guess it's out of scope for this :-)

> I have attached the updated patch that takes your comments into 
> account.  regtesting is underway.

This is ok, please install after testing.  Thanks!


Bernd



More information about the Gcc-patches mailing list