X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=driver%2Ffirm_opt.c;h=7b0e3a6be6bd8e6689e6ecd08b81426dbe709195;hb=ad9efc39590fd07051ef6dacbeb52bbbdddfc90e;hp=12ee99a0e6cf69a43ab961e5f754ae15e290be07;hpb=5d366ed97efa8a3080174730ec15e66e8454a76c;p=cparser diff --git a/driver/firm_opt.c b/driver/firm_opt.c index 12ee99a..7b0e3a6 100644 --- a/driver/firm_opt.c +++ b/driver/firm_opt.c @@ -19,6 +19,7 @@ #include "firm_codegen.h" #include "firm_cmdline.h" #include "firm_timing.h" +#include "ast2firm.h" #ifdef _WIN32 #define snprintf _snprintf @@ -331,7 +332,7 @@ static void do_stred(ir_graph *irg) static void do_inline(void) { - inline_functions(500, 50); + inline_functions(firm_opt.inline_maxsize, firm_opt.inline_threshold); } static void do_cloning(void) @@ -387,6 +388,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, "shape-blocks",(func_ptr_t) shape_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 }, @@ -479,6 +481,7 @@ static void do_firm_optimizations(const char *input_filename) set_opt_scalar_replacement(firm_opt.scalar_replace); set_opt_auto_create_sync(firm_opt.auto_sync); set_opt_alias_analysis(firm_opt.alias_analysis); + set_opt_combo(firm_opt.combo); aa_opt = aa_opt_no_opt; if (firm_opt.strict_alias) @@ -504,6 +507,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("shape-blocks", firm_opt.shape_blocks); set_opt_enabled("inline", firm_opt.do_inline); set_opt_enabled("clone", firm_opt.cloning); set_opt_enabled("combo", firm_opt.combo); @@ -534,12 +538,6 @@ static void do_firm_optimizations(const char *input_filename) for (i = 0; i < get_irp_n_irgs(); i++) { ir_graph *irg = get_irp_irg(i); -#ifdef FIRM_EXT_GRS - /* If SIMD optimization is on, make sure we have only 1 return */ - if (firm_ext_grs.create_pattern || firm_ext_grs.simd_opt) - do_irg_opt("onereturn"); -#endif - do_irg_opt(irg, "scalar"); do_irg_opt(irg, "local"); do_irg_opt(irg, "reassoc"); @@ -560,7 +558,6 @@ static void do_firm_optimizations(const char *input_filename) do_irg_opt(irg, "lower"); do_irg_opt(irg, "deconv"); do_irg_opt(irg, "condeval"); - do_irg_opt(irg, "lower_switch"); do_irg_opt(irg, "remove_confirms"); do_irg_opt(irg, "gvnpre"); do_irg_opt(irg, "place"); @@ -573,6 +570,8 @@ static void do_firm_optimizations(const char *input_filename) } do_irg_opt(irg, "bool"); + do_irg_opt(irg, "shape-blocks"); + do_irg_opt(irg, "lower_switch"); do_irg_opt(irg, "stred"); do_irg_opt(irg, "local"); do_irg_opt(irg, "dead"); @@ -797,21 +796,14 @@ static void do_firm_lowering(const char *input_filename) { int i; - /* do class lowering and vtbl creation */ -// lower_classes_to_struct("vtbl", "m"); - -#if 0 - timer_push(TV_LOWER); - lower_highlevel(); - timer_pop(); -#endif - if (firm_opt.lower_ll) { lwrdw_param_t init = { 1, 1, - mode_Ls, mode_Lu, - mode_Is, mode_Iu, + get_atomic_mode(ATOMIC_TYPE_LONGLONG), + get_atomic_mode(ATOMIC_TYPE_ULONGLONG), + get_atomic_mode(ATOMIC_TYPE_INT), + get_atomic_mode(ATOMIC_TYPE_UINT), def_create_intrinsic_fkt, NULL }; @@ -917,13 +909,6 @@ void gen_firm_init(void) params.cc_mask = 0; /* no regparam, cdecl */ params.builtin_dbg = NULL; - #ifdef FIRM_EXT_GRS - /* Activate Graph rewriting if SIMD optimization is turned on */ - /* This has to be done before init_firm() is called! */ - if (firm_ext_grs.simd_opt) - ext_grs_activate(); -#endif - init_firm(¶ms); if (firm_be_opt.selection == BE_FIRM_BE) { @@ -941,23 +926,9 @@ void gen_firm_init(void) if (be_params->has_imm_fp_mode) firm_imm_fp_mode = be_params->imm_fp_mode; } - /* OS option must be set to the backend */ - switch (firm_opt.os_support) { - case OS_SUPPORT_MINGW: - firm_be_option("ia32-gasmode=mingw"); - break; - case OS_SUPPORT_MACHO: - firm_be_option("ia32-gasmode=macho"); - break; - case OS_SUPPORT_LINUX: - default: - firm_be_option("ia32-gasmode=linux"); - break; - } dbg_init(NULL, NULL, dbg_snprint); edges_init_dbg(firm_opt.vrfy_edges); - //cbackend_set_debug_retrieve(dbg_retrieve); set_opt_precise_exc_context(firm_opt.precise_exc); set_opt_fragile_ops(firm_opt.fragile_ops); @@ -1092,23 +1063,6 @@ void gen_firm_finish(FILE *out, const char *input_filename, int c_mode, int new_ for (i = get_irp_n_irgs() - 1; i >= 0; --i) set_irg_phase_low(get_irp_irg(i)); - -#ifdef FIRM_EXT_GRS - /** SIMD Optimization Extensions **/ - - /* Pattern creation step. No code has to be generated, so - exit after pattern creation */ - if (firm_ext_grs.create_pattern) { - ext_grs_create_pattern(); - exit(0); - } - - /* SIMD optimization step. Uses graph patterns to find - rich instructions and rewrite */ - if (firm_ext_grs.simd_opt) - ext_grs_simd_opt(); -#endif - if (firm_dump.statistic & STAT_FINAL_IR) stat_dump_snapshot(input_filename, "final-ir"); @@ -1118,18 +1072,14 @@ void gen_firm_finish(FILE *out, const char *input_filename, int c_mode, int new_ if (firm_dump.statistic & STAT_FINAL) stat_dump_snapshot(input_filename, "final"); - -#if 0 - if (firm_opt.ycomp_dbg) - firm_finish_ycomp_debugger(); -#endif -} /* gen_firm_finish */ +} /** * Do very early initializations */ -void firm_early_init(void) { +void firm_early_init(void) +{ /* arg: need this here for command line options */ be_opt_register(); firm_init_options(NULL, 0, NULL); -} /* firm_early_init */ +}