Make spiller more deterministic.
[libfirm] / ir / opt / opt_blocks.c
index 6df8594..0f49d71 100644 (file)
@@ -21,7 +21,6 @@
  * @file
  * @brief   Combining congruent blocks
  * @author  Michael Beck
- * @version $Id$
  *
  * This phase find congruent blocks.
  * Two block are congruent, if they contains only equal calculations.
@@ -40,7 +39,7 @@
 #include "set.h"
 #include "irpass.h"
 #include "debug.h"
-#include "irtools.h"
+#include "util.h"
 
 /* define this for general block shaping: congruent blocks
    are found not only before the end block but anywhere in the graph */
@@ -155,7 +154,7 @@ typedef struct listmap_t {
 DEBUG_ONLY(static firm_dbg_module_t *dbg;)
 
 /** Next partition number. */
-DEBUG_ONLY(static unsigned part_nr = 0);
+DEBUG_ONLY(static unsigned part_nr = 0;)
 
 #ifdef DEBUG_libfirm
 /**
@@ -242,7 +241,7 @@ static listmap_entry_t *listmap_find(listmap_t *map, void *id)
        key.id   = id;
        key.list = NULL;
        key.next = NULL;
-       entry    = (listmap_entry_t*)set_insert(map->map, &key, sizeof(key), HASH_PTR(id));
+       entry    = (listmap_entry_t*)set_insert(map->map, &key, sizeof(key), hash_ptr(id));
 
        if (entry->list == NULL) {
                /* a new entry, put into the list */
@@ -262,7 +261,7 @@ static listmap_entry_t *listmap_find(listmap_t *map, void *id)
 static unsigned opcode_hash(const opcode_key_t *entry)
 {
        /* assume long >= int */
-       return (unsigned)(PTR_TO_INT(entry->mode) * 9 + entry->code + entry->u.proj * 3 + HASH_PTR(entry->u.addr) + entry->arity);
+       return (unsigned)(PTR_TO_INT(entry->mode) * 9 + entry->code + entry->u.proj * 3 + hash_ptr(entry->u.addr) + entry->arity);
 }  /* opcode_hash */
 
 /**
@@ -293,7 +292,7 @@ static partition_t *create_partition(ir_node *meet_block, environment_t *env)
        INIT_LIST_HEAD(&part->blocks);
        part->meet_block = meet_block;
        part->n_blocks   = 0;
-       DEBUG_ONLY(part->nr = part_nr++);
+       DEBUG_ONLY(part->nr = part_nr++;)
        list_add_tail(&part->part_list, &env->partitions);
        return part;
 }  /* create_partition */
@@ -1193,7 +1192,7 @@ static void add_roots(ir_graph *irg, environment_t *env)
 #endif /* GENERAL_SHAPE */
 
 /* Combines congruent end blocks into one. */
-int shape_blocks(ir_graph *irg)
+void shape_blocks(ir_graph *irg)
 {
        environment_t env;
        partition_t   *part;
@@ -1203,7 +1202,7 @@ int shape_blocks(ir_graph *irg)
        /* register a debug mask */
        FIRM_DBG_REGISTER(dbg, "firm.opt.blocks");
 
-       DEBUG_ONLY(part_nr = 0);
+       DEBUG_ONLY(part_nr = 0;)
        DB((dbg, LEVEL_1, "Shaping blocks for %+F\n", irg));
 
        /* works better, when returns are placed at the end of the blocks */
@@ -1261,11 +1260,7 @@ int shape_blocks(ir_graph *irg)
 
        if (res) {
                /* control flow changed */
-               set_irg_extblk_inconsistent(irg);
-               clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
-
-               /* Calls might be removed. */
-               set_trouts_inconsistent();
+               clear_irg_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_DOMINANCE);
        }
 
        for (bl = env.all_blocks; bl != NULL; bl = bl->all_next) {
@@ -1275,11 +1270,9 @@ int shape_blocks(ir_graph *irg)
        DEL_ARR_F(env.live_outs);
        del_set(env.opcode2id_map);
        obstack_free(&env.obst, NULL);
-
-       return res;
 }  /* shape_blocks */
 
 ir_graph_pass_t *shape_blocks_pass(const char *name)
 {
-       return def_graph_pass_ret(name ? name : "shape_blocks", shape_blocks);
+       return def_graph_pass(name ? name : "shape_blocks", shape_blocks);
 }  /* shape_blocks_pass */