From 3e08cdce91fbcca284bb9b713924f714580bd04d Mon Sep 17 00:00:00 2001
From: Marcel Koch <marcel.koch@uni-muenster.de>
Date: Fri, 26 Jan 2018 17:27:41 +0100
Subject: [PATCH] use CallInstructions for loads and stores

---
 .../perftool/blockstructured/vectorization.py | 24 ++++++++-----------
 1 file changed, 10 insertions(+), 14 deletions(-)

diff --git a/python/dune/perftool/blockstructured/vectorization.py b/python/dune/perftool/blockstructured/vectorization.py
index 18f8fb02..f1c0f355 100644
--- a/python/dune/perftool/blockstructured/vectorization.py
+++ b/python/dune/perftool/blockstructured/vectorization.py
@@ -170,13 +170,10 @@ def add_vcl_vector(knl, iname_inner, iname_outer):
             index = prim.Sum(tuple(prim.Product(z) for z in zip(substitute(expr, {iname_inner:0}).index_tuple, strides)))
 
             # add load instruction
-            code = "{}.load({} + {});".format(vec, alias, index)
-            # load_id = knl.make_unique_instruction_id(insns=knl.instructions+load_insns, based_on='insn_'+vec+'_load')
             load_id = idg('insn_'+vec+'_load')
-            load_insns.append(lp.CInstruction(iname_exprs=[], code=code, read_variables=frozenset({alias}),
-                                              within_inames=insn.within_inames|insn.reduction_inames(),
-                                              #assignees=(lp.TaggedVariable(vec, 'coeff_vec'), ), #sonst denkt looy das müsste ein array von Vec4d sein...
-                                              id=load_id))
+            call_load = prim.Call(prim.Variable(vec+'.load'), (prim.Sum((prim.Variable(alias), index)),))
+            load_insns.append(lp.CallInstruction(assignees=(),expression=call_load,
+                                                 id=load_id,within_inames=insn.within_inames|insn.reduction_inames(),))
             read_dependencies.setdefault(insn.id, set())
             read_dependencies[insn.id].add(load_id)
 
@@ -191,15 +188,14 @@ def add_vcl_vector(knl, iname_inner, iname_outer):
             index = prim.Sum(tuple(prim.Product(z) for z in zip(substitute(expr, {iname_inner: 0, iname_ix: 0}).index_tuple, strides)))
 
             # add store instruction
-            code = "{}.store({} + {});".format(vec, alias, index)
-            #store_id = knl.make_unique_instruction_id(insns=knl.instructions+load_insns, based_on='insn_'+vec+'_store')
             store_id = idg('insn_'+vec+'_store')
-            store_insns.append(lp.CInstruction(iname_exprs=[], code=code,read_variables=frozenset({alias}),
-                                               within_inames=insn.within_inames,
-                                               depends_on=insn.depends_on
-                                                          | frozenset({insn.id})
-                                                          | read_dependencies[insn.id],
-                                               id=store_id))
+            call_store = prim.Call(prim.Variable(vec+'.store'), (prim.Sum((prim.Variable(alias), index)),))
+            store_insns.append(lp.CallInstruction(assignees=(),expression=call_store,
+                                                  id=store_id,within_inames=insn.within_inames,
+                                                  depends_on=insn.depends_on
+                                                             | frozenset({insn.id})
+                                                             | read_dependencies[insn.id],
+                                                  ))
 
     # exchange alias for vector
     new_insns = []
-- 
GitLab