 
 : convert-loop-tail-call ( bb -- )
     ! If a word calls itself, this becomes a loop in the CFG.
-    [ instructions>> [ pop* ] [ pop* ] [ [ \ ##branch new-insn ] dip push ] tri ]
+    [
+        instructions>> {
+            [ pop* ]
+            [ pop* ]
+            [ [ \ ##safepoint new-insn ] dip push ]
+            [ [ \ ##branch new-insn ] dip push ]
+        } cleave
+    ]
     [ successors>> delete-all ]
     [ [ cfg get entry>> successors>> first ] dip successors>> push ]
     tri ;

: return? ( bb -- ? )
    skip-empty-blocks
    instructions>> {
        [ length 2 = ]
        [ first ##epilogue? ]
        [ second ##return? ]
    } 1&& ;

: tail-call? ( bb -- ? )

    '[
        instructions>>
        [ pop* ] [ pop ] [ ] tri
        [ [ \ ##safepoint new-insn ] dip push ]
        [ [ \ ##epilogue new-insn ] dip push ]
        [ _ dip push ] tri
    ]
    [ successors>> delete-all ]
    bi ; inline
