[Mesa-dev] [PATCH 00/11] nir: Add a pass management framework
Jason Ekstrand
jason at jlekstrand.net
Sat Oct 31 15:38:19 PDT 2015
FYI: I just force-pushed my wip/nir-pass branch with the following changes:
1) nir_pass no longer contains a data pointer
2) All of the nir_shader_run_pass-type functions now take a
nir_shader** so we can replace it for nir_clone testing
3) The nir_shader_optimize function now takes a null-terminated
nir_pass** instead of a nir_pass* and a number of passes.
On Wed, Oct 28, 2015 at 2:32 PM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> This series adds a nir_pass datastructure and some helpers for managing
> optimization and lowering passes. I've been meaning to get around to this
> for some time. There are a couple of primary benifits to this:
>
> First, this gives us a central place to put things such as validating the
> shader, printing it if it changes, etc. Right now, the i965 backend calls
> nir_validate_shader after each pass. We would also like to add something
> like we have in the i965 backend where it can be set to dump the IR to a
> file after every pass that changess it.
>
> Mor importantly, though, it moves metadata out of the passes them selves
> and into the runner. In the process of putting this series together, I
> found at least 3 or 4 optimization passes that don't properly invalidate
> metadata. By putting a metadata_preserved field in nir_pass and handling
> metadata in the pass runner, we make it much less likely that a pass will
> get this wrong. LLVM has a similar optimization pass architecture for
> precicely this reason.
>
> As a nice little side-benifit, we no longer have to iterate over all of the
> overloads with non-NULL impl pointers in each pass.
>
> Jason Ekstrand (11):
> nir: Move nir_metadata.c to nir_pass.c
> nir: Add a pass-running infastructure
> nir: Unexpose _impl versions of copy_prop and dce
> nir/alu_to_scalar: Use the nir_pass framework internally
> nir/phis_to_scalar: Use the nir_pass framework internally
> nir/lower_vars_to_ssa: Use the nir_pass framework internally
> nir: Use the nir_pass framework internally for copy_prop, dce, and cse
> nir/algebraic: Use the nir_pass framework internally
> nir: Use the nir_pass framework internally for more passes
> ir3: Use nir_pass for lower_if_else
> nir: Expose nir_pass structures rather than functions for several
> passes
>
> .../drivers/freedreno/ir3/ir3_compiler_nir.c | 28 +++--
> src/gallium/drivers/freedreno/ir3/ir3_nir.h | 2 +-
> .../drivers/freedreno/ir3/ir3_nir_lower_if_else.c | 22 ++--
> src/gallium/drivers/vc4/vc4_program.c | 28 +++--
> src/glsl/Makefile.sources | 2 +-
> src/glsl/nir/nir.h | 57 ++++++----
> src/glsl/nir/nir_algebraic.py | 39 +++----
> src/glsl/nir/nir_lower_alu_to_scalar.c | 58 +++++++----
> src/glsl/nir/nir_lower_phis_to_scalar.c | 27 ++---
> src/glsl/nir/nir_lower_vars_to_ssa.c | 18 ++--
> src/glsl/nir/nir_metadata.c | 54 ----------
> src/glsl/nir/nir_opt_constant_folding.c | 23 ++--
> src/glsl/nir/nir_opt_copy_propagate.c | 21 ++--
> src/glsl/nir/nir_opt_cse.c | 24 ++---
> src/glsl/nir/nir_opt_dce.c | 24 ++---
> src/glsl/nir/nir_opt_dead_cf.c | 25 ++---
> src/glsl/nir/nir_opt_peephole_select.c | 22 ++--
> src/glsl/nir/nir_opt_remove_phis.c | 19 ++--
> src/glsl/nir/nir_opt_undef.c | 20 ++--
> src/glsl/nir/nir_pass.c | 116 +++++++++++++++++++++
> src/mesa/drivers/dri/i965/brw_nir.c | 67 ++++--------
> 21 files changed, 328 insertions(+), 368 deletions(-)
> delete mode 100644 src/glsl/nir/nir_metadata.c
> create mode 100644 src/glsl/nir/nir_pass.c
>
> --
> 2.5.0.400.gff86faf
>
More information about the mesa-dev
mailing list