X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fopt_blocks.c;h=47fccb6e42c421ee07399861220195d0bb1ae161;hb=8c9921a1fc166552f6e416434fd8394a4fc210a3;hp=a2a0452060f75ccefc4002b331fcb87642f6be07;hpb=e88385016800d3c56c3fa09770e9f7995c42e106;p=libfirm diff --git a/ir/opt/opt_blocks.c b/ir/opt/opt_blocks.c index a2a045206..47fccb6e4 100644 --- a/ir/opt/opt_blocks.c +++ b/ir/opt/opt_blocks.c @@ -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 /** @@ -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 */ @@ -735,7 +734,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); @@ -769,10 +768,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)); @@ -1074,7 +1071,7 @@ static void find_liveouts(ir_node *irn, void *ctx) } /* find_liveouts */ /** - * Check if the current block is the meet block of a 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) { @@ -1098,16 +1095,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) @@ -1207,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 */ @@ -1265,13 +1260,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) {