[Mesa-dev] [PATCH 10/11] nir: Take call instruction into account in copy_prop_vars

Jason Ekstrand jason at jlekstrand.net
Wed Oct 10 19:56:08 UTC 2018


On Sat, Sep 15, 2018 at 12:45 AM Caio Marcelo de Oliveira Filho <
caio.oliveira at intel.com> wrote:

> Calls are not used yet (functions are inlined), but since new code is
> already taking them into account, do it here too.  The convention here
> and in other places is that no writable memory is assumed to remain
> unchanged, as well as global variables.
>
> Also, explicitly state the modes affected (instead of using the
> reverse logic) in one of the apply_for_barrier_modes calls.
>
> Suggested (indirectly) by Jason.
> ---
>
> Jason suggested this for the other pass, so doing this here too.
>
>  src/compiler/nir/nir_opt_copy_prop_vars.c | 17 +++++++++++------
>  1 file changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/src/compiler/nir/nir_opt_copy_prop_vars.c
> b/src/compiler/nir/nir_opt_copy_prop_vars.c
> index 5276aa176d8..f58abfbb69f 100644
> --- a/src/compiler/nir/nir_opt_copy_prop_vars.c
> +++ b/src/compiler/nir/nir_opt_copy_prop_vars.c
> @@ -404,6 +404,14 @@ copy_prop_vars_block(struct copy_prop_var_state
> *state,
>        copy_entry_remove(state, iter);
>
>     nir_foreach_instr_safe(instr, block) {
> +      if (instr->type == nir_instr_type_call) {
> +         apply_barrier_for_modes(copies, nir_var_shader_out |
> +                                         nir_var_global |
> +                                         nir_var_shader_storage |
> +                                         nir_var_shared);
>

As I commented on the dead writes, pass, I think locals should be included
here.  Other than that,

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>


> +         continue;
> +      }
> +
>        if (instr->type != nir_instr_type_intrinsic)
>           continue;
>
> @@ -411,12 +419,9 @@ copy_prop_vars_block(struct copy_prop_var_state
> *state,
>        switch (intrin->intrinsic) {
>        case nir_intrinsic_barrier:
>        case nir_intrinsic_memory_barrier:
> -         /* If we hit a barrier, we need to trash everything that may
> possibly
> -          * be accessible to another thread.  Locals, globals, and things
> of
> -          * the like are safe, however.
> -          */
> -         apply_barrier_for_modes(state, ~(nir_var_local | nir_var_global |
> -                                          nir_var_shader_in |
> nir_var_uniform));
> +         apply_barrier_for_modes(copies, nir_var_shader_out |
> +                                         nir_var_shader_storage |
> +                                         nir_var_shared);
>

Yeah, this is better.


>           break;
>
>        case nir_intrinsic_emit_vertex:
> --
> 2.19.0
>
> _______________________________________________
> 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/20181010/cd0fc929/attachment.html>


More information about the mesa-dev mailing list