summaryrefslogtreecommitdiffstats
path: root/src/compiler
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2018-12-06 12:56:33 -0600
committerJason Ekstrand <[email protected]>2018-12-16 21:03:02 +0000
commit615cc26b97ad520b90a8d3b3f9bdaa49c78dfda5 (patch)
tree4ef5ec1591be5ffe8bcd5954462ae8bb359c6100 /src/compiler
parent487514ae6120fd66d6b58cddea1c27b5fe8573e5 (diff)
nir/algebraic: Generalize an optimization
This just makes it nicely scale across bit sizes. Reviewed-by: Eric Anholt <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]> Tested-by: Bas Nieuwenhuizen <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/nir/nir_opt_algebraic.py11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py
index 1f1dd9e8b77..72445ee830e 100644
--- a/src/compiler/nir/nir_opt_algebraic.py
+++ b/src/compiler/nir/nir_opt_algebraic.py
@@ -27,6 +27,7 @@ from __future__ import print_function
from collections import OrderedDict
import nir_algebraic
+from nir_opcodes import type_sizes
import itertools
# Convenience variables
@@ -755,9 +756,15 @@ 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 x2bN(b2x(x)) -> x
+for size in type_sizes('bool'):
+ aN = 'a@' + str(size)
+ f2bN = 'f2b' + str(size)
+ i2bN = 'i2b' + str(size)
+ optimizations.append(((f2bN, ('b2f', aN)), a))
+ optimizations.append(((i2bN, ('b2i', aN)), a))
+
# Optimize x2yN(b2x(x)) -> b2y
-optimizations.append((('f2b32', ('b2f', 'a@32')), a))
-optimizations.append((('i2b32', ('b2i', 'a@32')), a))
for x, y in itertools.product(['f', 'u', 'i'], ['f', 'u', 'i']):
if x != 'f' and y != 'f' and x != y:
continue