fixed indents
[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 #include "irnode.h"
12
13 #include "benumb.h"
14
15 typedef struct _numbering_t {
16         int local_nr;
17         int global_nr;
18 } numbering_t;
19
20 typedef struct _irg_numbering_t {
21         int local_nr;
22         int global_nr;
23         ir_node **reverse_map;
24 } irg_numbering_t;
25
26 extern int numbering_irn_data_offset;
27 extern int numbering_irg_data_offset;
28
29 #define _get_irn_numbering(type,irn) get_irn_data(irn, type, numbering_irn_data_offset)
30 #define _get_irg_numbering(type,irg) get_irg_data(irg, type, numbering_irg_data_offset)
31
32 #define get_irn_numbering_const(irn) _get_irn_numbering(const numbering_t, irn)
33 #define get_irg_numbering_const(irg) _get_irg_numbering(const irg_numbering_t, irg)
34
35 #define get_irn_numbering(irn) _get_irn_numbering(numbering_t, irn)
36 #define get_irg_numbering(irg) _get_irg_numbering(irg_numbering_t, irg)
37
38 static INLINE int _get_irn_graph_nr(const ir_node *irn)
39 {
40         assert(!is_Block(irn) && "No block expected here");
41         return get_irn_numbering_const(irn)->global_nr;
42 }
43
44 static INLINE int _get_irn_block_nr(const ir_node *irn)
45 {
46         assert(!is_Block(irn) && "No block expected here");
47         return get_irn_numbering_const(irn)->local_nr;
48 }
49
50 static INLINE int _get_block_graph_nr(const ir_node *irn)
51 {
52         assert(is_Block(irn) && "Block expected here");
53         return get_irn_numbering_const(irn)->global_nr;
54 }
55
56 static INLINE int _get_block_node_count(const ir_node *irn)
57 {
58         assert(is_Block(irn) && "Block expected here");
59         return get_irn_numbering_const(irn)->local_nr;
60 }
61
62 static INLINE int _get_graph_block_count(const ir_graph *irg)
63 {
64         return get_irg_numbering_const(irg)->local_nr;
65 }
66
67 static INLINE int _get_graph_node_count(const ir_graph *irg)
68 {
69         return get_irg_numbering_const(irg)->global_nr;
70 }
71
72 static INLINE ir_node *_get_irn_for_graph_nr(const ir_graph *irg, int nr)
73 {
74         ir_node **map = get_irg_numbering_const(irg)->reverse_map;
75         assert(nr >= 0 && nr <= _get_graph_node_count(irg) && map[nr] != NULL);
76         return map[nr];
77 }
78
79 #define get_irn_graph_nr(irn)                           _get_irn_graph_nr(irn)
80 #define get_irn_block_nr(irn)                           _get_irn_block_nr(irn)
81 #define get_block_graph_nr(irn)                         _get_block_graph_nr(irn)
82 #define get_block_node_count(irn)               _get_block_node_count(irn)
83 #define get_graph_block_count(irg)              _get_graph_block_count(irg)
84 #define get_graph_node_count(irg)               _get_graph_node_count(irg)
85 #define get_irn_for_graph_nr(irg,nr)    _get_irn_for_graph_nr(irg,nr)
86
87 #endif