aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-04-20 10:31:23 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-04-20 10:31:23 +0000
commitb46ebc6c45d7a74ec18a0644f8b4e3c66ea84fb8 (patch)
tree0a6e7898b15bef90b476597b6234e27d96c2db2b
parent2f1f3ac43828d7c9b8899f23683bf6b88066fc4a (diff)
downloadgcc-b46ebc6c45d7a74ec18a0644f8b4e3c66ea84fb8.zip
gcc-b46ebc6c45d7a74ec18a0644f8b4e3c66ea84fb8.tar.gz
gcc-b46ebc6c45d7a74ec18a0644f8b4e3c66ea84fb8.tar.bz2
re PR tree-optimization/85475 (Compile time hog w/ -O1 -fpeel-loops)
2018-04-20 Richard Biener <rguenther@suse.de> PR middle-end/85475 * match.pd ((X * CST) * Y -> (X * Y) * CST): Avoid exponential complexity by forcing a single use of the multiply operand. * gcc.dg/torture/pr85475.c: New testcase. From-SVN: r259519
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/match.pd3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr85475.c13
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e06c6bc..6309170 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-04-20 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/85475
+ * match.pd ((X * CST) * Y -> (X * Y) * CST): Avoid exponential
+ complexity by forcing a single use of the multiply operand.
+
2018-04-20 Martin Jambor <mjambor@suse.cz>
ipa/85449
diff --git a/gcc/match.pd b/gcc/match.pd
index 442aad1..0de4432 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -2578,8 +2578,9 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
/* Reassociate (X * CST) * Y to (X * Y) * CST. This does not introduce
signed overflow for CST != 0 && CST != -1. */
(simplify
- (mult:c (mult:s @0 INTEGER_CST@1) @2)
+ (mult:c (mult:s@3 @0 INTEGER_CST@1) @2)
(if (TREE_CODE (@2) != INTEGER_CST
+ && single_use (@3)
&& !integer_zerop (@1) && !integer_minus_onep (@1))
(mult (mult @0 @2) @1)))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4e66877..dc5f7e7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-04-20 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/85475
+ * gcc.dg/torture/pr85475.c: New testcase.
+
2018-04-20 Martin Jambor <mjambor@suse.cz>
ipa/85449
diff --git a/gcc/testsuite/gcc.dg/torture/pr85475.c b/gcc/testsuite/gcc.dg/torture/pr85475.c
new file mode 100644
index 0000000..0d475df
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr85475.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-fpeel-loops" } */
+
+int
+nj (int le)
+{
+ int zb;
+
+ for (zb = 0; zb < 16; ++zb)
+ le += le;
+
+ return le * le;
+}