diff --git a/loopy/schedule.py b/loopy/schedule.py
index 113819b9abf94e1f33ac664107587b0f4fd9308a..44df6d2cd1a33411e1adf2db7cde367a5c25c773 100644
--- a/loopy/schedule.py
+++ b/loopy/schedule.py
@@ -422,9 +422,12 @@ def generate_loop_schedules_internal(
     reachable_insn_ids = set()
     active_groups = frozenset(sched_state.active_group_counts)
 
+    def insn_sort_key(insn_id):
+        insn = kernel.id_to_insn[insn_id]
+        return (insn.priority, len(active_groups & insn.groups))
+
     for insn_id in sorted(sched_state.unscheduled_insn_ids,
-            key=lambda insn_id: kernel.id_to_insn[insn_id].priority,
-            reverse=True):
+            key=insn_sort_key, reverse=True):
 
         insn = kernel.id_to_insn[insn_id]