/* grs_create_pattern = */ 0,
/* spare_size = */ 128,
/* enable_statev = */ FALSE,
- /* statev_filter = */ ""
+ /* statev_filter = */ "",
+ /* loop = */ FALSE
};
/* dumping options */
{ X("no-shape-blocks"), &firm_opt.shape_blocks, 0, "firm: disable block shaping" },
{ X("freestanding"), &firm_opt.freestanding, 1, "firm: freestanding environment" },
{ X("hosted"), &firm_opt.freestanding, 0, "firm: hosted environment" },
+ { X("loop"), &firm_opt.loop, 1, "firm: enable loop peeling and unrolling" },
+ { X("no-loop"), &firm_opt.loop, 0, "firm: disable loop peeling and unrolling" },
/* other firm regarding options */
{ X("restrict"), &firm_opt.honor_restrict, 1, "firm: honor restrict keyword" },
firm_opt.bool_opt = FALSE;
firm_opt.shape_blocks = FALSE;
firm_opt.freestanding = TRUE;
+ firm_opt.loop = FALSE;
} /* disable_opts */
/**
unsigned spare_size; /**< allowed spare size for table switches in machine words. */
a_byte enable_statev; /**< enable statev output */
char *statev_filter; /**< statev filter */
+ a_byte loop; /**< loop peeling and unrolling */
};
/** statistic options */
lower_switch(irg, firm_opt.spare_size);
}
+static void do_loop(ir_graph *irg)
+{
+ loop_optimization(irg);
+}
+
typedef enum opt_target {
OPT_TARGET_IRG,
OPT_TARGET_IRP
{ OPT_TARGET_IRP, "inline", (func_ptr_t) do_inline, true, true, true, TV_INLINE },
{ OPT_TARGET_IRP, "clone", (func_ptr_t) do_cloning, true, true, true, TV_CLONE },
{ OPT_TARGET_IRG, "lower_switch", (func_ptr_t) do_lower_switch, true, true, true, TV_LOWER },
+ { OPT_TARGET_IRG, "loop", (func_ptr_t) do_loop, true, true, true, TV_LOOP },
};
static const int n_opts = sizeof(opts) / sizeof(opts[0]);
set_opt_enabled("inline", firm_opt.do_inline);
set_opt_enabled("clone", firm_opt.cloning);
set_opt_enabled("combo", firm_opt.combo);
+ set_opt_enabled("loop", firm_opt.loop);
timer_start(TV_ALL_OPT);
do_irg_opt(irg, "controlflow");
do_irg_opt(irg, "ldst");
+ do_irg_opt(irg, "loop");
do_irg_opt(irg, "lower");
do_irg_opt(irg, "deconv");
do_irg_opt(irg, "jumpthreading");
DEFTIMEVAR(TV_CODE_PLACE , "codeplace", "Firm: code placement")
DEFTIMEVAR(TV_IF_CONV , "ifconv", "Firm: if conversion")
DEFTIMEVAR(TV_OSR , "osr", "Firm: operator strenght reduce")
-DEFTIMEVAR(TV_LOOP_UNROLL , "lunroll", "Firm: loop unrolling")
+DEFTIMEVAR(TV_LOOP , "loop", "Firm: loop peeling and unrolling")
DEFTIMEVAR(TV_REAL_FUNC_CALL , "realfunc", "Firm: real func call")
DEFTIMEVAR(TV_CGANA , "cgana", "Firm: CG analysis")
DEFTIMEVAR(TV_CONFIRM_CREATE , "confirm", "Firm: Confirm creation")
char_is_signed = !truth_value;
} else if (streq(opt, "fast-math") ||
streq(opt, "jump-tables") ||
- streq(opt, "unroll-loops") ||
streq(opt, "expensive-optimizations") ||
streq(opt, "common") ||
streq(opt, "PIC") ||