Module: Mesa Branch: staging/20.1 Commit: afd4b8b88af77646d150be791423caedede82fb2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=afd4b8b88af77646d150be791423caedede82fb2
Author: Daniel Schürmann <[email protected]> Date: Mon Aug 10 16:56:25 2020 +0200 aco: execute branch instructions in WQM if necessary It could happen that only the branch condition was computed in WQM and not the branch instruction. There is now some rendundancy which should be cleaned up. Fixes: 3817fa7a4d1f51c385b28a2e45a1edf227526028 ('aco: fix WQM handling in nested loops') Reviewed-by: Rhys Perry <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6260> (cherry picked from commit fdb97d3d2914c8f887a7968432db4fdbd35d8376) --- .pick_status.json | 2 +- src/amd/compiler/aco_insert_exec_mask.cpp | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 612062ba65f..1a8088e10a9 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -175,7 +175,7 @@ "description": "aco: execute branch instructions in WQM if necessary", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "3817fa7a4d1f51c385b28a2e45a1edf227526028" }, diff --git a/src/amd/compiler/aco_insert_exec_mask.cpp b/src/amd/compiler/aco_insert_exec_mask.cpp index 7246fb74e0c..ccdd5c7d2aa 100644 --- a/src/amd/compiler/aco_insert_exec_mask.cpp +++ b/src/amd/compiler/aco_insert_exec_mask.cpp @@ -165,12 +165,6 @@ void mark_block_wqm(wqm_ctx &ctx, unsigned block_idx) ctx.branch_wqm[block_idx] = true; Block& block = ctx.program->blocks[block_idx]; - aco_ptr<Instruction>& branch = block.instructions.back(); - - if (branch->opcode != aco_opcode::p_branch) { - assert(!branch->operands.empty() && branch->operands[0].isTemp()); - set_needs_wqm(ctx, branch->operands[0].getTemp()); - } /* TODO: this sets more branch conditions to WQM than it needs to * it should be enough to stop at the "exec mask top level" */ @@ -233,6 +227,11 @@ void get_block_needs(wqm_ctx &ctx, exec_ctx &exec_ctx, Block* block) } } + if (instr->format == Format::PSEUDO_BRANCH && ctx.branch_wqm[block->index]) { + needs = WQM; + propagate_wqm = true; + } + if (propagate_wqm) { for (const Operand& op : instr->operands) { if (op.isTemp()) { _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
