summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2018-12-18 13:28:22 -0800
committerIan Romanick <ian.d.romanick@intel.com>2018-12-18 23:28:31 -0800
commit96c4b135e34d0804e41bfbc28fc1b5050c49d71e (patch)
tree3c148acefbad1ae0826fe0adcaf2b3b8e90e0ac6
parent0f7ba5758bd8a3e12b8b33ab471336eaa7dd6fbc (diff)
nir/algebraic: Don't put quotes around floating point literals
The quotation marks around 1.0 cause it to be treated as a string instead of a floating point value. The generator then treats it as an arbitrary variable replacement, so any iand involving a ('ineg', ('b2i', a)) matches. v2: Remove misleading comment about sized literals (suggested by Timothy). Add assertion that the name of a varible is entierly alphabetic (suggested by Jason). Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Tested-by: Timothy Arceri <tarceri@itsqueeze.com> [v1] Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> [v1] Fixes: 6bcd2af0863 ("nir/algebraic: Add some optimizations for D3D-style Booleans") Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109075
-rw-r--r--src/compiler/nir/nir_algebraic.py8
-rw-r--r--src/compiler/nir/nir_opt_algebraic.py10
2 files changed, 13 insertions, 5 deletions
diff --git a/src/compiler/nir/nir_algebraic.py b/src/compiler/nir/nir_algebraic.py
index a667c4170f1..238127235fd 100644
--- a/src/compiler/nir/nir_algebraic.py
+++ b/src/compiler/nir/nir_algebraic.py
@@ -252,6 +252,14 @@ class Variable(Value):
assert m and m.group('name') is not None
self.var_name = m.group('name')
+
+ # Prevent common cases where someone puts quotes around a literal
+ # constant. If we want to support names that have numeric or
+ # punctuation characters, we can me the first assertion more flexible.
+ assert self.var_name.isalpha()
+ assert self.var_name is not 'True'
+ assert self.var_name is not 'False'
+
self.is_constant = m.group('const') is not None
self.cond = m.group('cond')
self.required_type = m.group('type')
diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py
index 506d45e55b5..75a3d2ad238 100644
--- a/src/compiler/nir/nir_opt_algebraic.py
+++ b/src/compiler/nir/nir_opt_algebraic.py
@@ -61,10 +61,10 @@ d = 'd'
#
# All expression types can have a bit-size specified. For opcodes, this
# looks like "op@32", for variables it is "a@32" or "a@uint32" to specify a
-# type and size, and for literals, you can write "2.0@32". In the search half
-# of the expression this indicates that it should only match that particular
-# bit-size. In the replace half of the expression this indicates that the
-# constructed value should have that bit-size.
+# type and size. In the search half of the expression this indicates that it
+# should only match that particular bit-size. In the replace half of the
+# expression this indicates that the constructed value should have that
+# bit-size.
optimizations = [
@@ -545,7 +545,7 @@ optimizations = [
(('ieq', ('ineg', ('b2i', 'a@1')), -1), a),
(('ine', ('ineg', ('b2i', 'a@1')), 0), a),
(('ine', ('ineg', ('b2i', 'a@1')), -1), ('inot', a)),
- (('iand', ('ineg', ('b2i', a)), '1.0@32'), ('b2f', a)),
+ (('iand', ('ineg', ('b2i', a)), 1.0), ('b2f', a)),
# Conversions
(('i2b32', ('b2i', 'a@32')), a),