On Wed, Oct 28, 2015 at 2:34 PM, Jason Ekstrand <ja...@jlekstrand.net> wrote: > On Wed, Oct 28, 2015 at 2:32 PM, Jason Ekstrand <ja...@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. > > Once again, git-send-email failed to send the last patch for whatever > reason. The entire series can be found here: > > http://cgit.freedesktop.org/~jekstrand/mesa/log/?h=wip/nir-pass
Nice. Series, Reviewed-by: Kristian Høgsberg <k...@bitplanet.net> >> 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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev