How to reverse patch reversal in cfgcleanup.c (Was: RFA: re-instate struct_equiv code)

Joern RENNECKE joern.rennecke@st.com
Mon Jan 30 14:49:00 GMT 2006


Bernd Schmidt wrote:

> Joern RENNECKE wrote:
>
>> Because the new code as of December actually updated life information 
>> incorrectly, the global updates that were done had also quite a lot 
>> of work to do (and didn't really do it right, because of the presence 
>> of fake edges).
>
>
> Could you elaborate on the problem with fake edges?

A fake edge is an edge from a node where there control might flow out of 
the function (or not at all), e.g. a call to a noreturn function, to the 
exit block.  As far as I can tell, these are inserted for the 
crossjumping pass so that we will cover matches involving such nodes, as 
they otherwise might not have any successor.
The problem with doing live updates in the presence of fake edges is 
that a number of registers are live in the exit block, in particular all 
the call-saved registers with are restored in the epilogue (the epilogue 
is a proper predecessor of the exit block, and the register restores are 
kept live by marking these registers as live in the exit block).
If you do an live update while fake edges are present, the liveness of 
registers in the exit block is propagated into the sources of the fake 
edges, even though most or all of these registers
are not actually live there.



More information about the Gcc mailing list