[Bug middle-end/94715] Squared multiplies are unnecessarily signextended

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Apr 23 11:09:48 GMT 2020


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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
One could use get_range_pos_neg (op0) for that, so something like:
... if (CONVERT_EXPR_CODE_P (code)
        && INTEGRAL_TYPE_P (type)
        && INTEGRAL_TYPE_P (TREE_TYPE (op0))
        && TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (op0))
        && get_range_pos_neg (op0) == 1)
      /* Both sign and zero extension achieve the required extension,
         as the operand is guaranteed not to have the most significant
         bit set.  Try to build both conversions and ask the backend
         which one is less expensive.  If both are same costly, use
         the op0's signedness.  */


More information about the Gcc-bugs mailing list