From b879b3a893adf77d54431b7ffaf12911eed65474 Mon Sep 17 00:00:00 2001 From: Christopher Frieler Date: Tue, 3 Jul 2012 17:24:22 +0200 Subject: [PATCH] respect dependency edges in dead code elimination --- ir/common/irtools.c | 8 ++++++++ ir/opt/dead_code_elimination.c | 5 +++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ir/common/irtools.c b/ir/common/irtools.c index 5accaf5d0..deecaab25 100644 --- a/ir/common/irtools.c +++ b/ir/common/irtools.c @@ -180,6 +180,7 @@ void irn_rewire_inputs(ir_node *node) { ir_node *new_node; int arity; + int n_deps; int i; new_node = get_new_node(node); @@ -197,6 +198,13 @@ void irn_rewire_inputs(ir_node *node) set_irn_n(new_node, i, new_in); } + n_deps = get_irn_deps(new_node); + for (i = 0; i < n_deps; ++i) { + ir_node *dep = get_irn_dep(node, i); + ir_node *new_dep = get_new_node(dep); + set_irn_dep(new_node, i, new_dep); + } + /* Now the new node is complete. We can add it to the hash table for CSE. */ add_identities(new_node); } diff --git a/ir/opt/dead_code_elimination.c b/ir/opt/dead_code_elimination.c index 7efe1aff2..28ca5c9c2 100644 --- a/ir/opt/dead_code_elimination.c +++ b/ir/opt/dead_code_elimination.c @@ -75,13 +75,14 @@ static void copy_node_dce(ir_node *node, void *env) */ static void copy_graph_env(ir_graph *irg) { + ir_node *anchor = irg->anchor; ir_node *new_anchor; /* copy nodes */ - irg_walk_anchors(irg, copy_node_dce, rewire_inputs, NULL); + irg_walk_in_or_dep(anchor, copy_node_dce, rewire_inputs, NULL); /* fix the anchor */ - new_anchor = (ir_node*)get_irn_link(irg->anchor); + new_anchor = (ir_node*)get_irn_link(anchor); assert(new_anchor != NULL); irg->anchor = new_anchor; } -- 2.20.1