jetzt cooler?
[libfirm] / ir / ir / irgopt.c
index a7420fd..4f5ee50 100644 (file)
@@ -371,12 +371,18 @@ static void copy_preds(ir_node *n, void *env) {
        nn = get_new_node(n);
 
        if (is_Block(n)) {
+               /* copy the macro block header */
+               ir_node *mbh = get_Block_MacroBlock(n);
+
+               if (! is_Bad(mbh))
+                       set_irn_n(nn, -1, get_new_node(mbh));
+
                /* Don't copy Bad nodes. */
                j = 0;
                irn_arity = get_irn_arity(n);
                for (i = 0; i < irn_arity; i++) {
                        if (! is_Bad(get_irn_n(n, i))) {
-                               set_irn_n (nn, j, get_new_node(get_irn_n(n, i)));
+                               set_irn_n(nn, j, get_new_node(get_irn_n(n, i)));
                                /*if (is_backedge(n, i)) set_backedge(nn, j);*/
                                j++;
                        }
@@ -401,7 +407,7 @@ static void copy_preds(ir_node *n, void *env) {
                                exchange(nn, old);
                        }
                }
-       } else if (get_irn_op(n) == op_Phi) {
+       } else if (is_Phi(n)) {
                /* Don't copy node if corresponding predecessor in block is Bad.
                   The Block itself should not be Bad. */
                block = get_nodes_block(n);
@@ -1748,13 +1754,6 @@ place_floats_early(ir_node *n, waitq *worklist) {
        assert(irn_not_visited(n));
        mark_irn_visited(n);
 
-#ifndef CAN_PLACE_PROJS
-       while (is_Proj(n)) {
-               n = get_Proj_pred(n);
-               mark_irn_visited(n);
-       }
-#endif
-
        /* Place floating nodes. */
        if (get_irn_pinned(n) == op_pin_state_floats) {
                ir_node *curr_block = get_irn_n(n, -1);
@@ -2066,7 +2065,6 @@ static ir_node *get_deepest_common_ancestor(ir_node *node, ir_node *dca)
        return dca;
 }
 
-#ifdef CAN_PLACE_PROJS
 static void set_projs_block(ir_node *node, ir_node *block)
 {
        int i;
@@ -2082,7 +2080,6 @@ static void set_projs_block(ir_node *node, ir_node *block)
                set_nodes_block(succ, block);
        }
 }
-#endif
 
 /**
  * Find the latest legal block for N and place N into the
@@ -2150,11 +2147,9 @@ static void place_floats_late(ir_node *n, pdeq *worklist) {
                                if (dca != NULL) {
                                        set_nodes_block(n, dca);
                                        move_out_of_loops(n, early_blk);
-#ifdef CAN_PLACE_PROJS
                                        if(get_irn_mode(n) == mode_T) {
                                                set_projs_block(n, get_nodes_block(n));
                                        }
-#endif
                                }
                        }
                }