aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-ch.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-04-30 07:23:36 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-04-30 07:23:36 +0000
commit2925cd9d1c9d9e03a55f9f67ab81ead94f9e4f6c (patch)
tree4f196e848680c5da214d63071868dd5be3bdf690 /gcc/tree-ssa-loop-ch.c
parent03b42a71d9d88029dea5928c3053881b092d6549 (diff)
downloadgcc-2925cd9d1c9d9e03a55f9f67ab81ead94f9e4f6c.zip
gcc-2925cd9d1c9d9e03a55f9f67ab81ead94f9e4f6c.tar.gz
gcc-2925cd9d1c9d9e03a55f9f67ab81ead94f9e4f6c.tar.bz2
re PR tree-optimization/28364 (poor optimization choices when iterating over a std::string (probably not c++-specific))
2018-04-30 Richard Biener <rguenther@suse.de> PR tree-optimization/28364 PR tree-optimization/85275 * tree-ssa-loop-ch.c (ch_base::copy_headers): Stop after copying first exit test. * gcc.dg/tree-ssa/copy-headers-5.c: New testcase. * gcc.dg/tree-ssa/predcom-8.c: Likewise. * gcc.dg/tree-ssa/cunroll-13.c: Rewrite to gimple testcase. * gcc.dg/tree-ssa/ivopt_mult_1.c: XFAIL. * gcc.dg/tree-ssa/ivopt_mult_1g.c: Add gimple variant that still passes. * gcc.dg/tree-ssa/ivopt_mult_2.c: XFAIL. * gcc.dg/tree-ssa/ivopt_mult_2g.c: Add gimple variant that still passes. * gcc.dg/tree-ssa/ssa-dom-thread-7.c: Adjust. * gcc.dg/tree-ssa/20030710-1.c: Likewise. * gcc.dg/tree-ssa/20030711-1.c: Likewise. From-SVN: r259754
Diffstat (limited to 'gcc/tree-ssa-loop-ch.c')
-rw-r--r--gcc/tree-ssa-loop-ch.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/tree-ssa-loop-ch.c b/gcc/tree-ssa-loop-ch.c
index 6b5c82c..c876d62 100644
--- a/gcc/tree-ssa-loop-ch.c
+++ b/gcc/tree-ssa-loop-ch.c
@@ -340,6 +340,11 @@ ch_base::copy_headers (function *fun)
bbs[n_bbs++] = header;
gcc_assert (bbs_size > n_bbs);
header = exit->dest;
+ /* Make sure to stop copying after we copied the first exit test.
+ Without further heuristics we do not want to rotate the loop
+ any further. */
+ if (loop_exits_from_bb_p (loop, exit->src))
+ break;
}
if (!exit)