mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-24 01:08:34 +02:00
nir: fix ibfe handling in ssa_def_bits_used
The outer condition is fixed to check correctly whether any sign-extended
bit is used.
The inner condition was supposed to check whether src2 is constant.
Fixes: 7d24a9b649 - nir: handle ibfe/ubfe in nir_def_bits_used
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41908>
This commit is contained in:
parent
1559e14770
commit
ba8525aecc
1 changed files with 4 additions and 3 deletions
|
|
@ -2310,7 +2310,8 @@ ssa_def_bits_used(const nir_def *def, int recur)
|
|||
uint64_t def_bits_used = ssa_def_bits_used(&use_alu->def, recur);
|
||||
unsigned bit_size = use_alu->def.bit_size;
|
||||
unsigned offset = nir_alu_src_as_uint(use_alu->src[1]) & (bit_size - 1);
|
||||
unsigned bits = nir_src_is_const(use_alu->src[2].src) ?
|
||||
bool src2_is_const = nir_src_is_const(use_alu->src[2].src);
|
||||
unsigned bits = src2_is_const ?
|
||||
nir_alu_src_as_uint(use_alu->src[2]) & (bit_size - 1) :
|
||||
/* Worst case if bits is not constant. */
|
||||
(bit_size - offset);
|
||||
|
|
@ -2321,8 +2322,8 @@ ssa_def_bits_used(const nir_def *def, int recur)
|
|||
* If bits is not constant, all bits can be the last one.
|
||||
*/
|
||||
if (use_alu->op == nir_op_ibfe &&
|
||||
(def_bits_used >> offset) & ~field_bitmask) {
|
||||
if (nir_alu_src_as_uint(use_alu->src[2]))
|
||||
(def_bits_used & ~(src2_is_const ? field_bitmask : 1u))) {
|
||||
if (src2_is_const)
|
||||
def_bits_used |= BITFIELD64_BIT(bits - 1);
|
||||
else
|
||||
def_bits_used |= field_bitmask;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue