diff --git a/src/intel/compiler/brw_fs_validate.cpp b/src/intel/compiler/brw_fs_validate.cpp index c9a4a9c7595..9d38dd3bed2 100644 --- a/src/intel/compiler/brw_fs_validate.cpp +++ b/src/intel/compiler/brw_fs_validate.cpp @@ -108,6 +108,13 @@ validate_memory_logical(const fs_visitor &s, const fs_inst *inst) fsv_assert(is_ud_imm(inst->src[MEMORY_LOGICAL_COMPONENTS])); fsv_assert(is_ud_imm(inst->src[MEMORY_LOGICAL_FLAGS])); + enum lsc_opcode op = (enum lsc_opcode) inst->src[MEMORY_LOGICAL_OPCODE].ud; + enum memory_flags flags = (memory_flags)inst->src[MEMORY_LOGICAL_FLAGS].ud; + bool transpose = flags & MEMORY_FLAG_TRANSPOSE; + bool include_helpers = flags & MEMORY_FLAG_INCLUDE_HELPERS; + enum memory_logical_mode mode = + (memory_logical_mode)inst->src[MEMORY_LOGICAL_MODE].ud; + enum lsc_data_size data_size = (enum lsc_data_size) inst->src[MEMORY_LOGICAL_DATA_SIZE].ud; unsigned data_size_B = lsc_data_size_bytes(data_size); @@ -117,12 +124,13 @@ validate_memory_logical(const fs_visitor &s, const fs_inst *inst) data_size == LSC_DATA_SIZE_D16U32 || data_size == LSC_DATA_SIZE_D32 || data_size == LSC_DATA_SIZE_D64); - } - enum lsc_opcode op = (enum lsc_opcode) inst->src[MEMORY_LOGICAL_OPCODE].ud; - enum memory_flags flags = (memory_flags)inst->src[MEMORY_LOGICAL_FLAGS].ud; - bool transpose = flags & MEMORY_FLAG_TRANSPOSE; - bool include_helpers = flags & MEMORY_FLAG_INCLUDE_HELPERS; + if (transpose) { + const unsigned min_alignment = + mode == MEMORY_MODE_SHARED_LOCAL ? 16 : 4; + fsv_assert(inst->src[MEMORY_LOGICAL_ALIGNMENT].ud >= min_alignment); + } + } fsv_assert(!transpose || !include_helpers); fsv_assert(!transpose || lsc_opcode_has_transpose(op)); diff --git a/src/intel/compiler/brw_lower_logical_sends.cpp b/src/intel/compiler/brw_lower_logical_sends.cpp index 5fdf8467a88..b249e176fa1 100644 --- a/src/intel/compiler/brw_lower_logical_sends.cpp +++ b/src/intel/compiler/brw_lower_logical_sends.cpp @@ -1671,6 +1671,7 @@ lower_hdc_memory_logical_send(const fs_builder &bld, fs_inst *inst) */ const bool oword_aligned = block && mode == MEMORY_MODE_SHARED_LOCAL; assert(!oword_aligned || (alignment % 16) == 0); + assert(!block || (alignment % 4) == 0); enum lsc_addr_size addr_size = lsc_addr_size_for_type(addr.type); unsigned addr_size_B = coord_components * lsc_addr_size_bytes(addr_size);