2 * This file is part of libFirm.
3 * Copyright (C) 2012 University of Karlsruhe.
8 * @brief Flags to control optimizations.
9 * @author Michael Beck, Sebastian Hack
17 #include "firm_common.h"
21 /* DISABLE - don't do this optimization
22 ENABLE - lets see, if there is a better graph */
26 #define FLAG(name, value, def) (irf_##name & def) |
27 #define E_FLAG(name, value, def) FLAG(name, value, def)
28 #define I_FLAG(name, value, def) FLAG(name, value, def)
29 #define R_FLAG(name, value)
31 optimization_state_t libFIRM_opt =
32 #include "irflag_t.def"
40 optimization_state_t libFIRM_running = 0;
42 optimization_state_t libFIRM_verb = 0;
44 void set_opt_optimize(int value);
46 /* an external flag can be set and get from outside */
47 #define E_FLAG(name, value, def) \
48 void set_opt_##name(int flag) { \
49 if (flag) libFIRM_opt |= irf_##name; \
50 else libFIRM_opt &= ~irf_##name; \
52 int (get_opt_##name)(void) { \
53 return get_opt_##name##_(); \
56 /* an internal flag can only be set from outside */
57 #define I_FLAG(name, value, def) \
58 void set_opt_##name(int flag) { \
59 if (flag) libFIRM_opt |= irf_##name; \
60 else libFIRM_opt &= ~irf_##name; \
63 #define R_FLAG(name, value)
66 #include "irflag_t.def"
72 void set_optimize(int value)
74 set_opt_optimize(value);
77 int (get_optimize)(void)
79 return get_opt_optimize();
82 void save_optimization_state(optimization_state_t *state)
87 void restore_optimization_state(const optimization_state_t *state)
92 void all_optimizations_off(void)
98 void firm_show_flags(FILE *f)
102 printf("Firm optimization state:\n");
103 #define E_FLAG(name, value, def) printf(" %-20s = %s\n", #name, get_opt_##name() ? "ON" : "OFF");
104 #define I_FLAG(name, value, def) printf(" %-20s = %s\n", #name, get_opt_##name() ? "ON" : "OFF");
105 #define R_FLAG(name, value) printf(" %-20s = %s\n", #name, is_##name##_running() ? "is running" : "not running");
106 #include "irflag_t.def"
114 static const lc_opt_table_entry_t firm_flags[] = {
115 #define I_FLAG(name, val, def) LC_OPT_ENT_BIT(#name, #name, &libFIRM_opt, (1 << val)),
116 #define E_FLAG(name, val, def) LC_OPT_ENT_BIT(#name, #name, &libFIRM_opt, (1 << val)),
117 #define R_FLAG(name, val)
118 #include "irflag_t.def"
125 void firm_init_flags(void)
127 lc_opt_entry_t *grp = lc_opt_get_grp(firm_opt_get_root(), "opt");
128 lc_opt_add_table(grp, firm_flags);
131 firm_verification_t opt_do_node_verification = FIRM_VERIFICATION_ON;
133 void do_node_verification(firm_verification_t mode)
135 opt_do_node_verification = mode;