From 7fc8ad2dddea0bac60533b66ff1384e379677e99 Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Thu, 30 May 2024 18:54:30 +0200 Subject: [PATCH] aco/ir: remove unused vopc helpers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit And rename get_swapped and get_inverse to show that they should only be used for VOPC. Reviewed-by: Timur Kristóf Part-of: --- .../compiler/aco_instruction_selection.cpp | 2 +- src/amd/compiler/aco_ir.cpp | 57 +------------------ src/amd/compiler/aco_ir.h | 9 +-- src/amd/compiler/aco_optimizer.cpp | 6 +- 4 files changed, 8 insertions(+), 66 deletions(-) diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index bcbc3e9d9ec..73b66430206 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -1005,7 +1005,7 @@ emit_vopc_instruction(isel_context* ctx, nir_alu_instr* instr, aco_opcode op, Te if (src1.type() == RegType::sgpr) { if (src0.type() == RegType::vgpr) { /* to swap the operands, we might also have to change the opcode */ - op = get_swapped(op); + op = get_vcmp_swapped(op); Temp t = src0; src0 = src1; src1 = t; diff --git a/src/amd/compiler/aco_ir.cpp b/src/amd/compiler/aco_ir.cpp index 6c085fb573f..42f6a9467e0 100644 --- a/src/amd/compiler/aco_ir.cpp +++ b/src/amd/compiler/aco_ir.cpp @@ -879,40 +879,28 @@ needs_exec_mask(const Instruction* instr) } struct CmpInfo { - aco_opcode ordered; - aco_opcode unordered; aco_opcode swapped; aco_opcode inverse; aco_opcode vcmpx; - aco_opcode f32; - unsigned size; }; static ALWAYS_INLINE bool get_cmp_info(aco_opcode op, CmpInfo* info) { - info->ordered = aco_opcode::num_opcodes; - info->unordered = aco_opcode::num_opcodes; info->swapped = aco_opcode::num_opcodes; info->inverse = aco_opcode::num_opcodes; - info->f32 = aco_opcode::num_opcodes; info->vcmpx = aco_opcode::num_opcodes; switch (op) { // clang-format off #define CMP2(ord, unord, ord_swap, unord_swap, sz) \ case aco_opcode::v_cmp_##ord##_f##sz: \ case aco_opcode::v_cmp_n##unord##_f##sz: \ - info->ordered = aco_opcode::v_cmp_##ord##_f##sz; \ - info->unordered = aco_opcode::v_cmp_n##unord##_f##sz; \ info->swapped = op == aco_opcode::v_cmp_##ord##_f##sz ? aco_opcode::v_cmp_##ord_swap##_f##sz \ : aco_opcode::v_cmp_n##unord_swap##_f##sz; \ info->inverse = op == aco_opcode::v_cmp_n##unord##_f##sz ? aco_opcode::v_cmp_##unord##_f##sz \ : aco_opcode::v_cmp_n##ord##_f##sz; \ - info->f32 = op == aco_opcode::v_cmp_##ord##_f##sz ? aco_opcode::v_cmp_##ord##_f32 \ - : aco_opcode::v_cmp_n##unord##_f32; \ info->vcmpx = op == aco_opcode::v_cmp_##ord##_f##sz ? aco_opcode::v_cmpx_##ord##_f##sz \ : aco_opcode::v_cmpx_n##unord##_f##sz; \ - info->size = sz; \ return true; #define CMP(ord, unord, ord_swap, unord_swap) \ CMP2(ord, unord, ord_swap, unord_swap, 16) \ @@ -928,18 +916,14 @@ get_cmp_info(aco_opcode op, CmpInfo* info) #undef CMP2 #define ORD_TEST(sz) \ case aco_opcode::v_cmp_u_f##sz: \ - info->f32 = aco_opcode::v_cmp_u_f32; \ info->swapped = aco_opcode::v_cmp_u_f##sz; \ info->inverse = aco_opcode::v_cmp_o_f##sz; \ info->vcmpx = aco_opcode::v_cmpx_u_f##sz; \ - info->size = sz; \ return true; \ case aco_opcode::v_cmp_o_f##sz: \ - info->f32 = aco_opcode::v_cmp_o_f32; \ info->swapped = aco_opcode::v_cmp_o_f##sz; \ info->inverse = aco_opcode::v_cmp_u_f##sz; \ info->vcmpx = aco_opcode::v_cmpx_o_f##sz; \ - info->size = sz; \ return true; ORD_TEST(16) ORD_TEST(32) @@ -950,7 +934,6 @@ get_cmp_info(aco_opcode op, CmpInfo* info) info->swapped = aco_opcode::v_cmp_##swap##_##type##sz; \ info->inverse = aco_opcode::v_cmp_##inv##_##type##sz; \ info->vcmpx = aco_opcode::v_cmpx_##op##_##type##sz; \ - info->size = sz; \ return true; #define CMPI(op, swap, inv) \ CMPI2(op, swap, inv, i, 16) \ @@ -970,7 +953,6 @@ get_cmp_info(aco_opcode op, CmpInfo* info) #define CMPCLASS(sz) \ case aco_opcode::v_cmp_class_f##sz: \ info->vcmpx = aco_opcode::v_cmpx_class_f##sz; \ - info->size = sz; \ return true; CMPCLASS(16) CMPCLASS(32) @@ -982,40 +964,19 @@ get_cmp_info(aco_opcode op, CmpInfo* info) } aco_opcode -get_ordered(aco_opcode op) -{ - CmpInfo info; - return get_cmp_info(op, &info) ? info.ordered : aco_opcode::num_opcodes; -} - -aco_opcode -get_unordered(aco_opcode op) -{ - CmpInfo info; - return get_cmp_info(op, &info) ? info.unordered : aco_opcode::num_opcodes; -} - -aco_opcode -get_inverse(aco_opcode op) +get_vcmp_inverse(aco_opcode op) { CmpInfo info; return get_cmp_info(op, &info) ? info.inverse : aco_opcode::num_opcodes; } aco_opcode -get_swapped(aco_opcode op) +get_vcmp_swapped(aco_opcode op) { CmpInfo info; return get_cmp_info(op, &info) ? info.swapped : aco_opcode::num_opcodes; } -aco_opcode -get_f32_cmp(aco_opcode op) -{ - CmpInfo info; - return get_cmp_info(op, &info) ? info.f32 : aco_opcode::num_opcodes; -} - aco_opcode get_vcmpx(aco_opcode op) { @@ -1023,20 +984,6 @@ get_vcmpx(aco_opcode op) return get_cmp_info(op, &info) ? info.vcmpx : aco_opcode::num_opcodes; } -unsigned -get_cmp_bitsize(aco_opcode op) -{ - CmpInfo info; - return get_cmp_info(op, &info) ? info.size : 0; -} - -bool -is_fp_cmp(aco_opcode op) -{ - CmpInfo info; - return get_cmp_info(op, &info) && info.ordered != aco_opcode::num_opcodes; -} - bool is_cmpx(aco_opcode op) { diff --git a/src/amd/compiler/aco_ir.h b/src/amd/compiler/aco_ir.h index 5a917c4a879..25c625e577d 100644 --- a/src/amd/compiler/aco_ir.h +++ b/src/amd/compiler/aco_ir.h @@ -1746,14 +1746,9 @@ aco_ptr convert_to_DPP(amd_gfx_level gfx_level, aco_ptr& instr, aco_opcode* new_op, unsigned idx0 = 0, diff --git a/src/amd/compiler/aco_optimizer.cpp b/src/amd/compiler/aco_optimizer.cpp index ba398dc35c9..ef90bed4f2a 100644 --- a/src/amd/compiler/aco_optimizer.cpp +++ b/src/amd/compiler/aco_optimizer.cpp @@ -2155,7 +2155,7 @@ optimize_cmp_subgroup_invocation(opt_ctx& ctx, aco_ptr& instr) return false; /* Adjust opcode so we don't have to care about const_op_idx below. */ - const aco_opcode op = const_op_idx == 0 ? get_swapped(instr->opcode) : instr->opcode; + const aco_opcode op = const_op_idx == 0 ? get_vcmp_swapped(instr->opcode) : instr->opcode; const unsigned wave_size = ctx.program->wave_size; const unsigned val = instr->operands[const_op_idx].constantValue(); @@ -2227,7 +2227,7 @@ is_operand_constant(opt_ctx& ctx, Operand op, unsigned bit_size, uint64_t* value return false; } -/* s_not(cmp(a, b)) -> get_inverse(cmp)(a, b) */ +/* s_not(cmp(a, b)) -> get_vcmp_inverse(cmp)(a, b) */ bool combine_inverse_comparison(opt_ctx& ctx, aco_ptr& instr) { @@ -2240,7 +2240,7 @@ combine_inverse_comparison(opt_ctx& ctx, aco_ptr& instr) if (!cmp) return false; - aco_opcode new_opcode = get_inverse(cmp->opcode); + aco_opcode new_opcode = get_vcmp_inverse(cmp->opcode); if (new_opcode == aco_opcode::num_opcodes) return false;