diff options
-rw-r--r-- | stdlib/optimize.tl | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/stdlib/optimize.tl b/stdlib/optimize.tl index 906abdb8..d72be2fc 100644 --- a/stdlib/optimize.tl +++ b/stdlib/optimize.tl @@ -135,7 +135,7 @@ ^(rewrite (lambda (,sym) (match-case ,sym ,*cases)) - ,list)) + ,list nil)) (defmeth basic-blocks link-graph (bb : first-time) (unless first-time @@ -868,13 +868,15 @@ (each ((cl clist)) cl.(apply-treg-compacting-map map)))))) -(defun rewrite (fun list) - (build - (while* list - (let ((nlist [fun list])) - (if (eq list nlist) - (if list (add (pop list))) - (set list nlist)))))) +(defun rewrite (fun list out) + (let ((nlist [fun list])) + (if (eq list nlist) + (if list + (push (pop list) out)) + (set list nlist)) + (if list + (rewrite fun list out) + (nreverse out)))) (defun dedup-labels (insns) (rewrite-case tail insns |