Remove the unused parameter const arch_env_t *env from arch_irn_get_flags(), arch_irn...
[libfirm] / ir / common / irtools.c
index d3e4c7f..dea407c 100644 (file)
@@ -75,10 +75,10 @@ copy_irn_to_irg(ir_node *n, ir_graph *irg) {
        else if (op == op_Proj) {
                old_irg = get_irn_irg(n);
 
-               if (n == get_irg_frame(old_irg))
+               if (n == get_irg_initial_exec(old_irg))
+                       nn = get_irg_initial_exec(irg);
+               else if (n == get_irg_frame(old_irg))
                        nn = get_irg_frame(irg);
-               else if (n == get_irg_globals(old_irg))
-                       nn = get_irg_globals(irg);
                else if (n == get_irg_initial_mem(old_irg))
                        nn = get_irg_initial_mem(irg);
                else if (n == get_irg_args(old_irg))
@@ -107,8 +107,12 @@ copy_irn_to_irg(ir_node *n, ir_graph *irg) {
        set_irn_link(n, nn);
 
        /* fix the irg for blocks */
-       if (is_Block(nn))
+       if (is_Block(nn)) {
                nn->attr.block.irg = irg;
+
+               /* we cannot allow blocks WITHOUT macroblock input */
+               set_Block_MacroBlock(nn, get_Block_MacroBlock(n));
+       }
 }
 
 /*
@@ -120,7 +124,7 @@ ir_node *exact_copy(const ir_node *n) {
        ir_node *res, *block = NULL;
 
        if (is_no_Block(n))
-               block = get_irn_n(n, -1);
+               block = get_nodes_block(n);
 
        res = new_ir_node(get_irn_dbg_info(n),
                irg,
@@ -136,9 +140,16 @@ ir_node *exact_copy(const ir_node *n) {
           frees e.g. the memory of the graph_arr allocated in new_immBlock. */
        copy_node_attr(n, res);
        new_backedge_info(res);
+
+       if (is_Block(n)) {
+               set_Block_MacroBlock(res, get_Block_MacroBlock(n));
+       }
        return res;
 }
 
+/*
+ * Dump a pset containing Firm objects.
+ */
 void firm_pset_dump(pset *set) {
        void *obj;