diff --git a/loopy/symbolic.py b/loopy/symbolic.py index 6a175419ed54c8fffa57f197971a5393a527b437..b887c703420d092d7f3c0fc9c729dd1d1f942a76 100644 --- a/loopy/symbolic.py +++ b/loopy/symbolic.py @@ -79,7 +79,19 @@ class IdentityMapperMixin(object): return expr def map_reduction(self, expr, *args): - return Reduction(expr.operation, expr.inames, self.rec(expr.expr, *args), + mapped_inames = [self.rec(Variable(iname), *args) for iname in expr.inames] + + new_inames = [] + for iname, new_sym_iname in zip(expr.inames, mapped_inames): + if not isinstance(new_sym_iname, Variable): + from loopy.diagnostic import LoopyError + raise LoopyError("%s did not map iname '%s' to a variable" + % (type(self).__name__, iname)) + + new_inames.append(new_sym_iname.name) + + return Reduction( + expr.operation, tuple(new_inames), self.rec(expr.expr, *args), allow_simultaneous=expr.allow_simultaneous) def map_tagged_variable(self, expr, *args):