2 * Numbering implementation.
3 * @author Sebastian Hack
18 int numbering_irn_data_offset = 0;
19 int numbering_irg_data_offset = 0;
21 FIRM_IMPL1(get_irn_graph_nr, int, const ir_node *)
22 FIRM_IMPL1(get_irn_block_nr, int, const ir_node *)
23 FIRM_IMPL1(get_block_graph_nr, int, const ir_node *)
24 FIRM_IMPL1(get_block_node_count, int, const ir_node *)
25 FIRM_IMPL1(get_graph_block_count, int, const ir_graph *)
26 FIRM_IMPL2(get_irn_for_graph_nr, ir_node *, const ir_graph *, int)
28 static void numbering_walker(ir_node *irn, void *env)
30 irg_numbering_t *graph_nr = get_irg_numbering(get_irn_irg(irn));
31 numbering_t *irn_nr = get_irn_numbering(irn);
34 irn_nr->global_nr = graph_nr->local_nr++;
36 numbering_t *block_nr = get_irn_numbering(get_nodes_block(irn));
37 irn_nr->local_nr = block_nr->local_nr++;
38 irn_nr->global_nr = graph_nr->global_nr++;
42 static void reverse_walker(ir_node *irn, void *env)
46 map[get_irn_graph_nr(irn)] = irn;
50 void be_numbering(ir_graph *irg)
52 ir_node **reverse_map;
54 irg_walk_graph(irg, numbering_walker, NULL, NULL);
56 reverse_map = xcalloc(get_graph_node_count(irg), sizeof(reverse_map[0]));
57 irg_walk_graph(irg, reverse_walker, NULL, reverse_map);
59 get_irg_numbering(irg)->reverse_map = reverse_map;
62 void be_numbering_done(ir_graph *irg)
64 free(get_irg_numbering(irg)->reverse_map);
67 void be_numbering_init(void)
69 numbering_irn_data_offset = register_additional_node_data(sizeof(numbering_t));
70 numbering_irg_data_offset = register_additional_graph_data(sizeof(irg_numbering_t));