/* deconv = */ FALSE,
/* cc_opt = */ TRUE,
/* bool_opt = */ FALSE,
+ /* end_melt = */ FALSE,
/* freestanding; = */ FALSE,
/* fp_model = */ fp_model_precise,
/* lower_ll = */ FALSE,
{ X("no-opt-cc"), &firm_opt.cc_opt, 0, "firm: disable calling conventions optimization" },
{ X("bool"), &firm_opt.bool_opt, 1, "firm: enable bool simplification optimization" },
{ X("no-bool"), &firm_opt.bool_opt, 0, "firm: disable bool simplification optimization" },
+ { X("end-melt"), &firm_opt.end_melt, 1, "firm: enable end block melting" },
+ { X("no-end-melt"), &firm_opt.end_melt, 0, "firm: disable end block melting" },
{ X("freestanding"), &firm_opt.freestanding, 1, "firm: freestanding environment" },
{ X("hosted"), &firm_opt.freestanding, 0, "firm: hosted environment" },
firm_opt.deconv = FALSE;
firm_opt.cc_opt = FALSE;
firm_opt.bool_opt = FALSE;
+ firm_opt.end_melt = FALSE;
firm_opt.freestanding = TRUE;
} /* disable_opts */
a_byte deconv; /**< enable conv node optimization */
a_byte cc_opt; /**< optimize calling conventions */
a_byte bool_opt; /**< perform bool simplification */
+ a_byte end_melt; /**< end block melting */
a_byte freestanding; /**< if set, freestanding mode is enabled */
a_byte fp_model; /**< fp model */
a_byte lower_ll; /**< lower double word access */
{ OPT_TARGET_IRG, "gvnpre", (func_ptr_t) do_gvn_pre, true, true, true, -1 },
{ OPT_TARGET_IRG, "ifconv", (func_ptr_t) do_if_conv, true, true, true, TV_IF_CONV },
{ OPT_TARGET_IRG, "bool", (func_ptr_t) opt_bool, true, true, true, -1 },
+ { OPT_TARGET_IRG, "end-melt", (func_ptr_t) melt_end_blocks, true, true, true, TV_END_MELT },
{ OPT_TARGET_IRG, "stred", (func_ptr_t) do_stred, true, true, true, TV_OSR },
{ OPT_TARGET_IRG, "dead", (func_ptr_t) dead_node_elimination, true, false, true, TV_DEAD_NODE },
{ OPT_TARGET_IRP, "inline", (func_ptr_t) do_inline, true, true, true, -1 },
set_opt_enabled("gvnpre", firm_opt.gvn_pre);
set_opt_enabled("ifconv", firm_opt.if_conversion);
set_opt_enabled("bool", firm_opt.bool_opt);
+ set_opt_enabled("end-melt", firm_opt.end_melt);
set_opt_enabled("inline", firm_opt.do_inline);
set_opt_enabled("clone", firm_opt.cloning);
set_opt_enabled("combo", firm_opt.combo);
}
do_irg_opt(irg, "bool");
+ do_irg_opt(irg, "end-melt");
do_irg_opt(irg, "stred");
do_irg_opt(irg, "local");
do_irg_opt(irg, "dead");
DEFTIMEVAR(TV_CGANA , "cgana", "Firm: CG analysis")
DEFTIMEVAR(TV_CONFIRM_CREATE , "confirm", "Firm: Confirm creation")
DEFTIMEVAR(TV_SCALAR_REPLACE , "scalar", "Firm: scalar replace")
+DEFTIMEVAR(TV_END_MELT , "end-melt", "Firm: melting end blocks")
DEFTIMEVAR(TV_OPT , "other", "Firm: other opt")
DEFTIMEVAR(TV_VERIFY , "verify", "Firm: verify pass")
DEFTIMEVAR(TV_LOWER , "lower", "Firm: lowering")