http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45074
--- Comment #5 from Steven Bosscher <steven at gcc dot gnu.org> 2010-11-12 14:09:12 UTC --- operand_subword => simplify_gen_subreg => simplify_subreg / validate_subreg: simplify_gen_subreg (outermode=SImode, op=0x2000000000617000, innermode=DFmode, byte=0) at ../../gcc-4.5.0/gcc/simplify-rtx.c:5449 5449 newx = simplify_subreg (outermode, op, innermode, byte); (gdb) l 5444 simplify_gen_subreg (enum machine_mode outermode, rtx op, 5445 enum machine_mode innermode, unsigned int byte) 5446 { 5447 rtx newx; 5448 5449 newx = simplify_subreg (outermode, op, innermode, byte); 5450 if (newx) 5451 return newx; 5452 5453 if (GET_CODE (op) == SUBREG (gdb) p simplify_subreg (outermode, op, innermode, byte) $9 = (struct rtx_def *) 0x0 (gdb) p validate_subreg (outermode, innermode, op, byte) $10 = 0 '\000' (gdb) >From validate_subreg: 703 /* ??? This should not be here. Temporarily continue to allow word_mode 704 subregs of anything. The most common offender is (subreg:SI (reg:DF)). 705 Generally, backends are doing something sketchy but it'll take time to 706 fix them all. */ 707 if (omode == word_mode) 708 ; 709 /* ??? Similarly, e.g. with (subreg:DF (reg:TI)). Though store_bit_field 710 is the culprit here, and not the backends. */ 711 else if (osize >= UNITS_PER_WORD && isize >= osize) (gdb) p omode $16 = SImode (gdb) p imode $17 = DFmode (gdb)