[Mesa-dev] [PATCH v4 127/129] nir: Remove deref chain support from analyze_loops

Jason Ekstrand jason at jlekstrand.net
Fri Jun 1 05:07:08 UTC 2018


Note that this patch needs to come late in the series since this pass
can be run after any pass that damages nir_metadata_loop_analysis.
---
 src/compiler/nir/nir_loop_analyze.c | 56 -------------------------------------
 1 file changed, 56 deletions(-)

diff --git a/src/compiler/nir/nir_loop_analyze.c b/src/compiler/nir/nir_loop_analyze.c
index 858c7b4..c389f9f 100644
--- a/src/compiler/nir/nir_loop_analyze.c
+++ b/src/compiler/nir/nir_loop_analyze.c
@@ -630,51 +630,6 @@ find_trip_count(loop_info_state *state)
    state->loop->info->limiting_terminator = limiting_terminator;
 }
 
-/* Checks if we should force the loop to be unrolled regardless of size
- * due to array access heuristics.
- */
-static bool
-force_unroll_array_access_var(loop_info_state *state, nir_shader *ns,
-                              nir_deref_var *variable)
-{
-   nir_deref *tail = &variable->deref;
-
-   while (tail->child != NULL) {
-      tail = tail->child;
-
-      if (tail->deref_type == nir_deref_type_array) {
-
-         nir_deref_array *deref_array = nir_deref_as_array(tail);
-         if (deref_array->deref_array_type != nir_deref_array_type_indirect)
-            continue;
-
-         nir_loop_variable *array_index =
-            get_loop_var(deref_array->indirect.ssa, state);
-
-         if (array_index->type != basic_induction)
-            continue;
-
-         /* If an array is indexed by a loop induction variable, and the
-          * array size is exactly the number of loop iterations, this is
-          * probably a simple for-loop trying to access each element in
-          * turn; the application may expect it to be unrolled.
-          */
-         if (glsl_get_length(variable->deref.type) ==
-             state->loop->info->trip_count) {
-            state->loop->info->force_unroll = true;
-            return state->loop->info->force_unroll;
-         }
-
-         if (variable->var->data.mode & state->indirect_mask) {
-            state->loop->info->force_unroll = true;
-            return state->loop->info->force_unroll;
-         }
-      }
-   }
-
-   return false;
-}
-
 static bool
 force_unroll_array_access(loop_info_state *state, nir_shader *ns,
                           nir_deref_instr *deref)
@@ -719,17 +674,6 @@ force_unroll_heuristics(loop_info_state *state, nir_shader *ns,
       /* Check for arrays variably-indexed by a loop induction variable.
        * Unrolling the loop may convert that access into constant-indexing.
        */
-      if (intrin->intrinsic == nir_intrinsic_load_var ||
-          intrin->intrinsic == nir_intrinsic_store_var ||
-          intrin->intrinsic == nir_intrinsic_copy_var) {
-         unsigned num_vars =
-            nir_intrinsic_infos[intrin->intrinsic].num_variables;
-         for (unsigned i = 0; i < num_vars; i++) {
-            if (force_unroll_array_access_var(state, ns, intrin->variables[i]))
-               return true;
-         }
-      }
-
       if (intrin->intrinsic == nir_intrinsic_load_deref ||
           intrin->intrinsic == nir_intrinsic_store_deref ||
           intrin->intrinsic == nir_intrinsic_copy_deref) {
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list