http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49088
--- Comment #3 from H.J. Lu <hjl.tools at gmail dot com> 2011-05-20 19:01:14 UTC --- This patch works: diff --git a/gcc/combine.c b/gcc/combine.c index 8af86f2..60c6e13 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -10184,6 +10184,7 @@ simplify_shift_const_1 (enum rtx_code code, enum machine_mode result_mode, if (code == ASHIFTRT || (code == ROTATE && first_code == ASHIFTRT) + || (code == LSHIFTRT && first_code == ASHIFT) || GET_MODE_BITSIZE (mode) > HOST_BITS_PER_WIDE_INT || (GET_MODE (varop) != result_mode && (first_code == ASHIFTRT || first_code == LSHIFTRT Does it make sense?