X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Finterval_analysis.c;h=5dedb02c083c745e010d78fc2de8794cee73ae4c;hb=81d44459b367b64abbb26feeb7c2f31738f542c0;hp=37a563b8125e2e0e1ba86b4d20b23060340635bf;hpb=9b716841c3b0865b86af8d3890b3914060c37ed0;p=libfirm diff --git a/ir/ana/interval_analysis.c b/ir/ana/interval_analysis.c index 37a563b81..5dedb02c0 100644 --- a/ir/ana/interval_analysis.c +++ b/ir/ana/interval_analysis.c @@ -1,5 +1,5 @@ /* - * Copyrigth (C) 1995-2007 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -22,14 +22,11 @@ * @brief Implementation of interval analysis * @version $Id$ */ -#ifdef HAVE_CONFIG_H #include "config.h" -#endif -#ifdef HAVE_STRING_H #include -#endif +#include "debug.h" #include "interval_analysis.h" #include "execution_frequency.h" #include "firm_common_t.h" @@ -41,8 +38,11 @@ #include "irdump_t.h" #include "irdom.h" #include "irflag.h" +#include "irprintf.h" #include "hashptr.h" +DEBUG_ONLY(static firm_dbg_module_t *dbg); + /*------------------------------------------------------------------*/ /* A new in array via a hashmap. */ /* The in array refers to the loop the block is contained in if the */ @@ -62,14 +62,15 @@ static set *region_attr_set = NULL; int region_attr_cmp(const void *e1, const void *e2, size_t size) { region_attr *ra1 = (region_attr *)e1; region_attr *ra2 = (region_attr *)e2; + (void) size; return (ra1->reg != ra2->reg); } -static INLINE int attr_set_hash(region_attr *a) { +static inline int attr_set_hash(region_attr *a) { return HASH_PTR(a->reg); } -static INLINE region_attr *get_region_attr(void *region) { +static inline region_attr *get_region_attr(void *region) { region_attr r_attr, *res; r_attr.reg = region; @@ -125,7 +126,7 @@ void add_loop_cfop (void *region, void *cfop) { ARR_APP1(void *, get_region_attr(region)->op_array, cfop); } -static INLINE void exc_outs(void *reg, ir_node *cfop) { +static inline void exc_outs(void *reg, ir_node *cfop) { if (is_fragile_op(cfop) || (is_fragile_Proj(cfop))) inc_region_n_exc_outs(reg); } @@ -190,10 +191,13 @@ static int find_inner_loop(ir_node *b, ir_loop *l, ir_node *pred, ir_node *cfop) } -static int find_previous_loop(ir_loop *l, ir_loop *pred_l, ir_node *b, ir_node *pred_b, ir_node *cfop) { +static int find_previous_loop(ir_loop *l, ir_loop *pred_l, ir_node *b, + ir_node *pred_b, ir_node *cfop) +{ ir_loop *outer = get_loop_outer_loop(l); int found, i; int l_pos = get_loop_element_pos(outer, l); + (void) pred_l; assert(l_pos > -1); assert(l_pos > 0 && "Is this a necessary condition? There could be a perfect nest ..."); @@ -211,14 +215,6 @@ static int find_previous_loop(ir_loop *l, ir_loop *pred_l, ir_node *b, ir_node * } } - if (!found) { - DDMG(current_ir_graph); - DDML(l); - DDML(pred_l); - DDMN(b); - DDMN(pred_b); - } - return found; } @@ -252,9 +248,7 @@ static void construct_interval_block(ir_node *b, ir_loop *l) { if (is_backedge(b, i)) { if (b != get_loop_element(l, 0).node) { - if (get_firm_verbosity()) { - printf("Loophead not at loop position 0. "); DDMN(b); - } + DB((dbg, LEVEL_1, "Loophead not at loop position 0. %+F\n", b)); } /* There are no backedges in the interval decomposition. */ add_region_in(b, NULL); @@ -263,7 +257,7 @@ static void construct_interval_block(ir_node *b, ir_loop *l) { cfop = get_Block_cfgpred(b, i); if (is_Proj(cfop)) { - if (get_irn_op(get_Proj_pred(cfop)) != op_Cond) { + if (!is_Cond(get_Proj_pred(cfop))) { cfop = skip_Proj(cfop); } else { assert(get_nodes_block(cfop) == get_nodes_block(skip_Proj(cfop))); @@ -272,8 +266,7 @@ static void construct_interval_block(ir_node *b, ir_loop *l) { pred = skip_Proj(get_nodes_block(cfop)); /* We want nice blocks. */ - assert( get_irn_op(pred) != op_Bad - && get_irn_op(skip_Proj(get_Block_cfgpred(b, i))) != op_Bad); + assert(!is_Bad(pred) && !is_Bad(skip_Proj(get_Block_cfgpred(b, i)))); pred_l = get_irn_loop(pred); if (pred_l == l) { add_region_in(b, pred); @@ -283,9 +276,7 @@ static void construct_interval_block(ir_node *b, ir_loop *l) { int found = find_inner_loop(b, l, pred, cfop); if (!found) { if (b != get_loop_element(l, 0).node) { - if (get_firm_verbosity()) { - printf("Loop entry not at loop position 0. "); DDMN(b); - } + DB((dbg, LEVEL_1, "Loop entry not at loop position 0. %+F\n", b)); } found = find_outer_loop(l, pred_l, pred, cfop); if (found) add_region_in(b, NULL); /* placeholder */ @@ -294,9 +285,6 @@ static void construct_interval_block(ir_node *b, ir_loop *l) { found = find_previous_loop(l, pred_l, b, pred, cfop); } if (!found) { - DDMG(current_ir_graph); - DDMN(b); - DDMN(pred); assert(is_backedge(b, i)); assert(found && "backedge from inner loop"); } @@ -305,10 +293,7 @@ static void construct_interval_block(ir_node *b, ir_loop *l) { if (b != get_loop_element(l, 0).node) { /* Check for improper region */ if (has_backedges(b)) { - printf("Improper Region!!!!!!\n"); - DDMG(current_ir_graph); - DDMN(b); - DDML(l); + ir_fprintf(stderr, "Improper Region!!!!!! %+F\n", b); } } } @@ -335,6 +320,8 @@ void construct_intervals(ir_graph *irg) { ir_graph *rem = current_ir_graph; current_ir_graph = irg; + FIRM_DBG_REGISTER(dbg, "firm.ana.interval"); + if (!region_attr_set) region_attr_set = new_set(region_attr_cmp, 256); @@ -387,8 +374,7 @@ void dump_region_edges(FILE *F, void *reg) { if (is_ir_node(reg)) { if (get_Block_n_cfgpreds((ir_node *)reg) != get_region_n_ins(reg)) { - printf("n_cfgpreds = %d, n_ins = %d\n", get_Block_n_cfgpreds((ir_node *)reg), get_region_n_ins(reg)); - DDMN((ir_node *)reg); + ir_printf("n_cfgpreds = %d, n_ins = %d\n %+F\n", get_Block_n_cfgpreds((ir_node *)reg), get_region_n_ins(reg), (ir_node*) reg); } } @@ -508,11 +494,12 @@ void dump_interval_graph(ir_graph *irg, const char *suffix) { return; f = vcg_open(irg, suffix, "-intervals"); - dump_vcg_header(f, get_irg_dump_name(irg), NULL); + dump_vcg_header(f, get_irg_dump_name(irg), NULL, NULL); current_ir_graph = irg; dump_interval_loop(f, get_irg_loop(current_ir_graph)); - vcg_close(f); + dump_vcg_footer(f); + fclose(f); }