summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2016-08-05 07:41:45 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2016-08-05 07:41:45 +0000
commitd7407ea00657ba1722848868e1dc6e6d6dc34aa3 (patch)
treeb9d764e969d86420c6267f8ab69fb903a75890df
parent033a8a9e707f221e906bc4715ed2cd90a7f570eb (diff)
downloadgcc-d7407ea00657ba1722848868e1dc6e6d6dc34aa3.tar.gz
2016-08-05 Richard Biener <rguenther@suse.de>
* tree-cfgcleanup.c (tree_forwarder_block_p): Use bb_loop_header_p. * cfghooks.c (force_nonfallthru): If we ended up splitting a latch adjust loop info accordingly. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@239163 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cfghooks.c10
-rw-r--r--gcc/tree-cfgcleanup.c2
3 files changed, 15 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7bb9dc96c01..be93f5b9ca8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2016-08-05 Richard Biener <rguenther@suse.de>
+
+ * tree-cfgcleanup.c (tree_forwarder_block_p): Use bb_loop_header_p.
+ * cfghooks.c (force_nonfallthru): If we ended up splitting a latch
+ adjust loop info accordingly.
+
2016-08-05 Kugan Vivekanandarajah <kuganv@linaro.org>
* tree-vrp.c (extract_range_basic): Check cfun->after_inlining
diff --git a/gcc/cfghooks.c b/gcc/cfghooks.c
index 06c05d1fb39..4a6fcbf56dc 100644
--- a/gcc/cfghooks.c
+++ b/gcc/cfghooks.c
@@ -1030,11 +1030,17 @@ force_nonfallthru (edge e)
if (current_loops != NULL)
{
+ basic_block pred = single_pred (ret);
+ basic_block succ = single_succ (ret);
struct loop *loop
- = find_common_loop (single_pred (ret)->loop_father,
- single_succ (ret)->loop_father);
+ = find_common_loop (pred->loop_father, succ->loop_father);
rescan_loop_exit (e, false, true);
add_bb_to_loop (ret, loop);
+
+ /* If we split the latch edge of loop adjust the latch block. */
+ if (loop->latch == pred
+ && loop->header == succ)
+ loop->latch = ret;
}
}
diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c
index 4134c383dd9..ab8a9139f76 100644
--- a/gcc/tree-cfgcleanup.c
+++ b/gcc/tree-cfgcleanup.c
@@ -344,7 +344,7 @@ tree_forwarder_block_p (basic_block bb, bool phi_wanted)
{
basic_block dest;
/* Protect loop headers. */
- if (bb->loop_father->header == bb)
+ if (bb_loop_header_p (bb))
return false;
dest = EDGE_SUCC (bb, 0)->dest;