{
const char *msg = "";
- if(!edges_activated_kind(irg, kind))
- return;
+ assert(edges_activated_kind(irg, kind));
/*
* Only do something, if the old and new target differ.
/* mark the edge invalid if it was found */
if(edge) {
- ir_block_edge_t *block_edge = (ir_block_edge_t *) edge;
-
msg = "deleting";
list_del(&edge->list);
edge->invalid = 1;
void edges_notify_edge(ir_node *src, int pos, ir_node *tgt, ir_node *old_tgt, ir_graph *irg)
{
- edges_notify_edge_kind(src, pos, tgt, old_tgt, EDGE_KIND_NORMAL, irg);
- if(is_Block(src)) {
+ if(edges_activated_kind(irg, EDGE_KIND_NORMAL)) {
+ edges_notify_edge_kind(src, pos, tgt, old_tgt, EDGE_KIND_NORMAL, irg);
+ }
+
+ if(edges_activated_kind(irg, EDGE_KIND_BLOCK) && is_Block(src)) {
/* do not use get_nodes_block() here, it fails when running unpinned */
- ir_node *bl_tgt = tgt ? get_irn_n(skip_Proj(tgt), -1) : NULL;
- // ir_node *bl_old = old_tgt ? old_tgt : NULL;
ir_node *bl_old = old_tgt ? get_irn_n(skip_Proj(old_tgt), -1) : NULL;
+ ir_node *bl_tgt = NULL;
+
+ if(tgt)
+ bl_tgt = is_Bad(tgt) ? tgt : get_irn_n(skip_Proj(tgt), -1);
+
edges_notify_edge_kind(src, pos, bl_tgt, bl_old, EDGE_KIND_BLOCK, irg);
}
}
void edges_node_deleted_kind(ir_node *old, ir_edge_kind_t kind, ir_graph *irg)
{
- if(edges_activated_kind(irg, kind)) {
- int i, n;
+ int i, n;
- DBG((dbg, LEVEL_5, "node deleted (kind: %s): %+F\n", get_kind_str(kind), old));
+ if(!edges_activated_kind(irg, kind))
+ return;
- foreach_tgt(old, i, n, kind) {
- ir_node *old_tgt = get_n(old, i, kind);
- edges_notify_edge_kind(old, i, NULL, old_tgt, kind, irg);
- }
+ DBG((dbg, LEVEL_5, "node deleted (kind: %s): %+F\n", get_kind_str(kind), old));
+
+ foreach_tgt(old, i, n, kind) {
+ ir_node *old_tgt = get_n(old, i, kind);
+ edges_notify_edge_kind(old, i, NULL, old_tgt, kind, irg);
}
}
struct build_walker *w = data;
int i, n;
+ if(!edges_activated_kind(w->irg, w->kind))
+ return;
+
foreach_tgt(irn, i, n, w->kind)
edges_notify_edge_kind(irn, i, get_n(irn, i, w->kind), NULL, w->kind, w->irg);
}
info->activated = 1;
edges_init_graph_kind(irg, kind);
- irg_walk_graph(irg, init_lh_walker, build_edges_walker, &w);
- irg_walk_anchors(irg, init_lh_walker, NULL, &w);
+ //irg_walk_graph(irg, init_lh_walker, build_edges_walker, &w);
+ inc_irg_visited(irg);
+ irg_walk_anchors(irg, init_lh_walker, build_edges_walker, &w);
visit_all_identities(irg, visitor, &w);
}
{
struct build_walker *w = data;
set *edges = _get_irg_edge_info(w->irg, w->kind)->edges;
- int not_a_block = !is_Block(irn);
int i, n;
foreach_tgt(irn, i, n, w->kind) {