#define COST_FUNC_LOOP 2
#define COST_FUNC_ALL_ONE 3
-static int dump_flags = 0;
-static int style_flags = 0;
-static int do_stats = 0;
+static unsigned dump_flags = 0;
+static unsigned style_flags = 0;
+static unsigned do_stats = 0;
static cost_fct_t cost_func = co_get_costs_exec_freq;
static int algo = CO_ALGO_HEUR2;
static int improve = 1;
{ "none", CO_ALGO_NONE },
{ "heur", CO_ALGO_HEUR },
{ "heur2", CO_ALGO_HEUR2 },
+#ifdef WITH_JVM
{ "heur3", CO_ALGO_HEUR3 },
+#endif /* WITH_JVM */
+#ifdef WITH_ILP
{ "ilp", CO_ALGO_ILP },
+#endif /* WITH_ILP */
{ NULL, 0 }
};
+typedef int (*opt_funcptr)(void);
+
static const lc_opt_enum_func_ptr_items_t cost_func_items[] = {
- { "freq", co_get_costs_exec_freq },
- { "loop", co_get_costs_loop_depth },
- { "one", co_get_costs_all_one },
- { NULL, 0 }
+ { "freq", (opt_funcptr) co_get_costs_exec_freq },
+ { "loop", (opt_funcptr) co_get_costs_loop_depth },
+ { "one", (opt_funcptr) co_get_costs_all_one },
+ { NULL, NULL }
};
static lc_opt_enum_mask_var_t dump_var = {
};
static lc_opt_enum_func_ptr_var_t cost_func_var = {
- &cost_func, cost_func_items
+ (opt_funcptr*) &cost_func, cost_func_items
};
static const lc_opt_table_entry_t options[] = {
- LC_OPT_ENT_ENUM_INT ("algo", "select copy optimization algo (heur, heur2, heur3, ilp)", &algo_var),
- LC_OPT_ENT_ENUM_FUNC_PTR ("cost", "select a cost function (freq, loop, one)", &cost_func_var),
+ LC_OPT_ENT_ENUM_INT ("algo", "select copy optimization algo", &algo_var),
+ LC_OPT_ENT_ENUM_FUNC_PTR ("cost", "select a cost function", &cost_func_var),
LC_OPT_ENT_ENUM_MASK ("dump", "dump ifg before or after copy optimization", &dump_var),
LC_OPT_ENT_ENUM_MASK ("style", "dump style for ifg dumping", &style_var),
LC_OPT_ENT_BOOL ("stats", "dump statistics after each optimization", &do_stats),
be_stat_ev_ull("co_prepare_costs", stats.costs);
}
+#ifdef WITH_JVM
/* start the JVM here so that it does not tamper the timing. */
if(algo == CO_ALGO_HEUR3)
be_java_coal_start_jvm();
+#endif
algo_func = algos[algo].algo;
co_complete_stats(co, &after);
if(do_stats) {
- int optimizable_costs = after.max_costs - after.inevit_costs;
- int evitable = after.costs - after.inevit_costs;
+ ulong64 optimizable_costs = after.max_costs - after.inevit_costs;
+ ulong64 evitable = after.costs - after.inevit_costs;
ir_printf("%30F ", cenv->irg);
- printf("%10s %10llu%10llu%10llu", cenv->cls->name, after.max_costs, before.costs, after.inevit_costs);
+ printf("%10s %10" ULL_FMT "%10" ULL_FMT "%10" ULL_FMT, cenv->cls->name, after.max_costs, before.costs, after.inevit_costs);
if(optimizable_costs > 0)
- printf("%10llu %5.2f\n", after.costs, (evitable * 100.0) / optimizable_costs);
+ printf("%10" ULL_FMT " %5.2f\n", after.costs, (evitable * 100.0) / optimizable_costs);
else
- printf("%10llu %5s\n", after.costs, "-");
+ printf("%10" ULL_FMT " %5s\n", after.costs, "-");
}
be_stat_ev_ull("co_after_costs", after.costs);