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)

Reply via email to