summaryrefslogtreecommitdiff
path: root/src/compiler/nir/nir_opt_algebraic.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/nir/nir_opt_algebraic.py')
-rw-r--r--src/compiler/nir/nir_opt_algebraic.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py
index 0a7369cd44d..e22e5bcb548 100644
--- a/src/compiler/nir/nir_opt_algebraic.py
+++ b/src/compiler/nir/nir_opt_algebraic.py
@@ -1597,6 +1597,19 @@ late_optimizations = [
(('fne', ('fneg', a), -1.0), ('fne', 1.0, a)),
(('feq', -1.0, ('fneg', a)), ('feq', a, 1.0)),
+ # Replace signed range [0, constant b] checks with unsigned comparisons.
+ # This is limited to constant values because we have to ensure that "b" is
+ # not negative.
+ (('iand', ('ige', 'a@32', 0), ('ilt', a, '#b(is_ult_80000000)')), ('ult', a, b)),
+ (('iand', ('ige', 'a@32', 0), ('ige', '#b(is_ult_80000000)', a)), ('uge', b, a)),
+ (('iand', ('ilt', -1, 'a@32'), ('ilt', a, '#b(is_ult_80000000)')), ('ult', a, b)),
+ (('iand', ('ilt', -1, 'a@32'), ('ige', '#b(is_ult_80000000)', a)), ('uge', b, a)),
+
+ (('ior', ('ilt', 'a@32', 0), ('ige', a, '#b(is_ult_80000000)')), ('uge', a, b)),
+ (('ior', ('ilt', 'a@32', 0), ('ilt', '#b(is_ult_80000000)', a)), ('ult', b, a)),
+ (('ior', ('ige', -1, 'a@32'), ('ige', a, '#b(is_ult_80000000)')), ('uge', a, b)),
+ (('ior', ('ige', -1, 'a@32'), ('ilt', '#b(is_ult_80000000)', a)), ('ult', b, a)),
+
(('ior', a, a), a),
(('iand', a, a), a),