X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbessaconstr.c;h=9b60c37cbae18ce810a72a384f4253fafd2d1982;hb=64723d1bd8ace74ca5f0018db8655f2a1f443532;hp=6902d2f47cddba13148396e780b145d8ef028740;hpb=d2c1b0191844c3c23731158a153838d570dcd65a;p=libfirm diff --git a/ir/be/bessaconstr.c b/ir/be/bessaconstr.c index 6902d2f47..9b60c37cb 100644 --- a/ir/be/bessaconstr.c +++ b/ir/be/bessaconstr.c @@ -57,6 +57,7 @@ #include "beintlive_t.h" #include "beirg.h" #include "be_t.h" +#include "benode.h" #include "debug.h" #include "error.h" @@ -74,8 +75,8 @@ DEBUG_ONLY(static firm_dbg_module_t *dbg = NULL;) * blocks as visited. Sets the link fields of the blocks in the dominance * frontier to the block itself. */ -static -void mark_iterated_dominance_frontiers(const be_ssa_construction_env_t *env) +static void mark_iterated_dominance_frontiers( + const be_ssa_construction_env_t *env) { stat_ev_cnt_decl(blocks); DBG((dbg, LEVEL_3, "Dominance Frontier:")); @@ -106,13 +107,11 @@ void mark_iterated_dominance_frontiers(const be_ssa_construction_env_t *env) DBG((dbg, LEVEL_3, "\n")); } -static -ir_node *search_def_end_of_block(be_ssa_construction_env_t *env, - ir_node *block); +static ir_node *search_def_end_of_block(be_ssa_construction_env_t *env, + ir_node *block); -static -ir_node *create_phi(be_ssa_construction_env_t *env, ir_node *block, - ir_node *link_with) +static ir_node *create_phi(be_ssa_construction_env_t *env, ir_node *block, + ir_node *link_with) { int i, n_preds = get_Block_n_cfgpreds(block); ir_graph *irg = get_Block_irg(block); @@ -124,7 +123,7 @@ ir_node *create_phi(be_ssa_construction_env_t *env, ir_node *block, for(i = 0; i < n_preds; ++i) { ins[i] = new_r_Unknown(irg, env->mode); } - phi = new_r_Phi(block, n_preds, ins, env->mode); + phi = be_new_Phi(block, n_preds, ins, env->mode, env->phi_cls); if(env->new_phis != NULL) { ARR_APP1(ir_node*, env->new_phis, phi); } @@ -147,16 +146,15 @@ ir_node *create_phi(be_ssa_construction_env_t *env, ir_node *block, return phi; } -static -ir_node *get_def_at_idom(be_ssa_construction_env_t *env, ir_node *block) +static ir_node *get_def_at_idom(be_ssa_construction_env_t *env, ir_node *block) { ir_node *dom = get_Block_idom(block); assert(dom != NULL); return search_def_end_of_block(env, dom); } -static -ir_node *search_def_end_of_block(be_ssa_construction_env_t *env, ir_node *block) +static ir_node *search_def_end_of_block(be_ssa_construction_env_t *env, + ir_node *block) { if(irn_visited(block)) { assert(get_irn_link(block) != NULL); @@ -171,8 +169,7 @@ ir_node *search_def_end_of_block(be_ssa_construction_env_t *env, ir_node *block) } } -static -ir_node *search_def(be_ssa_construction_env_t *env, ir_node *at) +static ir_node *search_def(be_ssa_construction_env_t *env, ir_node *at) { ir_node *block = get_nodes_block(at); ir_node *node; @@ -217,8 +214,7 @@ ir_node *search_def(be_ssa_construction_env_t *env, ir_node *at) * sorted by dominance. A non-visited block means no definition has been * inserted yet. */ -static -void introduce_def_at_block(ir_node *block, ir_node *def) +static void introduce_def_at_block(ir_node *block, ir_node *def) { if (irn_visited_else_mark(block)) { ir_node *node = block; @@ -297,7 +293,8 @@ void be_ssa_construction_add_copy(be_ssa_construction_env_t *env, assert(env->iterated_domfront_calculated == 0); if(env->mode == NULL) { - env->mode = get_irn_mode(copy); + env->mode = get_irn_mode(copy); + env->phi_cls = arch_get_irn_reg_class_out(copy); } else { assert(env->mode == get_irn_mode(copy)); } @@ -318,11 +315,12 @@ void be_ssa_construction_add_copies(be_ssa_construction_env_t *env, assert(env->iterated_domfront_calculated == 0); if(env->mode == NULL) { - env->mode = get_irn_mode(copies[0]); + env->mode = get_irn_mode(copies[0]); + env->phi_cls = arch_get_irn_reg_class_out(copies[0]); } for(i = 0; i < copies_len; ++i) { - ir_node *copy = copies[i]; + ir_node *copy = copies[i]; ir_node *block = get_nodes_block(copy); assert(env->mode == get_irn_mode(copy)); @@ -351,7 +349,7 @@ void be_ssa_construction_fix_users_array(be_ssa_construction_env_t *env, size_t i; stat_ev_cnt_decl(uses); - BE_TIMER_PUSH(t_ssa_constr); + be_timer_push(T_SSA_CONSTR); if(!env->iterated_domfront_calculated) { mark_iterated_dominance_frontiers(env); @@ -374,11 +372,11 @@ void be_ssa_construction_fix_users_array(be_ssa_construction_env_t *env, if(env->ignore_uses != NULL && ir_nodeset_contains(env->ignore_uses, use)) continue; - if(is_Anchor(use)) + if(is_Anchor(use) || is_End(use)) continue; if(is_Phi(use)) { - ir_node *block = get_nodes_block(use); + ir_node *block = get_nodes_block(use); ir_node *predblock = get_Block_cfgpred_block(block, pos); at = sched_last(predblock); } @@ -394,7 +392,7 @@ void be_ssa_construction_fix_users_array(be_ssa_construction_env_t *env, stat_ev_cnt_inc(uses); } } - BE_TIMER_POP(t_ssa_constr); + be_timer_pop(T_SSA_CONSTR); stat_ev_tim_pop("bessaconstr_fix_time"); stat_ev_cnt_done(uses, "bessaconstr_uses"); @@ -411,7 +409,7 @@ void be_ssa_construction_update_liveness_phis(be_ssa_construction_env_t *env, { int i, n; - BE_TIMER_PUSH(t_ssa_constr); + be_timer_push(T_SSA_CONSTR); n = ARR_LEN(env->new_phis); for(i = 0; i < n; ++i) { @@ -419,7 +417,7 @@ void be_ssa_construction_update_liveness_phis(be_ssa_construction_env_t *env, be_liveness_introduce(lv, phi); } - BE_TIMER_POP(t_ssa_constr); + be_timer_pop(T_SSA_CONSTR); } void be_init_ssaconstr(void)