[Mesa-dev] [PATCH 07/11] nir: Use the nir_pass framework internally for copy_prop, dce, and cse
Ian Romanick
idr at freedesktop.org
Wed Oct 28 16:30:23 PDT 2015
On 10/28/2015 02:32 PM, Jason Ekstrand wrote:
> ---
> src/glsl/nir/nir_opt_copy_propagate.c | 17 ++++++++---------
> src/glsl/nir/nir_opt_cse.c | 21 ++++++++-------------
> src/glsl/nir/nir_opt_dce.c | 20 ++++++++------------
> 3 files changed, 24 insertions(+), 34 deletions(-)
>
> diff --git a/src/glsl/nir/nir_opt_copy_propagate.c b/src/glsl/nir/nir_opt_copy_propagate.c
> index 96520f8..7ee86d4 100644
> --- a/src/glsl/nir/nir_opt_copy_propagate.c
> +++ b/src/glsl/nir/nir_opt_copy_propagate.c
> @@ -257,7 +257,7 @@ copy_prop_block(nir_block *block, void *_state)
> }
>
> static bool
> -nir_copy_prop_impl(nir_function_impl *impl)
> +nir_copy_prop_impl(nir_function_impl *impl, void *unused)
> {
> bool progress = false;
>
> @@ -265,15 +265,14 @@ nir_copy_prop_impl(nir_function_impl *impl)
> return progress;
> }
>
> +static const nir_pass nir_opt_copy_prop_pass = {
> + NULL, /* shader_pass_func */
> + nir_copy_prop_impl,
> + nir_metadata_block_index | nir_metadata_dominance,
> +};
> +
> bool
> nir_copy_prop(nir_shader *shader)
> {
> - bool progress = false;
> -
> - nir_foreach_overload(shader, overload) {
> - if (overload->impl && nir_copy_prop_impl(overload->impl))
> - progress = true;
> - }
> -
> - return progress;
> + return nir_shader_run_pass(shader, &nir_opt_copy_prop_pass);
> }
> diff --git a/src/glsl/nir/nir_opt_cse.c b/src/glsl/nir/nir_opt_cse.c
> index 93a6635..453aa38 100644
> --- a/src/glsl/nir/nir_opt_cse.c
> +++ b/src/glsl/nir/nir_opt_cse.c
> @@ -62,7 +62,7 @@ cse_block(nir_block *block, struct set *instr_set)
> }
>
> static bool
> -nir_opt_cse_impl(nir_function_impl *impl)
> +nir_opt_cse_impl(nir_function_impl *impl, void *unused)
Same comment here as on patch 5.
> {
> struct set *instr_set = nir_instr_set_create(NULL);
>
> @@ -70,24 +70,19 @@ nir_opt_cse_impl(nir_function_impl *impl)
>
> bool progress = cse_block(nir_start_block(impl), instr_set);
>
> - if (progress)
> - nir_metadata_preserve(impl, nir_metadata_block_index |
> - nir_metadata_dominance);
> -
> nir_instr_set_destroy(instr_set);
> return progress;
> }
>
> +static const nir_pass nir_opt_cse_pass = {
> + NULL, /* shader_pass_func */
> + nir_opt_cse_impl,
> + nir_metadata_block_index | nir_metadata_dominance,
> +};
> +
> bool
> nir_opt_cse(nir_shader *shader)
> {
> - bool progress = false;
> -
> - nir_foreach_overload(shader, overload) {
> - if (overload->impl)
> - progress |= nir_opt_cse_impl(overload->impl);
> - }
> -
> - return progress;
> + return nir_shader_run_pass(shader, &nir_opt_cse_pass);
> }
>
> diff --git a/src/glsl/nir/nir_opt_dce.c b/src/glsl/nir/nir_opt_dce.c
> index 6032528..9d133cd 100644
> --- a/src/glsl/nir/nir_opt_dce.c
> +++ b/src/glsl/nir/nir_opt_dce.c
> @@ -146,7 +146,7 @@ delete_block_cb(nir_block *block, void *_state)
> }
>
> static bool
> -nir_opt_dce_impl(nir_function_impl *impl)
> +nir_opt_dce_impl(nir_function_impl *impl, void *unused)
Ditto.
> {
> struct exec_list *worklist = ralloc(NULL, struct exec_list);
> exec_list_make_empty(worklist);
> @@ -163,21 +163,17 @@ nir_opt_dce_impl(nir_function_impl *impl)
> bool progress = false;
> nir_foreach_block(impl, delete_block_cb, &progress);
>
> - if (progress)
> - nir_metadata_preserve(impl, nir_metadata_block_index |
> - nir_metadata_dominance);
> -
> return progress;
> }
>
> +static const nir_pass nir_opt_dce_pass = {
> + NULL, /* shader_pass_func */
> + nir_opt_dce_impl,
> + nir_metadata_block_index | nir_metadata_dominance,
> +};
> +
> bool
> nir_opt_dce(nir_shader *shader)
> {
> - bool progress = false;
> - nir_foreach_overload(shader, overload) {
> - if (overload->impl && nir_opt_dce_impl(overload->impl))
> - progress = true;
> - }
> -
> - return progress;
> + return nir_shader_run_pass(shader, &nir_opt_dce_pass);
> }
>
More information about the mesa-dev
mailing list