array: Add and use NEW_ARR_FZ().
authorChristoph Mallon <christoph.mallon@gmx.de>
Sat, 1 Dec 2012 11:39:48 +0000 (12:39 +0100)
committerChristoph Mallon <christoph.mallon@gmx.de>
Sun, 2 Dec 2012 08:56:23 +0000 (09:56 +0100)
include/libfirm/adt/array.h
ir/be/belive.c
ir/be/beschedtrace.c
ir/ir/irgraph.c
ir/ir/irnodemap.h
ir/lower/lower_dw.c
ir/opt/opt_blocks.c

index 0ec9341..0527dec 100644 (file)
 #define NEW_ARR_F(type, nelts) \
   ((type *)ir_new_arr_f((nelts), sizeof(type) * (nelts)))
 
+/**
+ * Create a flexible array and null its contents.
+ */
+#define NEW_ARR_FZ(type, nelts) \
+       ((type*)memset(NEW_ARR_F(type, (nelts)), 0, sizeof(type) * (nelts)))
+
 /**
  * Creates a new flexible array with the same number of elements as a
  * given one.
index a3d268f..acf32c2 100644 (file)
@@ -363,7 +363,6 @@ static void collect_liveness_nodes(ir_node *irn, void *data)
 
 void be_liveness_compute_sets(be_lv_t *lv)
 {
-       ir_node **nodes;
        int       i;
        int       n;
 
@@ -375,8 +374,7 @@ void be_liveness_compute_sets(be_lv_t *lv)
        obstack_init(&lv->obst);
 
        n = get_irg_last_idx(lv->irg);
-       nodes = NEW_ARR_F(ir_node *, n);
-       memset(nodes, 0, sizeof(nodes[0]) * n);
+       ir_node **const nodes = NEW_ARR_FZ(ir_node*, n);
 
        /* inserting the variables sorted by their ID is probably
         * more efficient since the binary sorted set insertion
index 2ad2581..8c84bfb 100644 (file)
@@ -515,12 +515,11 @@ static trace_env_t *trace_init(ir_graph *irg)
        int         nn   = get_irg_last_idx(irg);
 
        env->curr_time  = 0;
-       env->sched_info = NEW_ARR_F(trace_irn_t, nn);
+       env->sched_info = NEW_ARR_FZ(trace_irn_t, nn);
        env->liveness   = be_get_irg_liveness(irg);
        FIRM_DBG_REGISTER(env->dbg, "firm.be.sched.trace");
 
        be_assure_live_chk(irg);
-       memset(env->sched_info, 0, nn * sizeof(*(env->sched_info)));
 
        return env;
 }
index ea65d72..27f0bb6 100644 (file)
@@ -85,8 +85,7 @@ static ir_graph *alloc_graph(void)
        res->kind = k_ir_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]));
+       res->idx_irn_map = NEW_ARR_FZ(ir_node*, INITIAL_IDX_IRN_MAP_SIZE);
 
        obstack_init(&res->obst);
 
index fa4bfee..a62a8a6 100644 (file)
@@ -43,8 +43,7 @@ typedef struct ir_nodemap ir_nodemap;
 static inline void ir_nodemap_init(ir_nodemap *nodemap, const ir_graph *irg)
 {
        unsigned max_idx = get_irg_last_idx(irg) + 32;
-       nodemap->data = NEW_ARR_F(void*, max_idx);
-       memset(nodemap->data, 0, max_idx * sizeof(nodemap->data[0]));
+       nodemap->data = NEW_ARR_FZ(void*, max_idx);
 }
 
 /**
index 5c00508..f3ca0ad 100644 (file)
@@ -2967,8 +2967,7 @@ static void lower_irg(ir_graph *irg)
        n_idx = get_irg_last_idx(irg);
        n_idx = n_idx + (n_idx >> 2);  /* add 25% */
        env->n_entries = n_idx;
-       env->entries   = NEW_ARR_F(lower64_entry_t*, n_idx);
-       memset(env->entries, 0, sizeof(env->entries[0]) * n_idx);
+       env->entries   = NEW_ARR_FZ(lower64_entry_t*, n_idx);
 
        env->irg            = irg;
        env->flags          = 0;
index 70b13a9..3428614 100644 (file)
@@ -1201,8 +1201,7 @@ void shape_blocks(ir_graph *irg)
        env.opcode2id_map  = new_set(cmp_opcode, iro_Last * 4);
 
        n             = get_irg_last_idx(irg);
-       env.live_outs = NEW_ARR_F(ir_node *, n);
-       memset(env.live_outs, 0, sizeof(*env.live_outs) * n);
+       env.live_outs = NEW_ARR_FZ(ir_node*, n);
 
        env.all_blocks = NULL;