diff options
author | Richard Biener <rguenther@suse.de> | 2018-04-30 07:23:36 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-04-30 07:23:36 +0000 |
commit | 2925cd9d1c9d9e03a55f9f67ab81ead94f9e4f6c (patch) | |
tree | 4f196e848680c5da214d63071868dd5be3bdf690 /gcc/tree-ssa-loop-ch.c | |
parent | 03b42a71d9d88029dea5928c3053881b092d6549 (diff) | |
download | gcc-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.c | 5 |
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) |