This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix latent bugs


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]