From ef38e8d058f34f593b00e7562ef0cc45dfc7f29a Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Sun, 19 Apr 2015 13:35:33 -0500
Subject: [PATCH] Detect whether buffered arrays are written, and only emit
 store insn if so

---
 loopy/buffer.py | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/loopy/buffer.py b/loopy/buffer.py
index 46ebeae7c..a5721890e 100644
--- a/loopy/buffer.py
+++ b/loopy/buffer.py
@@ -323,6 +323,13 @@ def buffer_array(kernel, var_name, buffer_inames, init_expression=None,
     aar = ArrayAccessReplacer(kernel, var_name, within, abm, buf_var)
     kernel = aar.map_kernel(kernel)
 
+    did_write = False
+    for insn_id in aar.modified_insn_ids:
+        insn = kernel.id_to_insn[insn_id]
+        if any(assignee_name == buf_var_name
+                for assignee_name, _ in insn.assignees_and_indices()):
+            did_write = True
+
     # {{{ add init_insn_id to insn_deps
 
     new_insns = []
@@ -377,9 +384,13 @@ def buffer_array(kernel, var_name, buffer_inames, init_expression=None,
 
     # }}}
 
+    new_insns.append(init_instruction)
+    if did_write:
+        new_insns.append(store_instruction)
+
     kernel = kernel.copy(
             domains=new_kernel_domains,
-            instructions=new_insns + [init_instruction, store_instruction],
+            instructions=new_insns,
             temporary_variables=new_temporary_variables)
 
     from loopy import tag_inames
-- 
GitLab