diff --git a/src/compiler/nir/nir_deref.c b/src/compiler/nir/nir_deref.c index ad0380aa28b..5b9f97b6620 100644 --- a/src/compiler/nir/nir_deref.c +++ b/src/compiler/nir/nir_deref.c @@ -924,6 +924,9 @@ opt_replace_struct_wrapper_cast(nir_builder *b, nir_deref_instr *cast) if (!parent) return false; + if (cast->cast.align_mul > 0) + return false; + if (!glsl_type_is_struct(parent->type)) return false; @@ -954,6 +957,12 @@ opt_deref_cast(nir_builder *b, nir_deref_instr *cast) if (!is_trivial_deref_cast(cast)) return progress; + /* If this deref still contains useful alignment information, we don't want + * to delete it. + */ + if (cast->cast.align_mul > 0) + return progress; + bool trivial_array_cast = is_trivial_array_deref_cast(cast); assert(cast->dest.is_ssa);