aco: resolve hazards before calls

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Backport-to: 26.0
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
(cherry picked from commit 613b4fe407)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40092>
This commit is contained in:
Rhys Perry 2026-02-11 11:52:54 +00:00 committed by Eric Engestrom
parent 697fbaddb5
commit ba82a16761
2 changed files with 4 additions and 4 deletions

View file

@ -644,7 +644,7 @@
"description": "aco: resolve hazards before calls",
"nominated": true,
"nomination_type": 4,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null,
"notes": null

View file

@ -1914,7 +1914,9 @@ handle_block(Program* program, Ctx& ctx, Block& block)
Handle(state, ctx, instr, block.instructions);
/* Resolve all possible hazards (we don't know what s_setpc_b64 jumps to). */
if (instr->opcode == aco_opcode::s_setpc_b64) {
if (instr->opcode == aco_opcode::s_setpc_b64 || instr->opcode == aco_opcode::s_swappc_b64 ||
instr->opcode == aco_opcode::s_call_b64) {
found_end |= instr->opcode == aco_opcode::s_setpc_b64;
block.instructions.emplace_back(std::move(instr));
std::vector<aco_ptr<Instruction>> resolve_instrs;
@ -1922,8 +1924,6 @@ handle_block(Program* program, Ctx& ctx, Block& block)
block.instructions.insert(std::prev(block.instructions.end()),
std::move_iterator(resolve_instrs.begin()),
std::move_iterator(resolve_instrs.end()));
found_end = true;
continue;
}