nir: Add nir_ssa_scalar_is_undef.

Signed-off-by: Georg Lehmann <dadschoorse@gmail.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@collabora.com>
Reviewed-by: Jason Ekstrand <jason.ekstrand@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18183>
This commit is contained in:
Georg Lehmann
2022-08-22 16:32:36 +02:00
committed by Marge Bot
parent cfaff1d341
commit 8eac45b274
3 changed files with 10 additions and 4 deletions
@@ -6399,8 +6399,8 @@ visit_image_store(isel_context* ctx, nir_intrinsic_instr* instr)
if (instr->src[3].ssa->bit_size == 32 || instr->src[3].ssa->bit_size == 16) {
for (uint32_t i = 0; i < instr->num_components; i++) {
nir_ssa_scalar comp = nir_ssa_scalar_resolved(instr->src[3].ssa, i);
if (comp.def->parent_instr->type == nir_instr_type_ssa_undef ||
(nir_ssa_scalar_is_const(comp) && nir_ssa_scalar_as_uint(comp) == 0))
if ((nir_ssa_scalar_is_const(comp) && nir_ssa_scalar_as_uint(comp) == 0) ||
nir_ssa_scalar_is_undef(comp))
dmask &= ~BITFIELD_BIT(i);
}
+6
View File
@@ -2544,6 +2544,12 @@ nir_ssa_scalar_is_const(nir_ssa_scalar s)
return s.def->parent_instr->type == nir_instr_type_load_const;
}
static inline bool
nir_ssa_scalar_is_undef(nir_ssa_scalar s)
{
return s.def->parent_instr->type == nir_instr_type_ssa_undef;
}
static inline nir_const_value
nir_ssa_scalar_as_const_value(nir_ssa_scalar s)
{
+2 -2
View File
@@ -524,7 +524,7 @@ can_fold_16bit_src(nir_ssa_def *ssa, nir_alu_type src_type, bool sext_matters)
bool can_fold = fold_f16 || fold_u16 || fold_i16 || fold_i16_u16;
for (unsigned i = 0; can_fold && i < ssa->num_components; i++) {
nir_ssa_scalar comp = nir_ssa_scalar_resolved(ssa, i);
if (comp.def->parent_instr->type == nir_instr_type_ssa_undef)
if (nir_ssa_scalar_is_undef(comp))
continue;
else if (nir_ssa_scalar_is_const(comp)) {
if (fold_f16)
@@ -560,7 +560,7 @@ fold_16bit_src(nir_builder *b, nir_instr *instr, nir_src *src, nir_alu_type src_
for (unsigned i = 0; i < src->ssa->num_components; i++) {
nir_ssa_scalar comp = nir_ssa_scalar_resolved(src->ssa, i);
if (comp.def->parent_instr->type == nir_instr_type_ssa_undef)
if (nir_ssa_scalar_is_undef(comp))
new_comps[i] = nir_get_ssa_scalar(nir_ssa_undef(b, 1, 16), 0);
else if (nir_ssa_scalar_is_const(comp)) {
nir_ssa_def *constant;