Commit 0c617be4 by Jeff Law Committed by Jeff Law

cfg.c (redirect_edge_succ_nodup): Duplicate the varm map before removing the edge.

	* cfg.c (redirect_edge_succ_nodup): Duplicate the varm map
	before removing the edge.

	* cfgrtl.c (cfg_layout_redirect_edge_and_branch): Do not use E after
	it may have been freed by redirect_branch_edge or
	redirect_edge_succ_nodup.

From-SVN: r171356
parent 58da96fe
2011-03-23 Jeff Law <law@redhat.com>
* cfg.c (redirect_edge_succ_nodup): Duplicate the varm map
before removing the edge.
* cfgrtl.c (cfg_layout_redirect_edge_and_branch): Do not use E after
it may have been freed by redirect_branch_edge or
redirect_edge_succ_nodup.
2011-03-23 Richard Guenther <rguenther@suse.de> 2011-03-23 Richard Guenther <rguenther@suse.de>
* tree-stdarg.c (va_list_counter_bump): Handle bumps via * tree-stdarg.c (va_list_counter_bump): Handle bumps via
......
...@@ -402,8 +402,8 @@ redirect_edge_succ_nodup (edge e, basic_block new_succ) ...@@ -402,8 +402,8 @@ redirect_edge_succ_nodup (edge e, basic_block new_succ)
if (s->probability > REG_BR_PROB_BASE) if (s->probability > REG_BR_PROB_BASE)
s->probability = REG_BR_PROB_BASE; s->probability = REG_BR_PROB_BASE;
s->count += e->count; s->count += e->count;
remove_edge (e);
redirect_edge_var_map_dup (s, e); redirect_edge_var_map_dup (s, e);
remove_edge (e);
e = s; e = s;
} }
else else
......
...@@ -2537,9 +2537,9 @@ cfg_layout_redirect_edge_and_branch (edge e, basic_block dest) ...@@ -2537,9 +2537,9 @@ cfg_layout_redirect_edge_and_branch (edge e, basic_block dest)
e->flags &= ~EDGE_FALLTHRU; e->flags &= ~EDGE_FALLTHRU;
redirected = redirect_branch_edge (e, dest); redirected = redirect_branch_edge (e, dest);
gcc_assert (redirected); gcc_assert (redirected);
e->flags |= EDGE_FALLTHRU; redirected->flags |= EDGE_FALLTHRU;
df_set_bb_dirty (e->src); df_set_bb_dirty (redirected->src);
return e; return redirected;
} }
/* In case we are redirecting fallthru edge to the branch edge /* In case we are redirecting fallthru edge to the branch edge
of conditional jump, remove it. */ of conditional jump, remove it. */
...@@ -2553,10 +2553,10 @@ cfg_layout_redirect_edge_and_branch (edge e, basic_block dest) ...@@ -2553,10 +2553,10 @@ cfg_layout_redirect_edge_and_branch (edge e, basic_block dest)
&& onlyjump_p (BB_END (src))) && onlyjump_p (BB_END (src)))
delete_insn (BB_END (src)); delete_insn (BB_END (src));
} }
ret = redirect_edge_succ_nodup (e, dest);
if (dump_file) if (dump_file)
fprintf (dump_file, "Fallthru edge %i->%i redirected to %i\n", fprintf (dump_file, "Fallthru edge %i->%i redirected to %i\n",
e->src->index, e->dest->index, dest->index); e->src->index, e->dest->index, dest->index);
ret = redirect_edge_succ_nodup (e, dest);
} }
else else
ret = redirect_branch_edge (e, dest); ret = redirect_branch_edge (e, dest);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment