diff --git a/loopy/preprocess.py b/loopy/preprocess.py
index fd851d3a6b12e287d85d1718c9504fdd93eb7cda..3c84d835c832b3ce67fdcec01bd1d068429ada64 100644
--- a/loopy/preprocess.py
+++ b/loopy/preprocess.py
@@ -645,19 +645,6 @@ def preprocess_kernel(kernel):
     kernel = mark_local_temporaries(kernel)
     kernel = duplicate_reduction_inames(kernel)
     kernel = realize_reduction(kernel)
-
-    # {{{ check that all CSEs have been realized
-
-    from loopy.symbolic import CSECallbackMapper
-
-    def map_cse(expr, rec):
-        raise RuntimeError("all CSEs must be realized before scheduling")
-
-    for insn in kernel.instructions:
-        CSECallbackMapper(map_cse)(insn.expression)
-
-    # }}}
-
     kernel = assign_automatic_axes(kernel)
     kernel = add_boostability_and_automatic_dependencies(kernel)
     kernel = limit_boostability(kernel)
diff --git a/loopy/schedule.py b/loopy/schedule.py
index 61d9678cc39d476c40b6fcc3f92e23ad22e21cc0..67ffbb645c257f4f0ec28aea4e3c7a80dfb1ab9b 100644
--- a/loopy/schedule.py
+++ b/loopy/schedule.py
@@ -597,6 +597,18 @@ def insert_barriers(kernel, schedule, level=0):
 # {{{ main scheduling entrypoint
 
 def generate_loop_schedules(kernel, loop_priority=[], debug=None):
+    # {{{ check that all CSEs have been realized
+
+    from loopy.symbolic import CSECallbackMapper
+
+    def map_cse(expr, rec):
+        raise RuntimeError("all CSEs must be realized before scheduling")
+
+    for insn in kernel.instructions:
+        CSECallbackMapper(map_cse)(insn.expression)
+
+    # }}}
+
     from loopy.preprocess import preprocess_kernel
     kernel = preprocess_kernel(kernel)