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

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:8a4602c2e0f81895415ba7ee23bf81dc795d1103

commit r12-3365-g8a4602c2e0f81895415ba7ee23bf81dc795d1103
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Mon Sep 6 10:08:16 2021 +0200

    match.pd: Fix up __builtin_*_overflow arg demotion [PR102207]

    My earlier patch to demote arguments of __builtin_*_overflow unfortunately
    caused a wrong-code regression.  The builtins operate on infinite precision
    arguments, outer_prec > inner_prec signed -> signed, unsigned -> unsigned
    promotions there are just repeating the sign or 0s and can be demoted,
    similarly unsigned -> signed which also is repeating 0s, but as the
    testcase shows, signed -> unsigned promotions need to be preserved (unless
    we'd know the inner arguments can't be negative), because for negative
    numbers such promotion sets the outer_prec -> inner_prec bits to 1 bit the
    bits above that to 0 in the infinite precision.

    So, the following patch avoids the demotions for the signed -> unsigned
    promotions.

    2021-09-06  Jakub Jelinek  <ja...@redhat.com>

            PR tree-optimization/102207
            * match.pd: Don't demote operands of IFN_{ADD,SUB,MUL}_OVERFLOW if
they
            were promoted from signed to wider unsigned type.

            * gcc.dg/pr102207.c: New test.

Reply via email to