diff --git a/src/amd/compiler/aco_optimizer.cpp b/src/amd/compiler/aco_optimizer.cpp index b4bf499d80b..8af27ce7d03 100644 --- a/src/amd/compiler/aco_optimizer.cpp +++ b/src/amd/compiler/aco_optimizer.cpp @@ -4604,6 +4604,11 @@ apply_literals(opt_ctx& ctx, aco_ptr& instr) } } + /* allow more s_addk_i32 optimizations if carry isn't used */ + if (instr->opcode == aco_opcode::s_add_u32 && ctx.uses[instr->definitions[1].tempId()] == 0 && + (instr->operands[0].isLiteral() || instr->operands[1].isLiteral())) + instr->opcode = aco_opcode::s_add_i32; + ctx.instructions.emplace_back(std::move(instr)); }