diff options
author | Timothy Arceri <[email protected]> | 2018-11-15 20:40:08 +1100 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2018-12-10 13:59:50 +1100 |
commit | de0aee763833cf4a04f21b209e539a89e7c79c38 (patch) | |
tree | 5cb00adfd7517eafe9249ff9c2629261e3754182 /src/compiler/nir/nir_loop_analyze.c | |
parent | 41a4a6ba6f98d282fe1dde1f35bb38a6d6768596 (diff) |
nir: small tidy ups for nir_loop_analyze()
Reviewed-by: Thomas Helland <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/compiler/nir/nir_loop_analyze.c')
-rw-r--r-- | src/compiler/nir/nir_loop_analyze.c | 31 |
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; } } } |