mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 07:08:04 +02:00
nir: fix selection of loop terminator when two or more have the same limit
We need to add loop terminators to the list in the order we come across them otherwise if two or more have the same exit condition we will select that last one rather than the first one even though its unreachable. This fix is for simple unrolls where we only have a single exit point. When unrolling these type of loops the unreachable terminators and their unreachable branch are removed prior to unrolling. Because of the logic change we also switch some list access in the complex unrolling logic to avoid breakage. Fixes:6772a17acc("nir: Add a loop analysis pass") Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> (cherry picked from commit463f849097)
This commit is contained in:
parent
4cd70c4cdf
commit
81af1a0ae2
2 changed files with 4 additions and 4 deletions
|
|
@ -341,8 +341,8 @@ find_loop_terminators(loop_info_state *state)
|
|||
nir_loop_terminator *terminator =
|
||||
rzalloc(state->loop->info, nir_loop_terminator);
|
||||
|
||||
list_add(&terminator->loop_terminator_link,
|
||||
&state->loop->info->loop_terminator_list);
|
||||
list_addtail(&terminator->loop_terminator_link,
|
||||
&state->loop->info->loop_terminator_list);
|
||||
|
||||
terminator->nif = nif;
|
||||
terminator->break_block = break_blk;
|
||||
|
|
|
|||
|
|
@ -530,14 +530,14 @@ process_loops(nir_shader *sh, nir_cf_node *cf_node, bool *innermost_loop)
|
|||
if (num_lt == 2) {
|
||||
bool limiting_term_second = true;
|
||||
nir_loop_terminator *terminator =
|
||||
list_last_entry(&loop->info->loop_terminator_list,
|
||||
list_first_entry(&loop->info->loop_terminator_list,
|
||||
nir_loop_terminator, loop_terminator_link);
|
||||
|
||||
|
||||
if (terminator->nif == loop->info->limiting_terminator->nif) {
|
||||
limiting_term_second = false;
|
||||
terminator =
|
||||
list_first_entry(&loop->info->loop_terminator_list,
|
||||
list_last_entry(&loop->info->loop_terminator_list,
|
||||
nir_loop_terminator, loop_terminator_link);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue