http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56484
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2013-03-01 CC| |jakub at gcc dot gnu.org, | |uros at gcc dot gnu.org Target Milestone|--- |4.8.0 Summary|ICE in assign_by_spills, at |[4.8 Regression] ICE in |lra-assigns.c:1268 |assign_by_spills, at | |lra-assigns.c:1268 Ever Confirmed|0 |1 --- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-03-01 08:30:31 UTC --- Started with http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=188526 but it was merely latent before that, so it isn't LRA bug, because it fails with reload equally. I think the problem is in combine, where we have: ax = call ... flags = r59 != 0 r60 = flags >= 0 ? ax : r59 r65 = buf r68 = 768 rep stosd [r65 .. r65 + r68 - 4] = 0 r59 = r60 and the combiner combines the r60 = flags >= 0 ? ax : r59 instruction with r59 = r60 into r59 = flags >= 0 ? ax : r59 instruction in the last spot, thus extending the lifetime of the ax and flags hard registers across various other instructions.