nir/builder: Rework the boolean conversion helpers
authorJason Ekstrand <jason.ekstrand@collabora.com>
Tue, 29 Nov 2022 19:10:42 +0000 (13:10 -0600)
committerMarge Bot <emma+marge@anholt.net>
Thu, 1 Dec 2022 01:10:12 +0000 (01:10 +0000)
Move them up to where the other conversion helpers.  For nir_b2<T>(),
suffix them with N like all the others and make them use
nir_type_convert() as well.

Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Emma Anholt <emma@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20067>

src/compiler/nir/nir_builder.h
src/compiler/nir/nir_builtin_builder.c
src/compiler/nir/nir_lower_io.c
src/compiler/nir/nir_opt_idiv_const.c
src/compiler/nir/nir_opt_load_store_vectorize.c
src/gallium/auxiliary/nir/tgsi_to_nir.c

index 51781cd..4419d38 100644 (file)
@@ -405,6 +405,32 @@ nir_f2fN(nir_builder *b, nir_ssa_def *src, unsigned bit_size)
 }
 
 static inline nir_ssa_def *
+nir_f2b(nir_builder *b, nir_ssa_def *src)
+{
+   return nir_type_convert(b, src, nir_type_float, nir_type_bool1);
+}
+
+static inline nir_ssa_def *
+nir_i2b(nir_builder *b, nir_ssa_def *src)
+{
+   return nir_type_convert(b, src, nir_type_int, nir_type_bool1);
+}
+
+static inline nir_ssa_def *
+nir_b2iN(nir_builder *b, nir_ssa_def *src, uint32_t bit_size)
+{
+   return nir_type_convert(b, src, nir_type_bool,
+         (nir_alu_type) (nir_type_int | bit_size));
+}
+
+static inline nir_ssa_def *
+nir_b2fN(nir_builder *b, nir_ssa_def *src, uint32_t bit_size)
+{
+   return nir_type_convert(b, src, nir_type_bool,
+         (nir_alu_type) (nir_type_float | bit_size));
+}
+
+static inline nir_ssa_def *
 nir_i2fN(nir_builder *b, nir_ssa_def *src, unsigned bit_size)
 {
    return nir_type_convert(b, src, nir_type_int,
@@ -1596,42 +1622,6 @@ nir_mask(nir_builder *b, nir_ssa_def *bits, unsigned dst_bit_size)
 }
 
 static inline nir_ssa_def *
-nir_f2b(nir_builder *build, nir_ssa_def *f)
-{
-   return nir_f2b1(build, f);
-}
-
-static inline nir_ssa_def *
-nir_i2b(nir_builder *build, nir_ssa_def *i)
-{
-   return nir_i2b1(build, i);
-}
-
-static inline nir_ssa_def *
-nir_b2f(nir_builder *build, nir_ssa_def *b, uint32_t bit_size)
-{
-   switch (bit_size) {
-   case 64: return nir_b2f64(build, b);
-   case 32: return nir_b2f32(build, b);
-   case 16: return nir_b2f16(build, b);
-   default:
-      unreachable("Invalid bit-size");
-   };
-}
-
-static inline nir_ssa_def *
-nir_b2i(nir_builder *build, nir_ssa_def *b, uint32_t bit_size)
-{
-   switch (bit_size) {
-   case 64: return nir_b2i64(build, b);
-   case 32: return nir_b2i32(build, b);
-   case 16: return nir_b2i16(build, b);
-   case 8:  return nir_b2i8(build, b);
-   default:
-      unreachable("Invalid bit-size");
-   };
-}
-static inline nir_ssa_def *
 nir_load_barycentric(nir_builder *build, nir_intrinsic_op op,
                      unsigned interp_mode)
 {
index bd11159..d7d0ba6 100644 (file)
@@ -218,7 +218,7 @@ nir_atan(nir_builder *b, nir_ssa_def *y_over_x)
 
    /* range-reduction fixup */
    tmp = nir_ffma(b,
-                  nir_b2f(b, nir_flt(b, one, abs_y_over_x), bit_size),
+                  nir_b2fN(b, nir_flt(b, one, abs_y_over_x), bit_size),
                   nir_ffma_imm12(b, tmp, -2.0f, M_PI_2),
                   tmp);
 
@@ -315,7 +315,7 @@ nir_atan2(nir_builder *b, nir_ssa_def *y, nir_ssa_def *x)
     * coordinate system.
     */
    nir_ssa_def *arc =
-      nir_ffma_imm1(b, nir_b2f(b, flip, bit_size), M_PI_2, nir_atan(b, tan));
+      nir_ffma_imm1(b, nir_b2fN(b, flip, bit_size), M_PI_2, nir_atan(b, tan));
 
    /* Rather convoluted calculation of the sign of the result.  When x < 0 we
     * cannot use fsign because we need to be able to distinguish between
index 2fa2923..1ace5f5 100644 (file)
@@ -1702,7 +1702,7 @@ build_explicit_io_store(nir_builder *b, nir_intrinsic_instr *intrin,
           mode == nir_var_function_temp)
          value = nir_b2b32(b, value);
       else
-         value = nir_b2i(b, value, 32);
+         value = nir_b2iN(b, value, 32);
    }
 
    store->src[0] = nir_src_for_ssa(value);
index 2cd57e7..629c71e 100644 (file)
@@ -67,7 +67,7 @@ build_idiv(nir_builder *b, nir_ssa_def *n, int64_t d)
 {
    int64_t int_min = u_intN_min(n->bit_size);
    if (d == int_min)
-      return nir_b2i(b, nir_ieq_imm(b, n, int_min), n->bit_size);
+      return nir_b2iN(b, nir_ieq_imm(b, n, int_min), n->bit_size);
 
    uint64_t abs_d = d < 0 ? -d : d;
 
index 438fda2..802bcca 100644 (file)
@@ -848,8 +848,8 @@ vectorize_stores(nir_builder *b, struct vectorize_ctx *ctx,
    /* convert booleans */
    nir_ssa_def *low_val = low->intrin->src[low->info->value_src].ssa;
    nir_ssa_def *high_val = high->intrin->src[high->info->value_src].ssa;
-   low_val = low_val->bit_size == 1 ? nir_b2i(b, low_val, 32) : low_val;
-   high_val = high_val->bit_size == 1 ? nir_b2i(b, high_val, 32) : high_val;
+   low_val = low_val->bit_size == 1 ? nir_b2iN(b, low_val, 32) : low_val;
+   high_val = high_val->bit_size == 1 ? nir_b2iN(b, high_val, 32) : high_val;
 
    /* combine the data */
    nir_ssa_def *data_channels[NIR_MAX_VEC_COMPONENTS];
index ad9ed85..6b046a8 100644 (file)
@@ -957,7 +957,7 @@ ttn_alu(nir_builder *b, nir_op op, nir_alu_dest dest, unsigned dest_bitsize,
 {
    nir_ssa_def *def = nir_build_alu_src_arr(b, op, src);
    if (def->bit_size == 1)
-      def = nir_ineg(b, nir_b2i(b, def, dest_bitsize));
+      def = nir_ineg(b, nir_b2iN(b, def, dest_bitsize));
    assert(def->bit_size == dest_bitsize);
    if (dest_bitsize == 64) {
       if (def->num_components > 2) {