Mesa (master): nir: add min/max optimisation

Jason Ekstrand jekstrand at kemper.freedesktop.org
Fri Jan 20 05:45:01 UTC 2017


Module: Mesa
Branch: master
Commit: 9fdaeb7776c51e45646502ce4b6420a9652cd824
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9fdaeb7776c51e45646502ce4b6420a9652cd824

Author: Elie TOURNIER <tournier.elie at gmail.com>
Date:   Wed Jan 18 11:23:22 2017 +0000

nir: add min/max optimisation

Add the following optimisations:

min(x, -x) = -abs(x)
min(x, -abs(x)) = -abs(x)
min(x, abs(x)) = x
max(x, -abs(x)) = x
max(x, abs(x)) = abs(x)
max(x, -x) = abs(x)

shader-db:

total instructions in shared programs: 13067779 -> 13067775 (-0.00%)
instructions in affected programs: 249 -> 245 (-1.61%)
helped: 4
HURT: 0

total cycles in shared programs: 252054838 -> 252054806 (-0.00%)
cycles in affected programs: 504 -> 472 (-6.35%)
helped: 2
HURT: 0

Signed-off-by: Elie Tournier <tournier.elie at gmail.com>
Reviewed-by: Plamena Manolova <plamena.manolova at intel.com>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

---

 src/compiler/nir/nir_opt_algebraic.py | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py
index d7ad1f2..6893800 100644
--- a/src/compiler/nir/nir_opt_algebraic.py
+++ b/src/compiler/nir/nir_opt_algebraic.py
@@ -171,6 +171,18 @@ optimizations = [
    (('imax', a, a), a),
    (('umin', a, a), a),
    (('umax', a, a), a),
+   (('fmin', a, ('fneg', a)), ('fneg', ('fabs', a))),
+   (('imin', a, ('ineg', a)), ('ineg', ('iabs', a))),
+   (('fmin', a, ('fneg', ('fabs', a))), ('fneg', ('fabs', a))),
+   (('imin', a, ('ineg', ('iabs', a))), ('ineg', ('iabs', a))),
+   (('fmin', a, ('fabs', a)), a),
+   (('imin', a, ('iabs', a)), a),
+   (('fmax', a, ('fneg', ('fabs', a))), a),
+   (('imax', a, ('ineg', ('iabs', a))), a),
+   (('fmax', a, ('fabs', a)), ('fabs', a)),
+   (('imax', a, ('iabs', a)), ('iabs', a)),
+   (('fmax', a, ('fneg', a)), ('fabs', a)),
+   (('imax', a, ('ineg', a)), ('iabs', a)),
    (('~fmin', ('fmax', a, 0.0), 1.0), ('fsat', a), '!options->lower_fsat'),
    (('~fmax', ('fmin', a, 1.0), 0.0), ('fsat', a), '!options->lower_fsat'),
    (('fsat', a), ('fmin', ('fmax', a, 0.0), 1.0), 'options->lower_fsat'),




More information about the mesa-commit mailing list