aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-10-05 07:48:24 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-10-05 07:48:24 +0000
commit54f84ca9c7a1955f9760df4c2df72be9272e0db3 (patch)
tree7faf6e2dfc74db0fa15b66f1ded1a2e9991e9f21 /gcc
parent17beda50fbca460263327a8490b066e08b3e68ce (diff)
downloadgcc-54f84ca9c7a1955f9760df4c2df72be9272e0db3.zip
gcc-54f84ca9c7a1955f9760df4c2df72be9272e0db3.tar.gz
gcc-54f84ca9c7a1955f9760df4c2df72be9272e0db3.tar.bz2
re PR middle-end/55152 (MAX_EXPR(a,-a) is really ABS_EXPR(a))
2016-10-05 Richard Biener <rguenther@suse.de> PR middle-end/55152 * match.pd (min(a,-a) -> -abs(a)): New pattern. * gcc.dg/pr55152-2.c: New testcase. From-SVN: r240770
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/match.pd7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr55152-2.c13
4 files changed, 30 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ad08f0f..a65f491 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2016-10-05 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/55152
+ * match.pd (min(a,-a) -> -abs(a)): New pattern.
+
2016-10-04 Ian Lance Taylor <iant@golang.org>
* explow.c (allocate_dynamic_stack_space): Call
diff --git a/gcc/match.pd b/gcc/match.pd
index dadf51c..067e667 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -1291,6 +1291,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
&& (! ANY_INTEGRAL_TYPE_P (type)
|| TYPE_OVERFLOW_UNDEFINED (type)))
(abs @0)))
+/* min(a,-a) -> -abs(a). */
+(simplify
+ (min:c @0 (negate @0))
+ (if (TREE_CODE (type) != COMPLEX_TYPE
+ && (! ANY_INTEGRAL_TYPE_P (type)
+ || TYPE_OVERFLOW_UNDEFINED (type)))
+ (negate (abs @0))))
(simplify
(min @0 @1)
(switch
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 41186f8..e77ed88 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-10-05 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/55152
+ * gcc.dg/pr55152-2.c: New testcase.
+
2016-10-04 Jerry DeLisle <jvdelisle@gcc.gnu.org>
* gfortran.dg/dtio_15.f90: New test.
diff --git a/gcc/testsuite/gcc.dg/pr55152-2.c b/gcc/testsuite/gcc.dg/pr55152-2.c
new file mode 100644
index 0000000..54db0f2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr55152-2.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O -ffinite-math-only -fno-signed-zeros -fstrict-overflow -fdump-tree-optimized" } */
+
+double g (double a)
+{
+ return (a<-a)?a:-a;
+}
+int f(int a)
+{
+ return (a<-a)?a:-a;
+}
+
+/* { dg-final { scan-tree-dump-times "ABS_EXPR" 2 "optimized" } } */