Lines Matching refs:state
84 get_loop_var(nir_ssa_def *value, loop_info_state *state)
86 nir_loop_variable *var = &(state->loop_vars[value->index]);
88 if (!BITSET_TEST(state->loop_vars_init, value->index)) {
100 BITSET_SET(state->loop_vars_init, value->index);
107 loop_info_state *state;
116 nir_loop_variable *var = get_loop_var(def, loop_init_state->state);
128 list_addtail(&var->process_link, &loop_init_state->state->process_list);
210 init_loop_block(nir_block *block, loop_info_state *state,
216 .state = state };
219 state->loop->info->instr_cost += instr_cost(instr, options);
239 mark_invariant(nir_ssa_def *def, loop_info_state *state)
241 nir_loop_variable *var = get_loop_var(def, state);
258 if (!mark_invariant(alu->src[i].src.ssa, state)) {
277 compute_invariance_information(loop_info_state *state)
288 list_for_each_entry_safe(nir_loop_variable, var, &state->process_list,
292 if (mark_invariant(var->def, state))
370 compute_induction_information(loop_info_state *state)
375 list_for_each_entry_safe(nir_loop_variable, var, &state->process_list,
393 nir_basic_induction_var *biv = rzalloc(state, nir_basic_induction_var);
398 nir_loop_variable *src_var = get_loop_var(src->src.ssa, state);
414 src_var = get_loop_var(&src_phi_alu->dest.dest.ssa, state);
495 nir_loop_info *info = state->loop->info;
504 list_for_each_entry(nir_loop_variable, var, &state->process_list,
522 find_loop_terminators(loop_info_state *state)
525 foreach_list_typed_safe(nir_cf_node, node, node, &state->loop->body) {
549 state->loop->info->complex_loop = true;
558 state->loop->info->complex_loop = true;
563 rzalloc(state->loop->info, nir_loop_terminator);
566 &state->loop->info->loop_terminator_list);
587 find_array_access_via_induction(loop_info_state *state,
596 nir_loop_variable *array_index = get_loop_var(d->arr.index.ssa, state);
618 guess_loop_limit(loop_info_state *state, nir_const_value *limit_val,
623 nir_foreach_block_in_cf_node(block, &state->loop->cf_node) {
637 find_array_access_via_induction(state,
651 find_array_access_via_induction(state,
675 nir_loop_terminator *terminator, loop_info_state *state)
974 loop_info_state *state)
980 if (get_loop_var(lhs.def, state)->type == basic_induction) {
985 } else if (get_loop_var(rhs.def, state)->type == basic_induction) {
1000 loop_info_state *state)
1039 get_induction_and_limit_vars(src, ind, limit, limit_rhs, state)) {
1059 find_trip_count(loop_info_state *state, unsigned execution_mode)
1067 &state->loop->info->loop_terminator_list,
1088 &limit_rhs, state)) {
1102 &limit, &limit_rhs, state);
1124 if (!try_find_limit_of_alu(limit, &limit_val, terminator, state)) {
1126 if (!guess_loop_limit(state, &limit_val, basic_ind)) {
1144 get_loop_var(basic_ind.def, state)->ind;
1189 if (state->loop->info->guessed_trip_count == 0 ||
1190 state->loop->info->guessed_trip_count > iterations)
1191 state->loop->info->guessed_trip_count = iterations;
1206 state->loop->info->exact_trip_count_known = trip_count_known;
1208 state->loop->info->max_trip_count = max_trip_count;
1209 state->loop->info->limiting_terminator = limiting_terminator;
1213 force_unroll_array_access(loop_info_state *state, nir_deref_instr *deref,
1216 unsigned array_size = find_array_access_via_induction(state, deref, NULL);
1218 if ((array_size == state->loop->info->max_trip_count) &&
1225 if (nir_deref_mode_must_be(deref, state->indirect_mask))
1228 if (contains_sampler && state->force_unroll_sampler_indirect)
1236 force_unroll_heuristics(loop_info_state *state, nir_block *block)
1249 if (force_unroll_array_access(state, deref, true))
1266 if (force_unroll_array_access(state,
1272 force_unroll_array_access(state,
1283 get_loop_info(loop_info_state *state, nir_function_impl *impl)
1291 foreach_list_typed_safe(nir_cf_node, node, node, &state->loop->body) {
1295 init_loop_block(nir_cf_node_as_block(node), state,
1301 init_loop_block(block, state, true, false, options);
1306 init_loop_block(block, state, false, true, options);
1318 if (!find_loop_terminators(state)) {
1320 &state->loop->info->loop_terminator_list,
1329 compute_invariance_information(state);
1332 if (!compute_induction_information(state))
1336 find_trip_count(state, impl->function->shader->info.float_controls_execution_mode);
1338 nir_foreach_block_in_cf_node(block, &state->loop->cf_node) {
1339 if (force_unroll_heuristics(state, block)) {
1340 state->loop->info->force_unroll = true;
1350 loop_info_state *state = rzalloc(mem_ctx, loop_info_state);
1351 state->loop_vars = ralloc_array(mem_ctx, nir_loop_variable,
1353 state->loop_vars_init = rzalloc_array(mem_ctx, BITSET_WORD,
1355 state->loop = loop;
1357 list_inithead(&state->process_list);
1366 return state;
1398 loop_info_state *state = initialize_loop_info_state(loop, mem_ctx, impl);
1399 state->indirect_mask = indirect_mask;
1400 state->force_unroll_sampler_indirect = force_unroll_sampler_indirect;
1402 get_loop_info(state, impl);