Fix twolf -funroll-loops -O3 miscompilation (a semi-latent web.c bug)
Markus Trippelsdorf
markus@trippelsdorf.de
Fri Oct 12 20:36:00 GMT 2012
On 2012.10.12 at 21:43 +0200, Jan Hubicka wrote:
> I finally tracked down twolf misoptimization triggered by my loop-unroll.c
> changes. It has turned out to be semi-latent wrong code issue in webizer.
> What happens is:
>
> 1) gcse.c drop REG_EQUAL note on the induction variable
> 2) loop optimizer unrolls the loop enabling webizer to cleanup
> 3) webizer do not track reaching refs into REG_EQUAL note because
> the variable is dead and renames it to unused pseudo
> Program is stil valid but the REG_EQUAL is bogus.
> 4) CSE eventually takes the value and put it back into the code
> 5) init-regs initializes it to 0
>
> and result is a segfault on the following testcase.
> Fixed by making webizer to not prune dead regs.
> Will commit it after testing on x86_64-linux.
FYI this also fixes the lto/profiledbootstrap breakage, PR 54885.
Thanks.
--
Markus
More information about the Gcc-patches
mailing list