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

Reply via email to