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_WIN32, /**< create code for MinGW WIN32 */
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 reassoc; /**< enable reassociation */
33 a_byte cse; /**< enable common-subexpression elimination */
34 a_byte control_flow; /**< enable control flow optimizations */
35 a_byte code_place; /**< enable global common-subexpression elimination
37 a_byte gvn_pre; /**< enable global common-subexpression elimination
38 and partial redundancy elimination */
39 a_byte cond_eval; /**< enable condition evaluation */
40 a_byte if_conversion; /**< enable if-conversion */
41 a_byte func_calls; /**< enable function call optimization */
42 a_byte do_inline; /**< do automatic inlining */
43 a_byte auto_inline; /**< current automatic inlining state */
44 a_byte tail_rec; /**< tail recursion optimization */
45 a_byte strength_red; /**< enable strength reduction */
46 a_byte scalar_replace; /**< enable scalar replacement */
47 a_byte confirm; /**< enable Confirm optimization */
48 a_byte muls; /**< enable architecture dependent mul optimization */
49 a_byte divs; /**< enable architecture dependent div optimization */
50 a_byte mods; /**< enable architecture dependent mod optimization */
51 a_byte fragile_ops; /**< enable fragile ops optimization */
52 a_byte load_store; /**< enable load store optimization */
53 a_byte modes; /**< enable integer mode optimizations */
54 a_byte precise_exc; /**< use precise exception context */
55 a_byte use_DivMod; /**< use DivMod nodes */
56 a_byte remove_unused; /**< remove unused functions */
57 a_byte jmp_tbls; /**< create jump table for switch */
58 a_byte cloning; /**< enable procedure cloning */
59 a_byte auto_sync; /**< automatically create Sync nodes */
60 a_byte alias_analysis; /**< enable Alias Analysis */
61 a_byte strict_alias; /**< enable strict Alias Analysis (using type based AA) */
62 a_byte no_alias; /**< no aliasing possible. */
63 a_byte luffig; /**< enable fluffy load/store optimization */
64 a_byte deconv; /**< enable conv node optimization */
65 a_byte cc_opt; /**< optimize calling conventions */
66 a_byte bool_opt; /**< perform bool simplification */
67 a_byte freestanding; /**< if set, freestanding mode is enabled */
68 a_byte fp_model; /**< fp model */
69 a_byte lower_ll; /**< lower double word access */
70 a_byte vrfy; /**< Firm verifier setting */
71 a_byte check_all; /**< enable checking all Firm phases */
72 a_byte lower; /**< enable Firm lowering */
73 a_byte os_support; /**< current os support */
74 a_byte honor_restrict; /**< enable restrict keyword */
75 a_byte lower_bitfields; /**< lower bitfield access */
76 a_byte pic; /**< generate position independent code */
77 a_byte ycomp_dbg; /**< yComp debugger extension */
78 char *ycomp_host; /**< The host, yComp is running on */
79 int ycomp_port; /**< The port, yComp is listening on */
80 int clone_threshold; /**< The threshold value for procedure cloning. */
81 a_byte vrfy_edges; /**< verify edges */
83 a_byte grs_create_pattern;
84 unsigned spare_size; /**< allowed spare size for table switches in machine words. */
87 /** statistic options */
88 typedef enum a_firmstat_selection_tag {
89 STAT_NONE = 0x00000000,
90 STAT_BEFORE_OPT = 0x00000001,
91 STAT_AFTER_OPT = 0x00000002,
92 STAT_AFTER_LOWER = 0x00000004,
93 STAT_FINAL_IR = 0x00000008,
94 STAT_FINAL = 0x00000010,
95 } a_firmstat_selection;
97 /* backend selection */
98 typedef enum a_backend_selection_tag {
99 BE_NONE = 0, /**< no backend */
100 BE_FIRM_BE = 1, /**< Use Firm internal backend facility. */
101 BE_FIRM2C = 2 /**< Use generic Firm2C backend */
102 } a_backend_selection;
104 /* dumping options */
106 a_byte debug_print; /**< enable debug print */
107 a_byte all_types; /**< dump the All_types graph */
108 a_byte no_blocks; /**< dump non-blocked graph */
109 a_byte extbb; /**< dumps extended basic blocks */
110 a_byte ir_graph; /**< dump all graphs */
111 a_byte all_phases; /**< dump the IR graph after all phases */
112 a_byte edge_labels; /**< use edge labels when dumping IR graphs */
113 a_byte statistic; /**< Firm statistic setting */
114 a_byte stat_pattern; /**< enable Firm statistic pattern */
115 a_byte stat_dag; /**< enable Firm DAG statistic */
116 a_byte gen_firm_asm; /**< generate Firm assembler and exit */
117 char *filter; /**< the dump filter */
120 struct a_firm_be_opt {
126 struct a_firm_ext_grs {
127 a_byte simd_opt; /**< enable graph based SIMD optimization */
128 a_byte create_pattern; /**< enable pattern creation for SIMD opts */
133 extern struct a_firm_be_opt firm_be_opt;
134 extern struct a_firm_opt firm_opt;
135 extern struct a_firm_dump firm_dump;
136 extern struct a_firm_ext_grs firm_ext_grs;
140 * prints the firm version number
142 void print_firm_version(FILE *f);
145 * called by the generic command line parser
146 * to handle the --firm= or -f options
148 int firm_option(const char *opt);
151 * called by the generic command line parser
152 * to handle the --backend= or -b options
154 int firm_be_option(const char *opt);
156 #endif /* FIRM_CMDLINE_H */