diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 88f833812eb..aa06c0d0206 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -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); } diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index fb1de764bef..26ba6acd111 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -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) { diff --git a/src/compiler/nir/nir_lower_mediump.c b/src/compiler/nir/nir_lower_mediump.c index cd6ca19ee01..bd6d270471f 100644 --- a/src/compiler/nir/nir_lower_mediump.c +++ b/src/compiler/nir/nir_lower_mediump.c @@ -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;