From: Christoph Mallon Date: Sat, 1 Dec 2012 11:39:48 +0000 (+0100) Subject: array: Add and use NEW_ARR_FZ(). X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=2cb67d89aafac7737bece78b5837d3d48fb528bc;p=libfirm array: Add and use NEW_ARR_FZ(). --- diff --git a/include/libfirm/adt/array.h b/include/libfirm/adt/array.h index 0ec934168..0527decaf 100644 --- a/include/libfirm/adt/array.h +++ b/include/libfirm/adt/array.h @@ -53,6 +53,12 @@ #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. diff --git a/ir/be/belive.c b/ir/be/belive.c index a3d268fac..acf32c238 100644 --- a/ir/be/belive.c +++ b/ir/be/belive.c @@ -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 diff --git a/ir/be/beschedtrace.c b/ir/be/beschedtrace.c index 2ad258169..8c84bfb9b 100644 --- a/ir/be/beschedtrace.c +++ b/ir/be/beschedtrace.c @@ -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; } diff --git a/ir/ir/irgraph.c b/ir/ir/irgraph.c index ea65d7202..27f0bb611 100644 --- a/ir/ir/irgraph.c +++ b/ir/ir/irgraph.c @@ -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); diff --git a/ir/ir/irnodemap.h b/ir/ir/irnodemap.h index fa4bfeef7..a62a8a66a 100644 --- a/ir/ir/irnodemap.h +++ b/ir/ir/irnodemap.h @@ -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); } /** diff --git a/ir/lower/lower_dw.c b/ir/lower/lower_dw.c index 5c0050897..f3ca0ad80 100644 --- a/ir/lower/lower_dw.c +++ b/ir/lower/lower_dw.c @@ -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; diff --git a/ir/opt/opt_blocks.c b/ir/opt/opt_blocks.c index 70b13a95c..3428614fa 100644 --- a/ir/opt/opt_blocks.c +++ b/ir/opt/opt_blocks.c @@ -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;