avoid dangerous use of memcmp
[libfirm] / ir / ir / iredges.c
index 7eb0197..6446ff2 100644 (file)
@@ -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);
 }