https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84660
--- Comment #4 from Kito Cheng <npickito at gmail dot com> --- Hi Jim: We've written a patch which is based on your patch for gcc 7, and we've tested with GCC testsuite and several testsuite. diff --git a/gcc/combine.c b/gcc/combine.c index ff250aa..033387d 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -8770,7 +8770,10 @@ force_to_mode (rtx x, machine_mode mode, unsigned HOST_WIDE_INT mask, && INTVAL (XEXP (x, 1)) < GET_MODE_PRECISION (mode)) && ! (GET_MODE (XEXP (x, 1)) != VOIDmode && (nonzero_bits (XEXP (x, 1), GET_MODE (XEXP (x, 1))) - < (unsigned HOST_WIDE_INT) GET_MODE_PRECISION (mode)))) + < (unsigned HOST_WIDE_INT) GET_MODE_PRECISION (mode)) + && (SHIFT_COUNT_TRUNCATED + && nonzero_bits (XEXP (x, 1), GET_MODE (XEXP (x, 1))) + < (unsigned HOST_WIDE_INT) GET_MODE_PRECISION (GET_MODE (x))))) break; /* If the shift count is a constant and we can do arithmetic in