[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