aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Pitoiset <[email protected]>2020-05-20 11:32:50 +0200
committerMarge Bot <[email protected]>2020-05-21 15:06:48 +0000
commit2d4493ee11aa653ed4c2cc51b37f9e60b534b8bc (patch)
tree4e0a6494bb4e11a45247804fb93cc5aa5bdd3cd2
parentc76595aec2c47463a3ae580c56bd19191f185acf (diff)
aco: sign-extend the input and identity for 8-bit subgroup operations
Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Rhys Perry <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4494>
-rw-r--r--src/amd/compiler/aco_lower_to_hw_instr.cpp12
1 files changed, 12 insertions, 0 deletions
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_instruction> sdwa{create_instruction<SDWA_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: