aco/ir: remove unused vopc helpers

And rename get_swapped and get_inverse to show that they should only be used for VOPC.

Reviewed-by: Timur Kristóf <timur.kristof@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29467>
This commit is contained in:
Georg Lehmann
2024-05-30 18:54:30 +02:00
committed by Marge Bot
parent 2225a32bb0
commit 7fc8ad2ddd
4 changed files with 8 additions and 66 deletions

View File

@@ -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;

View File

@@ -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)
{

View File

@@ -1746,14 +1746,9 @@ aco_ptr<Instruction> convert_to_DPP(amd_gfx_level gfx_level, aco_ptr<Instruction
bool dpp8);
bool needs_exec_mask(const Instruction* instr);
aco_opcode get_ordered(aco_opcode op);
aco_opcode get_unordered(aco_opcode op);
aco_opcode get_inverse(aco_opcode op);
aco_opcode get_swapped(aco_opcode op);
aco_opcode get_f32_cmp(aco_opcode op);
aco_opcode get_vcmp_inverse(aco_opcode op);
aco_opcode get_vcmp_swapped(aco_opcode op);
aco_opcode get_vcmpx(aco_opcode op);
unsigned get_cmp_bitsize(aco_opcode op);
bool is_fp_cmp(aco_opcode op);
bool is_cmpx(aco_opcode op);
bool can_swap_operands(aco_ptr<Instruction>& instr, aco_opcode* new_op, unsigned idx0 = 0,

View File

@@ -2155,7 +2155,7 @@ optimize_cmp_subgroup_invocation(opt_ctx& ctx, aco_ptr<Instruction>& 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<Instruction>& instr)
{
@@ -2240,7 +2240,7 @@ combine_inverse_comparison(opt_ctx& ctx, aco_ptr<Instruction>& 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;