diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2015-09-17 12:33:36 -0700 |
---|---|---|
committer | Emil Velikov <emil.l.velikov@gmail.com> | 2015-11-07 15:17:48 +0000 |
commit | 800217a1654ab7932870b1510981f5e38712d58b (patch) | |
tree | 4a90c98774594ea501fe3221d2b54f8ec82a6158 | |
parent | aa739dff86e4adb0b746568f7608bb57f90ceb6f (diff) |
nir: Report progress from nir_split_var_copies().
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
(cherry picked from commit dc18b9357b553a972ea439facfbc55e376f1179f)
-rw-r--r-- | src/glsl/nir/nir.h | 2 | ||||
-rw-r--r-- | src/glsl/nir/nir_split_var_copies.c | 15 |
2 files changed, 13 insertions, 4 deletions
diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h index cb62d5cea1..7117113f04 100644 --- a/src/glsl/nir/nir.h +++ b/src/glsl/nir/nir.h @@ -1629,7 +1629,7 @@ void nir_dump_dom_frontier(nir_shader *shader, FILE *fp); void nir_dump_cfg_impl(nir_function_impl *impl, FILE *fp); void nir_dump_cfg(nir_shader *shader, FILE *fp); -void nir_split_var_copies(nir_shader *shader); +bool nir_split_var_copies(nir_shader *shader); void nir_lower_var_copy_instr(nir_intrinsic_instr *copy, void *mem_ctx); void nir_lower_var_copies(nir_shader *shader); diff --git a/src/glsl/nir/nir_split_var_copies.c b/src/glsl/nir/nir_split_var_copies.c index fc72c078c7..d2ea58a8b7 100644 --- a/src/glsl/nir/nir_split_var_copies.c +++ b/src/glsl/nir/nir_split_var_copies.c @@ -64,6 +64,7 @@ struct split_var_copies_state { void *mem_ctx; void *dead_ctx; + bool progress; }; static nir_deref * @@ -198,6 +199,7 @@ split_var_copy_instr(nir_intrinsic_instr *old_copy, * remove the old one later. */ nir_instr_insert_after(&old_copy->instr, &new_copy->instr); + state->progress = true; } break; @@ -256,24 +258,31 @@ split_var_copies_block(nir_block *block, void *void_state) return true; } -static void +static bool split_var_copies_impl(nir_function_impl *impl) { struct split_var_copies_state state; state.mem_ctx = ralloc_parent(impl); state.dead_ctx = ralloc_context(NULL); + state.progress = false; nir_foreach_block(impl, split_var_copies_block, &state); ralloc_free(state.dead_ctx); + + return state.progress; } -void +bool nir_split_var_copies(nir_shader *shader) { + bool progress = false; + nir_foreach_overload(shader, overload) { if (overload->impl) - split_var_copies_impl(overload->impl); + progress = split_var_copies_impl(overload->impl) || progress; } + + return progress; } |