From 6c510c48478ebeabcd13f749d84828b4f6cccdac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= Date: Tue, 21 Dec 2021 12:17:24 +0100 Subject: [PATCH] aco/ra: fix get_reg_for_operand() in case of stride mismatches MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We have to clear the register file from the previous operand as otherwise, there might be no space left. Totals from 5 (0.00% of 134572) affected shaders: (GFX10.3) CodeSize: 21144 -> 21000 (-0.68%); split: -0.72%, +0.04% Instrs: 3738 -> 3720 (-0.48%); split: -0.51%, +0.03% Latency: 517229 -> 516319 (-0.18%); split: -0.18%, +0.00% InvThroughput: 49068 -> 48902 (-0.34%); split: -0.38%, +0.04% Copies: 501 -> 483 (-3.59%); split: -3.79%, +0.20% Cc: mesa-stable Reviewed-by: Timur Kristóf Part-of: (cherry picked from commit d36a43598c2dd2c490e8e8cb901d067fa56aeb8d) --- .pick_status.json | 2 +- src/amd/compiler/aco_register_allocation.cpp | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 9fd3b16c23e..513259e9772 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -931,7 +931,7 @@ "description": "aco/ra: fix get_reg_for_operand() in case of stride mismatches", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/amd/compiler/aco_register_allocation.cpp b/src/amd/compiler/aco_register_allocation.cpp index a037745aaaf..4ee339b9838 100644 --- a/src/amd/compiler/aco_register_allocation.cpp +++ b/src/amd/compiler/aco_register_allocation.cpp @@ -1898,10 +1898,9 @@ get_reg_for_operand(ra_ctx& ctx, RegisterFile& register_file, dst = operand.physReg(); } else { + /* clear the operand in case it's only a stride mismatch */ + register_file.clear(src, operand.regClass()); dst = get_reg(ctx, register_file, operand.getTemp(), parallelcopy, instr, operand_index); - update_renames( - ctx, register_file, parallelcopy, instr, - instr->opcode != aco_opcode::p_create_vector ? rename_not_killed_ops : (UpdateRenames)0); } Operand pc_op = operand;