diff --git a/.pick_status.json b/.pick_status.json index 81bf549a8f5..f5957207f26 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1674,7 +1674,7 @@ "description": "aco: don't assume that demote doesn't cause an empty exec mask", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "f35e229faedb5e19da49846eed119d82228c5d5a", "notes": null diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 66b9cbc4f45..7c8c3ecddb6 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -8646,6 +8646,11 @@ visit_intrinsic(isel_context* ctx, nir_intrinsic_instr* instr) if (ctx->shader->info.maximally_reconverges) ctx->program->needs_wqm = true; + if (ctx->block->loop_nest_depth || ctx->cf_info.parent_if.is_divergent) { + ctx->cf_info.exec.potentially_empty_discard = true; + begin_empty_exec_skip(ctx, &instr->instr, instr->instr.block); + } + break; } case nir_intrinsic_terminate: