mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 19:40:10 +01:00
nir/search: don't consider INT_MIN a negative power-of-two
ineg(INT_MIN)/iabs(INT_MIN) won't work as expected. No fossil-db changes. Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12039>
This commit is contained in:
parent
b009467b81
commit
2bb49e4587
1 changed files with 4 additions and 1 deletions
|
|
@ -73,12 +73,15 @@ is_neg_power_of_two(UNUSED struct hash_table *ht, const nir_alu_instr *instr,
|
|||
if (!nir_src_is_const(instr->src[src].src))
|
||||
return false;
|
||||
|
||||
int64_t int_min = u_intN_min(instr->src[src].src.ssa->bit_size);
|
||||
|
||||
for (unsigned i = 0; i < num_components; i++) {
|
||||
nir_alu_type type = nir_op_infos[instr->op].input_types[src];
|
||||
switch (nir_alu_type_get_base_type(type)) {
|
||||
case nir_type_int: {
|
||||
int64_t val = nir_src_comp_as_int(instr->src[src].src, swizzle[i]);
|
||||
if (val >= 0 || !util_is_power_of_two_or_zero64(-val))
|
||||
/* "int_min" is a power-of-two, but negation can cause overflow. */
|
||||
if (val == int_min || val >= 0 || !util_is_power_of_two_or_zero64(-val))
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue