From 321b5590adeb194221d1c056cce3817bae54b355 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Wed, 5 Feb 2014 16:31:56 -0600 Subject: [PATCH] static_extremum_of_pw_aff: Prefer unbounded over bounded validity --- loopy/isl_helpers.py | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/loopy/isl_helpers.py b/loopy/isl_helpers.py index 201aee16c..bf7a06873 100644 --- a/loopy/isl_helpers.py +++ b/loopy/isl_helpers.py @@ -204,10 +204,29 @@ def static_extremum_of_pw_aff(pw_aff, constants_only, set_method, what, context) % (what, pw_aff)) return result - # put constant bounds first - pieces = ( - [(set, aff) for set, aff in pieces if aff.is_cst()] - + [(set, aff) for set, aff in pieces if not aff.is_cst()]) + from pytools import memoize, flatten + + @memoize + def is_bounded(set): + assert set.dim(dim_type.set) == 0 + return (set + .move_dims(dim_type.set, 0, + dim_type.param, 0, set.dim(dim_type.param)) + .is_bounded()) + + # put constant bounds with unbounded validity first + # FIXME: Heuristi-hack. + order = [ + (True, False), # constant, unbounded validity + (False, False), # nonconstant, unbounded validity + (True, True), # constant, bounded validity + (False, True), # nonconstant, bounded validity + ] + pieces = flatten([ + [(set, aff) for set, aff in pieces + if aff.is_cst() == want_is_constant + and is_bounded(set) == want_is_bounded] + for want_is_constant, want_is_bounded in order]) reference = pw_aff.get_aggregate_domain() if context is not None: -- GitLab