From fa66e6b80ee0a2e0c20cd1663c84b06e3178d217 Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Tue, 27 Nov 2012 09:05:27 +0100 Subject: [PATCH] bearch: Use arch_register_req_is(req, ignore) instead of arch_irn_is_ignore(...), if we use the register requirements multiple times. --- ir/be/becopyopt.c | 59 +++++++++++++++++++++++------------------------ ir/be/belower.c | 5 ++-- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/ir/be/becopyopt.c b/ir/be/becopyopt.c index 5cfc8a965..873d58ce0 100644 --- a/ir/be/becopyopt.c +++ b/ir/be/becopyopt.c @@ -241,15 +241,13 @@ void free_copy_opt(copy_opt_t *co) */ static int co_is_optimizable_root(ir_node *irn) { - const arch_register_req_t *req; - - if (arch_irn_is_ignore(irn)) + arch_register_req_t const *const req = arch_get_irn_register_req(irn); + if (arch_register_req_is(req, ignore)) return 0; if (is_Reg_Phi(irn) || is_Perm_Proj(irn)) return 1; - req = arch_get_irn_register_req(irn); if (arch_register_req_is(req, should_be_same)) return 1; @@ -817,7 +815,7 @@ static void build_graph_walker(ir_node *irn, void *env) if (get_irn_mode(irn) == mode_T) return; req = arch_get_irn_register_req(irn); - if (req->cls != co->cls || arch_irn_is_ignore(irn)) + if (req->cls != co->cls || arch_register_req_is(req, ignore)) return; if (is_Reg_Phi(irn)) { /* Phis */ @@ -940,35 +938,36 @@ static void co_dump_appel_graph(const copy_opt_t *co, FILE *f) fprintf(f, "%d %d\n", n, n_regs); be_ifg_foreach_node(ifg, &it, irn) { - if (!arch_irn_is_ignore(irn)) { - int idx = node_map[get_irn_idx(irn)]; - affinity_node_t *a = get_affinity_info(co, irn); - const arch_register_req_t *req = arch_get_irn_register_req(irn); - ir_node *adj; - - if (arch_register_req_is(req, limited)) { - for (i = 0; i < co->cls->n_regs; ++i) { - if (!rbitset_is_set(req->limited, i) && color_map[i] >= 0) - fprintf(f, "%d %d -1\n", color_map[i], idx); - } + arch_register_req_t const *const req = arch_get_irn_register_req(irn); + if (arch_register_req_is(req, ignore)) + continue; + + int idx = node_map[get_irn_idx(irn)]; + affinity_node_t *a = get_affinity_info(co, irn); + ir_node *adj; + + if (arch_register_req_is(req, limited)) { + for (i = 0; i < co->cls->n_regs; ++i) { + if (!rbitset_is_set(req->limited, i) && color_map[i] >= 0) + fprintf(f, "%d %d -1\n", color_map[i], idx); } + } - be_ifg_foreach_neighbour(ifg, &nit, irn, adj) { - if (!arch_irn_is_ignore(adj) && - !co_dump_appel_disjoint_constraints(co, irn, adj)) { - int adj_idx = node_map[get_irn_idx(adj)]; - if (idx < adj_idx) - fprintf(f, "%d %d -1\n", idx, adj_idx); - } + be_ifg_foreach_neighbour(ifg, &nit, irn, adj) { + if (!arch_irn_is_ignore(adj) && + !co_dump_appel_disjoint_constraints(co, irn, adj)) { + int adj_idx = node_map[get_irn_idx(adj)]; + if (idx < adj_idx) + fprintf(f, "%d %d -1\n", idx, adj_idx); } + } - if (a) { - co_gs_foreach_neighb(a, n) { - if (!arch_irn_is_ignore(n->irn)) { - int n_idx = node_map[get_irn_idx(n->irn)]; - if (idx < n_idx) - fprintf(f, "%d %d %d\n", idx, n_idx, (int) n->costs); - } + if (a) { + co_gs_foreach_neighb(a, n) { + if (!arch_irn_is_ignore(n->irn)) { + int n_idx = node_map[get_irn_idx(n->irn)]; + if (idx < n_idx) + fprintf(f, "%d %d %d\n", idx, n_idx, (int) n->costs); } } } diff --git a/ir/be/belower.c b/ir/be/belower.c index e8169a051..b8a1d01b6 100644 --- a/ir/be/belower.c +++ b/ir/be/belower.c @@ -507,7 +507,8 @@ static void gen_assure_different_pattern(ir_node *irn, ir_node *other_different, ir_node *keep, *cpy; op_copy_assoc_t *entry; - if (arch_irn_is_ignore(other_different) || + arch_register_req_t const *const req = arch_get_irn_register_req(other_different); + if (arch_register_req_is(req, ignore) || !mode_is_datab(get_irn_mode(other_different))) { DB((dbg_constr, LEVEL_1, "ignore constraint for %+F because other_irn is ignore or not a datab node\n", irn)); return; @@ -515,7 +516,7 @@ static void gen_assure_different_pattern(ir_node *irn, ir_node *other_different, op_set = &env->op_set; block = get_nodes_block(irn); - cls = arch_get_irn_reg_class(other_different); + cls = req->cls; /* Make a not spillable copy of the different node */ /* this is needed because the different irn could be */ -- 2.20.1