4 and 5 are

Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net>

On Mon, Jul 23, 2018 at 3:03 AM Timothy Arceri <tarc...@itsqueeze.com>
wrote:

> In order to be sure loop_terminator_list is an accurate
> representation of all the jumps in the loop we need to be sure we
> didn't encounter any other complex behaviour such as continues,
> nested breaks, etc during analysis.
>
> This will be used in the following patch.
> ---
>  src/compiler/nir/nir.h              | 6 ++++++
>  src/compiler/nir/nir_loop_analyze.c | 8 ++++++--
>  2 files changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
> index 3bfe7d7f7bf..336a2ca5ac4 100644
> --- a/src/compiler/nir/nir.h
> +++ b/src/compiler/nir/nir.h
> @@ -1745,6 +1745,12 @@ typedef struct {
>     /* Unroll the loop regardless of its size */
>     bool force_unroll;
>
> +   /* Does the loop contain complex loop terminators, continues or other
> +    * complex behaviours? If this is true we can't rely on
> +    * loop_terminator_list to be complete or accurate.
> +    */
> +   bool complex_loop;
> +
>     nir_loop_terminator *limiting_terminator;
>
>     /* A list of loop_terminators terminating this loop. */
> diff --git a/src/compiler/nir/nir_loop_analyze.c
> b/src/compiler/nir/nir_loop_analyze.c
> index 5454b7691ba..9c3fd2f286f 100644
> --- a/src/compiler/nir/nir_loop_analyze.c
> +++ b/src/compiler/nir/nir_loop_analyze.c
> @@ -317,15 +317,19 @@ find_loop_terminators(loop_info_state *state)
>            * not find a loop terminator, but there is a break-statement
> then
>            * we should return false so that we do not try to find
> trip-count
>            */
> -         if (!nir_is_trivial_loop_if(nif, break_blk))
> +         if (!nir_is_trivial_loop_if(nif, break_blk)) {
> +            state->loop->info->complex_loop = true;
>              return false;
> +         }
>
>           /* Continue if the if contained no jumps at all */
>           if (!break_blk)
>              continue;
>
> -         if (nif->condition.ssa->parent_instr->type == nir_instr_type_phi)
> +         if (nif->condition.ssa->parent_instr->type ==
> nir_instr_type_phi) {
> +            state->loop->info->complex_loop = true;
>              return false;
> +         }
>
>           nir_loop_terminator *terminator =
>              rzalloc(state->loop->info, nir_loop_terminator);
> --
> 2.17.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to