mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-05 02:30:18 +01:00
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: 6bcd2af086 ("nir/algebraic: Add some optimizations for D3D-style Booleans")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109075
This commit is contained in:
parent
0f7ba5758b
commit
96c4b135e3
2 changed files with 13 additions and 5 deletions
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue