From: Rhys Perry Date: Wed, 11 Dec 2019 19:41:22 +0000 (+0000) Subject: aco: check usesModifiers() when identifying a neg/abs X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f29a5a205c11990111fc4eedee423e2b904537b2;p=mesa.git aco: check usesModifiers() when identifying a neg/abs This was fine because a literal used to mean that it didn't use modifiers, but now VOP3 can take a literal on GFX10. Signed-off-by: Rhys Perry Reviewed-By: Timur Kristóf Part-of: --- diff --git a/src/amd/compiler/aco_optimizer.cpp b/src/amd/compiler/aco_optimizer.cpp index 58c5704edba..eef2532e3cd 100644 --- a/src/amd/compiler/aco_optimizer.cpp +++ b/src/amd/compiler/aco_optimizer.cpp @@ -924,13 +924,13 @@ void label_instruction(opt_ctx &ctx, Block& block, aco_ptr& instr) break; } case aco_opcode::v_and_b32: /* abs */ - if (instr->operands[0].constantEquals(0x7FFFFFFF) && instr->operands[1].isTemp()) + if (!instr->usesModifiers() && instr->operands[0].constantEquals(0x7FFFFFFF) && instr->operands[1].isTemp()) ctx.info[instr->definitions[0].tempId()].set_abs(instr->operands[1].getTemp()); else ctx.info[instr->definitions[0].tempId()].set_bitwise(instr.get()); break; case aco_opcode::v_xor_b32: { /* neg */ - if (instr->operands[0].constantEquals(0x80000000u) && instr->operands[1].isTemp()) { + if (!instr->usesModifiers() && instr->operands[0].constantEquals(0x80000000u) && instr->operands[1].isTemp()) { if (ctx.info[instr->operands[1].tempId()].is_neg()) { ctx.info[instr->definitions[0].tempId()].set_temp(ctx.info[instr->operands[1].tempId()].temp); } else {