diff --git a/loopy/__init__.py b/loopy/__init__.py index 58029467c7bb263203bf33430eb306fe6f16bf14..ecadbf4e95b4f7e12d5093c6a21929599fcdcc62 100644 --- a/loopy/__init__.py +++ b/loopy/__init__.py @@ -669,7 +669,7 @@ def rename_iname(knl, old_iname, new_iname, within): raise ValueError("iname '%s' conflicts with an existing identifier" "--cannot rename" % new_iname) - knl = duplicate_inames([old_iname], within, [new_iname]) + knl = duplicate_inames(knl, [old_iname], within=within, new_inames=[new_iname]) knl = remove_unused_inames(knl, [old_iname]) return knl @@ -1116,8 +1116,19 @@ def add_dependency(kernel, insn_match, dependency): :func:`loopy.context_matching.parse_match`. """ + if dependency not in kernel.id_to_insn: + raise LoopyError("cannot add dependency on non-existent instruction ID '%s'" + % dependency) + def add_dep(insn): - return insn.copy(insn_deps=insn.insn_deps + [dependency]) + new_deps = insn.insn_deps + added_deps = frozenset([dependency]) + if new_deps is None: + new_deps = added_deps + else: + new_deps = new_deps | added_deps + + return insn.copy(insn_deps=new_deps) return map_instructions(kernel, insn_match, add_dep)