From f3ec09703c0dbe2c1ab5c1f9c460d8847d1d6c9e Mon Sep 17 00:00:00 2001 From: glisse Date: Thu, 21 Apr 2016 10:45:11 +0000 Subject: min(-x, -y), min(~x, ~y) 2016-04-21 Marc Glisse gcc/ * match.pd (min(-x, -y), max(-x, -y), min(~x, ~y), max(~x, ~y)): New transformations. gcc/testsuite/ * gcc.dg/tree-ssa/minmax-2.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@235332 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/match.pd | 16 ++++++++++++++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/tree-ssa/minmax-2.c | 10 ++++++++++ 4 files changed, 35 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/minmax-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 26d1861456f..86bee074b69 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2016-04-21 Marc Glisse + + * match.pd (min(-x, -y), max(-x, -y), min(~x, ~y), max(~x, ~y)): + New transformations. + 2016-04-21 Marc Glisse * match.pd (min(int_max, x), max(int_min, x)): New transformations. diff --git a/gcc/match.pd b/gcc/match.pd index 38193216aee..08db842989d 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -1232,6 +1232,22 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (simplify (FMAX @0 @1) (max @0 @1))) +/* min (-A, -B) -> -max (A, B) */ +(for minmax (min max FMIN FMAX) + maxmin (max min FMAX FMIN) + (simplify + (minmax (negate:s@2 @0) (negate:s@3 @1)) + (if (FLOAT_TYPE_P (TREE_TYPE (@0)) + || (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0)) + && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (@0)))) + (negate (maxmin @0 @1))))) +/* MIN (~X, ~Y) -> ~MAX (X, Y) + MAX (~X, ~Y) -> ~MIN (X, Y) */ +(for minmax (min max) + maxmin (max min) + (simplify + (minmax (bit_not:s@2 @0) (bit_not:s@3 @1)) + (bit_not (maxmin @0 @1)))) /* Simplifications of shift and rotates. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 98db7d0577c..08f70405c52 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-04-21 Marc Glisse + + * gcc.dg/tree-ssa/minmax-2.c: New testcase. + 2016-04-21 Marc Glisse * gcc.dg/tree-ssa/minmax-1.c: New testcase. diff --git a/gcc/testsuite/gcc.dg/tree-ssa/minmax-2.c b/gcc/testsuite/gcc.dg/tree-ssa/minmax-2.c new file mode 100644 index 00000000000..98c38b1aa77 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/minmax-2.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fstrict-overflow -fdump-tree-optimized" } */ + +static int max(int a,int b){return (a