X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbechordal_main.c;h=d2ebfa335594c345c4eff7e755cddf18f2ed2a49;hb=97927c8e372f337e8342b698072facf4ffa453ad;hp=6b376b05a7cdd8835bf9dca68c94fc988a955e6f;hpb=b71eb461afcc67cf09b606d42db1125b03e001e6;p=libfirm diff --git a/ir/be/bechordal_main.c b/ir/be/bechordal_main.c index 6b376b05a..d2ebfa335 100644 --- a/ir/be/bechordal_main.c +++ b/ir/be/bechordal_main.c @@ -346,9 +346,12 @@ static void memory_operand_walker(ir_node *irn, void *env) { if (! be_is_Reload(irn)) return; - // only use memory operands, if the reload is only used by 1 node + /* always use addressmode, it's good for x86 */ +#if 0 + /* only use memory operands, if the reload is only used by 1 node */ if(get_irn_n_edges(irn) > 1) return; +#endif spill = be_get_Reload_mem(irn); block = get_nodes_block(irn); @@ -387,8 +390,10 @@ static INLINE void check_for_memory_operands(be_chordal_env_t *chordal_env) { typedef struct _node_stat_t { unsigned int n_phis; /**< Phis of the current register class. */ unsigned int n_mem_phis; /**< Memory Phis (Phis with spill operands). */ + unsigned int n_copies; /**< Copies */ + unsigned int n_perms; /**< Perms */ unsigned int n_spills; /**< Spill nodes */ - unsigned int n_reloads; /**< Reloads. */ + unsigned int n_reloads; /**< Reloads */ } node_stat_t; struct node_stat_walker { @@ -414,6 +419,11 @@ static void node_stat_walker(ir_node *irn, void *data) else if(arch_irn_classify(aenv, irn) & arch_irn_class_reload) ++env->stat->n_reloads; + else if(arch_irn_classify(aenv, irn) & arch_irn_class_copy) + ++env->stat->n_copies; + + else if(arch_irn_classify(aenv, irn) & arch_irn_class_perm) + ++env->stat->n_perms; } /* a mem phi is a PhiM with a mem phi operand or a Spill operand */ @@ -716,27 +726,37 @@ static be_ra_timer_t *be_ra_chordal_main(const be_irg_t *bi) if(stat_file) { be_ifg_stat_t stat; - be_ifg_stat(chordal_env.ifg, irg, &stat); + be_ifg_stat(&chordal_env, &stat); be_stat_ev("ifg_nodes", stat.n_nodes); be_stat_ev("ifg_edges", stat.n_edges); + be_stat_ev("ifg_comps", stat.n_comps); } BE_TIMER_PUSH(ra_timer.t_verify); - if (options.vrfy_option != BE_CH_VRFY_OFF) - be_ra_chordal_check(&chordal_env); + if (options.vrfy_option != BE_CH_VRFY_OFF) { + //be_ra_chordal_check(&chordal_env); + } BE_TIMER_POP(ra_timer.t_verify); + if(stat_file) { + node_stats(&chordal_env, &node_stat); + be_stat_ev("perms_before_coal", node_stat.n_perms); + be_stat_ev("copies_before_coal", node_stat.n_copies); + } + /* copy minimization */ BE_TIMER_PUSH(ra_timer.t_copymin); co_driver(&chordal_env); BE_TIMER_POP(ra_timer.t_copymin); + dump(BE_CH_DUMP_COPYMIN, irg, chordal_env.cls, "-copymin", dump_ir_block_graph_sched); BE_TIMER_PUSH(ra_timer.t_verify); - if (options.vrfy_option != BE_CH_VRFY_OFF) - be_ra_chordal_check(&chordal_env); + if (options.vrfy_option != BE_CH_VRFY_OFF) { + //be_ra_chordal_check(&chordal_env); + } BE_TIMER_POP(ra_timer.t_verify); BE_TIMER_PUSH(ra_timer.t_ssa); @@ -751,7 +771,7 @@ static be_ra_timer_t *be_ra_chordal_main(const be_irg_t *bi) BE_TIMER_PUSH(ra_timer.t_verify); if (options.vrfy_option != BE_CH_VRFY_OFF) { be_ssa_destruction_check(&chordal_env); - be_ra_chordal_check(&chordal_env); + //be_ra_chordal_check(&chordal_env); } BE_TIMER_POP(ra_timer.t_verify); @@ -759,13 +779,18 @@ static be_ra_timer_t *be_ra_chordal_main(const be_irg_t *bi) pmap_destroy(chordal_env.border_heads); bitset_free(chordal_env.ignore_colors); + if(stat_file) { + node_stats(&chordal_env, &node_stat); + be_stat_ev("perms_after_coal", node_stat.n_perms); + be_stat_ev("copies_after_coal", node_stat.n_copies); + } + be_stat_ev_pop(); } BE_TIMER_PUSH(ra_timer.t_spillslots); - if(coalesce_spill_slots) - be_coalesce_spillslots(&chordal_env); + be_coalesce_spillslots(&chordal_env, coalesce_spill_slots); dump(BE_CH_DUMP_SPILLSLOTS, irg, NULL, "-spillslots", dump_ir_block_graph_sched); BE_TIMER_POP(ra_timer.t_spillslots);