[Mesa-dev] [PATCH 00/21] nir: Functions!
Jason Ekstrand
jason at jlekstrand.net
Mon Feb 15 05:47:42 UTC 2016
Adding Connor to the Cc just in case he missed it.
On Sat, Feb 13, 2016 at 6:14 PM, Jason Ekstrand <jason at jlekstrand.net>
wrote:
> This patch series adds actual function support to NIR. Previously all NIR
> usage relied on GLSL to have lowered functions away entirely. As a result,
> any support for functions that was there was dead code and not really
> tested. With SPIR-V on the horizon, NIR will need real function support.
>
> The series starts by deleting some dead code in glsl_to_nir and then
> reworking the way functions and parameters are handled. Here's the new
> (i.e., actually well-defined) scheme:
>
> - The nir_function_impl struct has a params array that contains pointers
> to the variables that are the functions arguments and a return_var array
> that, if not NULL points to the return variable.
> - Each of these variables has the "param" mode and does not exist in any
> variable list but instead is reachable only through the params array or
> the return_var pointer.
> - Each variable with the "param" mode has a location. For parameters,
> that location is the index into the param array; for return values, the
> location is defined to be -1.
> - Parameters and return values are not printed with the list of locals but
> are, instead, only printed in the argument list and are now printed with
> their type.
>
> Since glsl_to_nir, prog_to_nir, and tgsi_to_nir never produce any functions
> other than main(), it's safe to do these reworks in basically any order.
>
> The next part of the series builds up to doing function inlining. However,
> function inlining requires return lowering which pass depends on being able
> to repair SSA form when it's done so we need an SSA repair pass. This, in
> turn requires a phi builder and, while we're at it, we might as well rework
> the into-SSA pass. Yeah, I know, it's kind of the long way there, but what
> can you do?
>
> Once we have an SSA repair pass, return lowering and function inlining come
> fairly quickly. However, in order to make return lowering possible, we
> have to patch up control-flow handling so it doesn't break when we try
> remove stuff from the top level of the function.
>
> Jason Ekstrand (21):
> nir/glsl: Remove dead function parameter handling code
> nir: Add a new "param" variable mode for parameters and return
> variables
> nir: Add a helper for creating a "bare" nir_function_impl
> nir: Create function parameters in function_impl_create
> nir/print: Factor variable name lookup into a helper
> nir/print: Better function argument printing
> nir/validate: Better function validation
> nir/clone: Add support for cloning a single function_impl
> nir: Add a phi node placement helper
> nir/dominance: Handle unreachable blocks
> nir/vars_to_ssa: Use the new nir_phi_builder helper
> util/bitset: Allow iterating over const bitsets
> nir: Add a pass to repair SSA form
> nir/cf: Handle relinking top-level blocks
> nir: Add a function for comparing cursors
> nir/cf: Make extracting or re-inserting nothing a no-op
> nir/builder: Add a helper for inserting jump instructions
> nir: Add a cursor helper for getting a cursor after any phi nodes
> nir: Add return lowering pass
> nir/builder: Add helpers for easily inserting copy_var intrinsics
> nir: Add a pass to inline functions
>
> src/compiler/Makefile.sources | 5 +
> src/compiler/nir/Makefile.sources | 5 +
> src/compiler/nir/glsl_to_nir.cpp | 51 +---
> src/compiler/nir/nir.c | 115 +++++++-
> src/compiler/nir/nir.h | 38 ++-
> src/compiler/nir/nir_builder.h | 30 ++
> src/compiler/nir/nir_clone.c | 112 +++++--
> src/compiler/nir/nir_control_flow.c | 16 +-
> src/compiler/nir/nir_dominance.c | 6 +-
> src/compiler/nir/nir_inline_functions.c | 270 +++++++++++++++++
> src/compiler/nir/nir_lower_returns.c | 246 ++++++++++++++++
> src/compiler/nir/nir_lower_vars_to_ssa.c | 484
> +++++++++----------------------
> src/compiler/nir/nir_phi_builder.c | 254 ++++++++++++++++
> src/compiler/nir/nir_phi_builder.h | 84 ++++++
> src/compiler/nir/nir_print.c | 76 +++--
> src/compiler/nir/nir_repair_ssa.c | 157 ++++++++++
> src/compiler/nir/nir_validate.c | 24 +-
> src/util/bitset.h | 2 +-
> 18 files changed, 1490 insertions(+), 485 deletions(-)
> create mode 100644 src/compiler/nir/nir_inline_functions.c
> create mode 100644 src/compiler/nir/nir_lower_returns.c
> create mode 100644 src/compiler/nir/nir_phi_builder.c
> create mode 100644 src/compiler/nir/nir_phi_builder.h
> create mode 100644 src/compiler/nir/nir_repair_ssa.c
>
> --
> 2.5.0.400.gff86faf
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160214/bb720632/attachment-0001.html>
More information about the mesa-dev
mailing list