mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-31 22:50:08 +01:00
nir: add complex_loop bool to loop info
In order to be sure loop_terminator_list is an accurate representation of all the jumps in the loop we need to be sure we didn't encounter any other complex behaviour such as continues, nested breaks, etc during analysis. This will be used in the following patch. Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
fef6325e58
commit
5a6b04d94b
2 changed files with 12 additions and 2 deletions
|
|
@ -1801,6 +1801,12 @@ typedef struct {
|
|||
/* Unroll the loop regardless of its size */
|
||||
bool force_unroll;
|
||||
|
||||
/* Does the loop contain complex loop terminators, continues or other
|
||||
* complex behaviours? If this is true we can't rely on
|
||||
* loop_terminator_list to be complete or accurate.
|
||||
*/
|
||||
bool complex_loop;
|
||||
|
||||
nir_loop_terminator *limiting_terminator;
|
||||
|
||||
/* A list of loop_terminators terminating this loop. */
|
||||
|
|
|
|||
|
|
@ -317,15 +317,19 @@ find_loop_terminators(loop_info_state *state)
|
|||
* not find a loop terminator, but there is a break-statement then
|
||||
* we should return false so that we do not try to find trip-count
|
||||
*/
|
||||
if (!nir_is_trivial_loop_if(nif, break_blk))
|
||||
if (!nir_is_trivial_loop_if(nif, break_blk)) {
|
||||
state->loop->info->complex_loop = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Continue if the if contained no jumps at all */
|
||||
if (!break_blk)
|
||||
continue;
|
||||
|
||||
if (nif->condition.ssa->parent_instr->type == nir_instr_type_phi)
|
||||
if (nif->condition.ssa->parent_instr->type == nir_instr_type_phi) {
|
||||
state->loop->info->complex_loop = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
nir_loop_terminator *terminator =
|
||||
rzalloc(state->loop->info, nir_loop_terminator);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue