[Mesa-dev] [PATCH] nir: Zero-init our structures.

Jason Ekstrand jason at jlekstrand.net
Wed Feb 11 14:40:25 PST 2015


I didn't look through it close enough to call it a review, but I like it.
Especially getting rid of src/def_init.

Acked-by: Jason Ekstrand <jason.ekstrand at intel.com>

On Wed, Feb 11, 2015 at 4:32 PM, Eric Anholt <eric at anholt.net> wrote:

> We were filling out almost all fields of almost all instructions, but
> leaving out a couple of them.  This simplifies the source code, cuts 700
> bytes from the compiled binary, and prevents developer surprise when one
> field of your otherwise-containing-defaults struct is actually
> uninitialized.
> ---
>  src/glsl/nir/nir.c | 138
> +++++++++++------------------------------------------
>  1 file changed, 29 insertions(+), 109 deletions(-)
>
> diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c
> index b46fd30..1a95060 100644
> --- a/src/glsl/nir/nir.c
> +++ b/src/glsl/nir/nir.c
> @@ -31,7 +31,7 @@
>  nir_shader *
>  nir_shader_create(void *mem_ctx)
>  {
> -   nir_shader *shader = ralloc(mem_ctx, nir_shader);
> +   nir_shader *shader = rzalloc(mem_ctx, nir_shader);
>
>     shader->uniforms = _mesa_hash_table_create(shader,
> _mesa_key_hash_string,
>                                                _mesa_key_string_equal);
> @@ -40,18 +40,10 @@ nir_shader_create(void *mem_ctx)
>     shader->outputs = _mesa_hash_table_create(shader,
> _mesa_key_hash_string,
>                                               _mesa_key_string_equal);
>
> -   shader->num_user_structures = 0;
> -   shader->user_structures = NULL;
> -
>     exec_list_make_empty(&shader->functions);
>     exec_list_make_empty(&shader->registers);
>     exec_list_make_empty(&shader->globals);
>     exec_list_make_empty(&shader->system_values);
> -   shader->reg_alloc = 0;
> -
> -   shader->num_inputs = 0;
> -   shader->num_outputs = 0;
> -   shader->num_uniforms = 0;
>
>     return shader;
>  }
> @@ -59,7 +51,7 @@ nir_shader_create(void *mem_ctx)
>  static nir_register *
>  reg_create(void *mem_ctx, struct exec_list *list)
>  {
> -   nir_register *reg = ralloc(mem_ctx, nir_register);
> +   nir_register *reg = rzalloc(mem_ctx, nir_register);
>
>     reg->uses = _mesa_set_create(mem_ctx, _mesa_hash_pointer,
>                                  _mesa_key_pointer_equal);
> @@ -68,11 +60,6 @@ reg_create(void *mem_ctx, struct exec_list *list)
>     reg->if_uses = _mesa_set_create(mem_ctx, _mesa_hash_pointer,
>                                     _mesa_key_pointer_equal);
>
> -   reg->num_components = 0;
> -   reg->num_array_elems = 0;
> -   reg->is_packed = false;
> -   reg->name = NULL;
> -
>     exec_list_push_tail(list, &reg->node);
>
>     return reg;
> @@ -107,7 +94,7 @@ nir_reg_remove(nir_register *reg)
>  nir_function *
>  nir_function_create(nir_shader *shader, const char *name)
>  {
> -   nir_function *func = ralloc(shader, nir_function);
> +   nir_function *func = rzalloc(shader, nir_function);
>
>     exec_list_push_tail(&shader->functions, &func->node);
>     exec_list_make_empty(&func->overload_list);
> @@ -122,12 +109,9 @@ nir_function_overload_create(nir_function *func)
>  {
>     void *mem_ctx = ralloc_parent(func);
>
> -   nir_function_overload *overload = ralloc(mem_ctx,
> nir_function_overload);
> +   nir_function_overload *overload = rzalloc(mem_ctx,
> nir_function_overload);
>
> -   overload->num_params = 0;
> -   overload->params = NULL;
>     overload->return_type = glsl_void_type();
> -   overload->impl = NULL;
>
>     exec_list_push_tail(&func->overload_list, &overload->node);
>     overload->function = func;
> @@ -247,7 +231,7 @@ nir_function_impl_create(nir_function_overload
> *overload)
>
>     void *mem_ctx = ralloc_parent(overload);
>
> -   nir_function_impl *impl = ralloc(mem_ctx, nir_function_impl);
> +   nir_function_impl *impl = rzalloc(mem_ctx, nir_function_impl);
>
>     overload->impl = impl;
>     impl->overload = overload;
> @@ -257,11 +241,6 @@ nir_function_impl_create(nir_function_overload
> *overload)
>     exec_list_make_empty(&impl->body);
>     exec_list_make_empty(&impl->registers);
>     exec_list_make_empty(&impl->locals);
> -   impl->num_params = 0;
> -   impl->params = NULL;
> -   impl->return_var = NULL;
> -   impl->reg_alloc = 0;
> -   impl->ssa_alloc = 0;
>     impl->valid_metadata = nir_metadata_none;
>
>     /* create start & end blocks */
> @@ -283,14 +262,12 @@ nir_function_impl_create(nir_function_overload
> *overload)
>  nir_block *
>  nir_block_create(void *mem_ctx)
>  {
> -   nir_block *block = ralloc(mem_ctx, nir_block);
> +   nir_block *block = rzalloc(mem_ctx, nir_block);
>
>     cf_init(&block->cf_node, nir_cf_node_block);
>
> -   block->successors[0] = block->successors[1] = NULL;
>     block->predecessors = _mesa_set_create(mem_ctx, _mesa_hash_pointer,
>                                            _mesa_key_pointer_equal);
> -   block->imm_dom = NULL;
>     block->dom_frontier = _mesa_set_create(mem_ctx, _mesa_hash_pointer,
>                                            _mesa_key_pointer_equal);
>
> @@ -299,22 +276,12 @@ nir_block_create(void *mem_ctx)
>     return block;
>  }
>
> -static inline void
> -src_init(nir_src *src)
> -{
> -   src->is_ssa = false;
> -   src->reg.reg = NULL;
> -   src->reg.indirect = NULL;
> -   src->reg.base_offset = 0;
> -}
> -
>  nir_if *
>  nir_if_create(void *mem_ctx)
>  {
> -   nir_if *if_stmt = ralloc(mem_ctx, nir_if);
> +   nir_if *if_stmt = rzalloc(mem_ctx, nir_if);
>
>     cf_init(&if_stmt->cf_node, nir_cf_node_if);
> -   src_init(&if_stmt->condition);
>
>     nir_block *then = nir_block_create(mem_ctx);
>     exec_list_make_empty(&if_stmt->then_list);
> @@ -332,7 +299,7 @@ nir_if_create(void *mem_ctx)
>  nir_loop *
>  nir_loop_create(void *mem_ctx)
>  {
> -   nir_loop *loop = ralloc(mem_ctx, nir_loop);
> +   nir_loop *loop = rzalloc(mem_ctx, nir_loop);
>
>     cf_init(&loop->cf_node, nir_cf_node_loop);
>
> @@ -351,59 +318,33 @@ static void
>  instr_init(nir_instr *instr, nir_instr_type type)
>  {
>     instr->type = type;
> -   instr->block = NULL;
>     exec_node_init(&instr->node);
>  }
>
> -static void
> -dest_init(nir_dest *dest)
> -{
> -   dest->is_ssa = false;
> -   dest->reg.reg = NULL;
> -   dest->reg.indirect = NULL;
> -   dest->reg.base_offset = 0;
> -}
> -
> -static void
> -alu_dest_init(nir_alu_dest *dest)
> -{
> -   dest_init(&dest->dest);
> -   dest->saturate = false;
> -   dest->write_mask = 0xf;
> -}
> -
> -static void
> -alu_src_init(nir_alu_src *src)
> -{
> -   src_init(&src->src);
> -   src->abs = src->negate = false;
> -   src->swizzle[0] = 0;
> -   src->swizzle[1] = 1;
> -   src->swizzle[2] = 2;
> -   src->swizzle[3] = 3;
> -}
> -
>  nir_alu_instr *
>  nir_alu_instr_create(void *mem_ctx, nir_op op)
>  {
>     unsigned num_srcs = nir_op_infos[op].num_inputs;
>     nir_alu_instr *instr =
> -      ralloc_size(mem_ctx,
> -                  sizeof(nir_alu_instr) + num_srcs * sizeof(nir_alu_src));
> +      rzalloc_size(mem_ctx,
> +                   sizeof(nir_alu_instr) + num_srcs *
> sizeof(nir_alu_src));
>
>     instr_init(&instr->instr, nir_instr_type_alu);
>     instr->op = op;
> -   alu_dest_init(&instr->dest);
> -   for (unsigned i = 0; i < num_srcs; i++)
> -      alu_src_init(&instr->src[i]);
> -
> +   instr->dest.write_mask = 0xf;
> +   for (unsigned i = 0; i < num_srcs; i++) {
> +      instr->src[i].swizzle[0] = 0;
> +      instr->src[i].swizzle[1] = 1;
> +      instr->src[i].swizzle[2] = 2;
> +      instr->src[i].swizzle[3] = 3;
> +   }
>     return instr;
>  }
>
>  nir_jump_instr *
>  nir_jump_instr_create(void *mem_ctx, nir_jump_type type)
>  {
> -   nir_jump_instr *instr = ralloc(mem_ctx, nir_jump_instr);
> +   nir_jump_instr *instr = rzalloc(mem_ctx, nir_jump_instr);
>     instr_init(&instr->instr, nir_instr_type_jump);
>     instr->type = type;
>     return instr;
> @@ -412,7 +353,7 @@ nir_jump_instr_create(void *mem_ctx, nir_jump_type
> type)
>  nir_load_const_instr *
>  nir_load_const_instr_create(void *mem_ctx, unsigned num_components)
>  {
> -   nir_load_const_instr *instr = ralloc(mem_ctx, nir_load_const_instr);
> +   nir_load_const_instr *instr = rzalloc(mem_ctx, nir_load_const_instr);
>     instr_init(&instr->instr, nir_instr_type_load_const);
>
>     nir_ssa_def_init(&instr->instr, &instr->def, num_components, NULL);
> @@ -425,31 +366,24 @@ nir_intrinsic_instr_create(void *mem_ctx,
> nir_intrinsic_op op)
>  {
>     unsigned num_srcs = nir_intrinsic_infos[op].num_srcs;
>     nir_intrinsic_instr *instr =
> -      ralloc_size(mem_ctx,
> -                  sizeof(nir_intrinsic_instr) + num_srcs *
> sizeof(nir_src));
> +      rzalloc_size(mem_ctx,
> +                   sizeof(nir_intrinsic_instr) + num_srcs *
> sizeof(nir_src));
>
>     instr_init(&instr->instr, nir_instr_type_intrinsic);
>     instr->intrinsic = op;
>
> -   if (nir_intrinsic_infos[op].has_dest)
> -      dest_init(&instr->dest);
> -
> -   for (unsigned i = 0; i < num_srcs; i++)
> -      src_init(&instr->src[i]);
> -
>     return instr;
>  }
>
>  nir_call_instr *
>  nir_call_instr_create(void *mem_ctx, nir_function_overload *callee)
>  {
> -   nir_call_instr *instr = ralloc(mem_ctx, nir_call_instr);
> +   nir_call_instr *instr = rzalloc(mem_ctx, nir_call_instr);
>     instr_init(&instr->instr, nir_instr_type_call);
>
>     instr->callee = callee;
>     instr->num_params = callee->num_params;
>     instr->params = ralloc_array(mem_ctx, nir_deref_var *,
> instr->num_params);
> -   instr->return_deref = NULL;
>
>     return instr;
>  }
> @@ -457,19 +391,11 @@ nir_call_instr_create(void *mem_ctx,
> nir_function_overload *callee)
>  nir_tex_instr *
>  nir_tex_instr_create(void *mem_ctx, unsigned num_srcs)
>  {
> -   nir_tex_instr *instr = ralloc(mem_ctx, nir_tex_instr);
> +   nir_tex_instr *instr = rzalloc(mem_ctx, nir_tex_instr);
>     instr_init(&instr->instr, nir_instr_type_tex);
>
> -   dest_init(&instr->dest);
> -
>     instr->num_srcs = num_srcs;
>     instr->src = ralloc_array(mem_ctx, nir_tex_src, num_srcs);
> -   for (unsigned i = 0; i < num_srcs; i++)
> -      src_init(&instr->src[i].src);
> -
> -   instr->sampler_index = 0;
> -   instr->sampler_array_size = 0;
> -   instr->sampler = NULL;
>
>     return instr;
>  }
> @@ -477,10 +403,9 @@ nir_tex_instr_create(void *mem_ctx, unsigned num_srcs)
>  nir_phi_instr *
>  nir_phi_instr_create(void *mem_ctx)
>  {
> -   nir_phi_instr *instr = ralloc(mem_ctx, nir_phi_instr);
> +   nir_phi_instr *instr = rzalloc(mem_ctx, nir_phi_instr);
>     instr_init(&instr->instr, nir_instr_type_phi);
>
> -   dest_init(&instr->dest);
>     exec_list_make_empty(&instr->srcs);
>     return instr;
>  }
> @@ -488,7 +413,7 @@ nir_phi_instr_create(void *mem_ctx)
>  nir_parallel_copy_instr *
>  nir_parallel_copy_instr_create(void *mem_ctx)
>  {
> -   nir_parallel_copy_instr *instr = ralloc(mem_ctx,
> nir_parallel_copy_instr);
> +   nir_parallel_copy_instr *instr = rzalloc(mem_ctx,
> nir_parallel_copy_instr);
>     instr_init(&instr->instr, nir_instr_type_parallel_copy);
>
>     exec_list_make_empty(&instr->entries);
> @@ -499,7 +424,7 @@ nir_parallel_copy_instr_create(void *mem_ctx)
>  nir_ssa_undef_instr *
>  nir_ssa_undef_instr_create(void *mem_ctx, unsigned num_components)
>  {
> -   nir_ssa_undef_instr *instr = ralloc(mem_ctx, nir_ssa_undef_instr);
> +   nir_ssa_undef_instr *instr = rzalloc(mem_ctx, nir_ssa_undef_instr);
>     instr_init(&instr->instr, nir_instr_type_ssa_undef);
>
>     nir_ssa_def_init(&instr->instr, &instr->def, num_components, NULL);
> @@ -510,9 +435,8 @@ nir_ssa_undef_instr_create(void *mem_ctx, unsigned
> num_components)
>  nir_deref_var *
>  nir_deref_var_create(void *mem_ctx, nir_variable *var)
>  {
> -   nir_deref_var *deref = ralloc(mem_ctx, nir_deref_var);
> +   nir_deref_var *deref = rzalloc(mem_ctx, nir_deref_var);
>     deref->deref.deref_type = nir_deref_type_var;
> -   deref->deref.child = NULL;
>     deref->deref.type = var->type;
>     deref->var = var;
>     return deref;
> @@ -521,21 +445,17 @@ nir_deref_var_create(void *mem_ctx, nir_variable
> *var)
>  nir_deref_array *
>  nir_deref_array_create(void *mem_ctx)
>  {
> -   nir_deref_array *deref = ralloc(mem_ctx, nir_deref_array);
> +   nir_deref_array *deref = rzalloc(mem_ctx, nir_deref_array);
>     deref->deref.deref_type = nir_deref_type_array;
> -   deref->deref.child = NULL;
>     deref->deref_array_type = nir_deref_array_type_direct;
> -   src_init(&deref->indirect);
> -   deref->base_offset = 0;
>     return deref;
>  }
>
>  nir_deref_struct *
>  nir_deref_struct_create(void *mem_ctx, unsigned field_index)
>  {
> -   nir_deref_struct *deref = ralloc(mem_ctx, nir_deref_struct);
> +   nir_deref_struct *deref = rzalloc(mem_ctx, nir_deref_struct);
>     deref->deref.deref_type = nir_deref_type_struct;
> -   deref->deref.child = NULL;
>     deref->index = field_index;
>     return deref;
>  }
> --
> 2.1.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150211/f550e2cc/attachment-0001.html>


More information about the mesa-dev mailing list