From c08bfa110cce2c5d0c613490de02b13b1e4afb82 Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Fri, 23 Apr 2021 14:31:04 +0100 Subject: [PATCH] aco/ra: fix get_reg_for_operand() when the blocking var is a vector MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Rhys Perry Reviewed-by: Daniel Schürmann Part-of: --- src/amd/compiler/aco_register_allocation.cpp | 2 +- src/amd/compiler/tests/test_regalloc.cpp | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/amd/compiler/aco_register_allocation.cpp b/src/amd/compiler/aco_register_allocation.cpp index 0eb52ec..583fb25 100644 --- a/src/amd/compiler/aco_register_allocation.cpp +++ b/src/amd/compiler/aco_register_allocation.cpp @@ -1740,7 +1740,7 @@ void get_reg_for_operand(ra_ctx& ctx, RegisterFile& register_file, uint32_t blocking_id = register_file[operand.physReg()]; RegClass rc = ctx.assignments[blocking_id].rc; Operand pc_op = Operand(Temp{blocking_id, rc}); - pc_op.setFixed(operand.physReg()); + pc_op.setFixed(ctx.assignments[blocking_id].reg); /* make space in the register file for get_reg() and then block the target reg */ register_file.clear(src, operand.regClass()); diff --git a/src/amd/compiler/tests/test_regalloc.cpp b/src/amd/compiler/tests/test_regalloc.cpp index 2f1565d..65a3374 100644 --- a/src/amd/compiler/tests/test_regalloc.cpp +++ b/src/amd/compiler/tests/test_regalloc.cpp @@ -96,3 +96,20 @@ BEGIN_TEST(regalloc.precolor.swap) finish_ra_test(ra_test_policy()); END_TEST + +BEGIN_TEST(regalloc.precolor.blocking_vector) + //>> s2: %tmp0:s[0-1], s1: %tmp1:s[2] = p_startpgm + if (!setup_cs("s2 s1", GFX10)) + return; + + //! s2: %tmp0_2:s[2-3], s1: %tmp1_2:s[1] = p_parallelcopy %tmp0:s[0-1], %tmp1:s[2] + //! p_unit_test %tmp1_2:s[1] + Operand op(inputs[1]); + op.setFixed(PhysReg(1)); + bld.pseudo(aco_opcode::p_unit_test, op); + + //! p_unit_test %tmp0_2:s[2-3] + bld.pseudo(aco_opcode::p_unit_test, inputs[0]); + + finish_ra_test(ra_test_policy()); +END_TEST -- 2.7.4