<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Mar 26, 2016 at 8:22 AM, Rob Clark <span dir="ltr"><<a href="mailto:robdclark@gmail.com" target="_blank">robdclark@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Fri, Mar 25, 2016 at 7:12 PM, Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>> wrote:<br>
> The old version of the pass only worked on globals and locals and always<br>
> left inputs, outputs, uniforms, etc. alone.<br>
> ---<br>
>  src/compiler/nir/nir.h                       |  2 +-<br>
>  src/compiler/nir/nir_remove_dead_variables.c | 33 ++++++++++++++++++++--------<br>
>  src/gallium/drivers/freedreno/ir3/ir3_nir.c  |  2 +-<br>
>  src/gallium/drivers/vc4/vc4_program.c        |  2 +-<br>
>  src/mesa/drivers/dri/i965/brw_nir.c          |  2 +-<br>
>  5 files changed, 28 insertions(+), 13 deletions(-)<br>
><br>
> diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h<br>
> index 03c1f76..d9e0d67 100644<br>
> --- a/src/compiler/nir/nir.h<br>
> +++ b/src/compiler/nir/nir.h<br>
> @@ -2257,7 +2257,7 @@ nir_src *nir_get_io_vertex_index_src(nir_intrinsic_instr *instr);<br>
><br>
>  void nir_lower_vars_to_ssa(nir_shader *shader);<br>
><br>
> -bool nir_remove_dead_variables(nir_shader *shader);<br>
> +bool nir_remove_dead_variables(nir_shader *shader, nir_variable_mode mode);<br>
><br>
>  void nir_move_vec_src_uses_to_dest(nir_shader *shader);<br>
>  bool nir_lower_vec_to_movs(nir_shader *shader);<br>
> diff --git a/src/compiler/nir/nir_remove_dead_variables.c b/src/compiler/nir/nir_remove_dead_variables.c<br>
> index 6519268..ad69de8 100644<br>
> --- a/src/compiler/nir/nir_remove_dead_variables.c<br>
> +++ b/src/compiler/nir/nir_remove_dead_variables.c<br>
> @@ -120,7 +120,7 @@ remove_dead_vars(struct exec_list *var_list, struct set *live)<br>
>  }<br>
><br>
>  bool<br>
> -nir_remove_dead_variables(nir_shader *shader)<br>
> +nir_remove_dead_variables(nir_shader *shader, nir_variable_mode mode)<br>
>  {<br>
>     bool progress = false;<br>
>     struct set *live =<br>
> @@ -128,15 +128,30 @@ nir_remove_dead_variables(nir_shader *shader)<br>
><br>
>     add_var_use_shader(shader, live);<br>
><br>
> -   progress = remove_dead_vars(&shader->globals, live) || progress;<br>
> +   if (mode == nir_var_uniform || mode == nir_var_all)<br>
> +      progress = remove_dead_vars(&shader->uniforms, live) || progress;<br>
><br>
> -   nir_foreach_function(shader, function) {<br>
> -      if (function->impl) {<br>
> -         if (remove_dead_vars(&function->impl->locals, live)) {<br>
> -            nir_metadata_preserve(function->impl, nir_metadata_block_index |<br>
> -                                                  nir_metadata_dominance |<br>
> -                                                  nir_metadata_live_ssa_defs);<br>
> -            progress = true;<br>
> +   if (mode == nir_var_shader_in || mode == nir_var_all)<br>
> +      progress = remove_dead_vars(&shader->inputs, live) || progress;<br>
> +<br>
> +   if (mode == nir_var_shader_out || mode == nir_var_all)<br>
> +      progress = remove_dead_vars(&shader->outputs, live) || progress;<br>
> +<br>
> +   if (mode == nir_var_global || mode == nir_var_all)<br>
> +      progress = remove_dead_vars(&shader->globals, live) || progress;<br>
> +<br>
> +   if (mode == nir_var_system_value || mode == nir_var_all)<br>
> +      progress = remove_dead_vars(&shader->system_values, live) || progress;<br>
> +<br>
> +   if (mode == nir_var_local || mode == nir_var_all) {<br>
> +      nir_foreach_function(shader, function) {<br>
> +         if (function->impl) {<br>
> +            if (remove_dead_vars(&function->impl->locals, live)) {<br>
> +               nir_metadata_preserve(function->impl, nir_metadata_block_index |<br>
> +                                                     nir_metadata_dominance |<br>
> +                                                     nir_metadata_live_ssa_defs);<br>
> +               progress = true;<br>
> +            }<br>
>           }<br>
>        }<br>
>     }<br>
> diff --git a/src/gallium/drivers/freedreno/ir3/ir3_nir.c b/src/gallium/drivers/freedreno/ir3/ir3_nir.c<br>
> index 73c65d6..04c42ff 100644<br>
> --- a/src/gallium/drivers/freedreno/ir3/ir3_nir.c<br>
> +++ b/src/gallium/drivers/freedreno/ir3/ir3_nir.c<br>
> @@ -141,7 +141,7 @@ ir3_optimize_nir(struct ir3_shader *shader, nir_shader *s,<br>
><br>
>         } while (progress);<br>
><br>
> -       OPT_V(s, nir_remove_dead_variables);<br>
> +       OPT_V(s, nir_remove_dead_variables, nir_var_local);<br>
<br>
</div></div>I guess need to add nir_var_global too?  Or maybe just nir_var_all for<br>
good measure..  ttn doesn't generate locals but does globals (and w/<br>
gtn at least I'll start seeing both)..<br></blockquote><div><br></div><div>No, you don't.  Assuming a single funciton, the call to globals_to_locals above will take care of that for you.  Same for i965 and vc4.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
btw, I do remember for lower_io I wanted the mode to be a bitmask so<br>
we could more easily deal w/ multiple modes in the same pass, but that<br>
exceeded # of bits somewhere or other.  I suppose maybe nir_var_all is<br>
good enough..  offhand I can't think of a scenario where we want to<br>
lower some but not all..<br></blockquote><div><br></div><div>I'd rather do that too.  I don't remember why we didn't before (too lazy to search the mailing list).  It shouldn't overflow a uint32_t, there are only 9 modes last I checked.  We may add more, but it'll be a while before we add 22 more.<br></div><div>--Jason<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
BR,<br>
-R<br>
<span class=""><br>
><br>
>         if (fd_mesa_debug & FD_DBG_DISASM) {<br>
>                 debug_printf("----------------------\n");<br>
> diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c<br>
> index 71a1ebbb..6418bc5 100644<br>
> --- a/src/gallium/drivers/vc4/vc4_program.c<br>
> +++ b/src/gallium/drivers/vc4/vc4_program.c<br>
> @@ -1881,7 +1881,7 @@ vc4_shader_ntq(struct vc4_context *vc4, enum qstage stage,<br>
><br>
>          vc4_optimize_nir(c->s);<br>
><br>
> -        nir_remove_dead_variables(c->s);<br>
> +        nir_remove_dead_variables(c->s, nir_var_local);<br>
><br>
>          nir_convert_from_ssa(c->s, true);<br>
><br>
> diff --git a/src/mesa/drivers/dri/i965/brw_nir.c b/src/mesa/drivers/dri/i965/brw_nir.c<br>
> index c62840a..8392189 100644<br>
> --- a/src/mesa/drivers/dri/i965/brw_nir.c<br>
> +++ b/src/mesa/drivers/dri/i965/brw_nir.c<br>
> @@ -468,7 +468,7 @@ brw_preprocess_nir(nir_shader *nir, bool is_scalar)<br>
>     /* Get rid of split copies */<br>
>     nir = nir_optimize(nir, is_scalar);<br>
><br>
> -   OPT(nir_remove_dead_variables);<br>
> +   OPT(nir_remove_dead_variables, nir_var_local);<br>
><br>
>     return nir;<br>
>  }<br>
> --<br>
> 2.5.0.400.gff86faf<br>
><br>
</span>> _______________________________________________<br>
> mesa-dev mailing list<br>
> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
> <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</blockquote></div><br></div></div>