From b882598ee1723358e1e19449cbb2619da7abc246 Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Thu, 15 Oct 2020 15:18:40 +0100 Subject: [PATCH] aco: remove some unused optimizations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These are unused now that we almost always use p_parallelcopy for simple copies. No fossil-db changes. Signed-off-by: Rhys Perry Reviewed-by: Timur Kristóf Reviewed-by: Daniel Schürmann Part-of: --- src/amd/compiler/aco_opt_value_numbering.cpp | 11 ++----- src/amd/compiler/aco_optimizer.cpp | 33 ++++---------------- 2 files changed, 9 insertions(+), 35 deletions(-) diff --git a/src/amd/compiler/aco_opt_value_numbering.cpp b/src/amd/compiler/aco_opt_value_numbering.cpp index 12b376fb91c..744bafd941b 100644 --- a/src/amd/compiler/aco_opt_value_numbering.cpp +++ b/src/amd/compiler/aco_opt_value_numbering.cpp @@ -389,15 +389,10 @@ void process_block(vn_ctx& ctx, Block& block) } /* simple copy-propagation through renaming */ - bool copy_instr = - instr->opcode == aco_opcode::s_mov_b32 || - instr->opcode == aco_opcode::s_mov_b64 || - instr->opcode == aco_opcode::v_mov_b32 || - instr->opcode == aco_opcode::p_parallelcopy || - (instr->opcode == aco_opcode::p_create_vector && instr->operands.size() == 1); + bool copy_instr = instr->opcode == aco_opcode::p_parallelcopy || + (instr->opcode == aco_opcode::p_create_vector && instr->operands.size() == 1); if (copy_instr && !instr->definitions[0].isFixed() && instr->operands[0].isTemp() && - instr->operands[0].regClass() == instr->definitions[0].regClass() && - !instr->isDPP() && !((int)instr->format & (int)Format::SDWA)) { + instr->operands[0].regClass() == instr->definitions[0].regClass()) { ctx.renames[instr->definitions[0].tempId()] = instr->operands[0].getTemp(); continue; } diff --git a/src/amd/compiler/aco_optimizer.cpp b/src/amd/compiler/aco_optimizer.cpp index 2d7f848ed94..7c3cdfd667d 100644 --- a/src/amd/compiler/aco_optimizer.cpp +++ b/src/amd/compiler/aco_optimizer.cpp @@ -814,6 +814,11 @@ void label_instruction(opt_ctx &ctx, Block& block, aco_ptr& instr) for (Operand& op : instr->operands) all_const = all_const && (!op.isTemp() || ctx.info[op.tempId()].is_constant_or_literal(32)); perfwarn(ctx.program, all_const, "All instruction operands are constant", instr.get()); + + ASSERTED bool is_copy = instr->opcode == aco_opcode::s_mov_b32 || + instr->opcode == aco_opcode::s_mov_b64 || + instr->opcode == aco_opcode::v_mov_b32; + perfwarn(ctx.program, is_copy && !instr->usesModifiers(), "Use p_parallelcopy instead", instr.get()); } for (unsigned i = 0; i < instr->operands.size(); i++) @@ -1210,10 +1215,7 @@ void label_instruction(opt_ctx &ctx, Block& block, aco_ptr& instr) } break; } - case aco_opcode::s_mov_b32: /* propagate */ - case aco_opcode::s_mov_b64: - case aco_opcode::v_mov_b32: - case aco_opcode::p_parallelcopy: + case aco_opcode::p_parallelcopy: /* propagate */ if (instr->operands[0].isTemp() && ctx.info[instr->operands[0].tempId()].is_vec() && instr->operands[0].regClass() != instr->definitions[0].regClass()) { /* We might not be able to copy-propagate if it's a SGPR->VGPR copy, so @@ -1252,29 +1254,6 @@ void label_instruction(opt_ctx &ctx, Block& block, aco_ptr& instr) if (!ctx.program->needs_wqm) ctx.info[instr->definitions[0].tempId()].set_constant(ctx.program->chip_class, 0u); break; - case aco_opcode::s_movk_i32: { - uint32_t v = static_cast(instr.get())->imm; - v = v & 0x8000 ? (v | 0xffff0000) : v; - ctx.info[instr->definitions[0].tempId()].set_constant(ctx.program->chip_class, v); - break; - } - case aco_opcode::v_bfrev_b32: - case aco_opcode::s_brev_b32: { - if (instr->operands[0].isConstant()) { - uint32_t v = util_bitreverse(instr->operands[0].constantValue()); - ctx.info[instr->definitions[0].tempId()].set_constant(ctx.program->chip_class, v); - } - break; - } - case aco_opcode::s_bfm_b32: { - if (instr->operands[0].isConstant() && instr->operands[1].isConstant()) { - unsigned size = instr->operands[0].constantValue() & 0x1f; - unsigned start = instr->operands[1].constantValue() & 0x1f; - uint32_t v = ((1u << size) - 1u) << start; - ctx.info[instr->definitions[0].tempId()].set_constant(ctx.program->chip_class, v); - } - break; - } case aco_opcode::v_mul_f16: case aco_opcode::v_mul_f32: { /* omod */ ctx.info[instr->definitions[0].tempId()].set_mul(instr.get());