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.