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