#include "bessadestr.h"
#include "beabi.h"
#include "belower.h"
+#include "beschedmris.h"
+#include "bestat.h"
#define DUMP_INITIAL (1 << 0)
#define DUMP_ABI (1 << 1)
static lc_opt_entry_t *be_grp_root = NULL;
+static int be_disable_mris = 0;
+
/* possible dumping options */
static const lc_opt_enum_mask_items_t dump_items[] = {
{ "none", 0 },
};
static const lc_opt_table_entry_t be_main_options[] = {
- LC_OPT_ENT_ENUM_MASK("dump", "dump irg on several occasions", &dump_var),
- LC_OPT_ENT_ENUM_PTR("ra", "register allocator", &ra_var),
- LC_OPT_ENT_ENUM_PTR("isa", "the instruction set architecture", &isa_var),
- LC_OPT_ENT_NEGBOOL("noomitfp", "do not omit frame pointer", &be_omit_fp),
+ LC_OPT_ENT_ENUM_MASK("dump", "dump irg on several occasions", &dump_var),
+ LC_OPT_ENT_ENUM_PTR ("ra", "register allocator", &ra_var),
+ LC_OPT_ENT_ENUM_PTR ("isa", "the instruction set architecture", &isa_var),
+ LC_OPT_ENT_NEGBOOL ("noomitfp", "do not omit frame pointer", &be_omit_fp),
+ LC_OPT_ENT_NEGBOOL ("nomris", "disable mris schedule preparation", &be_disable_mris),
#ifdef WITH_ILP
LC_OPT_ENT_STR ("ilp.server", "the ilp server name", be_options.ilp_server, sizeof(be_options.ilp_server)),
/* Parse one argument. */
int be_parse_arg(const char *arg) {
#ifdef WITH_LIBCORE
+ if (strcmp(arg, "help") == 0 || (arg[0] == '?' && arg[1] == '\0')) {
+ lc_opt_print_help(be_grp_root, stdout);
+ return -1;
+ }
return lc_opt_from_single_arg(be_grp_root, NULL, arg, NULL);
#endif /* WITH_LIBCORE */
}
isa = arch_env_get_isa(env.arch_env);
+ // /* for debugging, anchors helps */
+ // dump_all_anchors(1);
+
/* For all graphs */
for (i = 0, n = get_irp_n_irgs(); i < n; ++i) {
ir_graph *irg = get_irp_irg(i);
dump(DUMP_PREPARED, irg, "-prepared", dump_ir_block_graph);
- /* add Keeps for should_be_different constrained nodes */
- assure_constraints(&birg);
- dump(DUMP_PREPARED, irg, "-assured", dump_ir_block_graph);
-
/* Schedule the graphs. */
arch_code_generator_before_sched(birg.cg);
- list_sched(env.arch_env, irg);
+ list_sched(&birg, be_disable_mris);
+ dump(DUMP_SCHED, irg, "-sched", dump_ir_block_graph_sched);
+
+ /* add Keeps for should_be_different constrained nodes */
+ /* beware: needs schedule due to usage of be_ssa_constr */
+ assure_constraints(&birg);
+ dump(DUMP_PREPARED, irg, "-assured", dump_ir_block_graph_sched);
/* connect all stack modifying nodes together (see beabi.c) */
be_abi_fix_stack_nodes(birg.abi);
- dump(DUMP_SCHED, irg, "-sched", dump_ir_block_graph_sched);
+ dump(DUMP_SCHED, irg, "-fix_stack", dump_ir_block_graph_sched);
/* Verify the schedule */
- sched_verify_irg(irg);
+ assert(sched_verify_irg(irg));
+
+ /* do some statistics */
+ be_do_stat_reg_pressure(&birg);
/* Do register allocation */
arch_code_generator_before_ra(birg.cg);
// free_ir_graph(irg);
}
-
be_done_env(&env);
}