diff options
author | Richard Biener <rguenther@suse.de> | 2018-04-20 10:31:23 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-04-20 10:31:23 +0000 |
commit | b46ebc6c45d7a74ec18a0644f8b4e3c66ea84fb8 (patch) | |
tree | 0a6e7898b15bef90b476597b6234e27d96c2db2b | |
parent | 2f1f3ac43828d7c9b8899f23683bf6b88066fc4a (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/match.pd | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr85475.c | 13 |
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; +} |