diff --git a/loopy/transform/precompute.py b/loopy/transform/precompute.py
index 9ca4806f48e3ffc8ef11a0a8ad6f97bebb9f6507..06cf83f9d9e6aeac68c1135a15c03f24cc1a6ac1 100644
--- a/loopy/transform/precompute.py
+++ b/loopy/transform/precompute.py
@@ -379,7 +379,12 @@ def precompute(kernel, subst_use, sweep_inames=[], within=None,
     from loopy.kernel.data import parse_tag
     default_tag = parse_tag(default_tag)
 
-    subst = kernel.substitutions[subst_name]
+    try:
+        subst = kernel.substitutions[subst_name]
+    except KeyError:
+        raise LoopyError("substitution rule '%s' not found"
+                % subst_name)
+
     c_subst_name = subst_name.replace(".", "_")
 
     # }}}