In particular, this commit adds it for: - nir_opt_constant_folding - nir_opt_dead_cf - nor_opt_peephole_select - nir_opt_remove_phis - nir_opt_undef
Reviewed-by: Kristian Høgsberg <k...@bitplanet.net> --- src/glsl/nir/nir.h | 14 +++++--------- src/glsl/nir/nir_opt_constant_folding.c | 22 +++++----------------- src/glsl/nir/nir_opt_dead_cf.c | 24 ++++++------------------ src/glsl/nir/nir_opt_peephole_select.c | 21 +++++---------------- src/glsl/nir/nir_opt_remove_phis.c | 18 +++++------------- src/glsl/nir/nir_opt_undef.c | 19 ++++++++----------- 6 files changed, 34 insertions(+), 84 deletions(-) diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h index beca805..3140df8 100644 --- a/src/glsl/nir/nir.h +++ b/src/glsl/nir/nir.h @@ -1604,9 +1604,14 @@ NIR_DECL_PASS(nir_lower_phis_to_scalar) NIR_DECL_PASS(nir_lower_vars_to_ssa) NIR_DECL_PASS(nir_opt_algebraic) NIR_DECL_PASS(nir_opt_algebraic_late) +NIR_DECL_PASS(nir_opt_constant_folding) NIR_DECL_PASS(nir_opt_copy_prop) NIR_DECL_PASS(nir_opt_cse) NIR_DECL_PASS(nir_opt_dce) +NIR_DECL_PASS(nir_opt_dead_cf) +NIR_DECL_PASS(nir_opt_peephole_select) +NIR_DECL_PASS(nir_opt_remove_phis) +NIR_DECL_PASS(nir_opt_undef) nir_shader *nir_shader_create(void *mem_ctx, gl_shader_stage stage, @@ -2020,21 +2025,12 @@ void nir_convert_to_ssa(nir_shader *shader); */ void nir_convert_from_ssa(nir_shader *shader, bool phi_webs_only); -bool nir_opt_constant_folding(nir_shader *shader); - bool nir_opt_global_to_local(nir_shader *shader); -bool nir_opt_dead_cf(nir_shader *shader); - void nir_opt_gcm(nir_shader *shader); -bool nir_opt_peephole_select(nir_shader *shader); bool nir_opt_peephole_ffma(nir_shader *shader); -bool nir_opt_remove_phis(nir_shader *shader); - -bool nir_opt_undef(nir_shader *shader); - void nir_sweep(nir_shader *shader); nir_intrinsic_op nir_intrinsic_from_system_value(gl_system_value val); diff --git a/src/glsl/nir/nir_opt_constant_folding.c b/src/glsl/nir/nir_opt_constant_folding.c index 007b81c..40c1cbe 100644 --- a/src/glsl/nir/nir_opt_constant_folding.c +++ b/src/glsl/nir/nir_opt_constant_folding.c @@ -170,7 +170,7 @@ constant_fold_block(nir_block *block, void *void_state) } static bool -nir_opt_constant_folding_impl(nir_function_impl *impl) +nir_opt_constant_folding_impl(nir_function_impl *impl, void *unused) { struct constant_fold_state state; @@ -180,22 +180,10 @@ nir_opt_constant_folding_impl(nir_function_impl *impl) nir_foreach_block(impl, constant_fold_block, &state); - if (state.progress) - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - return state.progress; } -bool -nir_opt_constant_folding(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_overload(shader, overload) { - if (overload->impl) - progress |= nir_opt_constant_folding_impl(overload->impl); - } - - return progress; -} +const nir_pass nir_opt_constant_folding_pass = { + .impl_pass_func = nir_opt_constant_folding_impl, + .metadata_preserved = nir_metadata_block_index | nir_metadata_dominance, +}; diff --git a/src/glsl/nir/nir_opt_dead_cf.c b/src/glsl/nir/nir_opt_dead_cf.c index 0d4819b..6f6bda4 100644 --- a/src/glsl/nir/nir_opt_dead_cf.c +++ b/src/glsl/nir/nir_opt_dead_cf.c @@ -334,25 +334,13 @@ dead_cf_list(struct exec_list *list, bool *list_ends_in_jump) } static bool -opt_dead_cf_impl(nir_function_impl *impl) +opt_dead_cf_impl(nir_function_impl *impl, void *unused) { bool dummy; - bool progress = dead_cf_list(&impl->body, &dummy); - - if (progress) - nir_metadata_preserve(impl, nir_metadata_none); - - return progress; + return dead_cf_list(&impl->body, &dummy); } -bool -nir_opt_dead_cf(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_overload(shader, overload) - if (overload->impl) - progress |= opt_dead_cf_impl(overload->impl); - - return progress; -} +const nir_pass nir_opt_dead_cf_pass = { + .impl_pass_func = opt_dead_cf_impl, + .metadata_preserved = nir_metadata_none, +}; diff --git a/src/glsl/nir/nir_opt_peephole_select.c b/src/glsl/nir/nir_opt_peephole_select.c index 90902b9..47f083e 100644 --- a/src/glsl/nir/nir_opt_peephole_select.c +++ b/src/glsl/nir/nir_opt_peephole_select.c @@ -227,7 +227,7 @@ nir_opt_peephole_select_block(nir_block *block, void *void_state) } static bool -nir_opt_peephole_select_impl(nir_function_impl *impl) +nir_opt_peephole_select_impl(nir_function_impl *impl, void *unused) { struct peephole_select_state state; @@ -236,21 +236,10 @@ nir_opt_peephole_select_impl(nir_function_impl *impl) nir_foreach_block(impl, nir_opt_peephole_select_block, &state); - if (state.progress) - nir_metadata_preserve(impl, nir_metadata_none); - return state.progress; } -bool -nir_opt_peephole_select(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_overload(shader, overload) { - if (overload->impl) - progress |= nir_opt_peephole_select_impl(overload->impl); - } - - return progress; -} +const nir_pass nir_opt_peephole_select_pass = { + .impl_pass_func = nir_opt_peephole_select_impl, + .metadata_preserved = nir_metadata_none, +}; diff --git a/src/glsl/nir/nir_opt_remove_phis.c b/src/glsl/nir/nir_opt_remove_phis.c index 5bdf7ef..8fb0a80 100644 --- a/src/glsl/nir/nir_opt_remove_phis.c +++ b/src/glsl/nir/nir_opt_remove_phis.c @@ -102,7 +102,7 @@ remove_phis_block(nir_block *block, void *state) } static bool -remove_phis_impl(nir_function_impl *impl) +remove_phis_impl(nir_function_impl *impl, void *unused) { bool progress = false; @@ -111,15 +111,7 @@ remove_phis_impl(nir_function_impl *impl) return progress; } -bool -nir_opt_remove_phis(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_overload(shader, overload) - if (overload->impl) - progress = remove_phis_impl(overload->impl) || progress; - - return progress; -} - +const nir_pass nir_opt_remove_phis_pass = { + .impl_pass_func = remove_phis_impl, + .metadata_preserved = nir_metadata_block_index | nir_metadata_dominance, +}; diff --git a/src/glsl/nir/nir_opt_undef.c b/src/glsl/nir/nir_opt_undef.c index 4ab27a8..c2a0b79 100644 --- a/src/glsl/nir/nir_opt_undef.c +++ b/src/glsl/nir/nir_opt_undef.c @@ -85,20 +85,17 @@ opt_undef_block(nir_block *block, void *data) return true; } -bool -nir_opt_undef(nir_shader *shader) +static bool +opt_undef_impl(nir_function_impl *impl, void *unused) { bool progress = false; - nir_foreach_overload(shader, overload) { - if (overload->impl) { - nir_foreach_block(overload->impl, opt_undef_block, &progress); - if (progress) - nir_metadata_preserve(overload->impl, - nir_metadata_block_index | - nir_metadata_dominance); - } - } + nir_foreach_block(impl, opt_undef_block, &progress); return progress; } + +const nir_pass nir_opt_undef_pass = { + .impl_pass_func = opt_undef_impl, + .metadata_preserved = nir_metadata_block_index | nir_metadata_dominance, +}; -- 2.5.0.400.gff86faf _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev