tree-cfg.c (split_edge_bb_loc): Don't disallow placement at dest_prev if the edge...
authorRichard Henderson <rth@redhat.com>
Thu, 10 Sep 2009 18:28:11 +0000 (11:28 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Thu, 10 Sep 2009 18:28:11 +0000 (11:28 -0700)
* tree-cfg.c (split_edge_bb_loc): Don't disallow placement at
        dest_prev if the edge is complex.

From-SVN: r151606

gcc/ChangeLog
gcc/tree-cfg.c

index fc595d3..edc610f 100644 (file)
@@ -1,5 +1,8 @@
 2009-09-10  Richard Henderson  <rth@redhat.com>
 
+       * tree-cfg.c (split_edge_bb_loc): Don't disallow placement at
+       dest_prev if the edge is complex.
+
        * tree-cfg.c (is_ctrl_stmt): Use a switch.
 
        * tree-cfg.c (gimple_can_merge_blocks_p): Move label and
index 98339b4..0718cfe 100644 (file)
@@ -2981,11 +2981,15 @@ static basic_block
 split_edge_bb_loc (edge edge_in)
 {
   basic_block dest = edge_in->dest;
+  basic_block dest_prev = dest->prev_bb;
 
-  if (dest->prev_bb && find_edge (dest->prev_bb, dest))
-    return edge_in->src;
-  else
-    return dest->prev_bb;
+  if (dest_prev)
+    {
+      edge e = find_edge (dest_prev, dest);
+      if (e && !(e->flags & EDGE_COMPLEX))
+       return edge_in->src;
+    }
+  return dest_prev;
 }
 
 /* Split a (typically critical) edge EDGE_IN.  Return the new block.