]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR71026: Canonicalize negates in division
authorWilco Dijkstra <wilco@gcc.gnu.org>
Tue, 7 Nov 2017 12:38:55 +0000 (12:38 +0000)
committerWilco Dijkstra <wilco@gcc.gnu.org>
Tue, 7 Nov 2017 12:38:55 +0000 (12:38 +0000)
Canonicalize x / (- y) into (-x) / y.

This moves negates out of the RHS of a division in order to
allow further simplifications and potentially more reciprocal CSEs.

2017-11-07  Wilco Dijkstra  <wdijkstr@arm.com>
    Jackson Woodruff  <jackson.woodruff@arm.com>

    gcc/
PR tree-optimization/71026
* match.pd: Canonicalize negate in division.

    testsuite/
PR 71026/tree-optimization/71026
* gcc.dg/div_neg: New test.

From-SVN: r254497

gcc/ChangeLog
gcc/match.pd
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/div_neg.c [new file with mode: 0644]

index ad93a20244a95d7c6083823924ea2e1b47b51d92..2fb808b5dd017089d05152685d47197681a0a85d 100644 (file)
@@ -1,3 +1,9 @@
+2017-11-07  Wilco Dijkstra  <wdijkstr@arm.com>
+           Jackson Woodruff  <jackson.woodruff@arm.com>
+
+       PR tree-optimization/71026
+       * match.pd: Canonicalize negate in division.
+
 2017-11-07  Sudakshina Das  <sudi.das@arm.com>
 
        PR middle-end/80131
index 49134bcb04f48f7c76c69ac8c323785505cb4f59..903c06530be3ee6d486d4b036d272c3a4537bb6f 100644 (file)
@@ -354,6 +354,11 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
   (rdiv @0 (rdiv:s @1 @2))
    (mult (rdiv @0 @1) @2)))
 
+/* Simplify x / (- y) to -x / y.  */
+(simplify
+ (rdiv @0 (negate @1))
+ (rdiv (negate @0) @1))
+
 /* Optimize (X & (-A)) / A where A is a power of 2, to X >> log2(A) */
 (for div (trunc_div ceil_div floor_div round_div exact_div)
  (simplify
index 2032379bcd73981af21f8608d44db11bcc976575..8d41c8425c9e838b4427cc265cdad1a614fc03ad 100644 (file)
@@ -1,7 +1,13 @@
+2017-10-17  Wilco Dijkstra  <wdijkstr@arm.com>
+           Jackson Woodruff  <jackson.woodruff@arm.com>
+
+       PR tree-optimization/71026
+       * gcc.dg/div_neg: New test.
+
 2017-11-07  Sudakshina Das  <sudi.das@arm.com>
 
        PR middle-end/80131
-       * testsuite/gcc.dg/pr80131-1.c: New Test.
+       * gcc.dg/pr80131-1.c: New Test.
 
 2017-11-07  Marc Glisse  <marc.glisse@inria.fr>
 
diff --git a/gcc/testsuite/gcc.dg/div_neg.c b/gcc/testsuite/gcc.dg/div_neg.c
new file mode 100644 (file)
index 0000000..da499cd
--- /dev/null
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+float
+div_neg (float x, float y)
+{
+  return (-x / y) * (x / -y);
+}
+
+/* { dg-final { scan-tree-dump-times " / " 1 "optimized" } } */