Series Reviewed-by: Jordan Justen <jordan.l.jus...@intel.com>
On Thu, Nov 28, 2013 at 11:41 AM, Paul Berry <stereotype...@gmail.com> wrote: > Previously, loop analysis would set > this->conditional_or_nested_assignment based on the most recently > visited assignment to the variable. As a result, if a vaiable was > assigned to more than once in a loop, the flag might be set > incorrectly. For example, in a loop like this: > > int x; > for (int i = 0; i < 3; i++) { > if (i == 0) > x = 10; > ... > x = 20; > ... > } > > loop analysis would have incorrectly concluded that all assignments to > x were unconditional. > > In practice this was a benign bug, because > conditional_or_nested_assignment is only used to disqualify variables > from being considered as loop induction variables or loop constant > variables, and having multiple assignments also disqualifies a > variable from being considered as either of those things. > > Still, we should get the analysis correct to avoid future confusion. > --- > src/glsl/loop_analysis.cpp | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/src/glsl/loop_analysis.cpp b/src/glsl/loop_analysis.cpp > index f147beb..f801c6b 100644 > --- a/src/glsl/loop_analysis.cpp > +++ b/src/glsl/loop_analysis.cpp > @@ -52,9 +52,10 @@ loop_variable::record_reference(bool in_assignee, > if (in_assignee) { > assert(current_assignment != NULL); > > - this->conditional_or_nested_assignment = > - in_conditional_code_or_nested_loop > - || current_assignment->condition != NULL; > + if (in_conditional_code_or_nested_loop || > + current_assignment->condition != NULL) { > + this->conditional_or_nested_assignment = true; > + } > > if (this->first_assignment == NULL) { > assert(this->num_assignments == 0); > -- > 1.8.4.2 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev