From c4b5ce4755a09a7f643a83fa14ab3d9e10b52302 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Wed, 11 May 2016 23:22:08 -0500
Subject: [PATCH] More multiple-assignment wrinkle ironing

---
 loopy/transform/arithmetic.py | 2 +-
 loopy/transform/precompute.py | 5 +++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/loopy/transform/arithmetic.py b/loopy/transform/arithmetic.py
index d41222c26..2c50b3f11 100644
--- a/loopy/transform/arithmetic.py
+++ b/loopy/transform/arithmetic.py
@@ -158,7 +158,7 @@ def collect_common_factors_on_increment(kernel, var_name, vary_by_axes=()):
             continue
 
         if not isinstance(insn, Assignment):
-            raise LoopyError("'%s' modified by non-expression instruction"
+            raise LoopyError("'%s' modified by non-single-assignment"
                     % var_name)
 
         lhs = insn.assignee
diff --git a/loopy/transform/precompute.py b/loopy/transform/precompute.py
index 5c9a286de..6ea0c06e6 100644
--- a/loopy/transform/precompute.py
+++ b/loopy/transform/precompute.py
@@ -426,8 +426,9 @@ def precompute(kernel, subst_use, sweep_inames=[], within=None,
 
         import loopy as lp
         for insn in kernel.instructions:
-            if isinstance(insn, lp.Assignment):
-                invg(insn.assignee, kernel, insn)
+            if isinstance(insn, lp.MultiAssignmentBase):
+                for assignee in insn.assignees:
+                    invg(assignee, kernel, insn)
                 invg(insn.expression, kernel, insn)
 
         access_descriptors = invg.access_descriptors
-- 
GitLab