X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firedges.c;h=583169bdf80d372842970ed209105825f5226a46;hb=b4647d67ab7885d5da32c2a30242fbc4ed93d81b;hp=d9cc65824a4552ac2c7accdd40d46bc126309aa4;hpb=e64d870786b1564302c650e90eb9d3e5599b139e;p=libfirm diff --git a/ir/ir/iredges.c b/ir/ir/iredges.c index d9cc65824..583169bdf 100644 --- a/ir/ir/iredges.c +++ b/ir/ir/iredges.c @@ -273,6 +273,7 @@ static inline void edge_change_cnt(ir_node *tgt, ir_edge_kind_t kind, int ofs) info->out_count += ofs; #if 0 + ir_graph *irg = get_irn_irg(tgt); assert(info->out_count >= 0); if (info->out_count == 0 && kind == EDGE_KIND_NORMAL) { /* tgt lost it's last user */ @@ -281,12 +282,12 @@ static inline void edge_change_cnt(ir_node *tgt, ir_edge_kind_t kind, int ofs) for (i = get_irn_arity(tgt) - 1; i >= -1; --i) { ir_node *prev = get_irn_n(tgt, i); - edges_notify_edge(tgt, i, NULL, prev, current_ir_graph); + edges_notify_edge(tgt, i, NULL, prev, irg); } for (i = get_irn_deps(tgt) - 1; i >= 0; --i) { ir_node *prev = get_irn_dep(tgt, i); - edges_notify_edge_kind(tgt, i, NULL, prev, EDGE_KIND_DEP, current_ir_graph); + edges_notify_edge_kind(tgt, i, NULL, prev, EDGE_KIND_DEP, irg); } } @@ -297,7 +298,7 @@ static inline void edge_change_cnt(ir_node *tgt, ir_edge_kind_t kind, int ofs) * Verify the edge list of a node, ie. ensure it's a loop: * head -> e_1 -> ... -> e_n -> head */ -static inline void vrfy_list_head(ir_node *irn, ir_edge_kind_t kind) +static inline void verify_list_head(ir_node *irn, ir_edge_kind_t kind) { int err = 0; int num = 0; @@ -455,9 +456,9 @@ void edges_notify_edge_kind(ir_node *src, int pos, ir_node *tgt, /* verify list heads */ if (edges_dbg) { if (tgt) - vrfy_list_head(tgt, kind); + verify_list_head(tgt, kind); if (old_tgt) - vrfy_list_head(old_tgt, kind); + verify_list_head(old_tgt, kind); } #endif @@ -471,17 +472,13 @@ void edges_notify_edge(ir_node *src, int pos, ir_node *tgt, ir_node *old_tgt, ir } if (edges_activated_kind(irg, EDGE_KIND_BLOCK) && is_Block(src)) { - if (pos == -1) { - /* a MacroBlock edge: ignore it here */ - } else { - ir_node *bl_old = old_tgt ? get_nodes_block(skip_Proj(old_tgt)) : NULL; - ir_node *bl_tgt = NULL; + ir_node *bl_old = old_tgt ? get_nodes_block(skip_Proj(old_tgt)) : NULL; + ir_node *bl_tgt = NULL; - if (tgt) - bl_tgt = is_Bad(tgt) ? tgt : get_nodes_block(skip_Proj(tgt)); + if (tgt) + bl_tgt = is_Bad(tgt) ? tgt : get_nodes_block(skip_Proj(tgt)); - edges_notify_edge_kind(src, pos, bl_tgt, bl_old, EDGE_KIND_BLOCK, irg); - } + edges_notify_edge_kind(src, pos, bl_tgt, bl_old, EDGE_KIND_BLOCK, irg); } } @@ -621,6 +618,9 @@ static void visitor(ir_node *irn, void *data) { visitor_info_t *info = data; + if (is_Deleted(irn)) + return; + if (!irn_visited_else_mark(irn)) { info->visit(irn, info->data); } @@ -751,7 +751,7 @@ static void verify_list_presence(ir_node *irn, void *data) bitset_set(w->reachable, get_irn_idx(irn)); /* check list heads */ - vrfy_list_head(irn, w->kind); + verify_list_head(irn, w->kind); foreach_out_edge_kind(irn, e, w->kind) { ir_node *tgt;