[Mesa-dev] [PATCH 4/4] glsl: In loop analysis, handle unconditional second assignment.
Jordan Justen
jljusten at gmail.com
Thu Dec 5 13:55:47 PST 2013
Series
Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>
On Thu, Nov 28, 2013 at 11:41 AM, Paul Berry <stereotype441 at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list