diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-09-04 09:28:58 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-09-04 09:28:58 +0000 |
commit | bb722af402cd2c6e372f64e33f465bff2228b975 (patch) | |
tree | fa175b9596e8734f22e4875c7fe68cff105f80e9 /gcc/tree-ssa-threadupdate.c | |
parent | a28e32830f8287d9c67528829cc67b8c4849c141 (diff) | |
download | gcc-bb722af402cd2c6e372f64e33f465bff2228b975.tar.gz |
2012-09-04 Richard Guenther <rguenther@suse.de>
PR tree-optimization/54458
* tree-ssa-threadupdate.c (thread_through_loop_header): If we
turn the loop into one with multiple latches mark it so.
* gcc.dg/torture/pr54458.c: New testcase.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190918 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-threadupdate.c')
-rw-r--r-- | gcc/tree-ssa-threadupdate.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/tree-ssa-threadupdate.c b/gcc/tree-ssa-threadupdate.c index 86ad74f1bc8..30336a18e81 100644 --- a/gcc/tree-ssa-threadupdate.c +++ b/gcc/tree-ssa-threadupdate.c @@ -1037,11 +1037,21 @@ thread_through_loop_header (struct loop *loop, bool may_peel_loop_headers) } free (bblocks); + /* If the new header has multiple latches mark it so. */ + FOR_EACH_EDGE (e, ei, loop->header->preds) + if (e->src->loop_father == loop + && e->src != loop->latch) + { + loop->latch = NULL; + loops_state_set (LOOPS_MAY_HAVE_MULTIPLE_LATCHES); + } + /* Cancel remaining threading requests that would make the loop a multiple entry loop. */ FOR_EACH_EDGE (e, ei, header->preds) { edge e2; + if (e->aux == NULL) continue; |