diff --git a/loopy/kernel/data.py b/loopy/kernel/data.py index 832096a32594e03c5263f2b143715e9c5a022aa8..94ae93f3f02cd0e272dceea69bd4f881711039d9 100644 --- a/loopy/kernel/data.py +++ b/loopy/kernel/data.py @@ -509,7 +509,10 @@ class ExpressionInstruction(InstructionBase): @memoize_method def read_dependency_names(self): from loopy.symbolic import get_dependencies - return get_dependencies(self.expression) + result = get_dependencies(self.expression) + for _, subscript in self.assignees_and_indices(): + result = result | get_dependencies(subscript) + return result @memoize_method def reduction_inames(self): @@ -680,6 +683,9 @@ class CInstruction(InstructionBase): for name, iname_expr in self.iname_exprs: result.update(get_dependencies(iname_expr)) + for _, subscript in self.assignees_and_indices(): + result.update(get_dependencies(subscript)) + return frozenset(result) def reduction_inames(self): diff --git a/test/test_loopy.py b/test/test_loopy.py index e1a05380d0d31acc9210578ecc72891c0dec84c0..0efcaab050d6ce0fc2b6eb95c0a52517b82f9b64 100644 --- a/test/test_loopy.py +++ b/test/test_loopy.py @@ -1227,6 +1227,26 @@ def test_dependent_domain_insn_iname_finding(ctx_factory): )) +def test_inames_deps_from_write_subscript(ctx_factory): + ctx = ctx_factory() + + knl = lp.make_kernel(ctx.devices[0], [ + "{[i,j]: 0<=i,j src_ibox = source_boxes[i] + something = 5 + a[src_ibox] = sum(j, something) {id=myred} + """, + [ + lp.GlobalArg("box_source_starts,box_source_counts_nonchild,a", + None, shape=None), + "..."]) + + print knl + assert "i" in knl.insn_inames("myred") + + if __name__ == "__main__": if len(sys.argv) > 1: exec(sys.argv[1])