From: Daniel Schürmann Date: Fri, 26 Jun 2020 11:13:20 +0000 (+0100) Subject: aco: fix partial copies on GFX6/7 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5c0f82b0d72927b98157300f5c9017f99299fbd4;p=mesa.git aco: fix partial copies on GFX6/7 While we don't allow partial subdword copies, we still need to be able to split 64bit registers Reviewed-by: Rhys Perry Part-of: --- diff --git a/src/amd/compiler/aco_lower_to_hw_instr.cpp b/src/amd/compiler/aco_lower_to_hw_instr.cpp index 1973cca027e..f052f7ed792 100644 --- a/src/amd/compiler/aco_lower_to_hw_instr.cpp +++ b/src/amd/compiler/aco_lower_to_hw_instr.cpp @@ -1323,7 +1323,7 @@ void handle_operands(std::map& copy_map, lower_context* return; } if (it == copy_map.end()) { - if (!skip_partial_copies || ctx->program->chip_class < GFX8) + if (!skip_partial_copies) break; skip_partial_copies = false; it = copy_map.begin(); @@ -1423,7 +1423,8 @@ void handle_operands(std::map& copy_map, lower_context* * a partial copy allows further copies, it should be done instead. */ bool partial_copy = (has_zero_use_bytes == 0xf) || (has_zero_use_bytes == 0xf0); for (std::pair& copy : copy_map) { - if (partial_copy) + /* on GFX6/7, we can only do copies with full registers */ + if (partial_copy || ctx->program->chip_class <= GFX7) break; for (uint16_t i = 0; i < copy.second.bytes; i++) { /* distance might underflow */