From 2a1e6a140da135e428915245cb4bb010c702b6f5 Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Tue, 2 May 2023 11:54:26 +0200 Subject: [PATCH] aco: also reassign p_extract_vector post ra MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Foz-DB Navi21: Totals from 1223 (0.91% of 134864) affected shaders: CodeSize: 6923888 -> 6913516 (-0.15%) Instrs: 1293744 -> 1291151 (-0.20%) Latency: 16928653 -> 16925035 (-0.02%); split: -0.02%, +0.00% InvThroughput: 2985304 -> 2984775 (-0.02%); split: -0.02%, +0.00% VClause: 32260 -> 32319 (+0.18%) SClause: 54952 -> 54949 (-0.01%) Copies: 83968 -> 81377 (-3.09%) Reviewed-by: Timur Kristóf Part-of: --- src/amd/compiler/aco_optimizer_postRA.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/amd/compiler/aco_optimizer_postRA.cpp b/src/amd/compiler/aco_optimizer_postRA.cpp index b9dd52a..a21bc33 100644 --- a/src/amd/compiler/aco_optimizer_postRA.cpp +++ b/src/amd/compiler/aco_optimizer_postRA.cpp @@ -624,7 +624,8 @@ try_reassign_split_vector(pr_opt_ctx& ctx, aco_ptr& instr) /* Check if the operand is written by p_split_vector. */ Instruction* split_vec = ctx.get(op_instr_idx); - if (split_vec->opcode != aco_opcode::p_split_vector) + if (split_vec->opcode != aco_opcode::p_split_vector && + split_vec->opcode != aco_opcode::p_extract_vector) continue; Operand& split_op = split_vec->operands[0]; @@ -645,6 +646,10 @@ try_reassign_split_vector(pr_opt_ctx& ctx, aco_ptr& instr) continue; PhysReg reg = split_op.physReg(); + if (split_vec->opcode == aco_opcode::p_extract_vector) { + reg = + reg.advance(split_vec->definitions[0].bytes() * split_vec->operands[1].constantValue()); + } for (Definition& def : split_vec->definitions) { if (def.getTemp() != op.getTemp()) { reg = reg.advance(def.bytes()); -- 2.7.4