------- Additional Comments From nathan at gcc dot gnu dot org 2004-11-10 11:01 ------- The fault is not the register allocator, is is a problem introduced by flow2 and the existance of conditional returns on PPC. During register allocation there is one exit block. The returns are 'x, x, x+x & x', thus the global allocator sets the exit block to copy 'x' to the return register. flow2 replaces some of those branches to the exit block with conditional returns, because 'x' resides in both DF:33 and DF:32. The remaining use of the exit is the load from the union into DF:32, the location of 'x' during the function.
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16796