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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user