[Bug rtl-optimization/84660] Combine doing wrong optimization for 64 bits with SHIFT_COUNT_TRUNCATED target
wilson at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Mar 20 00:31:00 GMT 2018
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.
More information about the Gcc-bugs
mailing list