On 10/11/18 3:58 am, Jason Ekstrand wrote:
In case anyone is wondering my opinion based on my experience writing both patch series, I think it's decidedly in the version B camp.  The code changes required to nir_algebraic and nir_search are almost identical between the two besides the whole virtual opcode thing and the changes to front-end NIR producers are basically the same as well due to having to put 32 suffixes on some things.  However, the changes to other parts of NIR aren't required and I feel they're very dirty and special-casey in version A.

For what its worth I like version B better also.


--Jason

On Thu, Nov 8, 2018 at 9:45 PM Jason Ekstrand <ja...@jlekstrand.net <mailto:ja...@jlekstrand.net>> wrote:

    Welcome to this choose-your-own-adventure patch series!  The first six
    patches are good-to-go regardless of choices made later.  However,
    starting
    with patch 7, we have a choice to make.

    Version A of this series reworks NIR conversion opcodes to not have
    sizes
    and instead simply accept any source and destination size regardless of
    whether or not they match.  This is something that Connor and I talked
    about some time ago when we were first adding bit sizes.  With most
    opcodes, if they have any variable-size sources or a variable size
    destination, all variable sized things must match.  This series
    changes the
    rules so that, for conversion ops, they have a variable size source and
    destination which DO NOT have to match.  The upside to this is that
    we get
    to throw away piles of opcodes.  The downside is that it makes a
    number of
    things: validation, nir_search, constant folding, etc. more complicated
    because they now have to deal with a new set of rules.

    Version B of the series, reworks boolean conversions to be like the
    current
    conversions and also have bit sizes.  Unfortunately, this makes hash of
    opt_algebraic because, thanks to some applications love of re-inventing
    Boolean operations, we have piles of optimizations that contain b2f,
    f2b,
    b2i and i2b.  To deal with that problem (and make opt_algebraic
    easier to
    use in general), version B adds virtual unsized conversion opcodes to
    nir_search so that you can make an expression that matches any i2f
    opcode
    regardless of size.  From the perspective of opt_algebraic, then,
    the two
    series are nearly identical.  The downside of this approach is that the
    nir_search changes are kind-of hacky and we still have piles of
    conversion
    opcodes.  The upside, however, is that we don't have the extra mental
    overhead in constant folding, validation, and elsewhere of having this
    opcode special-case.

    What is the fate of NIR?  That's up to the people to decide!

    Cc: Ian Romanick <ian.d.roman...@intel.com
    <mailto:ian.d.roman...@intel.com>>
    Cc: Connor Abbott <cwabbo...@gmail.com <mailto:cwabbo...@gmail.com>>

    Jason Ekstrand COMMON (6):
       nir/opcodes: Pull in the type helpers from constant_expressions
       nir/opcodes: Rename tbool to tbool32
       nir/algebraic: Improve a couple error messages
       nir/algebraic: Set variable classes to the explicit bit size
       nir/algebraic: Clean up some __str__ cruft
       nir/algebraic: Improve error messages for replace expressions

    Jason Ekstrand VERSION A (9):
       nir: Add a concept of an unsized conversion opcode
       nir/builder: Create sized helpers for unsized conversion opcodes
       nir/constant_expressions: Handle unsized conversion ops
       nir/algebraic: Add support for unsized conversion opcodes
       nir: Switch conversions to unsized opcodes
       FIXUP: Fix NIR producers and consumers to use unsized conversions
       FIXUP: nir/opt_algebraic: Drop bit-size suffixes from conversions
       nir/algebraic: Add 32-bit specifiers to a bunch of booleans
       nir: Make boolean conversions unsized like other types

    Jason Ekstrand VERSION B (8):
       nir/algebraic: Refactor codegen a bit
       nir/algebraic: Add support for unsized conversion opcodes
       nir/opt_algebraic: Simplify an optimization using the new search ops
       nir/opt_algebraic: Drop bit-size suffixes from conversions
       nir/opt_algebraic: Add 32-bit specifiers to a bunch of booleans
       nir: Make boolean conversions sized just like the others
       FIXUP: nir/opt_algebraic: Add suffixes to some x2b opcodes
       FIXUP: Fix NIR producers and consumers to use unsized conversions

      src/amd/common/ac_nir_to_llvm.c               |  32 +--
      src/compiler/glsl/glsl_to_nir.cpp             |   2 +-
      src/compiler/nir/nir.c                        |  67 ++++++
      src/compiler/nir/nir.h                        |   7 +
      src/compiler/nir/nir_algebraic.py             | 174 +++++++++++----
      src/compiler/nir/nir_builder.h                |  30 ++-
      src/compiler/nir/nir_builder_opcodes_h.py     |  16 +-
      src/compiler/nir/nir_constant_expressions.h   |   3 +-
      src/compiler/nir/nir_constant_expressions.py  |  59 +++---
      src/compiler/nir/nir_loop_analyze.c           |   7 +-
      src/compiler/nir/nir_lower_idiv.c             |   2 +-
      src/compiler/nir/nir_lower_int64.c            |   2 +-
      src/compiler/nir/nir_opcodes.py               | 152 +++++++------
      src/compiler/nir/nir_opcodes_c.py             |  89 +-------
      src/compiler/nir/nir_opt_algebraic.py         | 199 +++++++++---------
      src/compiler/nir/nir_opt_constant_folding.c   |   5 +-
      src/compiler/nir/nir_search.c                 |  19 +-
      src/compiler/nir/nir_validate.c               |   4 +
      src/compiler/spirv/spirv_to_nir.c             |   3 +-
      src/compiler/spirv/vtn_glsl450.c              |   4 +-
      src/gallium/auxiliary/nir/tgsi_to_nir.c       |   8 +-
      .../drivers/freedreno/ir3/ir3_compiler_nir.c  | 148 ++++++-------
      src/gallium/drivers/vc4/vc4_program.c         |   8 +-
      src/intel/compiler/brw_fs_nir.cpp             |  78 +++----
      src/intel/compiler/brw_vec4_nir.cpp           |  39 ++--
      src/mesa/program/prog_to_nir.c                |   4 +-
      26 files changed, 626 insertions(+), 535 deletions(-)

-- 2.19.1


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to