From 2c2870a1b16c867b9ef0ea6cf0a8eb16af4c1b2d Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Thu, 21 Apr 2016 11:32:32 +0200 Subject: [PATCH] max(INT_MIN, x) -> x 2016-04-21 Marc Glisse gcc/ * match.pd (min(int_max, x), max(int_min, x)): New transformations. gcc/testsuite/ * gcc.dg/tree-ssa/minmax-1.c: New testcase. From-SVN: r235323 --- gcc/ChangeLog | 4 ++++ gcc/match.pd | 26 ++++++++++++++++-------- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/tree-ssa/minmax-1.c | 9 ++++++++ 4 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/minmax-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d2a345cf7f5..26d1861456f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2016-04-21 Marc Glisse + + * match.pd (min(int_max, x), max(int_min, x)): New transformations. + 2016-04-20 Jan Hubicka * ipa-inline.c (can_inline_edge_p): Pass caller info to diff --git a/gcc/match.pd b/gcc/match.pd index 75aa6013b2e..38193216aee 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -1192,16 +1192,26 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) @1) (simplify (min @0 @1) - (if (INTEGRAL_TYPE_P (type) - && TYPE_MIN_VALUE (type) - && operand_equal_p (@1, TYPE_MIN_VALUE (type), OEP_ONLY_CONST)) - @1)) + (switch + (if (INTEGRAL_TYPE_P (type) + && TYPE_MIN_VALUE (type) + && operand_equal_p (@1, TYPE_MIN_VALUE (type), OEP_ONLY_CONST)) + @1) + (if (INTEGRAL_TYPE_P (type) + && TYPE_MAX_VALUE (type) + && operand_equal_p (@1, TYPE_MAX_VALUE (type), OEP_ONLY_CONST)) + @0))) (simplify (max @0 @1) - (if (INTEGRAL_TYPE_P (type) - && TYPE_MAX_VALUE (type) - && operand_equal_p (@1, TYPE_MAX_VALUE (type), OEP_ONLY_CONST)) - @1)) + (switch + (if (INTEGRAL_TYPE_P (type) + && TYPE_MAX_VALUE (type) + && operand_equal_p (@1, TYPE_MAX_VALUE (type), OEP_ONLY_CONST)) + @1) + (if (INTEGRAL_TYPE_P (type) + && TYPE_MIN_VALUE (type) + && operand_equal_p (@1, TYPE_MIN_VALUE (type), OEP_ONLY_CONST)) + @0))) (for minmax (FMIN FMAX) /* If either argument is NaN, return the other one. Avoid the transformation if we get (and honor) a signalling NaN. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index eb47876726e..98db7d0577c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-04-21 Marc Glisse + + * gcc.dg/tree-ssa/minmax-1.c: New testcase. + 2016-04-20 Jan Hubicka PR ipa/70018 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/minmax-1.c b/gcc/testsuite/gcc.dg/tree-ssa/minmax-1.c new file mode 100644 index 00000000000..dfd7ed23277 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/minmax-1.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-optimized" } */ + +static int min(int a,int b){return (a