X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firedges.c;h=6446ff26075d7e57189254b25c8c98846d4d5dd8;hb=f600524c363556c785b85c0dff8792d04f73e252;hp=7eb0197aa44ecf04a73f2e8df40058ba927e8a09;hpb=12b680b45d40312393d75644484cf72f8215666d;p=libfirm diff --git a/ir/ir/iredges.c b/ir/ir/iredges.c index 7eb0197aa..6446ff260 100644 --- a/ir/ir/iredges.c +++ b/ir/ir/iredges.c @@ -54,7 +54,7 @@ #define ValueType ir_edge_t* #define NullValue NULL #define DeletedValue ((ir_edge_t*)-1) -#define Hash(this,key) (HASH_PTR(key->src) ^ key->pos) +#define Hash(this,key) (HASH_PTR(key->src) ^ (key->pos * 40013)) #define KeysEqual(this,key1,key2) ((key1->src) == (key2->src) && (key1->pos == key2->pos)) #define SetRangeEmpty(ptr,size) memset(ptr, 0, (size) * sizeof((ptr)[0])) @@ -194,7 +194,7 @@ void edges_reset_private_data(ir_graph *irg, int offset, size_t size) { void edges_init_graph_kind(ir_graph *irg, ir_edge_kind_t kind) { if (edges_activated_kind(irg, kind)) { irg_edge_info_t *info = _get_irg_edge_info(irg, kind); - size_t amount = 32; + size_t amount = irg->estimated_node_count * 2; edges_used = 1; if(info->allocated) { @@ -919,8 +919,6 @@ static void irg_block_edges_walk2(ir_node *bl, } } -/* Walks only over Block nodes in the graph. Has it's own visited - flag, so that it can be interleaved with the other walker. */ void irg_block_edges_walk(ir_node *node, irg_walk_func *pre, irg_walk_func *post, void *env) { @@ -928,6 +926,10 @@ void irg_block_edges_walk(ir_node *node, assert(edges_activated(current_ir_graph)); assert(is_Block(node)); + set_using_block_visited(current_ir_graph); + inc_irg_block_visited(current_ir_graph); irg_block_edges_walk2(node, pre, post, env); + + clear_using_block_visited(current_ir_graph); }