Use edges_reroute_except() instead of edges_reroute() + set_irn_n().
[libfirm] / ir / be / sparc / sparc_finish.c
index a001bfe..4c34288 100644 (file)
@@ -114,7 +114,6 @@ void sparc_introduce_prolog_epilog(ir_graph *irg)
        be_stack_layout_t     *layout     = be_get_irg_stack_layout(irg);
        ir_node               *block      = get_nodes_block(start);
        ir_node               *initial_sp = be_get_initial_reg_value(irg, sp_reg);
-       ir_node               *sp         = initial_sp;
        ir_node               *schedpoint = start;
        ir_type               *frame_type = get_irg_frame_type(irg);
        unsigned               frame_size = get_type_size_bytes(frame_type);
@@ -136,14 +135,12 @@ void sparc_introduce_prolog_epilog(ir_graph *irg)
                schedpoint = sched_next(schedpoint);
 
        if (!layout->sp_relative) {
-               ir_node *save = new_bd_sparc_Save_imm(NULL, block, sp, NULL,
-                                                     -SPARC_MIN_STACKSIZE-frame_size);
+               ir_node *const save = new_bd_sparc_Save_imm(NULL, block, initial_sp, NULL, -(SPARC_MIN_STACKSIZE + frame_size));
                arch_set_irn_register(save, sp_reg);
                sched_add_after(schedpoint, save);
                schedpoint = save;
 
-               edges_reroute(initial_sp, save);
-               set_irn_n(save, n_sparc_Save_stack, initial_sp);
+               edges_reroute_except(initial_sp, save, save);
 
                /* we still need the Save even if noone is explicitely using the
                 * value. (TODO: this isn't 100% correct yet, something at the end of
@@ -156,9 +153,8 @@ void sparc_introduce_prolog_epilog(ir_graph *irg)
                        sched_add_after(schedpoint, keep);
                }
        } else {
-               ir_node *incsp = be_new_IncSP(sp_reg, block, sp, frame_size, 0);
-               edges_reroute(initial_sp, incsp);
-               be_set_IncSP_pred(incsp, sp);
+               ir_node *const incsp = be_new_IncSP(sp_reg, block, initial_sp, frame_size, 0);
+               edges_reroute_except(initial_sp, incsp, incsp);
                sched_add_after(schedpoint, incsp);
        }
 }
@@ -251,7 +247,7 @@ static void finish_sparc_FrameAddr(ir_node *node)
 
                sched_add_before(node, new_frameaddr);
                arch_set_irn_register(new_frameaddr, reg);
-               exchange(node, new_frameaddr);
+               be_peephole_exchange(node, new_frameaddr);
        }
 }
 
@@ -283,7 +279,7 @@ static void finish_sparc_Ld(ir_node *node)
                for (i = 0; i < n_outs; i++) {
                        arch_set_irn_register_out(new_load, i, arch_get_irn_register_out(node, i));
                }
-               exchange(node, new_load);
+               be_peephole_exchange(node, new_load);
        }
 
 }
@@ -347,7 +343,7 @@ static void finish_sparc_Ldf(ir_node *node)
                for (i = 0; i < n_outs; i++) {
                        arch_set_irn_register_out(new_load, i, arch_get_irn_register_out(node, i));
                }
-               exchange(node, new_load);
+               be_peephole_exchange(node, new_load);
        }
 
 }
@@ -381,7 +377,7 @@ static void finish_sparc_St(ir_node *node)
                for (i = 0; i < n_outs; i++) {
                        arch_set_irn_register_out(new_load, i, arch_get_irn_register_out(node, i));
                }
-               exchange(node, new_load);
+               be_peephole_exchange(node, new_load);
        }
 
 }
@@ -416,7 +412,7 @@ static void finish_sparc_Stf(ir_node *node)
                for (i = 0; i < n_outs; i++) {
                        arch_set_irn_register_out(new_load, i, arch_get_irn_register_out(node, i));
                }
-               exchange(node, new_load);
+               be_peephole_exchange(node, new_load);
        }
 
 }
@@ -543,7 +539,7 @@ static void peephole_sparc_RestoreZero(ir_node *node)
                        continue;
 
                if (be_is_Copy(schedpoint) && be_can_move_down(heights, schedpoint, node)) {
-                       ir_node *op = get_irn_n(schedpoint, n_be_Copy_op);
+                       ir_node *const op = be_get_Copy_op(schedpoint);
                        replace_with_restore_imm(node, schedpoint, op, NULL, 0);
                } else if (is_sparc_Or(schedpoint) &&
                           arch_get_irn_flags(schedpoint) & ((arch_irn_flags_t)sparc_arch_irn_flag_immediate_form) &&