2 * Numbering implementation.
3 * @author Sebastian Hack
24 int numbering_irn_data_offset = 0;
25 int numbering_irg_data_offset = 0;
27 FIRM_IMPL1(get_irn_graph_nr, int, const ir_node *)
28 FIRM_IMPL1(get_irn_block_nr, int, const ir_node *)
29 FIRM_IMPL1(get_block_graph_nr, int, const ir_node *)
30 FIRM_IMPL1(get_block_node_count, int, const ir_node *)
31 FIRM_IMPL1(get_graph_block_count, int, const ir_graph *)
32 FIRM_IMPL2(get_irn_for_graph_nr, ir_node *, const ir_graph *, int)
34 static void numbering_walker(ir_node *irn, void *env)
36 irg_numbering_t *graph_nr = get_irg_numbering(get_irn_irg(irn));
37 numbering_t *irn_nr = get_irn_numbering(irn);
40 irn_nr->global_nr = graph_nr->local_nr++;
42 numbering_t *block_nr = get_irn_numbering(get_nodes_block(irn));
43 irn_nr->local_nr = block_nr->local_nr++;
44 irn_nr->global_nr = graph_nr->global_nr++;
48 static void reverse_walker(ir_node *irn, void *env)
52 map[get_irn_graph_nr(irn)] = irn;
56 void be_numbering(ir_graph *irg)
58 ir_node **reverse_map;
60 irg_walk_graph(irg, numbering_walker, NULL, NULL);
62 reverse_map = xcalloc(get_graph_node_count(irg), sizeof(reverse_map[0]));
63 irg_walk_graph(irg, reverse_walker, NULL, reverse_map);
65 get_irg_numbering(irg)->reverse_map = reverse_map;
68 void be_numbering_done(ir_graph *irg)
70 free(get_irg_numbering(irg)->reverse_map);
73 void be_numbering_init(void)
75 numbering_irn_data_offset = register_additional_node_data(sizeof(numbering_t));
76 numbering_irg_data_offset = register_additional_graph_data(sizeof(irg_numbering_t));