]> gcc.gnu.org Git - gcc.git/commit
More NEGATE_EXPR folding in match.pd
authorRoger Sayle <roger@nextmovesoftware.com>
Wed, 22 Sep 2021 18:17:49 +0000 (19:17 +0100)
committerRoger Sayle <roger@nextmovesoftware.com>
Wed, 22 Sep 2021 18:17:49 +0000 (19:17 +0100)
commit8f571e64713cc72561f84241863496e473eae4c6
tree4e844b47051f80796967e0a819e774833b79e1b6
parent2f2dcbe4717ce7a117671234940f8b74809f3973
More NEGATE_EXPR folding in match.pd

As observed by Jakub in comment #2 of PR 98865, the expression -(a>>63)
is optimized in GENERIC but not in GIMPLE.  Investigating further it
turns out that this is one of a few transformations performed by
fold_negate_expr in fold-const.c that aren't yet performed by match.pd.
This patch moves/duplicates them there, and should be relatively safe
as these transformations are already performed by the compiler, but
just in different passes.

This revised patch adds a Boolean simplify argument to tree-ssa-sccvn.c's
vn_nary_build_or_lookup_1 to control whether simplification should be
performed before value numbering, updating the callers, but then
avoiding simplification when constructing/value-numbering NEGATE_EXPR.
This avoids the regression of gcc.dg/tree-ssa/ssa-free-88.c, and enables
the new test case(s) to pass.

2021-09-22  Roger Sayle  <roger@nextmovesoftware.com>
    Richard Biener  <rguenther@suse.de>

gcc/ChangeLog
* match.pd (negation simplifications): Implement some negation
folding transformations from fold-const.c's fold_negate_expr.
* tree-ssa-sccvn.c (vn_nary_build_or_lookup_1): Add a SIMPLIFY
argument, to control whether the op should be simplified prior
to looking up/assigning a value number.
(vn_nary_build_or_lookup): Update call to vn_nary_build_or_lookup_1.
(vn_nary_simplify): Likewise.
(visit_nary_op): Likewise, but when constructing a NEGATE_EXPR
now call vn_nary_build_or_lookup_1 disabling simplification.

gcc/testsuite/ChangeLog
* gcc.dg/fold-negate-1.c: New test case.
gcc/match.pd
gcc/testsuite/gcc.dg/fold-negate-1.c [new file with mode: 0644]
gcc/tree-ssa-sccvn.c
This page took 0.064185 seconds and 5 git commands to generate.