http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56571
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bernds at gcc dot gnu.org, | |jakub at gcc dot gnu.org, | |steven at gcc dot gnu.org --- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-03-08 14:49:10 UTC --- Sounds like regrename.c bug. This pass changes: 83: {flags:CCZ=cmp(ax:SI|cx:SI,0);clobber ax:SI;} instruction (iorsi_3) into: 83: {flags:CCZ=cmp(si:SI|cx:SI,0);clobber r10:SI;} which of course doesn't work, the pattern has "=r" constraint on the clobber, and "%0" and "rme" constraints on the comparison operands, so it requires that the clobber matches one of the registers. I'm quite surprised not to see any validate_change calls in the whole regrename.c, how does it ensure that what it changes is actually valid?