From f31c9b4edf6e8d972f26461c49c5e193bf6d9a13 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 26 May 2020 09:38:27 +0200 Subject: [PATCH] aco: fix subdword copies on GFX6-GFX7 SDWA is only GFX8+. Use v_mov_b32 since the upper 16 bits don't matter. Signed-off-by: Samuel Pitoiset Reviewed-by: Rhys Perry Part-of: --- src/amd/compiler/aco_builder_h.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/amd/compiler/aco_builder_h.py b/src/amd/compiler/aco_builder_h.py index 2b56e04e501..eb655471c90 100644 --- a/src/amd/compiler/aco_builder_h.py +++ b/src/amd/compiler/aco_builder_h.py @@ -382,13 +382,17 @@ public: } else if (op.bytes() > 2) { return pseudo(aco_opcode::p_create_vector, dst, op); } else if (dst.regClass().is_subdword()) { - aco_ptr sdwa{create_instruction(aco_opcode::v_mov_b32, asSDWA(Format::VOP1), 1, 1)}; - sdwa->operands[0] = op; - sdwa->definitions[0] = dst; - sdwa->sel[0] = op.bytes() == 1 ? sdwa_ubyte : sdwa_uword; - sdwa->dst_sel = dst.bytes() == 1 ? sdwa_ubyte : sdwa_uword; - sdwa->dst_preserve = true; - return insert(std::move(sdwa)); + if (program->chip_class >= GFX8) { + aco_ptr sdwa{create_instruction(aco_opcode::v_mov_b32, asSDWA(Format::VOP1), 1, 1)}; + sdwa->operands[0] = op; + sdwa->definitions[0] = dst; + sdwa->sel[0] = op.bytes() == 1 ? sdwa_ubyte : sdwa_uword; + sdwa->dst_sel = dst.bytes() == 1 ? sdwa_ubyte : sdwa_uword; + sdwa->dst_preserve = true; + return insert(std::move(sdwa)); + } else { + return vop1(aco_opcode::v_mov_b32, dst, op); + } } else { unreachable("Unhandled case in bld.copy()"); } -- 2.30.2