X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ir%2Fbe%2Fbelower.c;h=dc93e6b57bed2183d1f9ad92f0fcd58a542f1cbd;hb=52f5575dc678a5f7f1b3a078dcc46b1cdbaf5182;hp=3a75c0e8a528f9fee19dfbf549717a90b884c3f0;hpb=7a178059678ff6c6094a7cd8fac5644367417102;p=libfirm diff --git a/ir/be/belower.c b/ir/be/belower.c index 3a75c0e8a..dc93e6b57 100644 --- a/ir/be/belower.c +++ b/ir/be/belower.c @@ -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. * @@ -52,7 +52,7 @@ DEBUG_ONLY(static firm_dbg_module_t *dbg;) DEBUG_ONLY(static firm_dbg_module_t *dbg_constr;) DEBUG_ONLY(static firm_dbg_module_t *dbg_permmove;) -/** Associates an ir_node with it's copy and CopyKeep. */ +/** Associates an ir_node with its copy and CopyKeep. */ typedef struct { ir_nodeset_t copies; /**< all non-spillable copies of this irn */ const arch_register_class_t *cls; @@ -66,13 +66,13 @@ typedef struct { } constraint_env_t; /** Lowering walker environment. */ -typedef struct _lower_env_t { +typedef struct lower_env_t { ir_graph *irg; unsigned do_copy : 1; } lower_env_t; /** Holds a Perm register pair. */ -typedef struct _reg_pair_t { +typedef struct reg_pair_t { const arch_register_t *in_reg; /**< a perm IN register */ ir_node *in_node; /**< the in node to which the register belongs */ @@ -82,7 +82,7 @@ typedef struct _reg_pair_t { int checked; /**< indicates whether the pair was check for cycle or not */ } reg_pair_t; -typedef enum _perm_type_t { +typedef enum perm_type_t { PERM_CYCLE, PERM_CHAIN, PERM_SWAP, @@ -90,7 +90,7 @@ typedef enum _perm_type_t { } perm_type_t; /** Structure to represent cycles or chains in a Perm. */ -typedef struct _perm_cycle_t { +typedef struct perm_cycle_t { const arch_register_t **elems; /**< the registers in the cycle */ int n_elems; /**< number of elements in the cycle */ perm_type_t type; /**< type (CHAIN or CYCLE) */ @@ -554,8 +554,8 @@ static void gen_assure_different_pattern(ir_node *irn, ir_node *other_different, sched_add_before(skip_Proj(irn), cpy); sched_add_after(skip_Proj(irn), keep); - /* insert the other different and it's copies into the map */ - entry = ir_nodemap_get(op_set, other_different); + /* insert the other different and its copies into the map */ + entry = (op_copy_assoc_t*)ir_nodemap_get(op_set, other_different); if (! entry) { entry = OALLOC(&env->obst, op_copy_assoc_t); entry->cls = cls; @@ -622,6 +622,7 @@ static void assure_different_constraints(ir_node *irn, ir_node *skipped_irn, con static void assure_constraints_walker(ir_node *block, void *walk_env) { ir_node *irn; + constraint_env_t *env = (constraint_env_t*)walk_env; sched_foreach_reverse(block, irn) { ir_mode *mode = get_irn_mode(irn); @@ -634,10 +635,10 @@ static void assure_constraints_walker(ir_node *block, void *walk_env) mode = get_irn_mode(proj); if (mode_is_datab(mode)) - assure_different_constraints(proj, irn, walk_env); + assure_different_constraints(proj, irn, env); } } else if (mode_is_datab(mode)) { - assure_different_constraints(irn, irn, walk_env); + assure_different_constraints(irn, irn, env); } } } @@ -653,7 +654,7 @@ static void melt_copykeeps(constraint_env_t *cenv) /* for all */ foreach_ir_nodemap(&cenv->op_set, map_entry, map_iter) { - op_copy_assoc_t *entry = map_entry.data; + op_copy_assoc_t *entry = (op_copy_assoc_t*)map_entry.data; int idx, num_ck; ir_node *cp; struct obstack obst; @@ -784,8 +785,8 @@ void assure_constraints(ir_graph *irg) /* for all */ foreach_ir_nodemap(&cenv.op_set, map_entry, map_iter) { - op_copy_assoc_t *entry = map_entry.data; - int n = ir_nodeset_size(&entry->copies); + op_copy_assoc_t *entry = (op_copy_assoc_t*)map_entry.data; + size_t n = ir_nodeset_size(&entry->copies); ir_node **nodes = ALLOCAN(ir_node*, n); ir_node *cp; ir_nodeset_iterator_t iter; @@ -803,7 +804,7 @@ void assure_constraints(ir_graph *irg) DB((dbg_constr, LEVEL_1, "\n")); - /* introduce the copies for the operand and it's copies */ + /* introduce the copies for the operand and its copies */ be_ssa_construction_init(&senv, irg); be_ssa_construction_add_copy(&senv, map_entry.node); be_ssa_construction_add_copies(&senv, nodes, n); @@ -941,11 +942,7 @@ found_front: arch_set_irn_register(node, arch_get_irn_register(proj)); /* reroute all users of the proj to the moved node. */ - edges_reroute(proj, node, irg); - - /* and kill it */ - set_Proj_pred(proj, new_Bad()); - kill_node(proj); + exchange(proj, node); bitset_set(moved, input); n_moved++; @@ -1003,7 +1000,7 @@ static void lower_nodes_after_ra_walker(ir_node *irn, void *walk_env) perm_stayed = push_through_perm(irn); if (perm_stayed) - lower_perm_node(irn, walk_env); + lower_perm_node(irn, (lower_env_t*)walk_env); } void lower_nodes_after_ra(ir_graph *irg, int do_copy)