use xmalloc instead of malloc
[libfirm] / ir / ir / irgraph.c
index f9454a1..c91e41a 100644 (file)
@@ -37,6 +37,8 @@
 #include "iredges_t.h"
 #include "type_t.h"
 
+#define INITIAL_IDX_IRN_MAP_SIZE 1024
+
 /**
  * Indicates, whether additional data can be registered to graphs.
  * If set to 1, this is not possible anymore.
@@ -138,6 +140,10 @@ new_r_ir_graph (entity *ent, int n_loc)
 
   edges_init_graph(res);
 
+  /* initialize the idx->node map. */
+  res->idx_irn_map = NEW_ARR_F(ir_node *, INITIAL_IDX_IRN_MAP_SIZE);
+  memset(res->idx_irn_map, 0, INITIAL_IDX_IRN_MAP_SIZE * sizeof(res->idx_irn_map[0]));
+
   /* inform statistics here, as blocks will be already build on this graph */
   hook_new_graph(res, ent);
 
@@ -221,6 +227,7 @@ new_r_ir_graph (entity *ent, int n_loc)
   projX              = new_Proj(start, mode_X, pn_Start_X_initial_exec);
   set_irg_frame      (res, new_Proj(start, mode_P_data, pn_Start_P_frame_base));
   set_irg_globals    (res, new_Proj(start, mode_P_data, pn_Start_P_globals));
+  set_irg_tls        (res, new_Proj(start, mode_P_data, pn_Start_P_tls));
   set_irg_args       (res, new_Proj(start, mode_T, pn_Start_T_args));
   initial_mem        = new_Proj(start, mode_M, pn_Start_M);
   set_irg_initial_mem(res, initial_mem);
@@ -238,11 +245,11 @@ new_r_ir_graph (entity *ent, int n_loc)
    * Use of this edge is matter of discussion, unresolved. Also possible:
    * add_immBlock_pred(res->start_block, res->start_block), but invalid typed.
    */
-  mature_immBlock (res->current_block);
+  mature_immBlock(res->current_block);
 
   /*-- Make a block to start with --*/
   first_block = new_immBlock();
-  add_immBlock_pred (first_block, projX);
+  add_immBlock_pred(first_block, projX);
 
   res->method_execution_frequency = -1;
   res->estimated_node_count       = 0;
@@ -252,9 +259,9 @@ new_r_ir_graph (entity *ent, int n_loc)
 
 
 ir_graph *
-new_ir_graph (entity *ent, int n_loc)
+new_ir_graph(entity *ent, int n_loc)
 {
-  ir_graph *res = new_r_ir_graph (ent, n_loc);
+  ir_graph *res = new_r_ir_graph(ent, n_loc);
   add_irp_irg(res);          /* remember this graph global. */
   return res;
 }
@@ -267,6 +274,10 @@ ir_graph *new_const_code_irg(void) {
 
   res = alloc_graph();
 
+  /* initialize the idx->node map. */
+  res->idx_irn_map = NEW_ARR_F(ir_node *, INITIAL_IDX_IRN_MAP_SIZE);
+  memset(res->idx_irn_map, 0, INITIAL_IDX_IRN_MAP_SIZE * sizeof(res->idx_irn_map[0]));
+
   /* inform statistics here, as blocks will be already build on this graph */
   hook_new_graph(res, NULL);
 
@@ -468,6 +479,16 @@ void
   _set_irg_globals(irg, node);
 }
 
+ir_node *
+(get_irg_tls)(const ir_graph *irg) {
+  return _get_irg_tls(irg);
+}
+
+void
+(set_irg_tls)(ir_graph *irg, ir_node *node) {
+  _set_irg_tls(irg, node);
+}
+
 ir_node *
 (get_irg_initial_mem)(const ir_graph *irg) {
   return _get_irg_initial_mem(irg);