http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60604
--- Comment #7 from Steve Ellcey <sje at gcc dot gnu.org> --- I didn't notice that just before the emit-rtl.c (validate_subregs) comment that says: /* Subregs involving floating point modes are not allowed to change size. Therefore (subreg:DI (reg:DF) 0) is fine, but (subreg:SI (reg:DF) 0) isn't. */ Is another comment (and code) that has: /* ??? This should not be here. Temporarily continue to allow word_mode subregs of anything. The most common offender is (subreg:SI (reg:DF)). Generally, backends are doing something sketchy but it'll take time to fix them all. */ if (omode == word_mode) ; This is why we are creating the 'bad' subregs.