X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fcode_placement.c;h=2e3e5a60c308e6dc966168a34e58883e3cee22c7;hb=b27ae245166bb695bc4e418ff416d91bc37d0f28;hp=72fbdb95e33ddafc3ecbfcdb9a93a3097f68f5f2;hpb=ae9fd2c229cc7f4c724ce9ccc9263c16d77670fe;p=libfirm diff --git a/ir/opt/code_placement.c b/ir/opt/code_placement.c index 72fbdb95e..2e3e5a60c 100644 --- a/ir/opt/code_placement.c +++ b/ir/opt/code_placement.c @@ -95,10 +95,6 @@ static void place_floats_early(ir_node *n, waitq *worklist) } block = get_nodes_block(n); - /* do not move unreachable code (or its predecessors around) since dominance - * is inalid there */ - if (!is_block_reachable(block)) - return; /* first move predecessors up */ arity = get_irn_arity(n); @@ -215,8 +211,8 @@ static ir_node *consumer_dom_dca(ir_node *dca, ir_node *consumer, if (is_Bad(new_block)) continue; - if (is_block_reachable(new_block)) - dca = calc_dom_dca(dca, new_block); + assert(is_block_reachable(new_block)); + dca = calc_dom_dca(dca, new_block); } } } else { @@ -285,10 +281,7 @@ static ir_node *get_deepest_common_dom_ancestor(ir_node *node, ir_node *dca) * the users of Proj are our users. */ dca = get_deepest_common_dom_ancestor(succ, dca); } else { - /* ignore successors in unreachable code */ - ir_node *succ_blk = get_nodes_block(succ); - if (!is_block_reachable(succ_blk)) - continue; + assert(is_block_reachable(get_nodes_block(succ))); dca = consumer_dom_dca(dca, succ, node); } } @@ -364,10 +357,8 @@ static void place_floats_late(ir_node *n, pdeq *worklist) return; } - /* don't move unreachable code around */ block = get_nodes_block(n); - if (!is_block_reachable(block)) - return; + assert(is_block_reachable(block)); /* deepest common ancestor in the dominator tree of all nodes' blocks depending on us; our final placement has to dominate @@ -422,6 +413,9 @@ void place_code(ir_graph *irg) worklist = new_waitq(); place_early(irg, worklist); + /* While GCSE might place nodes in unreachable blocks, + * these are now placed in reachable blocks. */ + /* Note: place_early changes only blocks, no data edges. So, the * data out edges are still valid, no need to recalculate them here. */ @@ -429,7 +423,6 @@ void place_code(ir_graph *irg) unnecessary executions of the node. */ place_late(irg, worklist); - set_irg_loopinfo_inconsistent(irg); del_waitq(worklist); }