Make some more inline functions
[libfirm] / ir / ir / irflag_t.h
1 /*
2  * Project:     libFIRM
3  * File name:   ir/ir/irgraph.c
4  * Purpose:     Flags to control optimizations, inline implementation.
5  * Author:      Michael Beck
6  * Created:
7  * CVS-ID:      $Id$
8  * Copyright:   (c) 1998-2004 Universität Karlsruhe
9  * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
10  */
11
12 /**
13  * @file irflag_t.h
14  *
15  * Inline implementation of Optimization flags.
16  *
17  * @author Michael Beck
18  */
19 #ifndef _IRFLAG_T_H_
20 #define _IRFLAG_T_H_
21
22 #include "irflag.h"
23
24 /**
25  * current libFIRM optimizations
26  */
27 typedef enum {
28   /** Common subexpression eliminations: Hash the nodes. */
29   OPT_CSE                                = 0x00000001,
30
31   /** Don't use block predecessor for comparison.
32    *  Default must be zero as code placement must
33    *  be run right after a local optimize walk with
34    *  opt_global_cse on. */
35   OPT_GLOBAL_CSE                         = 0x00000002,
36
37   /** Evaluate operations. */
38   OPT_CONSTANT_FOLDING                   = 0x00000004,
39
40   /** Bad node propagation. */
41   OPT_UNREACHABLE_CODE                   = 0x00000008,
42
43   /** */
44   OPT_CONTROL_FLOW_STRAIGHTENING         = 0x00000010,
45
46   /** */
47   OPT_CONTROL_FLOW_WEAK_SIMPLIFICATION   = 0x00000020,
48
49   /** */
50   OPT_CONTROL_FLOW_STRONG_SIMPLIFICATION = 0x00000040,
51
52   /** */
53   OPT_CRITICAL_EDGES                     = 0x00000080,
54
55   /** Reclaim memory. */
56   OPT_DEAD_NODE_ELIMINATION              = 0x00000100,
57
58   /** Reassociate nodes. */
59   OPT_REASSOCIATION                      = 0x00000200,
60
61   /** Do inlining transformation. */
62   OPT_INLINE                             = 0x00000400,
63
64   /** Remove dynamic method dispatch. */
65   OPT_DYN_METH_DISPATCH                  = 0x00000800,
66
67   /** Transformations that normalize the firm representation
68    *  as removing Ids and Tuples, useless Phis, SymConst(id) -> Const(entity) ...
69    */
70   OPT_NORMALIZE                          = 0x00001000,
71
72   /** Remove tail-recursion. */
73   OPT_TAIL_RECURSION                     = 0x00002000,
74
75   /** Free never called methods */
76   OPT_DEAD_METHOD_ELIMINATION            = 0x00004000,
77
78   /** precise exception context */
79   OPT_PRECISE_EXC_CONTEXT                = 0x00008000,
80
81
82   /** EMPTY SLOT !!! TO BE ASSIGNED */
83
84   /** Do Strength reduction */
85   OPT_STRENGTH_RED                       = 0x00020000,
86
87   /** Optimize Loads and Stores */
88   OPT_REDUNDANT_LOADSTORE                = 0x00040000,
89
90   /** Optimize Fragile OPs */
91   OPT_FRAGILE_OPS                        = 0x00080000,
92
93   /** Turn off all optimizations. */
94   OPT_OPTIMIZED                          = 0x40000000,
95
96 } libfirm_opts_t;
97
98 extern optimization_state_t libFIRM_opt;
99 extern optimization_state_t libFIRM_verb;
100
101 extern int firm_verbosity_level;
102
103
104 /** Returns constant folding optimization setting. */
105 static INLINE int _get_opt_cse(void)
106 {
107   return libFIRM_opt & OPT_CSE;
108 }
109
110 /** Returns constant subexpression elimination setting. */
111 static INLINE int get_opt_global_cse(void)
112 {
113   return libFIRM_opt & OPT_GLOBAL_CSE;
114 }
115
116 static INLINE int get_opt_strength_red(void)
117 {
118   return libFIRM_opt & OPT_STRENGTH_RED;
119 }
120
121 /** Returns verbosity for strength reduction.   */
122 static INLINE int get_opt_strength_red_verbose(void)
123 {
124   return libFIRM_verb & OPT_STRENGTH_RED;
125 }
126
127 /** Returns global constant subexpression elimination setting. */
128 static INLINE int get_opt_constant_folding(void)
129 {
130   return libFIRM_opt & OPT_CONSTANT_FOLDING;
131 }
132
133 /** Returns global constant subexpression elimination setting. */
134 static INLINE int get_opt_redundant_LoadStore(void)
135 {
136   return libFIRM_opt & OPT_REDUNDANT_LOADSTORE;
137 }
138
139 /** Returns unreachable code elimination setting. */
140 static INLINE int get_opt_unreachable_code(void)
141 {
142   return libFIRM_opt & OPT_UNREACHABLE_CODE;
143 }
144
145 /** Returns Straightening setting. */
146 static INLINE int get_opt_control_flow_straightening(void)
147 {
148   return libFIRM_opt & OPT_CONTROL_FLOW_STRAIGHTENING;
149 }
150
151 /** Returns if simplifications in local optimizations setting. */
152 static INLINE int get_opt_control_flow_weak_simplification(void)
153 {
154   return libFIRM_opt & OPT_CONTROL_FLOW_WEAK_SIMPLIFICATION;
155 }
156
157 /** Returns strong if and loop simplification setting */
158 static INLINE int get_opt_control_flow_strong_simplification(void)
159 {
160   return libFIRM_opt & OPT_CONTROL_FLOW_STRONG_SIMPLIFICATION;
161 }
162
163 /** Returns whether critical edges are removed */
164 static INLINE int get_opt_critical_edges(void)
165 {
166   return libFIRM_opt & OPT_CRITICAL_EDGES;
167 }
168
169 /** Returns reassociation setting. */
170 static INLINE int get_opt_reassociation(void)
171 {
172   return libFIRM_opt & OPT_REASSOCIATION;
173 }
174
175 /** Returns dead node elimination setting. */
176 static INLINE int get_opt_dead_node_elimination(void)
177 {
178   return libFIRM_opt & OPT_DEAD_NODE_ELIMINATION;
179 }
180
181 /** Returns dead method elimination setting. */
182 static INLINE int get_opt_dead_method_elimination(void)
183 {
184   return libFIRM_opt & OPT_DEAD_METHOD_ELIMINATION;
185 }
186
187 /** Returns dead method elimination setting. */
188 static INLINE int get_opt_dead_method_elimination_verbose(void)
189 {
190   return libFIRM_verb & OPT_DEAD_METHOD_ELIMINATION;
191 }
192
193 /** Returns global optimization setting */
194 static INLINE int get_opt_optimize(void)
195 {
196   return libFIRM_opt & OPT_OPTIMIZED;
197 }
198
199 static INLINE int _get_firm_verbosity (void) {
200   return firm_verbosity_level;
201 }
202
203 /** Returns inlining setting. */
204 static INLINE int get_opt_inline(void)
205 {
206   return libFIRM_opt & OPT_INLINE;
207 }
208
209 static INLINE int get_opt_dyn_meth_dispatch(void)
210 {
211   return libFIRM_opt & OPT_DYN_METH_DISPATCH;
212 }
213
214 static INLINE int get_opt_normalize(void)
215 {
216   return libFIRM_opt & OPT_NORMALIZE;
217 }
218
219 /** Returns tail-recursion setting. */
220 static INLINE int get_opt_tail_recursion(void)
221 {
222   return libFIRM_opt & OPT_TAIL_RECURSION;
223 }
224
225 /** Returns tail-recursion setting. */
226 static INLINE int get_opt_tail_recursion_verbose(void)
227 {
228   return libFIRM_verb & OPT_TAIL_RECURSION;
229 }
230
231 /** Returns precise exception context setting. */
232 static INLINE int get_opt_precise_exc_context(void)
233 {
234   return libFIRM_opt & OPT_PRECISE_EXC_CONTEXT;
235 }
236
237 /** Returns fragile ops setting. */
238 static INLINE int get_opt_fragile_ops(void)
239 {
240   return libFIRM_opt & OPT_FRAGILE_OPS;
241 }
242
243
244 #define get_opt_cse()          _get_opt_cse()
245 #define get_firm_verbosity()   _get_firm_verbosity()
246
247 #endif /* _IRFLAG_T_H_ */