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