[Bug middle-end/63184] [9/10/11/12 Regression] Fails to simplify comparison

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Sep 6 07:47:19 GMT 2021


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

--- Comment #29 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Andrew Pinski <pinskia@gcc.gnu.org>:

https://gcc.gnu.org/g:564efbf40077c25623cdd6ce2f911c56b5b08f6c

commit r12-3364-g564efbf40077c25623cdd6ce2f911c56b5b08f6c
Author: Andrew Pinski <apinski@marvell.com>
Date:   Mon Sep 6 00:52:18 2021 +0000

    Fix PR tree-optimization/63184: add simplification of (& + A) != (& + B)

    These two testcases have been failing since GCC 5 but things
    have improved such that adding a simplification to match.pd
    for this case is easier than before.
    In the end we have the following IR:
    ....
      _5 = &a[1] + _4;
      _7 = &a + _13;
      if (_5 != _7)

    So we can fold the _5 != _7 into:
    (&a[1] - &a) + _4 != _13

    The subtraction is folded into constant by ptr_difference_const.
    In this case, the full expression gets folded into a constant
    and we are able to remove the if statement.

    OK? Bootstrapped and tested on aarch64-linux-gnu with no regressions.

    gcc/ChangeLog:

            PR tree-optimization/63184
            * match.pd: Add simplification of pointer_diff of two pointer_plus
            with addr_expr in the first operand of each pointer_plus.
            Add simplificatoin of ne/eq of two pointer_plus with addr_expr
            in the first operand of each pointer_plus.

    gcc/testsuite/ChangeLog:

            PR tree-optimization/63184
            * c-c++-common/pr19807-2.c: Enable for all targets and remove the
xfail.
            * c-c++-common/pr19807-3.c: Likewise.


More information about the Gcc-bugs mailing list