diff --git a/.pick_status.json b/.pick_status.json index 15bf5779c57..471179130ee 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4,7 +4,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& 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()) {