From cc371342e7c7804e6f781c01237d310ae842f2e6 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Sun, 23 Sep 2012 13:23:22 -0500
Subject: [PATCH] Fix fancy/microblocked padding, improve error in case of
 existing split.

---
 loopy/padding.py | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/loopy/padding.py b/loopy/padding.py
index 307a380b6..da8bff481 100644
--- a/loopy/padding.py
+++ b/loopy/padding.py
@@ -28,6 +28,8 @@ def split_arg_axis(kernel, args_and_axes, count):
 
         If *args_and_axes* is a :class:`tuple`, it is automatically
         wrapped in a list, to make single splits easier.
+
+    Note that the corresponding index variables may *not* be split beforehand.
     """
 
     if count == 1:
@@ -120,7 +122,9 @@ def split_arg_axis(kernel, args_and_axes, count):
         from pymbolic.primitives import Variable
         if not isinstance(axis_idx, Variable):
             raise RuntimeError("found access '%s' in which axis %d is not a "
-                    "single variable--cannot split" % (expr, axis_nr))
+                    "single variable--cannot split (Have you tried to do the split "
+                    "yourself, manually, beforehand? If so, you shouldn't.)"
+                    % (expr, axis_nr))
 
         split_iname = expr.index[axis_nr].name
         assert split_iname in kernel.all_inames()
@@ -134,7 +138,6 @@ def split_arg_axis(kernel, args_and_axes, count):
                     split_iname+"_inner")
             split_vars[split_iname] = outer_iname, inner_iname
 
-
         idx[axis_nr] = Variable(inner_iname)
 
         if order == "F":
@@ -146,7 +149,7 @@ def split_arg_axis(kernel, args_and_axes, count):
 
         return expr.aggregate[tuple(idx)]
 
-    aash = ArgAxisSplitHelper(arg_name, split_access_axis)
+    aash = ArgAxisSplitHelper(set(arg_to_rest.iterkeys()), split_access_axis)
 
     result = (kernel
             .map_expressions(aash)
-- 
GitLab