diff options
-rw-r--r-- | src/compiler/nir/nir_opt_algebraic.py | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py index cb5b30acb72..d65c8089211 100644 --- a/src/compiler/nir/nir_opt_algebraic.py +++ b/src/compiler/nir/nir_opt_algebraic.py @@ -497,6 +497,21 @@ optimizations.extend([ (('umin', ('umin', a, b), b), ('umin', a, b)), (('imin', ('imin', a, b), b), ('imin', a, b)), (('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)), + (('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)), + (('ine', ('ushr', 'a@32', 31), 1), ('ige', a, 0)), + (('ine', ('ishr', 'a@32', 31), 0), ('ilt', a, 0)), + (('ieq', ('ishr', 'a@32', 31), 0), ('ige', a, 0)), + (('ieq', ('ishr', 'a@32', 31), -1), ('ilt', a, 0)), + (('ine', ('ishr', 'a@32', 31), -1), ('ige', a, 0)), + (('fmin', a, ('fneg', a)), ('fneg', ('fabs', a))), (('imin', a, ('ineg', a)), ('ineg', ('iabs', a))), (('fmin', a, ('fneg', ('fabs', a))), ('fneg', ('fabs', a))), |