From f60a80883e4fd60ce01af229990dc6907b4b8354 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Fri, 8 Apr 2011 15:34:21 +0200 Subject: [PATCH] more aggressive node-killing to avoid dangling edges --- ir/be/beirgmod.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/ir/be/beirgmod.c b/ir/be/beirgmod.c index 64f517ebd..9f9c48d1a 100644 --- a/ir/be/beirgmod.c +++ b/ir/be/beirgmod.c @@ -307,9 +307,23 @@ static void remove_dead_nodes_walker(ir_node *block, void *data) if (bitset_is_set(env->reachable, get_irn_idx(node))) continue; - if (env->lv) + if (env->lv != NULL) be_liveness_remove(env->lv, node); sched_remove(node); + + /* kill projs */ + if (get_irn_mode(node) == mode_T) { + const ir_edge_t *edge; + const ir_edge_t *next_edge; + foreach_out_edge_safe(node, edge, next_edge) { + ir_node *proj = get_edge_src_irn(edge); + if (!is_Proj(proj)) + continue; + if (env->lv != NULL) + be_liveness_remove(env->lv, proj); + kill_node(proj); + } + } kill_node(node); } } -- 2.20.1