diff --git a/loopy/symbolic.py b/loopy/symbolic.py index cef32851f7578c946a7e26f672dbcceb588a9edd..d800a043bc157e4514e6f5672c13fa08af22e873 100644 --- a/loopy/symbolic.py +++ b/loopy/symbolic.py @@ -1083,6 +1083,29 @@ def aff_from_expr(space, expr, vars_to_zero=set()): # }}} +# {{{ simplify using affs + +def simplify_using_affs(kernel, expr): + inames = get_dependencies(expr) & kernel.all_inames() + + domain = kernel.get_inames_domain(inames) + + try: + with isl.SuppressedWarnings(kernel.isl_context): + aff = aff_from_expr(domain.space, expr) + except isl.Error: + return expr + except TypeError: + return expr + + # FIXME: Deal with assumptions, too. + aff = aff.gist(domain) + + return aff_to_expr(aff) + +# }}} + + # {{{ expression <-> constraint conversion def eq_constraint_from_expr(space, expr):