- fixed assertion
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Tue, 9 Dec 2008 12:28:02 +0000 (12:28 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Tue, 9 Dec 2008 12:28:02 +0000 (12:28 +0000)
- maybe we should initially mark labeled blocks as non-removable

[r24451]

ir/opt/cfopt.c
ir/opt/code_placement.c

index ab624a0..e1ab474 100644 (file)
@@ -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);
index fed65e3..577ad98 100644 (file)
@@ -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;
                }
        }