This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix latent bugs
- From: Richard Biener <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Thu, 4 Aug 2016 14:41:56 +0200 (CEST)
- Subject: [PATCH] Fix latent bugs
- Authentication-results: sourceware.org; auth=none
The following fixes two latent bugs I ran into when fixing PR72772.
Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.
Richard.
2016-08-04 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.
Index: gcc/tree-cfgcleanup.c
===================================================================
--- gcc/tree-cfgcleanup.c (revision 239120)
+++ gcc/tree-cfgcleanup.c (working copy)
@@ -344,7 +344,7 @@ tree_forwarder_block_p (basic_block bb,
{
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;
Index: gcc/cfghooks.c
===================================================================
--- gcc/cfghooks.c (revision 239120)
+++ gcc/cfghooks.c (working copy)
@@ -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;
}
}