Remove ia32_l_Setcc and remove set creation callback from ir_lower_mode_b().
[libfirm] / ir / opt / opt_blocks.c
index 9e2235e..f6efada 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2011 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
@@ -40,6 +40,7 @@
 #include "set.h"
 #include "irpass.h"
 #include "debug.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 */
@@ -154,7 +155,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
 /**
@@ -261,7 +262,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 (entry->mode - (ir_mode *)0) * 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 */
 
 /**
@@ -292,7 +293,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 */
@@ -734,7 +735,7 @@ static void apply(ir_graph *irg, partition_t *part)
        ir_node **ins, **phi_ins;
        phi_t   *repr_phi, *phi;
        pair_t  *repr_pair, *pair;
-       int     i, j, k, n, block_nr, n_phis;
+       int     i, j, k, n, n_phis;
 
        list_del(&repr->block_list);
 
@@ -768,10 +769,8 @@ static void apply(ir_graph *irg, partition_t *part)
 
        /* collect new in arrays */
        end = get_irg_end(irg);
-       block_nr = 0;
        list_for_each_entry(block_t, bl, &part->blocks, block_list) {
                block = bl->block;
-               ++block_nr;
 
                DB((dbg, LEVEL_1, "%+F, ", block));
 
@@ -1073,7 +1072,7 @@ static void find_liveouts(ir_node *irn, void *ctx)
 }  /* find_liveouts */
 
 /**
- * Check if the current block is the meet block of its predecessors.
+ * Check if the current block is the meet block of its predecessors.
  */
 static void check_for_cf_meet(ir_node *block, void *ctx)
 {
@@ -1097,16 +1096,14 @@ static void check_for_cf_meet(ir_node *block, void *ctx)
        k = 0;
        for (i = n - 1; i >= 0; --i) {
                ir_node *pred = get_Block_cfgpred(block, i);
-               ir_node *pred_block;
 
                /* pred must be a direct jump to us */
                if (! is_Jmp(pred) && ! is_Raise(pred) && !is_Bad(pred))
                        continue;
 
-               pred_block = get_nodes_block(skip_Proj(pred));
-
                preds[k].pred  = pred;
                preds[k].index = i;
+               ++k;
        }
 
        if (k > 1)
@@ -1174,7 +1171,7 @@ static void add_roots(ir_graph *irg, environment_t *env)
      * Else, we will split identical blocks if we start which different roots.
         */
        for (bl = env->all_blocks; bl != NULL; bl = bl->all_next) {
-               int i, n = ARR_LEN(bl->roots);
+               size_t i, n = ARR_LEN(bl->roots);
 
 #if 1
                /* TODO: is this really needed? The roots are already in
@@ -1206,7 +1203,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 */
@@ -1264,13 +1261,8 @@ int shape_blocks(ir_graph *irg)
 
        if (res) {
                /* control flow changed */
-               set_irg_outs_inconsistent(irg);
-               set_irg_extblk_inconsistent(irg);
-               set_irg_doms_inconsistent(irg);
-               set_irg_loopinfo_inconsistent(irg);
-
-               /* Calls might be removed. */
-               set_trouts_inconsistent();
+               clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE
+                                  | IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
        }
 
        for (bl = env.all_blocks; bl != NULL; bl = bl->all_next) {