nir/builder: Rework the boolean conversion helpers

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>
This commit is contained in:
Jason Ekstrand 2022-11-29 13:10:42 -06:00 committed by Marge Bot
parent d9a24632d3
commit e67e2293fa
6 changed files with 33 additions and 43 deletions

View file

@ -404,6 +404,32 @@ nir_f2fN(nir_builder *b, nir_ssa_def *src, unsigned bit_size)
return nir_convert_to_bit_size(b, src, nir_type_float, 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)
{
@ -1595,42 +1621,6 @@ nir_mask(nir_builder *b, nir_ssa_def *bits, unsigned dst_bit_size)
nir_isub_imm(b, dst_bit_size, nir_u2u32(b, bits)));
}
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)

View 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

View 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);

View 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;

View 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];

View 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) {