[Mesa-dev] [PATCH 3/7] nir/search: Make nir_replace_instr take a value for the search expression

Ian Romanick idr at freedesktop.org
Fri May 27 02:13:19 UTC 2016


I'd have swapped the order of this patch and the next.  Then the first 3
patches stand on their own, and the last 4 patches stand on their own.
*shrug*

On 05/26/2016 06:30 PM, Jason Ekstrand wrote:
> ---
>  src/compiler/nir/nir_algebraic.py |  4 ++--
>  src/compiler/nir/nir_search.c     | 12 ++++++++----
>  src/compiler/nir/nir_search.h     |  2 +-
>  3 files changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/src/compiler/nir/nir_algebraic.py b/src/compiler/nir/nir_algebraic.py
> index 285f853..b4df8c8 100644
> --- a/src/compiler/nir/nir_algebraic.py
> +++ b/src/compiler/nir/nir_algebraic.py
> @@ -498,7 +498,7 @@ _algebraic_pass_template = mako.template.Template("""
>  #define NIR_OPT_ALGEBRAIC_STRUCT_DEFS
>  
>  struct transform {
> -   const nir_search_expression *search;
> +   const nir_search_value *search;
>     const nir_search_value *replace;
>     unsigned condition_offset;
>  };
> @@ -513,7 +513,7 @@ struct transform {
>  
>  static const struct transform ${pass_name}_${opcode}_xforms[] = {
>  % for xform in xform_list:
> -   { &${xform.search.name}, ${xform.replace.c_ptr}, ${xform.condition_index} },
> +   { ${xform.search.c_ptr}, ${xform.replace.c_ptr}, ${xform.condition_index} },
>  % endfor
>  };
>  % endfor
> diff --git a/src/compiler/nir/nir_search.c b/src/compiler/nir/nir_search.c
> index 2c2fd92..6e8c829d 100644
> --- a/src/compiler/nir/nir_search.c
> +++ b/src/compiler/nir/nir_search.c
> @@ -36,7 +36,7 @@ struct match_state {
>  };
>  
>  static bool
> -match_expression(const nir_search_expression *expr, nir_alu_instr *instr,
> +match_expression(const nir_search_value *expr, nir_alu_instr *instr,
>                   unsigned num_components, const uint8_t *swizzle,
>                   struct match_state *state);
>  
> @@ -101,7 +101,7 @@ match_value(const nir_search_value *value, nir_alu_instr *instr, unsigned src,
>        if (instr->src[src].src.ssa->parent_instr->type != nir_instr_type_alu)
>           return false;
>  
> -      return match_expression(nir_search_value_as_expression(value),
> +      return match_expression(value,
>                                nir_instr_as_alu(instr->src[src].src.ssa->parent_instr),
>                                num_components, new_swizzle, state);
>  
> @@ -239,10 +239,12 @@ match_value(const nir_search_value *value, nir_alu_instr *instr, unsigned src,
>  }
>  
>  static bool
> -match_expression(const nir_search_expression *expr, nir_alu_instr *instr,
> +match_expression(const nir_search_value *expr_val, nir_alu_instr *instr,
>                   unsigned num_components, const uint8_t *swizzle,
>                   struct match_state *state)
>  {
> +   nir_search_expression *expr = nir_search_value_as_expression(expr_val);
> +
>     if (instr->op != expr->opcode)
>        return false;
>  
> @@ -561,9 +563,11 @@ construct_value(const nir_search_value *value,
>  }
>  
>  nir_alu_instr *
> -nir_replace_instr(nir_alu_instr *instr, const nir_search_expression *search,
> +nir_replace_instr(nir_alu_instr *instr, const nir_search_value *search,
>                    const nir_search_value *replace, void *mem_ctx)
>  {
> +   assert(search->type == nir_search_value_expression);
> +
>     uint8_t swizzle[4] = { 0, 0, 0, 0 };
>  
>     for (unsigned i = 0; i < instr->dest.dest.ssa.num_components; ++i)
> diff --git a/src/compiler/nir/nir_search.h b/src/compiler/nir/nir_search.h
> index a500feb..888a2a3 100644
> --- a/src/compiler/nir/nir_search.h
> +++ b/src/compiler/nir/nir_search.h
> @@ -103,7 +103,7 @@ NIR_DEFINE_CAST(nir_search_value_as_expression, nir_search_value,
>                  nir_search_expression, value)
>  
>  nir_alu_instr *
> -nir_replace_instr(nir_alu_instr *instr, const nir_search_expression *search,
> +nir_replace_instr(nir_alu_instr *instr, const nir_search_value *search,
>                    const nir_search_value *replace, void *mem_ctx);
>  
>  #endif /* _NIR_SEARCH_ */
> 



More information about the mesa-dev mailing list