summaryrefslogtreecommitdiffstats
path: root/src/compiler/nir/nir_loop_analyze.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/nir/nir_loop_analyze.c')
-rw-r--r--src/compiler/nir/nir_loop_analyze.c31
1 files changed, 10 insertions, 21 deletions
diff --git a/src/compiler/nir/nir_loop_analyze.c b/src/compiler/nir/nir_loop_analyze.c
index 9c3fd2f286f..c779383b365 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;
}
}
}