From c59c04ea5eb29275896b6f8ec8ef1646ed11265b Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Tue, 22 Mar 2005 13:21:50 +0000 Subject: [PATCH] A newly created Return may be bad due to dead block. Handle that case. [r5447] --- ir/opt/return.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/ir/opt/return.c b/ir/opt/return.c index cc10e1d72..ad66d18bd 100644 --- a/ir/opt/return.c +++ b/ir/opt/return.c @@ -251,15 +251,24 @@ void normalize_n_returns(ir_graph *irg) new_ret = new_r_Return(irg, new_bl, in[0], n_ret_vals - 1, &in[1]); - if (can_move_ret(new_ret)) { - set_irn_link(new_ret, list); - list = new_ret; - ++n_rets; - } - else { - set_irn_link(new_ret, final); - final = new_ret; - ++n_finals; + if (! is_Bad(new_ret)) { + /* + * The newly created node might be bad, if we + * create it in a block with only Bad predecessors. + * In that case ignore this block. + * + * We could even kill the jmp then ... + */ + if (can_move_ret(new_ret)) { + set_irn_link(new_ret, list); + list = new_ret; + ++n_rets; + } + else { + set_irn_link(new_ret, final); + final = new_ret; + ++n_finals; + } } } -- 2.20.1