nir/algebraic: Loosen a restriction on variables
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 19 Oct 2018 19:31:19 +0000 (14:31 -0500)
committerJason Ekstrand <jason.ekstrand@intel.com>
Mon, 22 Oct 2018 21:00:18 +0000 (16:00 -0500)
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 <siglesias@igalia.com>
src/compiler/nir/nir_algebraic.py

index 34ea2ba9e68feec5b7a96eec6b3738228b344b0b..bcefa3372b332e7ee879163e70eed7f656e1b004 100644 (file)
@@ -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