Changed __ to _
[libfirm] / ir / be / benumb_t.h
1 /**
2  * Numbering for nodes.
3  * @author Sebastian Hack
4  * @date 8.11.2004
5  */
6
7 #ifndef _BENUMB_T_H
8 #define _BENUMB_T_H
9
10 #include "firm_config.h"
11
12 #include "benumb.h"
13
14 typedef struct _numbering_t {
15         int local_nr;
16         int global_nr;
17 } numbering_t;
18
19 typedef struct _irg_numbering_t {
20         int local_nr;
21         int global_nr;
22         ir_node **reverse_map;
23 } irg_numbering_t;
24
25 extern int numbering_irn_data_offset;
26 extern int numbering_irg_data_offset;
27
28 #define _get_irn_numbering(type,irn) get_irn_data(irn, type, numbering_irn_data_offset)
29 #define _get_irg_numbering(type,irg) get_irg_data(irg, type, numbering_irg_data_offset)
30
31 #define get_irn_numbering_const(irn) _get_irn_numbering(const numbering_t, irn)
32 #define get_irg_numbering_const(irg) _get_irg_numbering(const irg_numbering_t, irg)
33
34 #define get_irn_numbering(irn) _get_irn_numbering(numbering_t, irn)
35 #define get_irg_numbering(irg) _get_irg_numbering(irg_numbering_t, irg)
36
37 static INLINE int _get_irn_graph_nr(const ir_node *irn)
38 {
39         assert(!is_Block(irn) && "No block expected here");
40         return get_irn_numbering_const(irn)->global_nr;
41 }
42
43 static INLINE int _get_irn_block_nr(const ir_node *irn)
44 {
45         assert(!is_Block(irn) && "No block expected here");
46         return get_irn_numbering_const(irn)->local_nr;
47 }
48
49 static INLINE int _get_block_graph_nr(const ir_node *irn)
50 {
51         assert(is_Block(irn) && "Block expected here");
52         return get_irn_numbering_const(irn)->global_nr;
53 }
54
55 static INLINE int _get_block_node_count(const ir_node *irn)
56 {
57         assert(is_Block(irn) && "Block expected here");
58         return get_irn_numbering_const(irn)->local_nr;
59 }
60
61 static INLINE int _get_graph_block_count(const ir_graph *irg)
62 {
63         return get_irg_numbering_const(irg)->local_nr;
64 }
65
66 static INLINE int _get_graph_node_count(const ir_graph *irg)
67 {
68         return get_irg_numbering_const(irg)->global_nr;
69 }
70
71 static INLINE ir_node *_get_irn_for_graph_nr(const ir_graph *irg, int nr)
72 {
73         ir_node **map = get_irg_numbering_const(irg)->reverse_map;
74         assert(nr >= 0 && nr <= _get_graph_node_count(irg) && map[nr] != NULL);
75         return map[nr];
76 }
77
78 #define get_irn_graph_nr(irn)                           _get_irn_graph_nr(irn)
79 #define get_irn_block_nr(irn)                           _get_irn_block_nr(irn)
80 #define get_block_graph_nr(irn)                         _get_block_graph_nr(irn)
81 #define get_block_node_count(irn)               _get_block_node_count(irn)
82 #define get_graph_block_count(irg)              _get_graph_block_count(irg)
83 #define get_graph_node_count(irg)               _get_graph_node_count(irg)
84 #define get_irn_for_graph_nr(irg,nr)    _get_irn_for_graph_nr(irg,nr)
85
86 #endif