From 6a8d7fb51e78888ec1bb489968bbfa802f2e5b99 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Tue, 7 May 2013 12:53:14 -0400 Subject: [PATCH] boxify: Try harder to get convex output. --- loopy/isl_helpers.py | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/loopy/isl_helpers.py b/loopy/isl_helpers.py index fea91d7f9..a83564f48 100644 --- a/loopy/isl_helpers.py +++ b/loopy/isl_helpers.py @@ -350,7 +350,7 @@ def convexify(domain): -def boxify(cache_manager, domain, box_inames): +def boxify(cache_manager, domain, box_inames, context): var_dict = domain.get_var_dict(dim_type.set) box_iname_indices = [var_dict[iname][1] for iname in box_inames] n_nonbox_inames = min(box_iname_indices) @@ -371,32 +371,26 @@ def boxify(cache_manager, domain, box_inames): def add_in_dims(aff): return aff.add_dims(dim_type.in_, len(box_inames)) - iname_min = add_in_dims(cache_manager.dim_min(domain, i)) - iname_max = add_in_dims(cache_manager.dim_max(domain, i)) + iname_min = add_in_dims(cache_manager.dim_min(domain, i)).coalesce() + iname_max = add_in_dims(cache_manager.dim_max(domain, i)).coalesce() iname_slab = (iname_min.le_set(iname_aff) - .intersect(iname_max.ge_set(iname_aff))).coalesce() + .intersect(iname_max.ge_set(iname_aff))) - result = result & iname_slab + for i, iname in enumerate(box_inames): + iname_slab = iname_slab.set_dim_name(dim_type.set, i, iname) + + if context is not None: + iname_slab, context = isl.align_two(iname_slab, context) + iname_slab = iname_slab.gist(context) + iname_slab = iname_slab.coalesce() - for i, iname in enumerate(box_inames): - result = result.set_dim_name(dim_type.set, i, iname) + result = result & iname_slab result = result.move_dims( dim_type.set, 0, dim_type.param, n_old_parameters, n_nonbox_inames) - if isinstance(result, isl.BasicSet): - return result - - if len(result.get_basic_sets()) > 1: - result = result.coalesce() - - res_bsets = result.get_basic_sets() - if len(res_bsets) == 1: - result, = res_bsets - return result - else: - raise RuntimeError("boxify did not yield convex set") + return convexify(result) -- GitLab