diff --git a/loopy/__init__.py b/loopy/__init__.py index 3d6f71bec4e62583180f0228a0c94f10611d4cbd..fa146961d8bbde486c042dee5540060d9845b76e 100644 --- a/loopy/__init__.py +++ b/loopy/__init__.py @@ -522,6 +522,13 @@ class _InameDuplicator(ExpandingIdentityMapper): from pymbolic import var return var(new_name) + def map_instruction(self, insn): + new_fid = frozenset( + self.old_to_new.get(iname, iname) + for iname in insn.forced_iname_deps) + return insn.copy( + forced_iname_deps=new_fid) + def duplicate_inames(knl, inames, within, new_inames=None, suffix=None, tags={}): diff --git a/loopy/symbolic.py b/loopy/symbolic.py index 77e92ace15deb6563056e870a50ba63041de766a..8f0cd02e34f17f135bdebd5a119b276bca3ca1b7 100644 --- a/loopy/symbolic.py +++ b/loopy/symbolic.py @@ -504,6 +504,9 @@ class ExpandingIdentityMapper(IdentityMapper): return renamed_result, renames + def map_instruction(self, insn): + return insn + def map_kernel(self, kernel): new_insns = [ # While subst rules are not allowed in assignees, the mapper @@ -514,9 +517,14 @@ class ExpandingIdentityMapper(IdentityMapper): for insn in kernel.instructions] new_substs, renames = self._get_new_substitutions_and_renames() + + new_insns = [self.map_instruction(insn) + for insn in rename_subst_rules_in_instructions( + new_insns, renames)] + return kernel.copy( substitutions=new_substs, - instructions=rename_subst_rules_in_instructions(new_insns, renames)) + instructions=new_insns) class ExpandingSubstitutionMapper(ExpandingIdentityMapper):