summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2018-10-19 14:31:19 -0500
committerJason Ekstrand <[email protected]>2018-10-22 16:00:18 -0500
commit932c650e0b1b3a0845f138c216ae1f235bdfa070 (patch)
treef4e5cdd1a69449a8f395ea7b213d28dffc45dda1
parentea9e651423424219cae8ebdef88f432b7cff31ab (diff)
nir/algebraic: Loosen a restriction on variables
Previously, we would fail if a variable had an assigned but unknown bit size X and we tried to assign it an actual bit size. However, this is ok because, at the time we do the search, the variable does have an actual bit size and it will match X because of the NIR rules. Reviewed-by: Samuel Iglesias Gonsálvez <[email protected]>
-rw-r--r--src/compiler/nir/nir_algebraic.py8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/compiler/nir/nir_algebraic.py b/src/compiler/nir/nir_algebraic.py
index 34ea2ba9e68..bcefa3372b3 100644
--- a/src/compiler/nir/nir_algebraic.py
+++ b/src/compiler/nir/nir_algebraic.py
@@ -352,8 +352,12 @@ class BitSizeValidator(object):
if var_class == 0:
self._var_classes[var.index] = bit_class
else:
- canon_class = self._class_relation.get_canonical(var_class)
- assert canon_class < 0 or canon_class == bit_class
+ canon_bit_class = self._class_relation.get_canonical(var_class)
+ canon_var_class = self._class_relation.get_canonical(bit_class)
+ assert canon_var_class < 0 or canon_bit_class < 0 or \
+ canon_var_class == canon_bit_class, \
+ 'Variable {0} cannot be both {1}-bit and {2}-bit' \
+ .format(str(var), bit_class, var_class)
var_class = self._class_relation.add_equiv(var_class, bit_class)
self._var_classes[var.index] = var_class