diff --git a/loopy/schedule/__init__.py b/loopy/schedule/__init__.py index c078da2ec58dabbbf646bfcf593ea0138941cc85..10408bce9b7a555bbd2259cdebd0cbcef30f01d9 100644 --- a/loopy/schedule/__init__.py +++ b/loopy/schedule/__init__.py @@ -1528,7 +1528,7 @@ class DependencyTracker(object): source, target = target, source target_deps = self.kernel.recursive_insn_dep_map()[target.id] - if source.id in target_deps: + if source.id == target.id or source.id in target_deps: if self.reverse: dep_descr = "{tgt} rev-depends on {src}" else: diff --git a/test/test_loopy.py b/test/test_loopy.py index db4a382046cc1aaf1465e81cf493415ace57e64d..bd6466f4aeda762590645e8668e62e81db072587 100644 --- a/test/test_loopy.py +++ b/test/test_loopy.py @@ -2073,6 +2073,26 @@ def test_barrier_insertion_near_bottom_of_loop(): assert_barrier_between(knl, "ainit", "aupdate", ignore_barriers_in_levels=[1]) +def test_barrier_insertion_with_self_dependency(): + import loopy as lp + knl = lp.make_kernel( + "{[i,j]: 0 <=i,j<16}", + """ + <>t = 0 {id=nop0} + for i + for j + <>B[i+1,j] = B[i,j] + end + end + t = 1 {id=nop1} + """, + seq_dependencies=True) + knl = lp.tag_inames(knl, dict(j="l.0")) + knl = lp.set_temporary_scope(knl, "B", "local") + knl = lp.get_one_scheduled_kernel(lp.preprocess_kernel(knl)) + assert_barrier_between(knl, "nop0", "nop1") + + if __name__ == "__main__": if len(sys.argv) > 1: exec(sys.argv[1])