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:
@@ -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;
|
||||
|
@@ -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)
|
||||
{
|
||||
|
@@ -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,
|
||||
|
@@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user