From: Rhys Perry Date: Tue, 12 Nov 2019 15:53:15 +0000 (+0000) Subject: aco: don't propagate vgprs into v_readlane/v_writelane X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2c98d79d114d3ed82a9e60519d666f51a1172cd3;p=mesa.git aco: don't propagate vgprs into v_readlane/v_writelane Signed-off-by: Rhys Perry Reviewed-by: Daniel Schürmann Fixes: 93c8ebfa ('aco: Initial commit of independent AMD compiler') --- diff --git a/src/amd/compiler/aco_optimizer.cpp b/src/amd/compiler/aco_optimizer.cpp index 679f25b5dda..68f17569e32 100644 --- a/src/amd/compiler/aco_optimizer.cpp +++ b/src/amd/compiler/aco_optimizer.cpp @@ -474,6 +474,13 @@ bool valu_can_accept_literal(opt_ctx& ctx, aco_ptr& instr, unsigned operand == 0 && can_accept_constant(instr, operand); } +bool valu_can_accept_vgpr(aco_ptr& instr, unsigned operand) +{ + if (instr->opcode == aco_opcode::v_readlane_b32 || instr->opcode == aco_opcode::v_writelane_b32) + return operand != 1; + return true; +} + bool parse_base_offset(opt_ctx &ctx, Instruction* instr, unsigned op_index, Temp *base, uint32_t *offset) { Operand op = instr->operands[op_index]; @@ -579,7 +586,7 @@ void label_instruction(opt_ctx &ctx, aco_ptr& instr) /* VALU: propagate neg, abs & inline constants */ else if (instr->isVALU()) { - if (info.is_temp() && info.temp.type() == RegType::vgpr) { + if (info.is_temp() && info.temp.type() == RegType::vgpr && valu_can_accept_vgpr(instr, i)) { instr->operands[i].setTemp(info.temp); info = ctx.info[info.temp.id()]; }