X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Ffield_temperature.c;h=39593be325bb48826e04b6f8681b04a7ed47bf28;hb=5afaf595a454bb6b87899b317f2ae99ed03bf62e;hp=a07b13829c263e57bda068141067190966889365;hpb=a10a3034b5a36202f222d68037c02986cd025dfe;p=libfirm diff --git a/ir/ana/field_temperature.c b/ir/ana/field_temperature.c index a07b13829..39593be32 100644 --- a/ir/ana/field_temperature.c +++ b/ir/ana/field_temperature.c @@ -51,7 +51,7 @@ int get_irn_loop_call_depth(ir_node *n) { return get_irg_loop_depth(irg); } -int get_irn_loop_depth(ir_node *n) { +int get_irn_cfloop_depth(ir_node *n) { ir_loop *l = get_irn_loop(get_nodes_block(n)); if (l) return get_loop_depth(l); @@ -68,7 +68,7 @@ int get_irn_recursion_depth(ir_node *n) { /** @@@ the second version of the heuristic. */ int get_weighted_loop_depth(ir_node *n) { int loop_call_depth = get_irn_loop_call_depth(n); - int loop_depth = get_irn_loop_depth(n); + int loop_depth = get_irn_cfloop_depth(n); int recursion_depth = get_irn_recursion_depth(n); return loop_call_depth + loop_depth + recursion_depth; @@ -81,16 +81,28 @@ int get_weighted_loop_depth(ir_node *n) { static int default_recursion_weight = 5; - /* The final evaluation of a node. In this function we can - adapt the heuristic. Combine execution freqency with + adapt the heuristic. Combine execution frequency with recursion depth. - @@@ the second version of the heuristic. */ + @@@ the second version of the heuristic. + + Return 0 if the node is neither in a loop nor in a recursion. */ double get_irn_final_cost(ir_node *n) { double cost_loop = get_irn_exec_freq(n); double cost_method = get_irg_method_execution_frequency(get_irn_irg(n)); int rec_depth = get_irn_recursion_depth(n); - double cost_rec = pow(default_recursion_weight, rec_depth); + double cost_rec = 0; + +#if 0 + if (get_irn_recursion_depth(n) == 0 && + get_irn_loop_depth(n) == 0 && + get_irg_method_loop_depth(get_irn_irg(n)) == 0) + return 0; +#else + if (get_weighted_loop_depth(n) == 0) return 0; +#endif + + if (rec_depth) cost_rec = pow(default_recursion_weight, rec_depth); return cost_loop*(cost_method + cost_rec); } @@ -160,7 +172,7 @@ int get_type_estimated_size_bytes(type *tp) { break; case tpo_class: - s = get_mode_size_bytes(mode_P_mach); /* dispatch pointer */ + s = get_mode_size_bytes(mode_P_data); /* dispatch pointer */ /* fall through */ case tpo_struct: { int i, n_mem = get_compound_n_members(tp); @@ -332,7 +344,12 @@ double get_entity_estimated_n_dyncalls(entity *ent) { /* ------------------------------------------------------------------------- */ int is_jack_rts_name(ident *name) { + if (id_is_suffix(new_id_from_str("Exception"), name)) return 1; + if (id_is_suffix(new_id_from_str("Throwable"), name)) return 1; + if (id_is_suffix(new_id_from_str("Error"), name)) return 1; + return 0; + if (id_is_prefix(new_id_from_str("java/"), name)) return 1; if (id_is_prefix(new_id_from_str("["), name)) return 1; if (id_is_prefix(new_id_from_str("gnu/"), name)) return 1;