http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55211
--- Comment #27 from Eric Botcazou <ebotcazou at gcc dot gnu.org> 2012-11-07 07:37:05 UTC --- > 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. Thanks for the detailed explanation. I'd suggest copying a good chunk of it into constraints.md when you add back the constraint.