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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev