------- 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