diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2016-04-21 12:45:11 +0200 |
---|---|---|
committer | Marc Glisse <glisse@gcc.gnu.org> | 2016-04-21 10:45:11 +0000 |
commit | ce0e66ffb22832d1668dd9d92ad0ca128fbd07c3 (patch) | |
tree | 9c71f5fe36a43f04e6a56e5d7fb4c36d8250ccb1 /gcc/match.pd | |
parent | 6c7f7b8c698b13ddd97d047c738da48a518e9f0f (diff) | |
download | gcc-ce0e66ffb22832d1668dd9d92ad0ca128fbd07c3.zip gcc-ce0e66ffb22832d1668dd9d92ad0ca128fbd07c3.tar.gz gcc-ce0e66ffb22832d1668dd9d92ad0ca128fbd07c3.tar.bz2 |
min(-x, -y), min(~x, ~y)
2016-04-21 Marc Glisse <marc.glisse@inria.fr>
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.
From-SVN: r235332
Diffstat (limited to 'gcc/match.pd')
-rw-r--r-- | gcc/match.pd | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/match.pd b/gcc/match.pd index 3819321..08db842 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. */ |