From 3c760bee62935e60b9d92a6ca9856481d16bb768 Mon Sep 17 00:00:00 2001
From: Matt Wala <wala1@illinois.edu>
Date: Sat, 15 Jul 2017 18:34:15 -0500
Subject: [PATCH] Fix TemporaryVariable.update_persistent_hash() to handle
 storage shapes which contain pymbolic expressions.

---
 loopy/kernel/array.py | 20 ++++++++++++--------
 loopy/kernel/data.py  |  5 +++--
 2 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/loopy/kernel/array.py b/loopy/kernel/array.py
index a02fc58d9..dab338486 100644
--- a/loopy/kernel/array.py
+++ b/loopy/kernel/array.py
@@ -862,6 +862,17 @@ class ArrayBase(ImmutableRecord):
     def __repr__(self):
         return "<%s>" % self.__str__()
 
+    def update_persistent_hash_for_shape(self, key_hash, key_builder, shape):
+        if isinstance(shape, tuple):
+            for shape_i in shape:
+                if shape_i is None:
+                    key_builder.rec(key_hash, shape_i)
+                else:
+                    key_builder.update_for_pymbolic_expression(key_hash, shape_i)
+        else:
+            key_builder.rec(key_hash, shape)
+
+
     def update_persistent_hash(self, key_hash, key_builder):
         """Custom hash computation function for use with
         :class:`pytools.persistent_dict.PersistentDict`.
@@ -869,14 +880,7 @@ class ArrayBase(ImmutableRecord):
 
         key_builder.rec(key_hash, self.name)
         key_builder.rec(key_hash, self.dtype)
-        if isinstance(self.shape, tuple):
-            for shape_i in self.shape:
-                if shape_i is None:
-                    key_builder.rec(key_hash, shape_i)
-                else:
-                    key_builder.update_for_pymbolic_expression(key_hash, shape_i)
-        else:
-            key_builder.rec(key_hash, self.shape)
+        self.update_persistent_hash_for_shape(key_hash, key_builder, self.shape)
         key_builder.rec(key_hash, self.dim_tags)
         key_builder.rec(key_hash, self.offset)
         key_builder.rec(key_hash, self.dim_names)
diff --git a/loopy/kernel/data.py b/loopy/kernel/data.py
index 001dd0632..94b31df12 100644
--- a/loopy/kernel/data.py
+++ b/loopy/kernel/data.py
@@ -497,7 +497,8 @@ class TemporaryVariable(ArrayBase):
         """
 
         super(TemporaryVariable, self).update_persistent_hash(key_hash, key_builder)
-        key_builder.rec(key_hash, self.storage_shape)
+        self.update_persistent_hash_for_shape(key_hash, key_builder,
+                self.storage_shape)
         key_builder.rec(key_hash, self.base_indices)
 
         initializer = self.initializer
@@ -510,7 +511,7 @@ class TemporaryVariable(ArrayBase):
 # }}}
 
 
-# {{{ subsitution rule
+# {{{ substitution rule
 
 class SubstitutionRule(ImmutableRecord):
     """
-- 
GitLab