diff options
Diffstat (limited to 'stdlib')
-rw-r--r-- | stdlib/compiler.tl | 17 | ||||
-rw-r--r-- | stdlib/optimize.tl | 3 |
2 files changed, 11 insertions, 9 deletions
diff --git a/stdlib/compiler.tl b/stdlib/compiler.tl index 2a8f97cd..bf6496bb 100644 --- a/stdlib/compiler.tl +++ b/stdlib/compiler.tl @@ -1723,15 +1723,14 @@ bb.(thread-jumps) bb.(elim-dead-code)) (when (>= olev 5) - bb.(calc-liveness) - bb.(peephole) - (when (>= olev 6) - bb.(link-graph) - bb.(thread-jumps)) - bb.(elim-dead-code) - (when (>= olev 6) - bb.(calc-liveness) - bb.(peephole))) + (let ((nblocks nil)) + (while* (and (>= olev 6) + (neql nblocks (set nblocks bb.(num-blocks)))) + bb.(calc-liveness) + bb.(peephole) + bb.(link-graph) + bb.(thread-jumps) + bb.(elim-dead-code)))) (cond ((>= olev 7) bb.(merge-jump-thunks) diff --git a/stdlib/optimize.tl b/stdlib/optimize.tl index ff256db7..8bf8b8c9 100644 --- a/stdlib/optimize.tl +++ b/stdlib/optimize.tl @@ -85,6 +85,9 @@ (mapdo (do set [bb.hash @1.label] @1) bb.list)) bb.(link-graph)) + (:method num-blocks (bb) + (len bb.list)) + (:method get-insns (bb) [mappend .insns bb.list]) |