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.

Reply via email to