[Mesa-dev] [PATCH 1/3] nir/register: Add a parent_instr field

Connor Abbott cwabbott0 at gmail.com
Tue Feb 17 11:56:26 PST 2015


This patch is

Reviewed-by: Connor Abbott <cwabbott0 at gmail.com>

I'll leave it to the others to review the i965 stuff as I'm not as
well-versed in it, although it makes sense to me.

On Tue, Feb 17, 2015 at 2:46 PM, Matt Turner <mattst88 at gmail.com> wrote:
> From: Jason Ekstrand <jason at jlekstrand.net>
>
> This adds a parent_instr field similar to the one for ssa_def.  The
> difference here is that the parent_instr field on a nir_register can be
> NULL if the register does not have a unique definition or if that
> definition does not dominate all its uses.  We set this field in the
> out-of-SSA pass so that backends can get SSA-like information even after
> they have gone out of SSA.
>
> Reviewed-by: Matt Turner <mattst88 at gmail.com>
> ---
>  src/glsl/nir/nir.c          |  1 +
>  src/glsl/nir/nir.h          | 11 ++++++++++-
>  src/glsl/nir/nir_from_ssa.c |  7 +++++++
>  3 files changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c
> index b46fd30..40cae17 100644
> --- a/src/glsl/nir/nir.c
> +++ b/src/glsl/nir/nir.c
> @@ -61,6 +61,7 @@ reg_create(void *mem_ctx, struct exec_list *list)
>  {
>     nir_register *reg = ralloc(mem_ctx, nir_register);
>
> +   reg->parent_instr = NULL;
>     reg->uses = _mesa_set_create(mem_ctx, _mesa_hash_pointer,
>                                  _mesa_key_pointer_equal);
>     reg->defs = _mesa_set_create(mem_ctx, _mesa_hash_pointer,
> diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h
> index ceda977..6e70690 100644
> --- a/src/glsl/nir/nir.h
> +++ b/src/glsl/nir/nir.h
> @@ -64,6 +64,7 @@ name(const in_type *parent)                              \
>  struct nir_function_overload;
>  struct nir_function;
>  struct nir_shader;
> +struct nir_instr;
>
>
>  /**
> @@ -384,6 +385,14 @@ typedef struct {
>      */
>     bool is_packed;
>
> +   /**
> +    * If this pointer is non-NULL then this register has exactly one
> +    * definition and that definition dominates all of its uses.  This is
> +    * set by the out-of-SSA pass so that backends can get SSA-like
> +    * information even once they have gone out of SSA.
> +    */
> +   struct nir_instr *parent_instr;
> +
>     /** set of nir_instr's where this register is used (read from) */
>     struct set *uses;
>
> @@ -406,7 +415,7 @@ typedef enum {
>     nir_instr_type_parallel_copy,
>  } nir_instr_type;
>
> -typedef struct {
> +typedef struct nir_instr {
>     struct exec_node node;
>     nir_instr_type type;
>     struct nir_block *block;
> diff --git a/src/glsl/nir/nir_from_ssa.c b/src/glsl/nir/nir_from_ssa.c
> index 2e7add3..f0105fb 100644
> --- a/src/glsl/nir/nir_from_ssa.c
> +++ b/src/glsl/nir/nir_from_ssa.c
> @@ -513,6 +513,13 @@ get_register_for_ssa_def(nir_ssa_def *def, struct from_ssa_state *state)
>        reg->num_components = def->num_components;
>        reg->num_array_elems = 0;
>
> +      /* This register comes from an SSA definition that was not part of a
> +       * phi-web.  Therefore, we know it has a single unique definition
> +       * that dominates all of its uses.  Therefore, we can copy the
> +       * parent_instr from the SSA def safely.
> +       */
> +      reg->parent_instr = def->parent_instr;
> +
>        _mesa_hash_table_insert(state->ssa_table, def, reg);
>        return reg;
>     }
> --
> 2.0.5
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list