From ecfbe719d443a0a1f5504da4bf7f329d372a4bde Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de>
Date: Tue, 29 Nov 2016 13:26:09 +0100
Subject: [PATCH] Fix dependencies of contrib instructions

---
 python/dune/perftool/sumfact/sumfact.py | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/python/dune/perftool/sumfact/sumfact.py b/python/dune/perftool/sumfact/sumfact.py
index 2d981f07..35cb783e 100644
--- a/python/dune/perftool/sumfact/sumfact.py
+++ b/python/dune/perftool/sumfact/sumfact.py
@@ -195,6 +195,12 @@ def generate_accumulation_instruction(visitor, accterm, measure, subdomain_id):
             replace_dict[Variable(iname)] = i
         expression = substitute(pymbolic_expr, replace_dict)
 
+        # Determine dependencies
+        from loopy.match import Or, Writes
+        from pymbolic.mapper.dependency import DependencyMapper
+        from dune.perftool.tools import get_pymbolic_basename
+        deps = Or(tuple(Writes(get_pymbolic_basename(expr)) for expr in DependencyMapper()(expression)))
+
         # Issue an instruction in the quadrature loop that fills the buffer
         # with the evaluation of the contribution at all quadrature points
         assignee = Subscript(Variable(temp), tuple(Variable(i) for i in quadrature_inames()))
@@ -203,6 +209,7 @@ def generate_accumulation_instruction(visitor, accterm, measure, subdomain_id):
                                   forced_iname_deps=frozenset(quadrature_inames() + visitor.inames),
                                   forced_iname_deps_is_final=True,
                                   tags=frozenset({"quadvec"}),
+                                  depends_on=frozenset({deps})
                                   )
         contribution_ids.append(contrib_dep)
 
-- 
GitLab