diff options
author | Ian Romanick <[email protected]> | 2020-04-27 12:11:17 -0700 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-04-28 20:33:56 +0000 |
commit | 7b869710a1c29b535aceda74220594f12dc3beb0 (patch) | |
tree | 4b6b4528699058260713f85ae77e6c1ca10b49d4 /src | |
parent | 656051d735c949021e7eb206b6c4a633cc76936f (diff) |
nir/algebraic: Require operands to iand be 32-bit
With the mask value 0x80000000, the other operand must be 32-bit. This
fixes failures in
dEQP-VK.subgroups.ballot_mask.ext_shader_subgroup_ballot.*.gl_subgroupgemaskarb_*
tests from Vulkan 1.2.2 CTS.
Checking one of the tests, it appears that the tests are doing 64-bit
iand with 0x0000000080000000, then comparing the result with zero.
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/2834
Fixes: 88eb8f190bd ("nir/algebraic: Simplify logic to detect sign of an integer")
Reviewed-by: Eric Anholt <[email protected]>
Reviewed-by: Alyssa Rosenzweig <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4770>
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/nir/nir_opt_algebraic.py | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py index b2643641a8e..58ff35af0b0 100644 --- a/src/compiler/nir/nir_opt_algebraic.py +++ b/src/compiler/nir/nir_opt_algebraic.py @@ -517,10 +517,10 @@ optimizations.extend([ (('iand@32', a, ('inot', ('ishr', a, 31))), ('imax', a, 0)), # Simplify logic to detect sign of an integer. - (('ieq', ('iand', a, 0x80000000), 0x00000000), ('ige', a, 0)), - (('ine', ('iand', a, 0x80000000), 0x80000000), ('ige', a, 0)), - (('ine', ('iand', a, 0x80000000), 0x00000000), ('ilt', a, 0)), - (('ieq', ('iand', a, 0x80000000), 0x80000000), ('ilt', a, 0)), + (('ieq', ('iand', 'a@32', 0x80000000), 0x00000000), ('ige', a, 0)), + (('ine', ('iand', 'a@32', 0x80000000), 0x80000000), ('ige', a, 0)), + (('ine', ('iand', 'a@32', 0x80000000), 0x00000000), ('ilt', a, 0)), + (('ieq', ('iand', 'a@32', 0x80000000), 0x80000000), ('ilt', a, 0)), (('ine', ('ushr', 'a@32', 31), 0), ('ilt', a, 0)), (('ieq', ('ushr', 'a@32', 31), 0), ('ige', a, 0)), (('ieq', ('ushr', 'a@32', 31), 1), ('ilt', a, 0)), |