From ee89b0f0acd3e659504d97013bd609a4890787c6 Mon Sep 17 00:00:00 2001
From: tj-sun <tianjiao.sun.2010@gmail.com>
Date: Mon, 22 Jan 2018 19:29:43 +0000
Subject: [PATCH] Add alignment attribute to ArrayBase

---
 loopy/kernel/array.py      | 4 +++-
 loopy/target/c/__init__.py | 4 ++++
 loopy/target/pyopencl.py   | 5 +++++
 loopy/version.py           | 2 +-
 4 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/loopy/kernel/array.py b/loopy/kernel/array.py
index 34f58e286..df50b4d33 100644
--- a/loopy/kernel/array.py
+++ b/loopy/kernel/array.py
@@ -624,7 +624,7 @@ class ArrayBase(ImmutableRecord):
 
     def __init__(self, name, dtype=None, shape=None, dim_tags=None, offset=0,
             dim_names=None, strides=None, order=None, for_atomic=False,
-            target=None,
+            target=None, alignment=None,
             **kwargs):
         """
         All of the following (except *name*) are optional.
@@ -662,6 +662,7 @@ class ArrayBase(ImmutableRecord):
             Whether the array is declared for atomic access, and, if necessary,
             using atomic-capable data types.
         :arg offset: (See :attr:`offset`)
+        :arg alignment: memory alignment in bytes
 
         """
 
@@ -816,6 +817,7 @@ class ArrayBase(ImmutableRecord):
                 offset=offset,
                 dim_names=dim_names,
                 order=order,
+                alignment=alignment,
                 **kwargs)
 
     def __eq__(self, other):
diff --git a/loopy/target/c/__init__.py b/loopy/target/c/__init__.py
index f4b124303..177daa029 100644
--- a/loopy/target/c/__init__.py
+++ b/loopy/target/c/__init__.py
@@ -709,6 +709,10 @@ class CASTBuilder(ASTBuilderBase):
                     ecm(p.flattened_product(decl_info.shape),
                         prec=PREC_NONE, type_context="i"))
 
+        if temp_var.alignment:
+            from cgen import AlignedAttribute
+            temp_var_decl = AlignedAttribute(temp_var.alignment, temp_var_decl)
+
         return temp_var_decl
 
     def wrap_temporary_decl(self, decl, scope):
diff --git a/loopy/target/pyopencl.py b/loopy/target/pyopencl.py
index 9955705a2..744c03d8e 100644
--- a/loopy/target/pyopencl.py
+++ b/loopy/target/pyopencl.py
@@ -61,6 +61,11 @@ def adjust_local_temp_var_storage(kernel, device):
                     temp_var.copy(storage_shape=temp_var.shape)
             continue
 
+        if not temp_var.shape:
+            # scalar, no need to mess with storage shape
+            new_temp_vars[temp_var.name] = temp_var
+            continue
+
         other_loctemp_nbytes = [
                 tv.nbytes
                 for tv in six.itervalues(kernel.temporary_variables)
diff --git a/loopy/version.py b/loopy/version.py
index 888fb95f9..7141a6782 100644
--- a/loopy/version.py
+++ b/loopy/version.py
@@ -32,4 +32,4 @@ except ImportError:
 else:
     _islpy_version = islpy.version.VERSION_TEXT
 
-DATA_MODEL_VERSION = "v75-islpy%s" % _islpy_version
+DATA_MODEL_VERSION = "v76-islpy%s" % _islpy_version
-- 
GitLab