X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fopt_blocks.c;h=9e2235e580d47b63cc337129eebe28958ca650c8;hb=3398ae4a8b3cbf66cb0b274ddcd85a2ea863ece1;hp=7ac82efd0042c4c0f43870e5252abcbc8bffbee9;hpb=32ea6ea0320f551448bb66e534e3351977464d42;p=libfirm diff --git a/ir/opt/opt_blocks.c b/ir/opt/opt_blocks.c index 7ac82efd0..9e2235e58 100644 --- a/ir/opt/opt_blocks.c +++ b/ir/opt/opt_blocks.c @@ -27,8 +27,9 @@ * Two block are congruent, if they contains only equal calculations. */ #include "config.h" -#include "ircons.h" + #include "iroptimize.h" +#include "ircons.h" #include "irgmod.h" #include "irgraph_t.h" #include "irnode_t.h" @@ -56,13 +57,13 @@ typedef struct pred_t pred_t; /** An opcode map key. */ struct opcode_key_t { - ir_opcode code; /**< The Firm opcode. */ + unsigned code; /**< The Firm opcode. */ ir_mode *mode; /**< The mode of all nodes in the partition. */ int arity; /**< The arity of this opcode (needed for Phi etc. */ union { long proj; /**< For Proj nodes, its proj number */ ir_entity *ent; /**< For Sel nodes, its entity */ - tarval *tv; /**< For Const nodes, its tarval */ + ir_tarval *tv; /**< For Const nodes, its tarval */ symconst_symbol sym; /**< For SymConst nodes, its symbol .*/ void *addr; /**< Alias all addresses. */ int intVal; /**< For Conv/Div nodes: strict/remainderless. */ @@ -197,8 +198,8 @@ static void dump_list(const char *msg, const block_t *block) */ static int listmap_cmp_ptr(const void *elt, const void *key, size_t size) { - const listmap_entry_t *e1 = elt; - const listmap_entry_t *e2 = key; + const listmap_entry_t *e1 = (const listmap_entry_t*)elt; + const listmap_entry_t *e2 = (const listmap_entry_t*)key; (void) size; return e1->id != e2->id; @@ -240,7 +241,7 @@ static listmap_entry_t *listmap_find(listmap_t *map, void *id) key.id = id; key.list = NULL; key.next = NULL; - entry = 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 */ @@ -268,8 +269,8 @@ static unsigned opcode_hash(const opcode_key_t *entry) */ static int cmp_opcode(const void *elt, const void *key, size_t size) { - const opcode_key_t *o1 = elt; - const opcode_key_t *o2 = key; + const opcode_key_t *o1 = (opcode_key_t*)elt; + const opcode_key_t *o2 = (opcode_key_t*)key; (void) size; return o1->code != o2->code || o1->mode != o2->mode || @@ -437,7 +438,7 @@ static opcode_key_t *opcode(const node_t *node, environment_t *env) break; } - entry = set_insert(env->opcode2id_map, &key, sizeof(key), opcode_hash(&key)); + entry = (opcode_key_t*)set_insert(env->opcode2id_map, &key, sizeof(key), opcode_hash(&key)); return entry; } /* opcode */ @@ -650,7 +651,7 @@ static void *live_throughs(const block_t *bl, const ir_node *phi) * @param part the partition * @param env the environment */ -void propagate_blocks_live_troughs(partition_t *part, environment_t *env) +static void propagate_blocks_live_troughs(partition_t *part, environment_t *env) { const ir_node *meet_block = part->meet_block; block_t *bl, *next; @@ -677,7 +678,7 @@ void propagate_blocks_live_troughs(partition_t *part, environment_t *env) listmap_entry_t *entry; /* Add bl to map[live_trough(bl)]. */ - id = live_throughs(bl, phi); + id = (opcode_key_t*)live_throughs(bl, phi); entry = listmap_find(&map, id); bl->next = entry->list; entry->list = bl; @@ -705,7 +706,7 @@ void propagate_blocks_live_troughs(partition_t *part, environment_t *env) * * @param env the environment */ -void propagate_live_troughs(environment_t *env) +static void propagate_live_troughs(environment_t *env) { partition_t *part, *next; @@ -961,7 +962,7 @@ static void partition_for_end_block(ir_node *end_block, environment_t *env) } /* collect all no-return blocks */ - end = get_irg_end(current_ir_graph); + end = get_irg_end(get_irn_irg(end_block)); for (i = get_End_n_keepalives(end) - 1; i >= 0; --i) { ir_node *ka = get_End_keepalive(end, i); ir_node *block; @@ -1033,7 +1034,7 @@ static void clear_phi_links(ir_node *irn, void *env) */ static void find_liveouts(ir_node *irn, void *ctx) { - environment_t *env = ctx; + environment_t *env = (environment_t*)ctx; ir_node **live_outs = env->live_outs; ir_node *this_block; int i; @@ -1076,11 +1077,11 @@ static void find_liveouts(ir_node *irn, void *ctx) */ static void check_for_cf_meet(ir_node *block, void *ctx) { - environment_t *env = ctx; + environment_t *env = (environment_t*)ctx; int i, k, n; pred_t *preds; - if (block == get_irg_end_block(current_ir_graph)) { + if (block == get_irg_end_block(get_irn_irg(block))) { /* always create a partition for the end block */ partition_for_end_block(block, env); return; @@ -1117,12 +1118,12 @@ static void check_for_cf_meet(ir_node *block, void *ctx) */ static int cmp_nodes(const void *a, const void *b) { - const ir_node *const *pa = a; - const ir_node *const *pb = b; + const ir_node *const *pa = (const ir_node*const*)a; + const ir_node *const *pb = (const ir_node*const*)b; const ir_node *irn_a = *pa; const ir_node *irn_b = *pb; - ir_opcode code_a = get_irn_opcode(irn_a); - ir_opcode code_b = get_irn_opcode(irn_b); + unsigned code_a = get_irn_opcode(irn_a); + unsigned code_b = get_irn_opcode(irn_b); ir_mode *mode_a, *mode_b; unsigned idx_a, idx_b; @@ -1197,15 +1198,11 @@ static void add_roots(ir_graph *irg, environment_t *env) /* Combines congruent end blocks into one. */ int shape_blocks(ir_graph *irg) { - ir_graph *rem; environment_t env; partition_t *part; block_t *bl; int res, n; - rem = current_ir_graph; - current_ir_graph = irg; - /* register a debug mask */ FIRM_DBG_REGISTER(dbg, "firm.opt.blocks"); @@ -1274,8 +1271,6 @@ int shape_blocks(ir_graph *irg) /* Calls might be removed. */ set_trouts_inconsistent(); - - // dump_ir_block_graph(irg, "-after"); } for (bl = env.all_blocks; bl != NULL; bl = bl->all_next) { @@ -1285,7 +1280,6 @@ int shape_blocks(ir_graph *irg) DEL_ARR_F(env.live_outs); del_set(env.opcode2id_map); obstack_free(&env.obst, NULL); - current_ir_graph = rem; return res; } /* shape_blocks */