Module: Mesa Branch: staging/21.3 Commit: 91d66efe60fc35568b660a92e5e29aa894d90e74 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=91d66efe60fc35568b660a92e5e29aa894d90e74
Author: Timur Kristóf <[email protected]> Date: Thu Oct 28 15:48:19 2021 +0200 aco: Fix how p_is_helper interacts with optimizations. p_is_helper doesn't have any operands, so ACO's value numbering and/or the pre-RA optimizer could incorrectly recognize two such instructions as the same. This patch adds exec as an operand to p_is_helper in order to achieve correct behavior. Cc: mesa-stable Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5570 Signed-off-by: Timur Kristóf <[email protected]> Reviewed-by: Daniel Schürmann <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13577> (cherry picked from commit d80c7f3406b80ae684a709de57a9ef3d54a497b6) --- .pick_status.json | 2 +- src/amd/compiler/aco_instruction_selection.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 39ddc1e5ba4..29f5966a7c2 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -247,7 +247,7 @@ "description": "aco: Fix how p_is_helper interacts with optimizations.", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index ebc8555d40d..c64fa763905 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -8702,7 +8702,7 @@ visit_intrinsic(isel_context* ctx, nir_intrinsic_instr* instr) /* load_helper() after demote() get lowered to is_helper(). * Otherwise, these two behave the same. */ Temp dst = get_ssa_temp(ctx, &instr->dest.ssa); - bld.pseudo(aco_opcode::p_is_helper, Definition(dst)); + bld.pseudo(aco_opcode::p_is_helper, Definition(dst), Operand(exec, bld.lm)); ctx->block->kind |= block_kind_needs_lowering; ctx->program->needs_exact = true; break;
