From 2d4493ee11aa653ed4c2cc51b37f9e60b534b8bc Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 20 May 2020 11:32:50 +0200 Subject: [PATCH] aco: sign-extend the input and identity for 8-bit subgroup operations Signed-off-by: Samuel Pitoiset Reviewed-by: Rhys Perry Part-of: --- src/amd/compiler/aco_lower_to_hw_instr.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/amd/compiler/aco_lower_to_hw_instr.cpp b/src/amd/compiler/aco_lower_to_hw_instr.cpp index 1d3061d5dd9..3bd9647f781 100644 --- a/src/amd/compiler/aco_lower_to_hw_instr.cpp +++ b/src/amd/compiler/aco_lower_to_hw_instr.cpp @@ -506,6 +506,18 @@ void emit_reduction(lower_context *ctx, aco_opcode op, ReduceOp reduce_op, unsig Operand(stmp, bld.lm)); } + if (src.regClass() == v1b) { + aco_ptr sdwa{create_instruction(aco_opcode::v_mov_b32, asSDWA(Format::VOP1), 1, 1)}; + sdwa->operands[0] = Operand(PhysReg{tmp}, v1); + sdwa->definitions[0] = Definition(PhysReg{tmp}, v1); + if (reduce_op == imin8 || reduce_op == imax8) + sdwa->sel[0] = sdwa_sbyte; + else + sdwa->sel[0] = sdwa_ubyte; + sdwa->dst_sel = sdwa_udword; + bld.insert(std::move(sdwa)); + } + bool reduction_needs_last_op = false; switch (op) { case aco_opcode::p_reduce: -- 2.30.2