2 * @file firm_cmdline.h -- Additional Firm generating backend parameters
4 * Generates Firm fro the IL. It works with both C++ and C programs.
6 * Compile with STANDALONE_CP_FIRM_BE defined and BACK_END_IS_CP_FIRM_BE
7 * defined as 1 to get a main program back end. Otherwise, a version to be
8 * called in the same program as the front end is produced (if needed).
10 #ifndef FIRM_CMDLINE_H
11 #define FIRM_CMDLINE_H
13 #include "fe_common.h"
16 OS_SUPPORT_LINUX, /**< create code for Linux OS */
17 OS_SUPPORT_MINGW, /**< create code for MinGW WIN32 */
18 OS_SUPPORT_MACHO /**< create code for MacOS Mach-O */
22 DBG_MODE_NONE = 0, /**< no special debug support */
23 DBG_MODE_BACKSTORE = 1, /**< backstores are created */
24 DBG_MODE_FULL = 2, /**< no register valiables */
27 /* optimization settings */
29 a_byte enabled; /**< enable all optimizations */
30 a_byte debug_mode; /**< debug mode: store all local variables */
31 a_byte const_folding; /**< enable constant folding */
32 a_byte cse; /**< enable common-subexpression elimination */
33 a_byte gcse; /**< enable global common-subexpression elimination */
34 a_byte confirm; /**< enable Confirm optimization */
35 a_byte muls; /**< enable architecture dependent mul optimization */
36 a_byte divs; /**< enable architecture dependent div optimization */
37 a_byte mods; /**< enable architecture dependent mod optimization */
38 a_byte alias_analysis; /**< enable Alias Analysis */
39 a_byte strict_alias; /**< enable strict Alias Analysis (using type based AA) */
40 a_byte no_alias; /**< no aliasing possible. */
41 a_byte cc_opt; /**< optimize calling conventions */
42 a_byte freestanding; /**< if set, freestanding mode is enabled */
43 a_byte fp_model; /**< fp model */
44 a_byte verify; /**< Firm verifier setting */
45 a_byte check_all; /**< enable checking all Firm phases */
46 a_byte lower; /**< enable Firm lowering */
47 a_byte os_support; /**< current os support */
48 a_byte honor_restrict; /**< enable restrict keyword */
49 a_byte lower_bitfields; /**< lower bitfield access */
50 a_byte pic; /**< generate position independent code */
51 int clone_threshold; /**< The threshold value for procedure cloning. */
52 unsigned inline_maxsize; /**< Maximum function size for inlining. */
53 unsigned inline_threshold;/**< Inlining benefice threshold. */
54 a_byte verify_edges; /**< verify edges */
56 a_byte grs_create_pattern;
57 a_byte enable_statev; /**< enable statev output */
58 char *statev_filter; /**< statev filter */
61 /** statistic options */
62 typedef enum a_firmstat_selection_tag {
63 STAT_NONE = 0x00000000,
64 STAT_BEFORE_OPT = 0x00000001,
65 STAT_AFTER_OPT = 0x00000002,
66 STAT_AFTER_LOWER = 0x00000004,
67 STAT_FINAL_IR = 0x00000008,
68 STAT_FINAL = 0x00000010,
69 } a_firmstat_selection;
71 /* backend selection */
72 typedef enum a_backend_selection_tag {
73 BE_NONE = 0, /**< no backend */
74 BE_FIRM_BE = 1, /**< Use Firm internal backend facility. */
75 BE_FIRM2C = 2 /**< Use generic Firm2C backend */
76 } a_backend_selection;
80 a_byte debug_print; /**< enable debug print */
81 a_byte all_types; /**< dump the All_types graph */
82 a_byte no_blocks; /**< dump non-blocked graph */
83 a_byte extbb; /**< dumps extended basic blocks */
84 a_byte ir_graph; /**< dump all graphs */
85 a_byte all_phases; /**< dump the IR graph after all phases */
86 a_byte statistic; /**< Firm statistic setting */
87 a_byte stat_pattern; /**< enable Firm statistic pattern */
88 a_byte stat_dag; /**< enable Firm DAG statistic */
89 char *filter; /**< the dump filter */
92 struct a_firm_be_opt {
98 struct a_firm_ext_grs {
99 a_byte simd_opt; /**< enable graph based SIMD optimization */
100 a_byte create_pattern; /**< enable pattern creation for SIMD opts */
105 extern struct a_firm_be_opt firm_be_opt;
106 extern struct a_firm_opt firm_opt;
107 extern struct a_firm_dump firm_dump;
108 extern struct a_firm_ext_grs firm_ext_grs;
110 void print_option_help(const char *name, const char *description);
113 * prints the firm version number
115 void print_firm_version(FILE *f);
118 * called by the generic command line parser
119 * to handle the --firm= or -f options
121 int firm_option(const char *opt);