[Mesa-dev] [PATCH 01/20] nir: small tidy ups for nir_loop_analyze()

Jason Ekstrand jason at jlekstrand.net
Fri Dec 7 21:31:54 UTC 2018


Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

On Thu, Dec 6, 2018 at 9:08 PM Timothy Arceri <tarceri at itsqueeze.com> wrote:

> Reviewed-by: Thomas Helland <thomashelland90 at gmail.com>
> ---
>  src/compiler/nir/nir_loop_analyze.c | 31 ++++++++++-------------------
>  1 file changed, 10 insertions(+), 21 deletions(-)
>
> diff --git a/src/compiler/nir/nir_loop_analyze.c
> b/src/compiler/nir/nir_loop_analyze.c
> index 9c3fd2f286..c779383b36 100644
> --- a/src/compiler/nir/nir_loop_analyze.c
> +++ b/src/compiler/nir/nir_loop_analyze.c
> @@ -624,8 +624,7 @@ find_trip_count(loop_info_state *state)
>  }
>
>  static bool
> -force_unroll_array_access(loop_info_state *state, nir_shader *ns,
> -                          nir_deref_instr *deref)
> +force_unroll_array_access(loop_info_state *state, nir_deref_instr *deref)
>  {
>     for (nir_deref_instr *d = deref; d; d = nir_deref_instr_parent(d)) {
>        if (d->deref_type != nir_deref_type_array)
> @@ -640,23 +639,18 @@ force_unroll_array_access(loop_info_state *state,
> nir_shader *ns,
>        nir_deref_instr *parent = nir_deref_instr_parent(d);
>        assert(glsl_type_is_array(parent->type) ||
>               glsl_type_is_matrix(parent->type));
> -      if (glsl_get_length(parent->type) == state->loop->info->trip_count)
> {
> -         state->loop->info->force_unroll = true;
> +      if (glsl_get_length(parent->type) == state->loop->info->trip_count)
>           return true;
> -      }
>
> -      if (deref->mode & state->indirect_mask) {
> -         state->loop->info->force_unroll = true;
> +      if (deref->mode & state->indirect_mask)
>           return true;
> -      }
>     }
>
>     return false;
>  }
>
>  static bool
> -force_unroll_heuristics(loop_info_state *state, nir_shader *ns,
> -                        nir_block *block)
> +force_unroll_heuristics(loop_info_state *state, nir_block *block)
>  {
>     nir_foreach_instr(instr, block) {
>        if (instr->type != nir_instr_type_intrinsic)
> @@ -670,12 +664,12 @@ force_unroll_heuristics(loop_info_state *state,
> nir_shader *ns,
>        if (intrin->intrinsic == nir_intrinsic_load_deref ||
>            intrin->intrinsic == nir_intrinsic_store_deref ||
>            intrin->intrinsic == nir_intrinsic_copy_deref) {
> -         if (force_unroll_array_access(state, ns,
> +         if (force_unroll_array_access(state,
>                                         nir_src_as_deref(intrin->src[0])))
>              return true;
>
>           if (intrin->intrinsic == nir_intrinsic_copy_deref &&
> -             force_unroll_array_access(state, ns,
> +             force_unroll_array_access(state,
>                                         nir_src_as_deref(intrin->src[1])))
>              return true;
>        }
> @@ -745,15 +739,10 @@ get_loop_info(loop_info_state *state,
> nir_function_impl *impl)
>     find_trip_count(state);
>
>     nir_shader *ns = impl->function->shader;
> -   foreach_list_typed_safe(nir_cf_node, node, node, &state->loop->body) {
> -      if (node->type == nir_cf_node_block) {
> -         if (force_unroll_heuristics(state, ns,
> nir_cf_node_as_block(node)))
> -            break;
> -      } else {
> -         nir_foreach_block_in_cf_node(block, node) {
> -            if (force_unroll_heuristics(state, ns, block))
> -               break;
> -         }
> +   nir_foreach_block_in_cf_node(block, &state->loop->cf_node) {
> +      if (force_unroll_heuristics(state, block)) {
> +         state->loop->info->force_unroll = true;
> +         break;
>        }
>     }
>  }
> --
> 2.19.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20181207/e512560b/attachment-0001.html>


More information about the mesa-dev mailing list