Fixed some typos.
[libfirm] / ir / ir / irgmod.c
index 4703857..fa26791 100644 (file)
@@ -47,11 +47,12 @@ void turn_into_tuple(ir_node *node, int arity)
 {
        ir_graph *irg = get_irn_irg(node);
        ir_node **in  = ALLOCAN(ir_node*, arity);
+       ir_node  *bad = new_r_Bad(irg, mode_ANY);
        int       i;
 
        /* construct a new in array, with every input being bad */
        for (i = 0; i < arity; ++i) {
-               in[i] = new_r_Bad(irg);
+               in[i] = bad;
        }
        set_irn_in(node, arity, in);
        set_irn_op(node, op_Tuple);
@@ -82,9 +83,9 @@ void exchange(ir_node *old, ir_node *nw)
                /* copy all dependencies from old to new */
                add_irn_deps(nw, old);
 
-               edges_reroute(old, nw, irg);
-               edges_reroute_kind(old, nw, EDGE_KIND_DEP, irg);
-               edges_node_deleted(old, irg);
+               edges_reroute(old, nw);
+               edges_reroute_kind(old, nw, EDGE_KIND_DEP);
+               edges_node_deleted(old);
                /* noone is allowed to reference this node anymore */
                set_irn_op(old, op_Deleted);
        } else {
@@ -111,6 +112,10 @@ void exchange(ir_node *old, ir_node *nw)
                old->in[0] = block;
                old->in[1] = nw;
        }
+
+       /* update irg flags */
+       set_irg_outs_inconsistent(irg);
+       set_irg_loopinfo_inconsistent(irg);
 }
 
 /*--------------------------------------------------------------------*/
@@ -164,11 +169,11 @@ static void move(ir_node *node, ir_node *from_bl, ir_node *to_bl)
 
        /* move its Projs */
        if (get_irn_mode(node) == mode_T) {
-               ir_node *proj = get_irn_link(node);
+               ir_node *proj = (ir_node*)get_irn_link(node);
                while (proj) {
                        if (get_nodes_block(proj) == from_bl)
                                set_nodes_block(proj, to_bl);
-                       proj = get_irn_link(proj);
+                       proj = (ir_node*)get_irn_link(proj);
                }
        }
 
@@ -188,7 +193,7 @@ static void move(ir_node *node, ir_node *from_bl, ir_node *to_bl)
  * Moves node and all predecessors of node from from_bl to to_bl.
  * Does not move predecessors of Phi nodes (or block nodes).
  */
-static void move_alt(ir_node *node, ir_node *from_bl, ir_node *to_bl)
+static void move_edges(ir_node *node, ir_node *from_bl, ir_node *to_bl)
 {
        int i, arity;
 
@@ -216,26 +221,24 @@ static void move_alt(ir_node *node, ir_node *from_bl, ir_node *to_bl)
        for (i = 0; i < arity; i++) {
                ir_node *pred = get_irn_n(node, i);
                if (get_nodes_block(pred) == from_bl)
-                       move(pred, from_bl, to_bl);
+                       move_edges(pred, from_bl, to_bl);
        }
 }
 
 void part_block(ir_node *node)
 {
-       ir_node *new_block, *old_block;
-       ir_node *phi, *jmp;
-       ir_graph *rem = current_ir_graph;
+       ir_graph *irg = get_irn_irg(node);
+       ir_node  *new_block, *old_block;
+       ir_node  *phi, *jmp;
 
        /* Turn off optimizations so that blocks are not merged again. */
        int rem_opt = get_opt_optimize();
        set_optimize(0);
 
-       current_ir_graph = get_irn_irg(node);
-
        /* Transform the control flow */
        old_block = get_nodes_block(node);
-       new_block = new_Block(get_Block_n_cfgpreds(old_block),
-                             get_Block_cfgpred_arr(old_block));
+       new_block = new_r_Block(irg, get_Block_n_cfgpreds(old_block),
+                               get_Block_cfgpred_arr(old_block));
 
        /* create a jump from new_block to old_block, which is now the lower one */
        jmp = new_r_Jmp(new_block);
@@ -254,14 +257,15 @@ void part_block(ir_node *node)
        }
 
        set_optimize(rem_opt);
-       current_ir_graph = rem;
 }
 
 ir_node *part_block_edges(ir_node *node)
 {
+       ir_graph        *irg       = get_irn_irg(node);
        ir_node         *old_block = get_nodes_block(node);
-       ir_node         *new_block = new_Block(get_Block_n_cfgpreds(old_block),
-                                              get_Block_cfgpred_arr(old_block));
+       ir_node         *new_block = new_r_Block(irg,
+                                                get_Block_n_cfgpreds(old_block),
+                                                get_Block_cfgpred_arr(old_block));
        const ir_edge_t *edge;
        const ir_edge_t *next;
 
@@ -269,7 +273,7 @@ ir_node *part_block_edges(ir_node *node)
        set_irn_in(old_block, 0, NULL);
 
        /* move node and its predecessors to new_block */
-       move_alt(node, old_block, new_block);
+       move_edges(node, old_block, new_block);
 
        /* move Phi nodes to new_block */
        foreach_out_edge_safe(old_block, edge, next) {
@@ -285,11 +289,10 @@ ir_node *part_block_edges(ir_node *node)
 void kill_node(ir_node *node)
 {
        ir_graph *irg = get_irn_irg(node);
-       ir_node *bad = get_irg_bad(irg);
-       int i;
 
-       for (i = get_irn_arity(node) - 1; i >= -1; --i) {
-               set_irn_n(node, i, bad);
+       if (edges_activated(irg)) {
+               edges_node_deleted(node);
        }
-       exchange(node, bad);
+       /* noone is allowed to reference this node anymore */
+       set_irn_op(node, op_Deleted);
 }