X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=driver%2Ffirm_opt.c;h=174a34a99757f3b5620252201efd3e3adec475ab;hb=2c26c7a7885635fc12bda81d06b334f9726a70df;hp=65571a14bbf5d14e3fca6aaf5fe2a97089f55f9d;hpb=18e875f4a36f2db033a1b991dd0485a132e0c395;p=cparser diff --git a/driver/firm_opt.c b/driver/firm_opt.c index 65571a1..174a34a 100644 --- a/driver/firm_opt.c +++ b/driver/firm_opt.c @@ -199,20 +199,6 @@ static void do_lower_mux(ir_graph *irg) lower_mux(irg, NULL); } -static void do_lower_for_target(void) -{ - int i; - const backend_params *be_params = be_get_backend_param(); - be_params->lower_for_target(); - - /* set the phase to low */ - for (i = get_irp_n_irgs() - 1; i >= 0; --i) { - ir_graph *irg = get_irp_irg(i); - set_irg_phase_state(irg, phase_low); - } - set_irp_phase_state(phase_low); -} - static void do_vrp(ir_graph *irg) { set_vrp_data(irg); @@ -281,7 +267,7 @@ static opt_config_t opts[] = { IRG("vrp", do_vrp, "value range propagation", OPT_FLAG_NONE), IRP("inline", do_inline, "inlining", OPT_FLAG_NONE), IRP("lower-const", lower_const_code, "lowering of constant code", OPT_FLAG_HIDE_OPTIONS | OPT_FLAG_NO_DUMP | OPT_FLAG_NO_VERIFY | OPT_FLAG_ESSENTIAL), - IRP("target-lowering", do_lower_for_target, "lowering necessary for target architecture", OPT_FLAG_HIDE_OPTIONS | OPT_FLAG_ESSENTIAL), + IRP("target-lowering", be_lower_for_target, "lowering necessary for target architecture", OPT_FLAG_HIDE_OPTIONS | OPT_FLAG_ESSENTIAL), IRP("opt-func-call", do_optimize_funccalls, "function call optimization", OPT_FLAG_NONE), IRP("opt-proc-clone", do_cloning, "procedure cloning", OPT_FLAG_NONE), IRP("remove-unused", garbage_collect_entities, "removal of unused functions/variables", OPT_FLAG_NO_DUMP | OPT_FLAG_NO_VERIFY), @@ -409,6 +395,7 @@ static void enable_safe_defaults(void) set_opt_enabled("combo", true); set_opt_enabled("invert-loops", true); set_opt_enabled("target-lowering", true); + set_opt_enabled("rts", true); } /** @@ -418,7 +405,7 @@ static void enable_safe_defaults(void) */ static void do_firm_optimizations(const char *input_filename) { - int i; + size_t i; unsigned aa_opt; set_opt_alias_analysis(firm_opt.alias_analysis); @@ -432,7 +419,6 @@ static void do_firm_optimizations(const char *input_filename) set_irp_memory_disambiguator_options(aa_opt); /* parameter passing code should set them directly sometime... */ - set_opt_enabled("rts", !firm_opt.freestanding); set_opt_enabled("gcse", firm_opt.gcse); set_opt_enabled("place", !firm_opt.gcse); set_opt_enabled("confirm", firm_opt.confirm); @@ -552,6 +538,17 @@ static void do_firm_lowering(const char *input_filename) { int i; + /* enable architecture dependent optimizations */ + arch_dep_set_opts((arch_dep_opts_t) + ((firm_opt.muls ? arch_dep_mul_to_shift : arch_dep_none) | + (firm_opt.divs ? arch_dep_div_by_const : arch_dep_none) | + (firm_opt.mods ? arch_dep_mod_by_const : arch_dep_none) )); + for (i = get_irp_n_irgs() - 1; i >= 0; --i) { + ir_graph *irg = get_irp_irg(i); + do_irg_opt(irg, "reassociation"); + do_irg_opt(irg, "local"); + } + do_irp_opt("target-lowering"); if (firm_dump.statistic & STAT_AFTER_LOWER) @@ -560,19 +557,6 @@ static void do_firm_lowering(const char *input_filename) if (firm_opt.enabled) { timer_start(t_all_opt); - /* run reassociation first on all graphs BEFORE the architecture - dependent optimizations are enabled */ - for (i = get_irp_n_irgs() - 1; i >= 0; --i) { - ir_graph *irg = get_irp_irg(i); - do_irg_opt(irg, "reassociation"); - } - - /* enable architecture dependent optimizations */ - arch_dep_set_opts((arch_dep_opts_t) - ((firm_opt.muls ? arch_dep_mul_to_shift : arch_dep_none) | - (firm_opt.divs ? arch_dep_div_by_const : arch_dep_none) | - (firm_opt.mods ? arch_dep_mod_by_const : arch_dep_none) )); - for (i = get_irp_n_irgs() - 1; i >= 0; --i) { ir_graph *irg = get_irp_irg(i);