From 922f559c3cfc8a3af273f128b0e6711277802194 Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Sun, 6 Jul 2025 21:06:48 +0200 Subject: [PATCH] aco: use new disable_wqm for flatlike MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit No Foz-DB changes on GFX1201. Reviewed-by: Daniel Schürmann Part-of: --- src/amd/compiler/aco_insert_exec_mask.cpp | 6 ++++-- .../instruction_selection/aco_select_nir_intrinsics.cpp | 8 ++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/amd/compiler/aco_insert_exec_mask.cpp b/src/amd/compiler/aco_insert_exec_mask.cpp index e57d68a2577..f382647f197 100644 --- a/src/amd/compiler/aco_insert_exec_mask.cpp +++ b/src/amd/compiler/aco_insert_exec_mask.cpp @@ -64,8 +64,6 @@ needs_exact(aco_ptr& instr) { if (instr->isMIMG()) { return instr->mimg().disable_wqm; - } else if (instr->isFlatLike()) { - return instr->flatlike().disable_wqm; } else { return instr->isEXP() || instr->opcode == aco_opcode::p_dual_src_export_gfx11; } @@ -420,6 +418,8 @@ remove_disable_wqm(Instruction* instr) instr->mubuf().disable_wqm = false; } else if (instr->isMTBUF()) { instr->mtbuf().disable_wqm = false; + } else if (instr->isFlatLike()) { + instr->flatlike().disable_wqm = false; } /* Remove the two masks so that the assembler doesn't need to handle them. */ @@ -841,6 +841,8 @@ instr_disables_wqm(Instruction* instr) return instr->mubuf().disable_wqm; } else if (instr->isMTBUF()) { return instr->mtbuf().disable_wqm; + } else if (instr->isFlatLike()) { + return instr->flatlike().disable_wqm; } return false; diff --git a/src/amd/compiler/instruction_selection/aco_select_nir_intrinsics.cpp b/src/amd/compiler/instruction_selection/aco_select_nir_intrinsics.cpp index c20e8f8de88..95a744c948d 100644 --- a/src/amd/compiler/instruction_selection/aco_select_nir_intrinsics.cpp +++ b/src/amd/compiler/instruction_selection/aco_select_nir_intrinsics.cpp @@ -2622,7 +2622,7 @@ visit_store_global(isel_context* ctx, nir_intrinsic_instr* instr) default: UNREACHABLE("store_global not implemented for this size."); } - aco_ptr flat{create_instruction(op, format, 3, 0)}; + aco_ptr flat{create_instruction(op, format, 5, 0)}; if (write_address.regClass() == s2) { assert(global && write_offset.id() && write_offset.type() == RegType::vgpr); flat->operands[0] = Operand(write_offset); @@ -2633,6 +2633,8 @@ visit_store_global(isel_context* ctx, nir_intrinsic_instr* instr) flat->operands[1] = Operand(s1); } flat->operands[2] = Operand(write_datas[i]); + flat->operands[3] = Operand(); + flat->operands[4] = Operand(); flat->flatlike().cache = get_cache_flags(ctx, access); assert(global || !write_const_offset); flat->flatlike().offset = write_const_offset; @@ -2759,7 +2761,7 @@ visit_global_atomic(isel_context* ctx, nir_intrinsic_instr* instr) } aco_opcode op = instr->def.bit_size == 32 ? op32 : op64; - aco_ptr flat{create_instruction(op, format, 3, return_previous ? 1 : 0)}; + aco_ptr flat{create_instruction(op, format, 5, return_previous ? 1 : 0)}; if (addr.regClass() == s2) { assert(global && offset.id() && offset.type() == RegType::vgpr); flat->operands[0] = Operand(offset); @@ -2770,6 +2772,8 @@ visit_global_atomic(isel_context* ctx, nir_intrinsic_instr* instr) flat->operands[1] = Operand(s1); } flat->operands[2] = Operand(data); + flat->operands[3] = Operand(); + flat->operands[4] = Operand(); if (return_previous) flat->definitions[0] = Definition(dst); flat->flatlike().cache = get_atomic_cache_flags(ctx, return_previous);