[Mesa-dev] [PATCH 00/11] nir: Add a pass management framework

Jason Ekstrand jason at jlekstrand.net
Wed Oct 28 14:32:00 PDT 2015

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

 .../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


More information about the mesa-dev mailing list