diff mbox

Fix latent bugs

Message ID alpine.LSU.2.11.1608041441110.26629@t29.fhfr.qr
State New
Headers show

Commit Message

Richard Biener Aug. 4, 2016, 12:41 p.m. UTC
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.
diff mbox

Patch

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;
 	}
     }