This patch is

Reviewed-by: Ian Romanick <ian.d.roman...@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 <kenn...@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;
> 

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to