http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55211
--- Comment #26 from davem at gcc dot gnu.org 2012-11-07 07:11:44 UTC --- Ok, it seems it is not possible to expression the even integer register condition using register classes. Therefore I will revert the "U" constraint removal. I tried creating a DI32_REGS register class that only contained the even integer registers. But this doesn't work because the test of whether a hard register is within a class requires that all of the registers that are a part of the DImode register pair are in the class. So you'd need to include both the even and odd registers, which defeats the entire point of trying to express this using a register class. Longer term we do need a fix for this. It is very clear that IRA is allocating odd registers at times for DImode pseudos on 32-bit, and the only reason it works is that things get fixed up later by either reload or the DImode splitters. If we extended define_register_constraint such that extra conditions could be specified, we could get IRA to do the right thing and also have reload fix up the unavoidable cases where we must use odd numbered registers for DImode values on 32-bit such as argument passing.