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:

committed by
Marge Bot

parent
019449dad7
commit
8fb6cbdcb6
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user