On 02/10/2014 01:09 PM, Matt Turner wrote: > Array dereferences must have scalar indices, so we cannot vectorize > them. > > Reported-by: Andrew Guertin <li...@dolphinling.net>
Seems like the easy fix. Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> Candidate for 10.1? > --- > src/glsl/opt_vectorize.cpp | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/src/glsl/opt_vectorize.cpp b/src/glsl/opt_vectorize.cpp > index 8ee81f1..dba303d 100644 > --- a/src/glsl/opt_vectorize.cpp > +++ b/src/glsl/opt_vectorize.cpp > @@ -82,6 +82,7 @@ public: > > virtual ir_visitor_status visit_enter(ir_assignment *); > virtual ir_visitor_status visit_enter(ir_swizzle *); > + virtual ir_visitor_status visit_enter(ir_dereference_array *); > virtual ir_visitor_status visit_enter(ir_if *); > virtual ir_visitor_status visit_enter(ir_loop *); > > @@ -289,6 +290,19 @@ ir_vectorize_visitor::visit_enter(ir_swizzle *ir) > return visit_continue; > } > > +/* Upon entering an ir_array_dereference, remove the current assignment from > + * further consideration. Since the index of an array dereference must > scalar, > + * we are not able to vectorize it. > + * > + * FINISHME: If all of scalar indices are identical we could vectorize. > + */ > +ir_visitor_status > +ir_vectorize_visitor::visit_enter(ir_dereference_array *ir) > +{ > + this->current_assignment = NULL; > + return visit_continue_with_parent; > +} > + > /* Since there is no statement to visit between the "then" and "else" > * instructions try to vectorize before, in between, and after them to avoid > * combining statements from different basic blocks. > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev