https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84660

Jim Wilson <wilson at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |wilson at gcc dot 
gnu.org

--- Comment #6 from Jim Wilson <wilson at gcc dot gnu.org> ---
Using this:
+               && (SHIFT_COUNT_TRUNCATED
+                   && nonzero_bits (XEXP (x, 1), GET_MODE (XEXP (x, 1)))
+                   < (unsigned HOST_WIDE_INT) GET_MODE_PRECISION (GET_MODE
(x)))))
doesn't work for a !SHIFT_COUNT_TRUNCATED target.  That is equivalent to adding
a && 0 to the expression, which breaks the other tests.  I believe this needs
to be instead
+               && (! SHIFT_COUNT_TRUNCATED
+                   || (nonzero_bits (XEXP (x, 1), GET_MODE (XEXP (x, 1)))
+                       < (unsigned HOST_WIDE_INT) GET_MODE_PRECISION
(xmode)))))
so that for a !SHIFT_COUNT_TRUNCATED target we get "&& 1" which is no change,
and for a SHIFT_COUNT_TRUNCATED target the additional nonzero_bits test must
pass.

Reply via email to