diff options
author | glisse <glisse@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-04-21 09:32:32 +0000 |
---|---|---|
committer | glisse <glisse@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-04-21 09:32:32 +0000 |
commit | 523f3a9d4fcbb5281bfd83c4010b22ce8aadad7b (patch) | |
tree | 1ee36064cb859fba2a08608c049082bd1282c2cd | |
parent | fda1b8b5d86ce32cb429faeb2e1c27e13831d0a8 (diff) | |
download | gcc-523f3a9d4fcbb5281bfd83c4010b22ce8aadad7b.tar.gz |
max(INT_MIN, x) -> x
2016-04-21 Marc Glisse <marc.glisse@inria.fr>
gcc/
* match.pd (min(int_max, x), max(int_min, x)): New transformations.
gcc/testsuite/
* gcc.dg/tree-ssa/minmax-1.c: New testcase.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@235323 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/match.pd | 26 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/minmax-1.c | 9 |
4 files changed, 35 insertions, 8 deletions
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 <marc.glisse@inria.fr> + + * match.pd (min(int_max, x), max(int_min, x)): New transformations. + 2016-04-20 Jan Hubicka <jh@suse.cz> * 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 <marc.glisse@inria.fr> + + * gcc.dg/tree-ssa/minmax-1.c: New testcase. + 2016-04-20 Jan Hubicka <jh@suse.cz> 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<b)?a:b;} +static int max(int a,int b){return (a<b)?b:a;} +int f(int x){return max(x,-__INT_MAX__-1);} +int g(int x){return min(x,__INT_MAX__);} + +/* { dg-final { scan-tree-dump-times "return x_\[0-9\]+.D.;" 2 "optimized" } } */ |