[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