[Mesa-dev] [PATCH] nir/algebraic: Don't emit empty initializers for MSVC
Connor Abbott
cwabbott0 at gmail.com
Fri May 3 22:16:28 UTC 2019
On Fri, May 3, 2019 at 10:39 PM Jason Ekstrand <jason at jlekstrand.net> wrote:
> On Fri, May 3, 2019 at 3:29 PM Connor Abbott <cwabbott0 at gmail.com> wrote:
>
>> FWIW, the reason I changed it away was to keep it consistent with the
>> line directly above that uses the length (since the C array won't exist if
>> it's length 0). Does that convince you?
>>
>
> Nope. First off, if you take Dylan's suggestions (which I think are
> reasonable), it doesn't use the length. Second, it means that the C code
> will now have an unverifiable random number in it. Are you sure it's
> really 137? I dare you to go count them.
>
Ok, I pushed it with your change.
Connor
>
> --Jason
>
>
>> On Fri, May 3, 2019 at 10:26 PM Jason Ekstrand <jason at jlekstrand.net>
>> wrote:
>>
>>> On Thu, May 2, 2019 at 3:51 PM Dylan Baker <dylan at pnwbakers.com> wrote:
>>>
>>>> Quoting Connor Abbott (2019-05-02 13:34:07)
>>>> > Just don't emit the transform array at all if there are no transforms
>>>> > for a state, and avoid trying to walk over it.
>>>> > ---
>>>> > Brian, does this build on Windows? I tested it on my shader-db
>>>> > on radeonsi.
>>>> >
>>>> > ---
>>>> > src/compiler/nir/nir_algebraic.py | 6 +++++-
>>>> > 1 file changed, 5 insertions(+), 1 deletion(-)
>>>> >
>>>> > diff --git a/src/compiler/nir/nir_algebraic.py
>>>> b/src/compiler/nir/nir_algebraic.py
>>>> > index 6db749e9248..7af80a4f92e 100644
>>>> > --- a/src/compiler/nir/nir_algebraic.py
>>>> > +++ b/src/compiler/nir/nir_algebraic.py
>>>> > @@ -993,11 +993,13 @@ static const uint16_t CONST_STATE = 1;
>>>> > % endfor
>>>> >
>>>> > % for state_id, state_xforms in enumerate(automaton.state_patterns):
>>>> > +% if len(state_xforms) > 0: # avoid emitting a 0-length array for
>>>> MSVC
>>>>
>>>> if not state_xforms:
>>>>
>>>> Using len() to test container emptiness is an anti-pattern in python,
>>>> is is
>>>> roughly 10x slower than this.
>>>>
>>>> > static const struct transform ${pass_name}_state${state_id}_xforms[]
>>>> = {
>>>> > % for i in state_xforms:
>>>> > { ${xforms[i].search.c_ptr(cache)},
>>>> ${xforms[i].replace.c_value_ptr(cache)}, ${xforms[i].condition_index} },
>>>> > % endfor
>>>> > };
>>>> > +% endif
>>>> > % endfor
>>>> >
>>>> > static const struct per_op_table
>>>> ${pass_name}_table[nir_num_search_ops] = {
>>>> > @@ -1080,7 +1082,8 @@ ${pass_name}_block(nir_builder *build,
>>>> nir_block *block,
>>>> > switch (states[alu->dest.dest.ssa.index]) {
>>>> > % for i in range(len(automaton.state_patterns)):
>>>> > case ${i}:
>>>> > - for (unsigned i = 0; i <
>>>> ARRAY_SIZE(${pass_name}_state${i}_xforms); i++) {
>>>>
>>>
>>> I'd rather keep the ARRAY_SIZE unless we've got a really good reason to
>>> drop it. With that and Dylan's changes,
>>>
>>> Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
>>>
>>>
>>>> > + % if len(automaton.state_patterns[i]) > 0:
>>>>
>>>> same here
>>>>
>>>> Dylan
>>>>
>>>> > + for (unsigned i = 0; i <
>>>> ${len(automaton.state_patterns[i])}; i++) {
>>>> > const struct transform *xform =
>>>> &${pass_name}_state${i}_xforms[i];
>>>> > if (condition_flags[xform->condition_offset] &&
>>>> > nir_replace_instr(build, alu, xform->search,
>>>> xform->replace)) {
>>>> > @@ -1088,6 +1091,7 @@ ${pass_name}_block(nir_builder *build,
>>>> nir_block *block,
>>>> > break;
>>>> > }
>>>> > }
>>>> > + % endif
>>>> > break;
>>>> > % endfor
>>>> > default: assert(0);
>>>> > --
>>>> > 2.17.2
>>>> >
>>>> > _______________________________________________
>>>> > mesa-dev mailing list
>>>> > mesa-dev at lists.freedesktop.org
>>>> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20190504/e18c48a4/attachment.html>
More information about the mesa-dev
mailing list