implemented a function to retrieve estimated costs of an op
[libfirm] / ir / be / bespillbelady.c
index 27f4395..99c5a92 100644 (file)
@@ -445,6 +445,7 @@ static block_info_t *compute_block_start_info(ir_node *blk, void *env) {
                        ir_node *cpy = be_new_Copy(bel->cls, irg, pred_block, arg);
                        pset_insert_ptr(bel->copies, cpy);
                        DBG((dbg, DBG_START, "    place a %+F of %+F in %+F\n", cpy, arg, pred_block));
+                       /* TODO: Place copies before jumps! */
                        sched_add_before(sched_last(pred_block), cpy);
                        set_irn_n(irn, o, cpy);
                }
@@ -586,18 +587,15 @@ static void remove_copies(belady_env_t *bel) {
 
        foreach_pset(bel->copies, irn) {
                ir_node *src;
-               const ir_edge_t *edge;
+               const ir_edge_t *edge, *ne;
 
                assert(be_is_Copy(irn));
 
                src = be_get_Copy_op(irn);
-               foreach_out_edge(irn, edge) {
-                       ir_nodeuser = get_edge_src_irn(edge);
+               foreach_out_edge_safe(irn, edge, ne) {
+                       ir_node *user = get_edge_src_irn(edge);
                        int user_pos = get_edge_src_pos(edge);
 
-                       // is this normal?
-                       if(user == NULL)
-                               break;
                        set_irn_n(user, user_pos, src);
                }
        }