7c00b21a68fc8cc5ae574bdc5339fcba5096c486
[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 #define E_FLAG(name, value, def)        irf_##name = (1 << value),
29 #define I_FLAG(name, value, def)        irf_##name = (1 << value),
30
31 #include "irflag_t.def"
32         irf_last
33 #undef I_FLAG
34 #undef E_FLAG
35 } libfirm_opts_t;
36
37 extern optimization_state_t libFIRM_opt;
38 extern optimization_state_t libFIRM_verb;
39
40 extern int firm_verbosity_level;
41
42 /* generate the getter functions for external access */
43 #define E_FLAG(name, value, def)                                        \
44 static INLINE int _get_opt_##name(void) {                       \
45   return libFIRM_opt & irf_##name;                                      \
46 }                                                                                                       \
47 static INLINE int get_opt_##name##_verbose(void) {      \
48   return libFIRM_verb & irf_##name;                                     \
49 }
50
51 /* generate the getter functions for internal access */
52 #define I_FLAG(name, value, def)                                                \
53         static INLINE int get_opt_##name(void) {                        \
54         return libFIRM_opt & irf_##name;                                        \
55 }                                                                                                               \
56         static INLINE int get_opt_##name##_verbose(void) {      \
57         return libFIRM_verb & irf_##name;                                       \
58 }
59
60 #include "irflag_t.def"
61
62 #undef I_FLAG
63 #undef E_FLAG
64
65
66 static INLINE int _get_firm_verbosity (void) {
67         return firm_verbosity_level;
68 }
69
70 static INLINE int _get_optimize (void) {
71   return get_opt_optimize();
72 }
73
74 #define get_optimize()                           _get_optimize()
75 #define get_opt_cse()                            _get_opt_cse()
76 #define get_firm_verbosity()                     _get_firm_verbosity()
77 #define get_opt_dyn_meth_dispatch()              _get_opt_dyn_meth_dispatch()
78 #define get_opt_optimize_class_casts()           _get_opt_optimize_class_casts()
79 #define get_opt_suppress_downcast_optimization() _get_opt_suppress_downcast_optimization()
80
81 #endif /* _IRFLAG_T_H_ */