Mesa (master): nir: Add a bunch of b2[if] optimizations
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Oct 11 20:21:37 UTC 2018
Module: Mesa
Branch: master
Commit: d7e0d47b9de3e759d5ed7b299fa7f4e7cbd8760e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d7e0d47b9de3e759d5ed7b299fa7f4e7cbd8760e
Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date: Wed Oct 10 22:36:52 2018 -0500
nir: Add a bunch of b2[if] optimizations
The b2f and b2i conversions always produce zero or one which are both
representable in every type and size. Since b2i and b2f support all bit
sizes, we can just get rid of the conversion opcode.
total instructions in shared programs: 15089335 -> 15084368 (-0.03%)
instructions in affected programs: 212564 -> 207597 (-2.34%)
helped: 896
HURT: 0
total cycles in shared programs: 369831123 -> 369826267 (<.01%)
cycles in affected programs: 2008647 -> 2003791 (-0.24%)
helped: 693
HURT: 216
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
---
src/compiler/nir/nir_opt_algebraic.py | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py
index 422a8794d3..cc747250ba 100644
--- a/src/compiler/nir/nir_opt_algebraic.py
+++ b/src/compiler/nir/nir_opt_algebraic.py
@@ -751,6 +751,23 @@ for left, right in itertools.combinations_with_replacement(invert.keys(), 2):
optimizations.append((('inot', ('iand(is_used_once)', (left, a, b), (right, c, d))),
('ior', (invert[left], a, b), (invert[right], c, d))))
+# Optimize x2yN(b2x(x)) -> b2y
+optimizations.append((('f2b', ('b2f', a)), a))
+optimizations.append((('i2b', ('b2i', a)), a))
+for x, y in itertools.product(['f', 'u', 'i'], ['f', 'u', 'i']):
+ if x != 'f' and y != 'f' and x != y:
+ continue
+
+ b2x = 'b2f' if x == 'f' else 'b2i'
+ b2y = 'b2f' if y == 'f' else 'b2i'
+
+ for N in [8, 16, 32, 64]:
+ if y == 'f' and N == 8:
+ continue
+
+ x2yN = '{}2{}{}'.format(x, y, N)
+ optimizations.append(((x2yN, (b2x, a)), (b2y, a)))
+
def fexp2i(exp, bits):
# We assume that exp is already in the right range.
if bits == 32:
More information about the mesa-commit
mailing list