From b88c9990ae1c6e21e37e55f2c23186647eaa53b6 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Tue, 1 Mar 2016 17:11:22 -0600
Subject: [PATCH] remove_unused_arguments: Consider uses in data
 shapes/offsets/strides

---
 loopy/transform/data.py | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/loopy/transform/data.py b/loopy/transform/data.py
index 643326379..7b1deb795 100644
--- a/loopy/transform/data.py
+++ b/loopy/transform/data.py
@@ -353,6 +353,26 @@ def remove_unused_arguments(knl):
     for insn in exp_knl.instructions:
         refd_vars.update(insn.dependency_names())
 
+    from loopy.kernel.array import ArrayBase, FixedStrideArrayDimTag
+    from loopy.symbolic import get_dependencies
+    from itertools import chain
+
+    def tolerant_get_deps(expr):
+        if expr is None or expr is lp.auto:
+            return set()
+        return get_dependencies(expr)
+
+    for ary in chain(knl.args, six.itervalues(knl.temporary_variables)):
+        if isinstance(ary, ArrayBase):
+            refd_vars.update(
+                    tolerant_get_deps(ary.shape)
+                    | tolerant_get_deps(ary.offset))
+
+            for dim_tag in ary.dim_tags:
+                if isinstance(dim_tag, FixedStrideArrayDimTag):
+                    refd_vars.update(
+                            tolerant_get_deps(dim_tag.stride))
+
     for arg in knl.args:
         if arg.name in refd_vars:
             new_args.append(arg)
-- 
GitLab