aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfg.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2009-09-10 11:28:11 -0700
committerRichard Henderson <rth@gcc.gnu.org>2009-09-10 11:28:11 -0700
commit88e24a5ab99c76c81f32628af49e0a39147c95e8 (patch)
tree78d508c427e8f7f65d2142d82567fc6d4f13d7f9 /gcc/tree-cfg.c
parent40a3286202dc309e499c21a1b26176a6460aabf4 (diff)
downloadgcc-88e24a5ab99c76c81f32628af49e0a39147c95e8.zip
gcc-88e24a5ab99c76c81f32628af49e0a39147c95e8.tar.gz
gcc-88e24a5ab99c76c81f32628af49e0a39147c95e8.tar.bz2
tree-cfg.c (split_edge_bb_loc): Don't disallow placement at dest_prev if the edge is complex.
* tree-cfg.c (split_edge_bb_loc): Don't disallow placement at dest_prev if the edge is complex. From-SVN: r151606
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r--gcc/tree-cfg.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 98339b4..0718cfe 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -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.