diff --git a/loopy/buffer.py b/loopy/buffer.py
index 46ebeae7caba01c3244650e0a3867e0264e41f02..a5721890ebada5c1205a5783959096b9e5b3044b 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