pan/bifrost: do not CSE WMASK

WMASK is used to lower subgroup ballot/ballot_relaxed operations. Unlike
ordinary ALU instructions, the result of WMASK depends not only on its
explicit source, but also on the implicit subgroup execution state, such
as the active lane mask.

Treating WMASK as a normal CSE-able instruction can collapse subgroup
predicate chains incorrectly. This may remove the producer of a predicate
SSA value while leaving later predicate-combine instructions still
referencing it. The invalid SSA source then reaches the Valhall packer
and fails with errors like:
   Invalid type of source 2:
      r2 = ICMP_AND.u32.eq.m1 r2^, r0, %23^

Fixed: dEQP-VK.subgroups.vote.graphics.subgroupallequal_ivec2

Signed-of-by: Ryan Zhang <ryan.zhang@nxp.com>
This commit is contained in:
Ryan Zhang 2026-05-07 18:19:21 +08:00
parent 665ebce297
commit 580d3e2f52

View file

@ -116,6 +116,7 @@ instr_can_cse(const bi_instr *I)
switch (I->op) {
case BI_OPCODE_DTSEL_IMM:
case BI_OPCODE_DISCARD_F32:
case BI_OPCODE_WMASK:
return false;
default:
break;