------- Comment #2 from ubizjak at gmail dot com  2009-04-16 11:37 -------
It looks that convert_modes has some issues. When expanding shift RTX,
convert_modes is called from

#0  convert_modes (mode=QImode, oldmode=QImode, x=0xb7d05fe8, unsignedp=0) at
../../gcc-svn/trunk/gcc/expr.c:769
#1  0x083455ec in expand_binop_directly (mode=USQmode, binoptab=0x8a02148,
op0=<value optimized out>, op1=0xb7d05fe8, target=0xb7d2a2d0, unsignedp=<value
optimized out>, methods=OPTAB_DIRECT, last=0xb7c8f72c) at
../../gcc-svn/trunk/gcc/optabs.c:1488
#2  0x08343389 in expand_binop (mode=QImode, binoptab=0x8a02148,
op0=0xb7d2a2e8, op1=0xb7d05fe8, target=0xb7d2a2d0, unsignedp=0,
methods=OPTAB_DIRECT) at ../../gcc-svn/trunk/gcc/optabs.c:1601
#3  0x08209c95 in expand_shift (code=RSHIFT_EXPR, mode=QImode,
shifted=0xb7d2a2e8, amount=0xb7d29ec4, target=0xb7d2a2d0, unsignedp=0) at
../../gcc-svn/trunk/gcc/expmed.c:2244

as:

convert_modes (mode=QImode, oldmode=QImode, x=0xb7d05fe8, unsignedp=0) at
../../gcc-svn/trunk/gcc/expr.c:769
(gdb) p debug_rtx (x)
(const_int -557921043 [0xdebecced])

We immediatelly hit:

  if (mode == oldmode)
    return x;

so, we return "(const_int -557921043 [0xdebecced])" that doesn't satisfy QImode
constraint. The compilation goes downhill from there...

This looks like generic RTL optimization problem.


-- 

ubizjak at gmail dot com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|target                      |rtl-optimization


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39779

Reply via email to