nir: store the results of divergence analysis on loops

Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7726>
This commit is contained in:
Arcady Goldmints-Orlov
2020-12-24 10:23:33 -06:00
committed by Marge Bot
parent 019449dad7
commit 8fb6cbdcb6
3 changed files with 5 additions and 0 deletions

View File

@@ -465,6 +465,8 @@ nir_loop_create(nir_shader *shader)
nir_loop *loop = rzalloc(shader, nir_loop); nir_loop *loop = rzalloc(shader, nir_loop);
cf_init(&loop->cf_node, nir_cf_node_loop); cf_init(&loop->cf_node, nir_cf_node_loop);
/* Assume that loops are divergent until proven otherwise */
loop->divergent = true;
nir_block *body = nir_block_create(shader); nir_block *body = nir_block_create(shader);
exec_list_make_empty(&loop->body); exec_list_make_empty(&loop->body);

View File

@@ -2783,6 +2783,7 @@ typedef struct {
nir_loop_info *info; nir_loop_info *info;
nir_loop_control control; nir_loop_control control;
bool partially_unrolled; bool partially_unrolled;
bool divergent;
} nir_loop; } nir_loop;
/** /**

View File

@@ -890,6 +890,8 @@ visit_loop(nir_loop *loop, struct divergence_state *state)
loop_state.divergent_loop_break); loop_state.divergent_loop_break);
} }
loop->divergent = (loop_state.divergent_loop_break || loop_state.divergent_loop_continue);
return progress; return progress;
} }