http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53249
--- Comment #2 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> 2012-05-06 10:55:48 UTC --- Gah. Sorry for the breakage. This is caused by the x86_64 TLS code generating a DImode MEM address when Pmode == SImode. As you say here: http://gcc.gnu.org/ml/gcc-patches/2012-03/msg01205.html that's wrong from a pure rtl semantics perspective: MEM addresses must have the mode given by targetm.addr_space.address_mode. Even if having a different mode happens to work most of the time, I think that's only by accident. Your original suggestion avoided this, of course. I don't understand the constraints you're working under well enough to suggest anything constructive here, sorry. I don't know whether it would be possible to model this as an address space or not.