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.

Reply via email to