From 5c4eda434996c01bb92310a1afcada0927115858 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Tue, 9 Dec 2008 12:28:02 +0000 Subject: [PATCH] - fixed assertion - maybe we should initially mark labeled blocks as non-removable [r24451] --- ir/opt/cfopt.c | 8 ++++---- ir/opt/code_placement.c | 8 +++----- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/ir/opt/cfopt.c b/ir/opt/cfopt.c index ab624a055..e1ab47425 100644 --- a/ir/opt/cfopt.c +++ b/ir/opt/cfopt.c @@ -224,11 +224,11 @@ static void remove_unreachable_blocks_and_conds(ir_node *block, void *env) { *changed |= remove_senseless_conds(block); - /* clear the block mark of all blocks that have NO label */ + /* clear the block mark of all non labeled blocks */ if (has_Block_label(block)) - set_Block_removable(block); - else set_Block_non_removable(block); + else + set_Block_removable(block); } /** @@ -562,7 +562,7 @@ static void optimize_blocks(ir_node *b, void *ctx) { /* case 1: Do nothing */ } else if (is_Block_removable(pred) && !Block_block_visited(pred)) { /* case 2: It's an empty block and not yet visited. */ - assert(get_Block_n_cfgpreds(b) > 1); + assert(get_Block_n_cfgpreds(b) > 1 || has_Block_label(b)); /* Else it should be optimized by equivalent_node. */ for (j = 0; j < get_Block_n_cfgpreds(pred); j++) { ir_node *pred_X = get_Block_cfgpred(pred, j); diff --git a/ir/opt/code_placement.c b/ir/opt/code_placement.c index fed65e350..577ad983e 100644 --- a/ir/opt/code_placement.c +++ b/ir/opt/code_placement.c @@ -304,10 +304,8 @@ static ir_node *consumer_dom_dca(ir_node *dca, ir_node *consumer, ir_node *produ return dca; } -/* FIXME: the name clashes here with the function from ana/field_temperature.c - * please rename. */ -static inline int get_irn_loop_depth(ir_node *n) { - return get_loop_depth(get_irn_loop(n)); +static inline int get_block_loop_depth(ir_node *block) { + return get_loop_depth(get_irn_loop(block)); } /** @@ -331,7 +329,7 @@ static void move_out_of_loops(ir_node *n, ir_node *early) { while (dca != early) { dca = get_Block_idom(dca); if (!dca || is_Bad(dca)) break; /* may be Bad if not reachable from Start */ - if (get_irn_loop_depth(dca) < get_irn_loop_depth(best)) { + if (get_block_loop_depth(dca) < get_block_loop_depth(best)) { best = dca; } } -- 2.20.1