- add option -end-melt
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Tue, 28 Oct 2008 15:54:18 +0000 (15:54 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Tue, 28 Oct 2008 15:54:18 +0000 (15:54 +0000)
[r23282]

driver/firm_cmdline.c
driver/firm_cmdline.h
driver/firm_opt.c
driver/firm_timing.def

index 2594908..d15e13f 100644 (file)
@@ -58,6 +58,7 @@ struct a_firm_opt firm_opt = {
   /* deconv          = */ FALSE,
   /* cc_opt          = */ TRUE,
   /* bool_opt        = */ FALSE,
+  /* end_melt        = */ FALSE,
   /* freestanding;   = */ FALSE,
   /* fp_model        = */ fp_model_precise,
   /* lower_ll        = */ FALSE,
@@ -198,6 +199,8 @@ static const struct params {
   { 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" },
 
@@ -323,6 +326,7 @@ static void disable_opts(void) {
   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 */
 
index ca676e3..7da2d8e 100644 (file)
@@ -63,6 +63,7 @@ struct a_firm_opt {
   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 */
index 50139c0..f7ef189 100644 (file)
@@ -387,6 +387,7 @@ static opt_config_t opts[] = {
        { 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 },
@@ -505,6 +506,7 @@ static void do_firm_optimizations(const char *input_filename)
   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);
@@ -574,6 +576,7 @@ static void do_firm_optimizations(const char *input_filename)
     }
 
     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");
index afce33a..e43899d 100644 (file)
@@ -29,6 +29,7 @@ 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")
 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")