Hi,

after a long time I remembered to dig out this patch again.
It deals with simplifying additions wrapped inside a cast
like
 (larger_type)(var + const1) + const2
to
 (larger_type)(var + combined_const1_const2).

The original pattern is created quite frequently on S/390 
(see PR 69526) and manifests similarly to
 add    r1,-1
 extend r1,r1
 add    r1,1
where the adds could be avoided entirely.

This is the tree part of the fix, it will still be necessary to
correct rtl code generation in doloop later.

Bootstrapped and regtested on s390x, x86 running.

Regards
 Robin

--

Robin Dapp (3):
  Perform fold when propagating.
  Add simplify rules for wrapped binary operations.
  Add new test cases for wrapped binop simplification.

 gcc/fortran/trans-intrinsic.c                 |   5 +-
 gcc/gimple-loop-versioning.cc                 |   6 ++
 gcc/match.pd                                  | 101 ++++++++++++++++++
 gcc/testsuite/g++.dg/tree-ssa/ssa-dse-2.C     |   4 +-
 gcc/testsuite/gcc.dg/pr35691-1.c              |   4 +-
 gcc/testsuite/gcc.dg/pr35691-2.c              |   4 +-
 gcc/testsuite/gcc.dg/pr35691-3.c              |   4 +-
 gcc/testsuite/gcc.dg/pr35691-4.c              |   4 +-
 gcc/testsuite/gcc.dg/tree-ssa/20040305-1.c    |   4 +-
 gcc/testsuite/gcc.dg/tree-ssa/bit-assoc.c     |   4 +-
 .../gcc.dg/tree-ssa/copy-headers-5.c          |   2 +-
 .../gcc.dg/tree-ssa/copy-headers-7.c          |   2 +-
 gcc/testsuite/gcc.dg/tree-ssa/forwprop-16.c   |   4 +-
 gcc/testsuite/gcc.dg/tree-ssa/loop-15.c       |   2 +-
 gcc/testsuite/gcc.dg/tree-ssa/pr23744.c       |   4 +-
 gcc/testsuite/gcc.dg/tree-ssa/pr52631.c       |   4 +-
 .../gcc.dg/vect/vect-over-widen-23.c          |   2 +-
 .../gcc.dg/wrapped-binop-simplify-run.c       |  52 +++++++++
 .../gcc.dg/wrapped-binop-simplify-signed-1.c  |  60 +++++++++++
 .../wrapped-binop-simplify-unsigned-1.c       |  36 +++++++
 gcc/tree-ssa-propagate.c                      |   6 +-
 21 files changed, 287 insertions(+), 27 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/wrapped-binop-simplify-run.c
 create mode 100644 gcc/testsuite/gcc.dg/wrapped-binop-simplify-signed-1.c
 create mode 100644 gcc/testsuite/gcc.dg/wrapped-binop-simplify-unsigned-1.c

-- 
2.17.0

Reply via email to