/* precise_exc = */ FALSE, /* never needed for C */
/* use_DivMod = */ FALSE,
/* remove_unused = */ TRUE,
/* precise_exc = */ FALSE, /* never needed for C */
/* use_DivMod = */ FALSE,
/* remove_unused = */ TRUE,
/* cloning = */ FALSE,
/* auto_sync = */ TRUE,
/* alias_analysis = */ TRUE,
/* strict_alias = */ FALSE,
/* no_alias = */ FALSE,
/* cloning = */ FALSE,
/* auto_sync = */ TRUE,
/* alias_analysis = */ TRUE,
/* strict_alias = */ FALSE,
/* no_alias = */ FALSE,
/* freestanding; = */ FALSE,
/* fp_model = */ fp_model_precise,
/* lower_ll = */ FALSE,
/* vrfy = */ FIRM_VERIFICATION_ON,
/* check_all = */ FALSE,
/* lower = */ TRUE,
/* freestanding; = */ FALSE,
/* fp_model = */ fp_model_precise,
/* lower_ll = */ FALSE,
/* vrfy = */ FIRM_VERIFICATION_ON,
/* check_all = */ FALSE,
/* lower = */ TRUE,
/* honor_restrict = */ TRUE,
/* lower_bitfields = */ TRUE,
/* honor_restrict = */ TRUE,
/* lower_bitfields = */ TRUE,
/* ycomp_dbg = */ FALSE,
/* ycomp_host = */ FIRM_YCOMP_DEFAULT_HOST,
/* ycomp_port = */ FIRM_YCOMP_DEFAULT_PORT,
/* clone_threshold = */ DEFAULT_CLONE_THRESHOLD,
/* ycomp_dbg = */ FALSE,
/* ycomp_host = */ FIRM_YCOMP_DEFAULT_HOST,
/* ycomp_port = */ FIRM_YCOMP_DEFAULT_PORT,
/* clone_threshold = */ DEFAULT_CLONE_THRESHOLD,
/* vrfy_edges = */ FALSE,
/* grs_simd_opt = */ 0,
/* grs_create_pattern = */ 0,
/* vrfy_edges = */ FALSE,
/* grs_simd_opt = */ 0,
/* grs_create_pattern = */ 0,
{ X("help"), NULL, 0, "print FCC related help options" },
/* firm optimization options */
{ X("help"), NULL, 0, "print FCC related help options" },
/* firm optimization options */
{ X("g0"), &firm_opt.debug_mode, DBG_MODE_BACKSTORE, "firm: Debug Mode: use back stores" },
{ X("g1"), &firm_opt.debug_mode, DBG_MODE_FULL, "firm: Debug Mode: no register variables" },
{ X("no-opt"), NULL, 0, "firm: disable all FIRM optimizations" },
{ X("g0"), &firm_opt.debug_mode, DBG_MODE_BACKSTORE, "firm: Debug Mode: use back stores" },
{ X("g1"), &firm_opt.debug_mode, DBG_MODE_FULL, "firm: Debug Mode: no register variables" },
{ X("no-opt"), NULL, 0, "firm: disable all FIRM optimizations" },
{ X("no-const-fold"), &firm_opt.const_folding, 0, "firm: disable constant folding" },
{ X("control_flow"), &firm_opt.control_flow, 1, "firm: enable control flow optimization" },
{ X("no-control-flow"), &firm_opt.control_flow, 0, "firm: disable control flow optimization" },
{ X("no-const-fold"), &firm_opt.const_folding, 0, "firm: disable constant folding" },
{ X("control_flow"), &firm_opt.control_flow, 1, "firm: enable control flow optimization" },
{ X("no-control-flow"), &firm_opt.control_flow, 0, "firm: disable control flow optimization" },
- { X("code-place"), &firm_opt.code_place, 1, "firm: enable GCSE and code placement" },
- { X("no-code-place"), &firm_opt.code_place, 0, "firm: disable GCSE and code placement" },
+ { X("combo"), &firm_opt.combo, 1, "firm: enable combined CCE, UCE and GVN" },
+ { X("no-combo"), &firm_opt.combo, 0, "firm: disable combined CCE, UCE and GVN" },
+ { X("gcse"), &firm_opt.gcse, 1, "firm: enable global common subexpression elimination" },
+ { X("no-gcse"), &firm_opt.gcse, 0, "firm: disable global common subexpression elimination" },
{ X("gvn-pre"), &firm_opt.gvn_pre, 1, "firm: enable GVN partial redundancy elimination" },
{ X("no-gvn-pre"), &firm_opt.gvn_pre, 0, "firm: disable GVN partial redundancy elimination" },
{ X("cond-eval"), &firm_opt.cond_eval, 1, "firm: enable partial condition evaluation optimization" },
{ X("gvn-pre"), &firm_opt.gvn_pre, 1, "firm: enable GVN partial redundancy elimination" },
{ X("no-gvn-pre"), &firm_opt.gvn_pre, 0, "firm: disable GVN partial redundancy elimination" },
{ X("cond-eval"), &firm_opt.cond_eval, 1, "firm: enable partial condition evaluation optimization" },
{ X("no-reassociation"), &firm_opt.reassoc, 0, "firm: disable reassociation" },
{ X("inline"), &firm_opt.do_inline, 1, "firm: enable FIRM inlining" },
{ X("no-inline"), &firm_opt.do_inline, 0, "firm: disable FIRM inlining" },
{ X("no-reassociation"), &firm_opt.reassoc, 0, "firm: disable reassociation" },
{ X("inline"), &firm_opt.do_inline, 1, "firm: enable FIRM inlining" },
{ X("no-inline"), &firm_opt.do_inline, 0, "firm: disable FIRM inlining" },
+ { X("inline-max-size=<size>"), NULL, 0, "firm: set maximum size for function inlining" },
+ { X("inline-threshold=<size>"),NULL, 0, "firm: set benefice threshold for function inlining" },
{ X("tail-rec"), &firm_opt.tail_rec, 1, "firm: enable tail-recursion optimization" },
{ X("no-tail-rec"), &firm_opt.tail_rec, 0, "firm: disable tail-recursion optimization" },
{ X("strength-red"), &firm_opt.strength_red, 1, "firm: enable strength reduction for loops" },
{ X("tail-rec"), &firm_opt.tail_rec, 1, "firm: enable tail-recursion optimization" },
{ X("no-tail-rec"), &firm_opt.tail_rec, 0, "firm: disable tail-recursion optimization" },
{ X("strength-red"), &firm_opt.strength_red, 1, "firm: enable strength reduction for loops" },
{ X("no-scalar-replace"), &firm_opt.scalar_replace, 0, "firm: disable scalar replacement" },
{ X("confirm"), &firm_opt.confirm, 1, "firm: enable Confirm optimization" },
{ X("no-confirm"), &firm_opt.confirm, 0, "firm: disable Confirm optimization" },
{ X("no-scalar-replace"), &firm_opt.scalar_replace, 0, "firm: disable scalar replacement" },
{ X("confirm"), &firm_opt.confirm, 1, "firm: enable Confirm optimization" },
{ X("no-confirm"), &firm_opt.confirm, 0, "firm: disable Confirm optimization" },
- { X("opt-mul"), &firm_opt.muls, 0, "firm: enable multiplication optimization" },
+ { X("opt-mul"), &firm_opt.muls, 1, "firm: enable multiplication optimization" },
{ X("no-opt-mul"), &firm_opt.muls, 0, "firm: disable multiplication optimization" },
{ X("no-opt-mul"), &firm_opt.muls, 0, "firm: disable multiplication optimization" },
- { X("opt-div"), &firm_opt.divs, 0, "firm: enable division optimization" },
+ { X("opt-div"), &firm_opt.divs, 1, "firm: enable division optimization" },
{ X("no-opt-div"), &firm_opt.divs, 0, "firm: disable division optimization" },
{ X("no-opt-div"), &firm_opt.divs, 0, "firm: disable division optimization" },
- { X("opt-mod"), &firm_opt.mods, 0, "firm: enable remainder optimization" },
+ { X("opt-mod"), &firm_opt.mods, 1, "firm: enable remainder optimization" },
{ X("no-opt-mod"), &firm_opt.mods, 0, "firm: disable remainder optimization" },
{ X("opt-fragile-ops"), &firm_opt.fragile_ops, 1, "firm: enable fragile ops optimization" },
{ X("no-opt-fragile-ops"), &firm_opt.fragile_ops, 0, "firm: disable fragile ops optimization" },
{ X("no-opt-mod"), &firm_opt.mods, 0, "firm: disable remainder optimization" },
{ X("opt-fragile-ops"), &firm_opt.fragile_ops, 1, "firm: enable fragile ops optimization" },
{ X("no-opt-fragile-ops"), &firm_opt.fragile_ops, 0, "firm: disable fragile ops optimization" },
{ X("no-opt-load-store"), &firm_opt.load_store, 0, "firm: disable load store optimization" },
{ X("opt-modes"), &firm_opt.modes, 1, "firm: optimize integer modes" },
{ X("no-opt-modes"), &firm_opt.modes, 0, "firm: disable integer modes optimization" },
{ X("no-opt-load-store"), &firm_opt.load_store, 0, "firm: disable load store optimization" },
{ X("opt-modes"), &firm_opt.modes, 1, "firm: optimize integer modes" },
{ X("no-opt-modes"), &firm_opt.modes, 0, "firm: disable integer modes optimization" },
- { X("jmptbls"), &firm_opt.jmp_tbls, 1, "firm: create jump table for switch" },
- { X("no-jmptbls"), &firm_opt.jmp_tbls, 0, "firm: do not create jump table for switch" },
{ X("sync"), &firm_opt.auto_sync, 1, "firm: automatically create Sync nodes" },
{ X("no-sync"), &firm_opt.auto_sync, 0, "firm: do not create Sync nodes" },
{ X("opt-alias"), &firm_opt.alias_analysis, 1, "firm: enable alias analysis" },
{ X("sync"), &firm_opt.auto_sync, 1, "firm: automatically create Sync nodes" },
{ X("no-sync"), &firm_opt.auto_sync, 0, "firm: do not create Sync nodes" },
{ X("opt-alias"), &firm_opt.alias_analysis, 1, "firm: enable alias analysis" },
{ X("fp-precise"), &firm_opt.fp_model, fp_model_precise, "firm: precise fp model" },
{ X("fp-fast"), &firm_opt.fp_model, fp_model_fast, "firm: fast fp model" },
{ X("fp-strict"), &firm_opt.fp_model, fp_model_strict, "firm: strict fp model" },
{ X("fp-precise"), &firm_opt.fp_model, fp_model_precise, "firm: precise fp model" },
{ X("fp-fast"), &firm_opt.fp_model, fp_model_fast, "firm: fast fp model" },
{ X("fp-strict"), &firm_opt.fp_model, fp_model_strict, "firm: strict fp model" },
- { X("luffig"), &firm_opt.luffig, 1, "firm: enable the fluffy load/store optimization" },
- { X("no-luffig"), &firm_opt.luffig, 0, "firm: disable the fluffy load/store optimization" },
+ { X("sync"), &firm_opt.sync, 1, "firm: use Syncs to remove unnecessary memory dependencies" },
+ { X("no-sync"), &firm_opt.sync, 0, "firm: do not use Syncs to remove unnecessary memory dependencies" },
{ X("deconv"), &firm_opt.deconv, 1, "firm: enable the conv node optimization" },
{ X("no-deconv"), &firm_opt.deconv, 0, "firm: disable the conv node optimization" },
{ X("opt-cc"), &firm_opt.cc_opt, 1, "firm: enable calling conventions optimization" },
{ 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("deconv"), &firm_opt.deconv, 1, "firm: enable the conv node optimization" },
{ X("no-deconv"), &firm_opt.deconv, 0, "firm: disable the conv node optimization" },
{ X("opt-cc"), &firm_opt.cc_opt, 1, "firm: enable calling conventions optimization" },
{ 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" },
{ X("freestanding"), &firm_opt.freestanding, 1, "firm: freestanding environment" },
{ X("hosted"), &firm_opt.freestanding, 0, "firm: hosted environment" },
{ X("stat-pattern"), &firm_dump.stat_pattern, 1, "misc: Firm statistic calculates most used pattern" },
{ X("stat-dag"), &firm_dump.stat_dag, 1, "misc: Firm calculates DAG statistics" },
{ X("firm-asm"), &firm_dump.gen_firm_asm, 1, "misc: output Firm assembler" },
{ X("stat-pattern"), &firm_dump.stat_pattern, 1, "misc: Firm statistic calculates most used pattern" },
{ X("stat-dag"), &firm_dump.stat_dag, 1, "misc: Firm calculates DAG statistics" },
{ X("firm-asm"), &firm_dump.gen_firm_asm, 1, "misc: output Firm assembler" },
- { X("win32"), &firm_opt.os_support, OS_SUPPORT_MINGW, "misc: generate MinGW code" },
+ { X("win32"), &firm_opt.os_support, OS_SUPPORT_MINGW, "misc: generate MinGW Win32 code" },
+ { X("mac"), &firm_opt.os_support, OS_SUPPORT_MACHO, "misc: generate MacOS code" },
+ { X("linux"), &firm_opt.os_support, OS_SUPPORT_LINUX, "misc: generate Linux-ELF code" },
{ X("ycomp"), &firm_opt.ycomp_dbg, 1, "misc: enable yComp debugger extension" },
{ X("ycomp-host=<hostname>"), NULL, 0, "misc: yComp host" },
{ X("ycomp-port=<port>"), NULL, 0, "misc: yComp port" },
{ X("ycomp"), &firm_opt.ycomp_dbg, 1, "misc: enable yComp debugger extension" },
{ X("ycomp-host=<hostname>"), NULL, 0, "misc: yComp host" },
{ X("ycomp-port=<port>"), NULL, 0, "misc: yComp port" },
firm_opt.gvn_pre = FALSE;
firm_opt.cond_eval = FALSE;
firm_opt.if_conversion = FALSE;
firm_opt.gvn_pre = FALSE;
firm_opt.cond_eval = FALSE;
firm_opt.if_conversion = FALSE;
firm_opt.alias_analysis = FALSE;
firm_opt.strict_alias = FALSE;
firm_opt.no_alias = FALSE;
firm_opt.alias_analysis = FALSE;
firm_opt.strict_alias = FALSE;
firm_opt.no_alias = FALSE;
+ else if (strncmp("inline-max-size=", opt, 16) == 0) {
+ sscanf(&opt[16], "%u", &firm_opt.inline_maxsize);
+ return 1;
+ }
+ else if (strncmp("inline-threshold=", opt, 17) == 0) {
+ sscanf(&opt[17], "%u", &firm_opt.inline_threshold);
+ return 1;
+ }
-#ifdef FIRM_BACKEND
- /* OS option must be set to the backend */
- else if (firm_options[i].flag == &firm_opt.os_support)
- firm_be_option(firm_opt.os_support == OS_SUPPORT_MINGW ?
- "ia32-gasmode=mingw" : "ia32-gasmode=linux");
-#endif /* FIRM_BACKEND */
firm_get_version(&version);
fprintf(f, "Firm C-Compiler using libFirm (%u.%u", version.major, version.minor);
firm_get_version(&version);
fprintf(f, "Firm C-Compiler using libFirm (%u.%u", version.major, version.minor);
- fputs(")\n", f);
- fprintf(f, "(C) 2006-2007 Michael Beck\n"
- "(C) 1995-2007 University of Karlsruhe\n"
+ fprintf(f, "}\n"
+ "(C) 2005-2008 Michael Beck\n"
+ "(C) 1995-2008 University of Karlsruhe\n"