X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbemain.c;h=4cc8d7348cbd72f571ae1d98d3903cca7b2aed1b;hb=afbbc0b1ccd684c4c24bfd43d0f994123245f39f;hp=93edf24d7b5f316ede03ad1c298f64160a70a35c;hpb=f1b0a42bb04daeb03e1d8987d34509aa7851eb8c;p=libfirm diff --git a/ir/be/bemain.c b/ir/be/bemain.c index 93edf24d7..4cc8d7348 100644 --- a/ir/be/bemain.c +++ b/ir/be/bemain.c @@ -459,9 +459,6 @@ static void initialize_birg(be_irg_t *birg, ir_graph *irg, be_main_env_t *env) dump(DUMP_INITIAL, irg, "-begin", dump_ir_block_graph); - be_stat_init_irg(env->arch_env, irg); - be_do_stat_nodes(irg, "01 Begin"); - /* set the current graph (this is important for several firm functions) */ current_ir_graph = irg; @@ -531,29 +528,29 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) be_timing = (be_options.timing == BE_TIME_ON); if (be_timing) { - t_abi = ir_timer_register("time_beabi", "be abi introduction"); - t_codegen = ir_timer_register("time_codegen", "codegeneration"); - t_sched = ir_timer_register("time_sched", "scheduling"); - t_constr = ir_timer_register("time_constr", "assure constraints"); - t_finish = ir_timer_register("time_finish", "graph finish"); - t_emit = ir_timer_register("time_emiter", "code emiter"); - t_verify = ir_timer_register("time_verify", "graph verification"); - t_other = ir_timer_register("time_other", "other"); - t_heights = ir_timer_register("time_heights", "heights"); - t_live = ir_timer_register("time_liveness", "be liveness"); - t_execfreq = ir_timer_register("time_execfreq", "execfreq"); - t_ssa_constr = ir_timer_register("time_ssa_constr", "ssa reconstruction"); - t_ra_prolog = ir_timer_register("time_ra_prolog", "regalloc prolog"); - t_ra_epilog = ir_timer_register("time_ra_epilog", "regalloc epilog"); - t_ra_constr = ir_timer_register("time_ra_constr", "regalloc constraints"); - t_ra_spill = ir_timer_register("time_ra_spill", "spiller"); + t_abi = ir_timer_register("bemain_time_beabi", "be abi introduction"); + t_codegen = ir_timer_register("bemain_time_codegen", "codegeneration"); + t_sched = ir_timer_register("bemain_time_sched", "scheduling"); + t_constr = ir_timer_register("bemain_time_constr", "assure constraints"); + t_finish = ir_timer_register("bemain_time_finish", "graph finish"); + t_emit = ir_timer_register("bemain_time_emiter", "code emiter"); + t_verify = ir_timer_register("bemain_time_verify", "graph verification"); + t_other = ir_timer_register("bemain_time_other", "other"); + t_heights = ir_timer_register("bemain_time_heights", "heights"); + t_live = ir_timer_register("bemain_time_liveness", "be liveness"); + t_execfreq = ir_timer_register("bemain_time_execfreq", "execfreq"); + t_ssa_constr = ir_timer_register("bemain_time_ssa_constr", "ssa reconstruction"); + t_ra_prolog = ir_timer_register("bemain_time_ra_prolog", "regalloc prolog"); + t_ra_epilog = ir_timer_register("bemain_time_ra_epilog", "regalloc epilog"); + t_ra_constr = ir_timer_register("bemain_time_ra_constr", "regalloc constraints"); + t_ra_spill = ir_timer_register("bemain_time_ra_spill", "spiller"); t_ra_spill_apply - = ir_timer_register("time_ra_spill_apply", "apply spills"); - t_ra_color = ir_timer_register("time_ra_color", "graph coloring"); - t_ra_ifg = ir_timer_register("time_ra_ifg", "interference graph"); - t_ra_copymin = ir_timer_register("time_ra_copymin", "copy minimization"); - t_ra_ssa = ir_timer_register("time_ra_ssadestr", "ssa destruction"); - t_ra_other = ir_timer_register("time_ra_other", "regalloc other"); + = ir_timer_register("bemain_time_ra_spill_apply", "apply spills"); + t_ra_color = ir_timer_register("bemain_time_ra_color", "graph coloring"); + t_ra_ifg = ir_timer_register("bemain_time_ra_ifg", "interference graph"); + t_ra_copymin = ir_timer_register("bemain_time_ra_copymin", "copy minimization"); + t_ra_ssa = ir_timer_register("bemain_time_ra_ssadestr", "ssa destruction"); + t_ra_other = ir_timer_register("bemain_time_ra_other", "regalloc other"); } be_init_env(&env, file_handle); @@ -564,7 +561,8 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) arch_env = env.arch_env; - /* backend may provide an ordered list of irgs where code should be generated for */ + /* backend may provide an ordered list of irgs where code should be + * generated for */ irg_list = NEW_ARR_F(ir_graph *, 0); backend_irg_list = arch_env_get_backend_irg_list(arch_env, &irg_list); @@ -609,18 +607,16 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) /* set the current graph (this is important for several firm functions) */ current_ir_graph = irg; -#if 0 - { - unsigned percent = 100*i/num_birgs; - ir_printf("%u.%02u %+F\n", percent/100, percent%100, irg); - } -#endif be_sched_init_phase(irg); /* reset the phi handler. */ be_phi_handler_reset(); - stat_ev_ctx_push_fobj("bemain_irg", irg); + stat_ev_if { + stat_ev_ctx_push_fobj("bemain_irg", irg); + be_stat_ev("bemain_insns_start", be_count_insns(irg)); + be_stat_ev("bemain_blocks_start", be_count_blocks(irg)); + } /* stop and reset timers */ BE_TIMER_PUSH(t_other); /* t_other */ @@ -651,7 +647,6 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) BE_TIMER_POP(t_abi); dump(DUMP_ABI, irg, "-abi", dump_ir_block_graph); - be_do_stat_nodes(irg, "02 Abi"); if (be_options.vrfy_option == BE_VRFY_WARN) { be_check_dominance(irg); @@ -662,17 +657,13 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) } /* generate code */ - stat_ev_ctx_push_str("bemain_phase", "prepare"); BE_TIMER_PUSH(t_codegen); arch_code_generator_prepare_graph(birg->cg); BE_TIMER_POP(t_codegen); - stat_ev_ctx_pop("bemain_phase"); /* reset the phi handler. */ be_phi_handler_reset(); - be_do_stat_nodes(irg, "03 Prepare"); - dump(DUMP_PREPARED, irg, "-prepared", dump_ir_block_graph); if (be_options.vrfy_option == BE_VRFY_WARN) { @@ -702,11 +693,9 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) /* be_live_chk_compare(birg); */ /* let backend prepare scheduling */ - stat_ev_ctx_push_str("bemain_phase", "before_sched"); BE_TIMER_PUSH(t_codegen); arch_code_generator_before_sched(birg->cg); BE_TIMER_POP(t_codegen); - stat_ev_ctx_pop("bemain_phase"); /* schedule the irg */ BE_TIMER_PUSH(t_sched); @@ -731,8 +720,6 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) be_sched_vrfy(birg, be_options.vrfy_option); BE_TIMER_POP(t_verify); - be_do_stat_nodes(irg, "04 Schedule"); - /* introduce patterns to assure constraints */ BE_TIMER_PUSH(t_constr); /* we switch off optimizations here, because they might cause trouble */ @@ -747,7 +734,6 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) BE_TIMER_POP(t_constr); dump(DUMP_SCHED, irg, "-assured", dump_ir_block_graph_sched); - be_do_stat_nodes(irg, "05 Constraints"); /* stuff needs to be done after scheduling but before register allocation */ BE_TIMER_PUSH(t_codegen); @@ -766,22 +752,21 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) be_sched_vrfy(birg, be_options.vrfy_option); BE_TIMER_POP(t_verify); - /* do some statistics */ - //be_do_stat_reg_pressure(birg); - -#ifdef FIRM_STATISTICS - stat_ev_dbl("costs_before_ra", be_estimate_irg_costs(irg, arch_env, birg->exec_freq)); -#endif + stat_ev_if { + stat_ev_dbl("bemain_costs_before_ra", + be_estimate_irg_costs(irg, arch_env, birg->exec_freq)); + be_stat_ev("bemain_insns_before_ra", be_count_insns(irg)); + be_stat_ev("bemain_blocks_before_ra", be_count_blocks(irg)); + } /* Do register allocation */ be_allocate_registers(birg); #ifdef FIRM_STATISTICS - stat_ev_dbl("costs_before_ra", be_estimate_irg_costs(irg, arch_env, birg->exec_freq)); + stat_ev_dbl("bemain_costs_before_ra", be_estimate_irg_costs(irg, arch_env, birg->exec_freq)); #endif dump(DUMP_RA, irg, "-ra", dump_ir_block_graph_sched); - be_do_stat_nodes(irg, "06 Register Allocation"); /* let the code generator prepare the graph for emitter */ BE_TIMER_PUSH(t_finish); @@ -803,6 +788,11 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) dump(DUMP_FINAL, irg, "-finish", dump_ir_block_graph_sched); + stat_ev_if { + be_stat_ev("bemain_insns_finish", be_count_insns(irg)); + be_stat_ev("bemain_blocks_finish", be_count_blocks(irg)); + } + /* check schedule and register allocation */ BE_TIMER_PUSH(t_verify); if (be_options.vrfy_option == BE_VRFY_WARN) { @@ -833,7 +823,6 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) be_abi_free(birg->abi); BE_TIMER_POP(t_abi); - be_do_stat_nodes(irg, "07 Final"); restore_optimization_state(&state); BE_TIMER_POP(t_other); @@ -881,14 +870,6 @@ static void be_main_loop(FILE *file_handle, const char *cup_name) be_sched_free_phase(irg); be_free_birg(birg); - - /* switched off due to statistics (statistic module needs all irgs) */ -#if 0 /* STA needs irgs */ -#ifdef FIRM_STATISTICS - if (! stat_is_active()) -#endif /* FIRM_STATISTICS */ - free_ir_graph(irg); -#endif /* if 0 */ stat_ev_ctx_pop("bemain_irg"); } ir_profile_free(); @@ -930,6 +911,7 @@ void be_main(FILE *file_handle, const char *cup_name) be_options.statev = 1; stat_ev_begin(buf, be_options.filtev); + stat_ev_ctx_push_str("bemain_compilation_unit", cup_name); } #endif @@ -944,15 +926,17 @@ void be_main(FILE *file_handle, const char *cup_name) ir_timer_stop(t); ir_timer_leave_high_priority(); stat_ev_if { - stat_ev_dbl("backend_time", ir_timer_elapsed_msec(t)); + stat_ev_dbl("bemain_backend_time", ir_timer_elapsed_msec(t)); } else { printf("%-20s: %lu msec\n", "BEMAINLOOP", ir_timer_elapsed_msec(t)); } } #ifdef FIRM_STATISTICS - if (be_options.statev) + if (be_options.statev) { + stat_ev_ctx_pop("bemain_compilation_unit"); stat_ev_end(); + } #endif }