diff --git a/loopy/codegen/__init__.py b/loopy/codegen/__init__.py index 8b4e0d22f2666885cddac6c91db327141552943e..e326f5f3c3d50b6178e75a2fe8006954484195e3 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)) # }}}