called after an edges_deactivate() which would leave not-initialised list heads
[r6169]
* Only do something, if the old and new target differ.
*/
if(tgt != old_tgt) {
* Only do something, if the old and new target differ.
*/
if(tgt != old_tgt) {
- int is_block_edge = is_Block(src);
+ int is_block_edge = is_Block(src);
set *edges = _get_irg_edge_info(irg)->edges;
ir_block_edge_t space;
set *edges = _get_irg_edge_info(irg)->edges;
ir_block_edge_t space;
- ir_edge_t *templ = (ir_edge_t *) &space;
+ ir_edge_t *templ = (ir_edge_t *) &space;
edges_notify_edge(irn, i, get_irn_n(irn, i), NULL, irg);
}
edges_notify_edge(irn, i, get_irn_n(irn, i), NULL, irg);
}
+static void init_lh_walker(ir_node *irn, void *data)
+{
+ INIT_LIST_HEAD(_get_irn_outs_head(irn));
+ if(is_Block(irn))
+ INIT_LIST_HEAD(_get_block_succ_head(irn));
+}
+
void edges_activate(ir_graph *irg)
{
irg_edge_info_t *info = _get_irg_edge_info(irg);
info->activated = 1;
edges_init_graph(irg);
void edges_activate(ir_graph *irg)
{
irg_edge_info_t *info = _get_irg_edge_info(irg);
info->activated = 1;
edges_init_graph(irg);
- irg_walk_graph(irg, NULL, build_edges_walker, irg);
+ irg_walk_graph(irg, init_lh_walker, build_edges_walker, irg);
}
void edges_deactivate(ir_graph *irg)
}
void edges_deactivate(ir_graph *irg)