tree-cfgcleanup.c (tree_forwarder_block_p): Use bb_loop_header_p.
authorRichard Biener <rguenther@suse.de>
Fri, 5 Aug 2016 07:41:45 +0000 (07:41 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 5 Aug 2016 07:41:45 +0000 (07:41 +0000)
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.

From-SVN: r239163

gcc/ChangeLog
gcc/cfghooks.c
gcc/tree-cfgcleanup.c

index 7bb9dc96c016610fdb47b7a0d3d8a8f09df2a4fb..be93f5b9ca84e1c6ce2b411b7fa12bfb26c964a1 100644 (file)
@@ -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
index 06c05d1fb39a6146de45ac0b71fda31284fb3994..4a6fcbf56dcbeeb43ad0412baf80daf621a366a6 100644 (file)
@@ -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 4134c383dd999d5f6581fe2ee2263d3dba908d21..ab8a9139f76f2be8c20dc74d1e4ccd8c882e8199 100644 (file)
@@ -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;