/*
- * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
#include "iroptimize.h"
#include "firmstat.h"
#include "execfreq.h"
+#include "irprofile.h"
#include "bearch_t.h"
#include "be_t.h"
#include "beschedmris.h"
#include "bestat.h"
#include "beverify.h"
-#include "beprofile.h"
#include "be_dbgout.h"
#include "beirg_t.h"
lc_timer_t *t_verify = NULL;
if (be_options.timing == BE_TIME_ON) {
- t_abi = lc_timer_register("beabi", "be abi introduction");
- t_codegen = lc_timer_register("codegen", "codegeneration");
- t_sched = lc_timer_register("sched", "scheduling");
- t_constr = lc_timer_register("constr", "assure constraints");
- t_regalloc = lc_timer_register("regalloc", "register allocation");
- t_finish = lc_timer_register("finish", "graph finish");
- t_emit = lc_timer_register("emiter", "code emiter");
- t_verify = lc_timer_register("verify", "graph verification");
- t_other = lc_timer_register("other", "other");
+ t_abi = lc_timer_register("time_beabi", "be abi introduction");
+ t_codegen = lc_timer_register("time_codegen", "codegeneration");
+ t_sched = lc_timer_register("time_sched", "scheduling");
+ t_constr = lc_timer_register("time_constr", "assure constraints");
+ t_regalloc = lc_timer_register("time_regalloc", "register allocation");
+ t_finish = lc_timer_register("time_finish", "graph finish");
+ t_emit = lc_timer_register("time_emiter", "code emiter");
+ t_verify = lc_timer_register("time_verify", "graph verification");
+ t_other = lc_timer_register("time_other", "other");
}
be_init_env(&env, file_handle);
or try to read in profile data for current translation unit.
*/
if (be_options.opt_profile) {
- ir_graph *prof_init_irg = be_profile_instrument(prof_filename, profile_default);
+ ir_graph *prof_init_irg = ir_profile_instrument(prof_filename, profile_default);
initialize_birg(&birgs[num_birgs], prof_init_irg, &env);
num_birgs++;
set_method_img_section(get_irg_entity(prof_init_irg), section_constructors);
} else {
- be_profile_read(prof_filename);
+ ir_profile_read(prof_filename);
}
/* For all graphs */
/* set the current graph (this is important for several firm functions) */
current_ir_graph = irg;
+ be_sched_init_phase(irg);
+
/* reset the phi handler. */
be_phi_handler_reset(env.phi_handler);
/**
* Create execution frequencies from profile data or estimate some
*/
- if (be_profile_has_data())
- birg->exec_freq = be_create_execfreqs_from_profile(irg);
+ if (ir_profile_has_data())
+ birg->exec_freq = ir_create_execfreqs_from_profile(irg);
else
birg->exec_freq = compute_execfreq(irg, 10);
BE_TIMER_POP(t_other);
#define LC_EMIT(timer) \
- printf("%-20s: %.3lf msec\n", lc_timer_get_description(timer), (double)lc_timer_elapsed_usec(timer) / 1000.0); \
- stat_ev_dbl(lc_timer_get_name(timer), lc_timer_elapsed_msec(timer));
+ stat_ev_if { \
+ stat_ev_dbl(lc_timer_get_name(timer), lc_timer_elapsed_msec(timer)); \
+ } else { \
+ printf("%-20s: %.3lf msec\n", lc_timer_get_description(timer), (double)lc_timer_elapsed_usec(timer) / 1000.0); \
+ }
#define LC_EMIT_RA(timer) \
- printf("\t%-20s: %.3lf msec\n", lc_timer_get_description(timer), (double)lc_timer_elapsed_usec(timer) / 1000.0); \
- stat_ev_dbl(lc_timer_get_name(timer), lc_timer_elapsed_msec(timer)); \
+ stat_ev_if { \
+ stat_ev_dbl(lc_timer_get_name(timer), lc_timer_elapsed_msec(timer)); \
+ } else { \
+ printf("\t%-20s: %.3lf msec\n", lc_timer_get_description(timer), (double)lc_timer_elapsed_usec(timer) / 1000.0); \
+ }
BE_TIMER_ONLY(
- printf("==>> IRG %s <<==\n", get_entity_name(get_irg_entity(irg)));
- printf("# nodes at begin: %u\n", num_nodes_b);
- printf("# nodes before ra: %u\n", num_nodes_r);
- printf("# nodes at end: %u\n\n", num_nodes_a);
+ stat_ev_if {
+ } else {
+ printf("==>> IRG %s <<==\n", get_entity_name(get_irg_entity(irg)));
+ printf("# nodes at begin: %u\n", num_nodes_b);
+ printf("# nodes before ra: %u\n", num_nodes_r);
+ printf("# nodes at end: %u\n\n", num_nodes_a);
+ }
LC_EMIT(t_abi);
LC_EMIT(t_codegen);
LC_EMIT(t_sched);
#undef LC_EMIT_RA
#undef LC_EMIT
+ be_sched_free_phase(irg);
+
be_free_birg(birg);
/* switched off due to statistics (statistic module needs all irgs) */
#endif /* if 0 */
stat_ev_ctx_pop("bemain_irg");
}
- be_profile_free();
+ ir_profile_free();
be_done_env(&env);
#undef BE_TIMER_POP
if (be_options.timing == BE_TIME_ON) {
lc_timer_stop(t);
lc_timer_leave_high_priority();
- stat_ev_dbl("backend_time", lc_timer_elapsed_msec(t));
- printf("%-20s: %lu msec\n", "BEMAINLOOP", lc_timer_elapsed_msec(t));
+ stat_ev_if {
+ stat_ev_dbl("backend_time", lc_timer_elapsed_msec(t));
+ } else {
+ printf("%-20s: %lu msec\n", "BEMAINLOOP", lc_timer_elapsed_msec(t));
+ }
}
#ifdef FIRM_STATISTICS
#endif
}
-/** The debug info retriever function. */
-static retrieve_dbg_func retrieve_dbg = NULL;
-
-/* Sets a debug info retriever. */
-void be_set_debug_retrieve(retrieve_dbg_func func) {
- retrieve_dbg = func;
-}
-
-/* Retrieve the debug info. */
-const char *be_retrieve_dbg_info(const dbg_info *dbg, unsigned *line) {
- if (retrieve_dbg)
- return retrieve_dbg(dbg, line);
-
- *line = 0;
- return NULL;
-}
-
unsigned be_put_ignore_regs(const be_irg_t *birg, const arch_register_class_t *cls, bitset_t *bs)
{
if (bs == NULL)