diff --git a/src/panfrost/bifrost/bi_schedule.c b/src/panfrost/bifrost/bi_schedule.c
index 4a05527..fccaf69 100644
--- a/src/panfrost/bifrost/bi_schedule.c
+++ b/src/panfrost/bifrost/bi_schedule.c
@@ -163,6 +163,66 @@
         return (count == 1);
 }
 
+/* Insert a clause wrapping a single instruction */
+
+bi_clause *
+bi_make_singleton(void *memctx, bi_instruction *ins,
+                bi_block *block,
+                unsigned scoreboard_id,
+                unsigned dependencies,
+                bool osrb)
+{
+        unsigned props = bi_class_props[ins->type];
+
+        bi_clause *u = rzalloc(memctx, bi_clause);
+        u->bundle_count = 1;
+
+        /* Check for scheduling restrictions */
+
+        bool can_fma = props & BI_SCHED_FMA;
+        ASSERTED bool can_add = props & BI_SCHED_ADD;
+
+        can_fma &= !bi_ambiguous_abs(ins);
+        can_fma &= !bi_icmp(ins);
+        can_fma &= !bi_imath_small(ins);
+
+        assert(can_fma || can_add);
+
+        if (can_fma)
+                u->bundles[0].fma = ins;
+        else
+                u->bundles[0].add = ins;
+
+        u->scoreboard_id = scoreboard_id;
+        u->staging_barrier = osrb;
+        u->dependencies = dependencies;
+
+        if (ins->type == BI_ATEST)
+                u->dependencies |= (1 << 6);
+
+        if (ins->type == BI_BLEND)
+                u->dependencies |= (1 << 6) | (1 << 7);
+
+        /* Let's be optimistic, we'll fix up later */
+        u->flow_control = BIFROST_FLOW_NBTB;
+
+        u->constant_count = 1;
+        u->constants[0] = ins->constant.u64;
+
+        if (ins->type == BI_BRANCH && ins->branch_target)
+                u->branch_constant = true;
+
+        /* We always prefetch except unconditional branches */
+        u->next_clause_prefetch = !(
+                        (ins->type == BI_BRANCH) &&
+                        (ins->cond == BI_COND_ALWAYS));
+
+        u->message_type = bi_message_type_for_ins(ins);
+        u->block = block;
+
+        return u;
+}
+
 /* Eventually, we'll need a proper scheduling, grouping instructions
  * into clauses and ordering/assigning grouped instructions to the
  * appropriate FMA/ADD slots. Right now we do the dumbest possible
@@ -172,8 +232,6 @@
 void
 bi_schedule(bi_context *ctx)
 {
-        unsigned ids = 0;
-        unsigned last_id = 0;
         bool is_first = true;
 
         bi_foreach_block(ctx, block) {
@@ -185,63 +243,11 @@
                         /* Convenient time to lower */
                         bi_lower_fmov(ins);
 
-                        unsigned props = bi_class_props[ins->type];
+                        bi_clause *u = bi_make_singleton(ctx, ins,
+                                        bblock, 0, (1 << 0),
+                                        !is_first);
 
-                        bi_clause *u = rzalloc(ctx, bi_clause);
-                        u->bundle_count = 1;
-
-                        /* Check for scheduling restrictions */
-
-                        bool can_fma = props & BI_SCHED_FMA;
-                        ASSERTED bool can_add = props & BI_SCHED_ADD;
-
-                        can_fma &= !bi_ambiguous_abs(ins);
-                        can_fma &= !bi_icmp(ins);
-                        can_fma &= !bi_imath_small(ins);
-
-                        assert(can_fma || can_add);
-
-                        if (can_fma)
-                                u->bundles[0].fma = ins;
-                        else
-                                u->bundles[0].add = ins;
-
-                        u->scoreboard_id = ids++;
-
-                        if (is_first)
-                                is_first = false;
-                        else {
-                                /* Rule: first instructions cannot have write barriers */
-                                u->dependencies |= (1 << last_id);
-                                u->staging_barrier = true;
-                        }
-
-                        if (ins->type == BI_ATEST)
-                                u->dependencies |= (1 << 6);
-
-                        if (ins->type == BI_BLEND)
-                                u->dependencies |= (1 << 6) | (1 << 7);
-
-                        ids = ids & 1;
-                        last_id = u->scoreboard_id;
-
-                        /* Let's be optimistic, we'll fix up later */
-                        u->flow_control = BIFROST_FLOW_NBTB;
-
-                        u->constant_count = 1;
-                        u->constants[0] = ins->constant.u64;
-
-                        if (ins->type == BI_BRANCH && ins->branch_target)
-                                u->branch_constant = true;
-
-                        /* We always prefetch except unconditional branches */
-                        u->next_clause_prefetch = !(
-                                (ins->type == BI_BRANCH) &&
-                                (ins->cond == BI_COND_ALWAYS));
-
-                        u->message_type = bi_message_type_for_ins(ins);
-                        u->block = (struct bi_block *) block;
-
+                        is_first = false;
                         list_addtail(&u->link, &bblock->clauses);
                 }
 
diff --git a/src/panfrost/bifrost/compiler.h b/src/panfrost/bifrost/compiler.h
index 47c1099..f811629 100644
--- a/src/panfrost/bifrost/compiler.h
+++ b/src/panfrost/bifrost/compiler.h
@@ -655,6 +655,12 @@
 void bi_schedule(bi_context *ctx);
 void bi_register_allocate(bi_context *ctx);
 
+bi_clause *bi_make_singleton(void *memctx, bi_instruction *ins,
+                bi_block *block,
+                unsigned scoreboard_id,
+                unsigned dependencies,
+                bool osrb);
+
 /* Liveness */
 
 void bi_compute_liveness(bi_context *ctx);
