[Mesa-dev] [PATCH 5/6] nir: Delete bany, ball, fany, fall.

Matt Turner mattst88 at gmail.com
Tue Dec 1 16:01:57 PST 2015


On Mon, Nov 30, 2015 at 3:32 PM, Matt Turner <mattst88 at gmail.com> wrote:
> As in the previous patches, these can be implemented as
>
>    any(v) -> any_nequal(v, false)
>    all(v) -> all_equal(v, true)
>
> and their removal simplifies the code in the next patch.
> ---
>  src/gallium/auxiliary/nir/tgsi_to_nir.c                    |  4 +++-
>  src/glsl/nir/nir_lower_alu_to_scalar.c                     |  4 ----
>  src/glsl/nir/nir_opcodes.py                                |  7 -------
>  src/mesa/drivers/dri/i965/brw_fs_nir.cpp                   |  6 ------
>  .../drivers/dri/i965/brw_nir_analyze_boolean_resolves.c    |  3 ---
>  src/mesa/drivers/dri/i965/brw_vec4_nir.cpp                 | 14 --------------
>  src/mesa/program/prog_to_nir.c                             |  4 ++--
>  7 files changed, 5 insertions(+), 37 deletions(-)
>
> diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c
> index 86c2ffa..87d702d 100644
> --- a/src/gallium/auxiliary/nir/tgsi_to_nir.c
> +++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c
> @@ -1062,7 +1062,9 @@ ttn_kill(nir_builder *b, nir_op op, nir_alu_dest dest, nir_ssa_def **src)
>  static void
>  ttn_kill_if(nir_builder *b, nir_op op, nir_alu_dest dest, nir_ssa_def **src)
>  {
> -   nir_ssa_def *cmp = nir_bany4(b, nir_flt(b, src[0], nir_imm_float(b, 0.0)));
> +   nir_ssa_def *cmp = nir_bany_inequal4(b, nir_flt(b, src[0],
> +                                                   nir_imm_float(b, 0.0)),
> +                                        nir_imm_int(b, 0));
>     nir_intrinsic_instr *discard =
>        nir_intrinsic_instr_create(b->shader, nir_intrinsic_discard_if);
>     discard->src[0] = nir_src_for_ssa(cmp);
> diff --git a/src/glsl/nir/nir_lower_alu_to_scalar.c b/src/glsl/nir/nir_lower_alu_to_scalar.c
> index 9313fc0..d267ca3 100644
> --- a/src/glsl/nir/nir_lower_alu_to_scalar.c
> +++ b/src/glsl/nir/nir_lower_alu_to_scalar.c
> @@ -137,10 +137,6 @@ lower_alu_instr_scalar(nir_alu_instr *instr, nir_builder *b)
>        LOWER_REDUCTION(nir_op_bany_inequal, nir_op_ine, nir_op_ior);
>        LOWER_REDUCTION(nir_op_fall_equal, nir_op_seq, nir_op_fand);
>        LOWER_REDUCTION(nir_op_fany_nequal, nir_op_sne, nir_op_for);
> -      LOWER_REDUCTION(nir_op_ball, nir_op_imov, nir_op_iand);
> -      LOWER_REDUCTION(nir_op_bany, nir_op_imov, nir_op_ior);
> -      LOWER_REDUCTION(nir_op_fall, nir_op_fmov, nir_op_fand);
> -      LOWER_REDUCTION(nir_op_fany, nir_op_fmov, nir_op_for);
>
>     default:
>        break;
> diff --git a/src/glsl/nir/nir_opcodes.py b/src/glsl/nir/nir_opcodes.py
> index 37d3dfc..1cd01a4 100644
> --- a/src/glsl/nir/nir_opcodes.py
> +++ b/src/glsl/nir/nir_opcodes.py
> @@ -167,13 +167,6 @@ unop_convert("i2b", tint, tbool, "src0 != 0")
>  unop_convert("b2i", tbool, tint, "src0 ? 1 : 0") # Boolean-to-int conversion
>  unop_convert("u2f", tuint, tfloat, "src0") # Unsigned-to-float conversion.
>
> -unop_reduce("bany", 1, tbool, tbool, "{src}", "{src0} || {src1}", "{src}")
> -unop_reduce("ball", 1, tbool, tbool, "{src}", "{src0} && {src1}", "{src}")
> -unop_reduce("fany", 1, tfloat, tfloat, "{src} != 0.0f", "{src0} || {src1}",
> -            "{src} ? 1.0f : 0.0f")
> -unop_reduce("fall", 1, tfloat, tfloat, "{src} != 0.0f", "{src0} && {src1}",
> -            "{src} ? 1.0f : 0.0f")
> -
>  # Unary floating-point rounding operations.
>
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> index 9b50e4e..f5b203d 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
> @@ -841,12 +841,6 @@ fs_visitor::nir_emit_alu(const fs_builder &bld, nir_alu_instr *instr)
>     case nir_op_fdot2:
>     case nir_op_fdot3:
>     case nir_op_fdot4:
> -   case nir_op_bany2:
> -   case nir_op_bany3:
> -   case nir_op_bany4:
> -   case nir_op_ball2:
> -   case nir_op_ball3:
> -   case nir_op_ball4:
>     case nir_op_ball_fequal2:
>     case nir_op_ball_iequal2:
>     case nir_op_ball_fequal3:
> diff --git a/src/mesa/drivers/dri/i965/brw_nir_analyze_boolean_resolves.c b/src/mesa/drivers/dri/i965/brw_nir_analyze_boolean_resolves.c
> index c995d2b..f4d23d8 100644
> --- a/src/mesa/drivers/dri/i965/brw_nir_analyze_boolean_resolves.c
> +++ b/src/mesa/drivers/dri/i965/brw_nir_analyze_boolean_resolves.c
> @@ -109,9 +109,6 @@ analyze_boolean_resolves_block(nir_block *block, void *void_state)
>           uint8_t resolve_status;
>           nir_alu_instr *alu = nir_instr_as_alu(instr);
>           switch (alu->op) {
> -         case nir_op_bany2:
> -         case nir_op_bany3:
> -         case nir_op_bany4:
>           case nir_op_ball_fequal2:
>           case nir_op_ball_iequal2:
>           case nir_op_ball_fequal3:
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> index 4aed60e..6666457 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
> @@ -1459,20 +1459,6 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
>        inst->saturate = instr->dest.saturate;
>        break;
>
> -   case nir_op_bany2:
> -   case nir_op_bany3:
> -   case nir_op_bany4: {
> -      unsigned swiz =
> -         brw_swizzle_for_size(nir_op_infos[instr->op].input_sizes[0]);
> -
> -      emit(CMP(dst_null_d(), swizzle(op[0], swiz), brw_imm_d(0),
> -               BRW_CONDITIONAL_NZ));
> -      emit(MOV(dst, brw_imm_d(0)));
> -      inst = emit(MOV(dst, brw_imm_d(~0)));
> -      inst->predicate = BRW_PREDICATE_ALIGN16_ANY4H;
> -      break;
> -   }
> -
>     case nir_op_fabs:
>     case nir_op_iabs:
>     case nir_op_fneg:
> diff --git a/src/mesa/program/prog_to_nir.c b/src/mesa/program/prog_to_nir.c
> index 539e3c0..975bd1a 100644
> --- a/src/mesa/program/prog_to_nir.c
> +++ b/src/mesa/program/prog_to_nir.c
> @@ -554,8 +554,8 @@ static void
>  ptn_kil(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src)
>  {
>     nir_ssa_def *cmp = b->shader->options->native_integers ?
> -      nir_bany4(b, nir_flt(b, src[0], nir_imm_float(b, 0.0))) :
> -      nir_fany4(b, nir_slt(b, src[0], nir_imm_float(b, 0.0)));
> +      nir_bany_fnequal4(b, nir_flt(b, src[0], nir_imm_float(b, 0.0)), nir_imm_int(b, 0)) :

This should have been nir_bany_inequal4() instead of
nir_bany_fnequal4(). Fixed locally.

> +      nir_fany_nequal4(b, nir_slt(b, src[0], nir_imm_float(b, 0.0)), nir_imm_float(b, 0.0));
>
>     nir_intrinsic_instr *discard =
>        nir_intrinsic_instr_create(b->shader, nir_intrinsic_discard_if);
> --
> 2.4.9
>


More information about the mesa-dev mailing list