From 94b65d29ee2868abc1068adee0dc5273dcf0e5ac Mon Sep 17 00:00:00 2001
From: Matt Wala <wala1@illinois.edu>
Date: Sat, 20 May 2017 19:06:57 -0500
Subject: [PATCH] get_usable_inames_for_conditional(): Fix inames finding in
 the case that we are outside a subkernel (closes #65).

---
 loopy/codegen/bounds.py | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/loopy/codegen/bounds.py b/loopy/codegen/bounds.py
index 7cc381f11..ae91abd56 100644
--- a/loopy/codegen/bounds.py
+++ b/loopy/codegen/bounds.py
@@ -65,11 +65,20 @@ def get_usable_inames_for_conditional(kernel, sched_index):
 
     # Find our containing subkernel, grab inames for all insns from there.
 
-    subkernel_index = sched_index
-    from loopy.schedule import CallKernel
-
-    while not isinstance(kernel.schedule[subkernel_index], CallKernel):
-        subkernel_index -= 1
+    within_subkernel = False
+
+    for prev_sched_index, sched_item in enumerate(kernel.schedule):
+        if prev_sched_index == sched_index:
+            if not within_subkernel:
+                # Outside all subkernels - use only inames available to device.
+                return frozenset(result)
+
+        from loopy.schedule import CallKernel, ReturnFromKernel
+        if isinstance(sched_item, CallKernel):
+            within_subkernel = True
+            subkernel_index = prev_sched_index
+        elif isinstance(sched_item, ReturnFromKernel):
+            within_subkernel = False
 
     insn_ids_for_subkernel = get_insn_ids_for_block_at(
         kernel.schedule, subkernel_index)
-- 
GitLab