Connor Abbott <cwabbo...@gmail.com> writes: > On Wed, Feb 11, 2015 at 2:36 PM, Eric Anholt <e...@anholt.net> wrote: >> Connor Abbott <cwabbo...@gmail.com> writes: >> >>> On Tue, Feb 10, 2015 at 1:32 PM, Eric Anholt <e...@anholt.net> wrote: >>>> Connor Abbott <cwabbo...@gmail.com> writes: >>>> >>>>> On Sat, Feb 7, 2015 at 12:16 AM, Eric Anholt <e...@anholt.net> wrote: >>>>>> NIR instruction count results on i965: >>>>>> total instructions in shared programs: 1261954 -> 1261937 (-0.00%) >>>>>> instructions in affected programs: 455 -> 438 (-3.74%) >>>>>> >>>>>> One in yofrankie, two in tropics. Apparently i965 had also optimized all >>>>>> of these out anyway. >>>>>> --- >>>>>> src/glsl/nir/nir_opt_cse.c | 43 >>>>>> +++++++++++++++++++++++++++++++++++++++---- >>>>>> 1 file changed, 39 insertions(+), 4 deletions(-) >>>>>> >>>>>> diff --git a/src/glsl/nir/nir_opt_cse.c b/src/glsl/nir/nir_opt_cse.c >>>>>> index b3e9c0d..55dc083 100644 >>>>>> --- a/src/glsl/nir/nir_opt_cse.c >>>>>> +++ b/src/glsl/nir/nir_opt_cse.c >>>>>> @@ -80,8 +80,41 @@ nir_instrs_equal(nir_instr *instr1, nir_instr *instr2) >>>>>> } >>>>>> return true; >>>>>> } >>>>>> - case nir_instr_type_tex: >>>>>> - return false; >>>>>> + case nir_instr_type_tex: { >>>>>> + nir_tex_instr *tex1 = nir_instr_as_tex(instr1); >>>>>> + nir_tex_instr *tex2 = nir_instr_as_tex(instr2); >>>>>> + >>>>>> + if (tex1->op != tex2->op) >>>>>> + return false; >>>>>> + >>>>>> + if (tex1->num_srcs != tex2->num_srcs) >>>>>> + return false; >>>>>> + for (unsigned i = 0; i < tex1->num_srcs; i++) { >>>>>> + if (tex1->src[i].src_type != tex2->src[i].src_type || >>>>>> + !nir_srcs_equal(tex1->src[i].src, tex2->src[i].src)) { >>>>>> + return false; >>>>>> + } >>>>>> + } >>>>>> + >>>>>> + if (tex1->coord_components != tex2->coord_components || >>>>>> + tex1->sampler_dim != tex2->sampler_dim || >>>>>> + tex1->is_array != tex2->is_array || >>>>>> + tex1->is_shadow != tex2->is_shadow || >>>>>> + tex1->is_new_style_shadow != tex2->is_new_style_shadow || >>>>>> + memcmp(tex1->const_offset, tex2->const_offset, >>>>>> + sizeof(tex1->const_offset)) != 0 || >>>>>> + tex1->component != tex2->component || >>>>>> + tex1->sampler_index != tex2->sampler_index || >>>>>> + tex1->sampler_array_size != tex2->sampler_array_size) { >>>>> >>>>> I think some of these fields are sometimes unused, so you need to >>>>> split them out and not check them if they're unused. For example, >>>>> is_new_style_shadow is only used when is_shadow is true, and component >>>>> isn't used if we're not doing a textureGather (?) op -- I don't >>>>> remember all the details. That, or we have to have a defined value for >>>>> these fields when they're unused and document that somewhere. >>>> >>>> Oh god, we don't zero-allocate structures. This is going to be awful. >>> >>> No, with valgrind it's actually better... you get an error if you >>> don't know what you're doing rather than silently having it ignored. >>> These days, zero-allocating structures by default doesn't make much >>> sense any more. >> >> So, why should nir.c not be zero-filling those fields, when we zero fill >> the nir_dests and nir_srcs and and tex->sampler and tex->sampler_index >> and deref->base_offset? > > because in 99% of cases, that's what we want. To be clear, I'm not > against initializing stuff to some default value when it makes sense, > and in this case I'm fine with initializing all the sometimes-used > things to 0 and ensuring that they stay 0 to make comparing > tex_instr's less of a PITA. But I don't think we should be blindly > calling calloc()/rzalloc() on everything; if there's some field the > caller has to set, and there's no default value that 99% of callers > will want, don't set it and then let valgrind find any errors (or, > even better, pass it as a parameter to the constructor). And yes, > there are probably a few places where we initialize stuff when it's > not necessary -- that's a mistake on my part.
What I most object to about not calling calloc/rzalloc is that it means you don't get to find the errors you've created until you happen to run under valgrind, since you almost always get zero-filled contents anyway.
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev