From c0d784d36c94410b3e5965fcfdf8b33770563e69 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Thu, 30 Aug 2012 15:02:01 -0400
Subject: [PATCH] Allow conditionals to dependend on parallel axes.

---
 loopy/codegen/bounds.py | 36 ++++++++++++++++++++++++++++++------
 loopy/codegen/loop.py   | 22 +---------------------
 2 files changed, 31 insertions(+), 27 deletions(-)

diff --git a/loopy/codegen/bounds.py b/loopy/codegen/bounds.py
index 39e29260..9d900561 100644
--- a/loopy/codegen/bounds.py
+++ b/loopy/codegen/bounds.py
@@ -236,11 +236,9 @@ def wrap_in_for_from_constraints(ccm, iname, constraint_bset, stmt,
 
 # {{{ on which variables may a conditional depend?
 
-def get_defined_inames(kernel, sched_index, allow_tag_classes=()):
-    """
-    :param exclude_tags: a tuple of tag classes to exclude
-    """
+def get_defined_inames(kernel, sched_index):
     from loopy.schedule import EnterLoop, LeaveLoop
+    from loopy.kernel import ParallelTag
 
     result = set()
 
@@ -255,10 +253,33 @@ def get_defined_inames(kernel, sched_index, allow_tag_classes=()):
     for iname in kernel.all_inames():
         tag = kernel.iname_to_tag.get(iname)
 
-        if isinstance(tag, allow_tag_classes):
+        # these are always defined
+        if isinstance(tag, ParallelTag):
             result.add(iname)
 
-    return result
+    return frozenset(result)
+
+# }}}
+
+# {{{ get_simple_loop_bounds
+
+def get_simple_loop_bounds(kernel, sched_index, iname, implemented_domain, iname_domain):
+    from loopy.codegen.bounds import get_bounds_constraints, get_defined_inames
+    lower_constraints_orig, upper_constraints_orig, equality_constraints_orig = \
+            get_bounds_constraints(iname_domain, iname,
+                    frozenset([iname])
+                    | get_defined_inames(kernel, sched_index+1),
+                    allow_parameters=True)
+
+    lower_constraints_orig.extend(equality_constraints_orig)
+    upper_constraints_orig.extend(equality_constraints_orig)
+    #assert not equality_constraints_orig
+
+    from loopy.codegen.bounds import pick_simple_constraint
+    lb_cns_orig = pick_simple_constraint(lower_constraints_orig, iname)
+    ub_cns_orig = pick_simple_constraint(upper_constraints_orig, iname)
+
+    return lb_cns_orig, ub_cns_orig
 
 # }}}
 
@@ -283,4 +304,7 @@ def pick_simple_constraint(constraints, iname):
 
 
 
+
+
+
 # vim: foldmethod=marker
diff --git a/loopy/codegen/loop.py b/loopy/codegen/loop.py
index faeefa02..db3ff940 100644
--- a/loopy/codegen/loop.py
+++ b/loopy/codegen/loop.py
@@ -8,27 +8,6 @@ from loopy.codegen.control import build_loop_nest
 
 
 
-def get_simple_loop_bounds(kernel, sched_index, iname, implemented_domain, iname_domain):
-    from loopy.codegen.bounds import get_bounds_constraints, get_defined_inames
-    lower_constraints_orig, upper_constraints_orig, equality_constraints_orig = \
-            get_bounds_constraints(iname_domain, iname,
-                    frozenset([iname])
-                    | frozenset(get_defined_inames(kernel, sched_index+1)),
-                    allow_parameters=True)
-
-    lower_constraints_orig.extend(equality_constraints_orig)
-    upper_constraints_orig.extend(equality_constraints_orig)
-    #assert not equality_constraints_orig
-
-    from loopy.codegen.bounds import pick_simple_constraint
-    lb_cns_orig = pick_simple_constraint(lower_constraints_orig, iname)
-    ub_cns_orig = pick_simple_constraint(upper_constraints_orig, iname)
-
-    return lb_cns_orig, ub_cns_orig
-
-
-
-
 # {{{ conditional-minimizing slab decomposition
 
 def get_slab_decomposition(kernel, iname, sched_index, codegen_state):
@@ -37,6 +16,7 @@ def get_slab_decomposition(kernel, iname, sched_index, codegen_state):
     if iname_domain.is_empty():
         return ()
 
+    from loopy.codegen.bounds import get_simple_loop_bounds
     lb_cns_orig, ub_cns_orig = get_simple_loop_bounds(kernel, sched_index, iname,
             codegen_state.implemented_domain, iname_domain)
 
-- 
GitLab