OSDN Git Service

* tree-cfg.c (split_edge_bb_loc): Don't disallow placement at
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Sep 2009 18:28:11 +0000 (18:28 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Sep 2009 18:28:11 +0000 (18:28 +0000)
        dest_prev if the edge is complex.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@151606 138bc75d-0d04-0410-961f-82ee72b054a4

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.