X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Fexecution_frequency.c;h=a005f4dcd1fef5c0ac0dcd05e06895c333520968;hb=e775a978fff2841e0722c47f13545b54d48b8f98;hp=844ab6a3f1b0c009316ae87a4dd5d275877ba359;hpb=ea75e9d38674b468f602a0699fb64b9c01254797;p=libfirm diff --git a/ir/ana/execution_frequency.c b/ir/ana/execution_frequency.c index 844ab6a3f..a005f4dcd 100644 --- a/ir/ana/execution_frequency.c +++ b/ir/ana/execution_frequency.c @@ -31,6 +31,7 @@ #include "set.h" #include "pdeq.h" #include "hashptr.h" +#include "error.h" #include "irprog_t.h" #include "irgraph_t.h" @@ -84,7 +85,7 @@ double get_region_exec_freq(void *reg) ef.reg = reg; assert(exec_freq_set); - found = set_find(exec_freq_set, &ef, sizeof(ef), exec_freq_hash(&ef)); + found = (reg_exec_freq*) set_find(exec_freq_set, &ef, sizeof(ef), exec_freq_hash(&ef)); /* Not found if information is invalid. */ if (found) @@ -143,7 +144,7 @@ static Cond_prob get_ProjX_probability(ir_node *n) reg_exec_freq ef, *found; ef.reg = n; - found = set_find(exec_freq_set, &ef, sizeof(ef), exec_freq_hash(&ef)); + found = (reg_exec_freq*) set_find(exec_freq_set, &ef, sizeof(ef), exec_freq_hash(&ef)); if (found) return (Cond_prob)found->prob; @@ -160,9 +161,9 @@ static void my_irg_walk_2_both(ir_node *node, irg_walk_func *pre, irg_walk_func pre(node, env); - if (node->op != op_Block) { + if (!is_Block(node)) { ir_node *pred; - if (node->op == op_Proj) + if (is_Proj(node)) pred = get_irn_n(node, 0); else pred = get_irn_n(node, -1); @@ -178,7 +179,7 @@ static void my_irg_walk_2_both(ir_node *node, irg_walk_func *pre, irg_walk_func } } - if (node->op == op_End) { + if (is_End(node)) { for (i = get_irn_arity(node) - 1; i >= 0; --i) { ir_node *pred = get_irn_n(node, i); if ((pred->op == op_Block) && (pred->visited < current_ir_graph->visited)) @@ -255,7 +256,7 @@ static void precompute_cond_evaluation(void) Cond_list = NULL; my_irg_walk_current_graph(walk_pre, walk_post, NULL); - for (c = Cond_list; c; c = get_irn_link(c)) { + for (c = Cond_list; c; c = (ir_node*)get_irn_link(c)) { ir_node *p0, *p1; assert(get_irn_n_outs(c) == 2 && "encountered a switch cond"); @@ -265,10 +266,12 @@ static void precompute_cond_evaluation(void) /* both are exceptions */ if ((get_ProjX_probability(p0) == Cond_prob_exception_taken) && (get_ProjX_probability(p1) == Cond_prob_exception_taken) ) { - assert(0 && "I tried to avoid these!"); + panic("I tried to avoid these!"); +#if 0 /* It's a */ set_ProjX_probability(p0, Cond_prob_normal); set_ProjX_probability(p1, Cond_prob_normal); +#endif } /* p0 is exception */ @@ -329,7 +332,7 @@ static inline double get_weighted_region_exec_freq(void *reg, int pos) cfop = skip_Proj(cfop); } else { assert(is_ir_loop(reg)); - cfop = get_loop_cfop(reg, pos); + cfop = (ir_node*)get_loop_cfop(reg, pos); } if (is_fragile_op(cfop) || is_fragile_Proj(cfop)) { @@ -348,8 +351,6 @@ static inline void compute_region_freqency(void *reg, double head_weight) int i, n_ins = get_region_n_ins(reg); double my_freq = 0; - //printf("head weight %lf: ", head_weight); DDMR(reg); - for (i = 0; i < n_ins; ++i) { void *pred_reg = get_region_in(reg, i); if (pred_reg) { @@ -385,7 +386,7 @@ static void compute_frequency(int default_loop_weight) while (!pdeq_empty(block_worklist)) { ir_loop *l = (ir_loop *)pdeq_getl(block_worklist); - int i, n_elems = get_loop_n_elements(l); + size_t i, n_elems = get_loop_n_elements(l); /* The header is initialized with the frequency of the full loop times the iteration weight. */ check_proper_head(l, get_loop_element(l, 0).son); @@ -432,7 +433,7 @@ void compute_execution_frequency(ir_graph *irg, int default_loop_weight, double void compute_execution_frequencies(int default_loop_weight, double exception_probability) { - int i, n_irgs = get_irp_n_irgs(); + size_t i, n_irgs = get_irp_n_irgs(); free_intervals(); for (i = 0; i < n_irgs; ++i) { compute_execution_frequency(get_irp_irg(i), default_loop_weight, exception_probability); @@ -443,7 +444,7 @@ void compute_execution_frequencies(int default_loop_weight, double exception_pro /** free occupied memory, reset */ void free_execution_frequency(void) { - int i, n_irgs = get_irp_n_irgs(); + size_t i, n_irgs = get_irp_n_irgs(); free_intervals(); del_set(exec_freq_set); @@ -484,13 +485,13 @@ exec_freq_state get_irp_exec_freq_state(void) /* Sets irp and all irg exec freq states to inconsistent if it is set to consistent. */ void set_irp_exec_freq_state_inconsistent(void) { - if (get_irp_exec_freq_state() != exec_freq_none) { - int i, n_irgs = get_irp_n_irgs(); - set_irp_exec_freq_state(exec_freq_inconsistent); - for (i = 0; i < n_irgs; ++i) { - ir_graph *irg = get_irp_irg(i); - if (get_irg_exec_freq_state(irg) != exec_freq_none) - irg->execfreq_state = exec_freq_inconsistent; - } - } + if (get_irp_exec_freq_state() != exec_freq_none) { + size_t i, n_irgs = get_irp_n_irgs(); + set_irp_exec_freq_state(exec_freq_inconsistent); + for (i = 0; i < n_irgs; ++i) { + ir_graph *irg = get_irp_irg(i); + if (get_irg_exec_freq_state(irg) != exec_freq_none) + irg->execfreq_state = exec_freq_inconsistent; + } + } }