From cb662213c81aa2a2233c6bd44740026beb7de1bb Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Tue, 9 Jul 2013 10:45:50 -0400
Subject: [PATCH] CodeGenerationState.fix: Add iname to implemented_domain if
 not already there

---
 loopy/codegen/__init__.py | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/loopy/codegen/__init__.py b/loopy/codegen/__init__.py
index 8b4e0d22f..e326f5f3c 100644
--- a/loopy/codegen/__init__.py
+++ b/loopy/codegen/__init__.py
@@ -162,16 +162,28 @@ class CodeGenerationState(object):
                 self.c_code_mapper)
 
     def fix(self, iname, aff):
+        new_impl_domain = self.implemented_domain
+
+        impl_space = self.implemented_domain.get_space()
+        if iname not in impl_space.get_var_dict():
+            new_impl_domain = (new_impl_domain
+                    .add_dims(isl.dim_type.set, 1)
+                    .set_dim_name(
+                        isl.dim_type.set,
+                        new_impl_domain.dim(isl.dim_type.set),
+                        iname))
+            impl_space = new_impl_domain.get_space()
+
         from loopy.isl_helpers import iname_rel_aff
-        iname_plus_lb_aff = iname_rel_aff(
-                self.implemented_domain.get_space(), iname, "==", aff)
+        iname_plus_lb_aff = iname_rel_aff(impl_space, iname, "==", aff)
 
         from loopy.symbolic import pw_aff_to_expr
         cns = isl.Constraint.equality_from_aff(iname_plus_lb_aff)
         expr = pw_aff_to_expr(aff)
 
+        new_impl_domain = new_impl_domain.add_constraint(cns)
         return CodeGenerationState(
-                self.implemented_domain.add_constraint(cns),
+                new_impl_domain,
                 self.c_code_mapper.copy_and_assign(iname, expr))
 
 # }}}
-- 
GitLab