diff --git a/loopy/symbolic.py b/loopy/symbolic.py index 33bd620af45c71242ea263a9b3975bbf2d47f4ea..8e3d5d8fb3b30ca332fb132f7e2f2c2dfcb260c3 100644 --- a/loopy/symbolic.py +++ b/loopy/symbolic.py @@ -57,6 +57,8 @@ from pymbolic.mapper.constant_folder import \ from pymbolic.parser import Parser as ParserBase +from loopy.diagnostic import LoopyError + import islpy as isl from islpy import dim_type @@ -1054,7 +1056,7 @@ class ArrayAccessFinder(CombineMapper): # {{{ (pw)aff to expr conversion -def aff_to_expr(aff): +def aff_to_expr(aff, _floor=False): from pymbolic import var denom = aff.get_denominator_val().to_python() @@ -1070,9 +1072,16 @@ def aff_to_expr(aff): for i in range(aff.dim(dim_type.div)): coeff = (aff.get_coefficient_val(dim_type.div, i)*denom).to_python() if coeff: - result += coeff*aff_to_expr(aff.get_div(i)) + result += coeff*aff_to_expr(aff.get_div(i), _floor=True) - return result // denom + if _floor: + return result // denom + else: + if denom != 1: + raise LoopyError("integer expression with true division: %s" + % aff) + else: + return result def pw_aff_to_expr(pw_aff, int_ok=False):