diff --git a/patches/loopy/0001-Allow-using-globalargs-as-base-storage.patch b/patches/loopy/0001-Allow-using-globalargs-as-base-storage.patch new file mode 100644 index 0000000000000000000000000000000000000000..f4556ca85790a44598be640883eac8524eccc7b8 --- /dev/null +++ b/patches/loopy/0001-Allow-using-globalargs-as-base-storage.patch @@ -0,0 +1,63 @@ +From b15ad57a11b774bde714f058c85248990c461048 Mon Sep 17 00:00:00 2001 +From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de> +Date: Tue, 23 May 2017 12:55:25 +0200 +Subject: [PATCH] Allow using globalargs as base storage + +--- + loopy/preprocess.py | 2 +- + loopy/target/c/__init__.py | 23 ++++++++++++----------- + 2 files changed, 13 insertions(+), 12 deletions(-) + +diff --git a/loopy/preprocess.py b/loopy/preprocess.py +index 17226b6..65a9df1 100644 +--- a/loopy/preprocess.py ++++ b/loopy/preprocess.py +@@ -165,7 +165,7 @@ def find_temporary_scope(kernel): + for temp_var in six.itervalues(kernel.temporary_variables): + if temp_var.base_storage is not None: + # no nesting allowed +- if temp_var.base_storage in kernel_var_names: ++ if temp_var.base_storage in kernel.temporary_variables: + raise LoopyError("base_storage for temporary '%s' is '%s', " + "which is an existing variable name" + % (temp_var.name, temp_var.base_storage)) +diff --git a/loopy/target/c/__init__.py b/loopy/target/c/__init__.py +index e4835a3..7c6a617 100644 +--- a/loopy/target/c/__init__.py ++++ b/loopy/target/c/__init__.py +@@ -439,20 +439,21 @@ class CASTBuilder(ASTBuilderBase): + assert tv.initializer is None + + offset = 0 +- base_storage_sizes.setdefault(tv.base_storage, []).append( +- tv.nbytes) +- base_storage_to_scope.setdefault(tv.base_storage, []).append( +- tv.scope) ++ if not tv.base_storage in kernel.arguments: ++ base_storage_sizes.setdefault(tv.base_storage, []).append( ++ tv.nbytes) ++ base_storage_to_scope.setdefault(tv.base_storage, []).append( ++ tv.scope) + +- align_size = tv.dtype.itemsize ++ align_size = tv.dtype.itemsize + +- from loopy.kernel.array import VectorArrayDimTag +- for dim_tag, axis_len in zip(tv.dim_tags, tv.shape): +- if isinstance(dim_tag, VectorArrayDimTag): +- align_size *= axis_len ++ from loopy.kernel.array import VectorArrayDimTag ++ for dim_tag, axis_len in zip(tv.dim_tags, tv.shape): ++ if isinstance(dim_tag, VectorArrayDimTag): ++ align_size *= axis_len + +- base_storage_to_align_bytes.setdefault(tv.base_storage, []).append( +- align_size) ++ base_storage_to_align_bytes.setdefault(tv.base_storage, []).append( ++ align_size) + + for idi in decl_info: + cast_decl = POD(self, idi.dtype, "") +-- +2.1.4 +