aco: Fix to_uniform_bool_instr when operands are not suitable.
Don't attempt to transform uniform boolean instructions when
their operands are unsuitable. This can happen eg. due to other
optimizations that combine SALU instructions which clear out
the uniform instruction labels.
Cc: mesa-stable
Fixes: 8a32f57fff
Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11573>
This commit is contained in:
@@ -3448,6 +3448,14 @@ combine_instruction(opt_ctx& ctx, aco_ptr<Instruction>& instr)
|
||||
bool
|
||||
to_uniform_bool_instr(opt_ctx& ctx, aco_ptr<Instruction>& instr)
|
||||
{
|
||||
/* Check every operand to make sure they are suitable. */
|
||||
for (Operand& op : instr->operands) {
|
||||
if (!op.isTemp())
|
||||
return false;
|
||||
if (!ctx.info[op.tempId()].is_uniform_bool() && !ctx.info[op.tempId()].is_uniform_bitwise())
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (instr->opcode) {
|
||||
case aco_opcode::s_and_b32:
|
||||
case aco_opcode::s_and_b64: instr->opcode = aco_opcode::s_and_b32; break;
|
||||
|
||||
Reference in New Issue
Block a user