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