From 599bb79ff48c2fe7fda9512da3747703e0a01859 Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Tue, 7 Apr 2026 17:00:37 +0200 Subject: [PATCH] aco/optimizer: do not try to create 3 byte constant operands MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Operand::get_const will assert. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/work_items/15239 Reviewed-by: Daniel Schürmann Cc: mesa-stable (cherry picked from commit d1ed4e1774913d800e351a0dd271d037dae9d1f4) Part-of: --- .pick_status.json | 2 +- src/amd/compiler/aco_optimizer.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 891d9b40ad2..17f850fdb5d 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3124,7 +3124,7 @@ "description": "aco/optimizer: do not try to create 3 byte constant operands", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/amd/compiler/aco_optimizer.cpp b/src/amd/compiler/aco_optimizer.cpp index dd128ad48cb..9b1ee0c1930 100644 --- a/src/amd/compiler/aco_optimizer.cpp +++ b/src/amd/compiler/aco_optimizer.cpp @@ -1759,6 +1759,8 @@ pseudo_can_accept_constant(const aco_ptr& instr, unsigned operand) assert(instr->operands.size() > operand); if (instr->operands[operand].isFixed()) return false; + if (!util_is_power_of_two_nonzero(instr->operands[operand].bytes())) + return false; switch (instr->opcode) { case aco_opcode::p_extract_vector: @@ -2810,7 +2812,8 @@ label_instruction(opt_ctx& ctx, aco_ptr& instr) instr->operands[0] = op; break; } - } else if (info.is_constant()) { + } else if (info.is_constant() && + util_is_power_of_two_nonzero(instr->definitions[0].bytes())) { /* propagate constants */ uint64_t mask = u_bit_consecutive64(0, instr->definitions[0].bytes() * 8u); uint64_t val = (info.val >> (dst_offset * 8u)) & mask;