From 2752b21b751058216287006ab6ca5466d916dcf5 Mon Sep 17 00:00:00 2001 From: Marcel Koch <marcel.koch@uni-muenster.de> Date: Thu, 19 Apr 2018 11:28:29 +0200 Subject: [PATCH] rename some lhs temporarily --- .../perftool/blockstructured/vectorization.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/python/dune/perftool/blockstructured/vectorization.py b/python/dune/perftool/blockstructured/vectorization.py index ee76a4b8..fa97aff4 100644 --- a/python/dune/perftool/blockstructured/vectorization.py +++ b/python/dune/perftool/blockstructured/vectorization.py @@ -227,9 +227,25 @@ def add_vcl_access(knl, iname_inner): vector_alias = [a for a in knl.arg_dict if a.endswith('alias')] dim = world_dimension() dim_names = ["x", "y", "z"] + [str(i) for i in range(4, dim + 1)] + # remove CInstructions since loopy extract expects to get only assignments knl_without_cinsn = knl.copy(instructions=[insn for insn in knl.instructions if not isinstance(insn, lp.CInstruction)]) for alias in vector_alias: + # Rename lhs which would match the substitution rule since loopy doesn't want substitutions as lhs + new_insns = [] + for insn in knl_without_cinsn.instructions: + if isinstance(insn, lp.Assignment) and isinstance(insn.assignee, prim.Subscript): + if insn.assignee.aggregate.name == alias: + new_insns.append(insn.copy(assignee=prim.Subscript(prim.Variable('dummy_'+alias), + insn.assignee.index_tuple))) + pass + else: + new_insns.append(insn) + else: + new_insns.append(insn) + knl_without_cinsn = knl_without_cinsn.copy(instructions=new_insns) + + # substitution rule for alias[ex_outer,ex_inner, ey, ix, iy] -> vec[ex_inner] parameters = 'ex_o,ex_i,' + ','.join(['e' + d for d in dim_names[1:dim]]) + \ ',ix,' + ','.join(['i' + d for d in dim_names[1:dim]]) knl_without_cinsn = lp.extract_subst(knl_without_cinsn, alias + '_subst', '{}[{}]'.format(alias, parameters), @@ -255,7 +271,8 @@ def add_vcl_access(knl, iname_inner): try: assignee_vec = next((expr for expr in insn.expression.children if isinstance(expr, prim.Subscript) and - expr.aggregate.name.replace('vec', 'alias') == assignee_alias.aggregate.name)) + expr.aggregate.name.replace('vec', 'alias') == + assignee_alias.aggregate.name.replace('dummy_', ''))) except StopIteration: from dune.perftool.error import PerftoolVectorizationError raise PerftoolVectorizationError -- GitLab