[Mesa-dev] [PATCH 4/5] glsl: Avoid excess tree walking when folding ir_dereference_arrays.

Ian Romanick idr at freedesktop.org
Mon May 9 17:52:02 UTC 2016


This patch is

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

On 05/09/2016 08:50 AM, Kenneth Graunke wrote:
> If an ir_dereference_array has non-constant components, there's no
> point in trying to evaluate its value (which involves walking down
> the tree and possibly allocating memory for portions of the subtree
> which are constant).
> 
> This also removes convoluted tree walking in opt_constant_folding(),
> which tries to fold constants while walking up the tree.  No need to
> walk down, then up, then down again.
> 
> We did this for swizzles and expressions already, but I was lazy
> back in the day and didn't do this for ir_dereference_array.
> 
> No change in shader-db.
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/compiler/glsl/opt_constant_folding.cpp | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/src/compiler/glsl/opt_constant_folding.cpp b/src/compiler/glsl/opt_constant_folding.cpp
> index 0ea53a5..ee67420 100644
> --- a/src/compiler/glsl/opt_constant_folding.cpp
> +++ b/src/compiler/glsl/opt_constant_folding.cpp
> @@ -85,6 +85,12 @@ ir_constant_fold(ir_rvalue **rvalue)
>     if (swiz && !swiz->val->as_constant())
>        return false;
>  
> +   /* Ditto for array dereferences */
> +   ir_dereference_array *array_ref = (*rvalue)->as_dereference_array();
> +   if (array_ref && (!array_ref->array->as_constant() ||
> +                     !array_ref->array_index->as_constant()))
> +      return false;
> +
>     ir_constant *constant = (*rvalue)->constant_expression_value();
>     if (constant) {
>        *rvalue = constant;
> 



More information about the mesa-dev mailing list