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 3ca7f07c..7b8d6587 100644 --- a/stdlib/optimize.tl +++ b/stdlib/optimize.tl @@ -87,7 +87,7 @@ insns @1 label (car @1)) lparts)) (mapdo (do set [bb.hash @1.label] @1) bb.list)) - bb.(link-graph)) + bb.(link-graph t)) (:method num-blocks (bb) (len bb.list)) @@ -129,7 +129,13 @@ ,*cases)) ,list)) -(defmeth basic-blocks link-graph (bb) +(defmeth basic-blocks link-graph (bb : first-time) + (unless first-time + (each ((bl bb.list)) + (set bl.links nil + bl.next nil + bl.prev nil + bl.rlinks nil))) (each* ((bl bb.list) (nxbl (append (cdr bl) '(nil)))) (let* ((code bl.insns) @@ -600,11 +606,6 @@ (set bb.list (joinbl bb.list)))) (defmeth basic-blocks elim-dead-code (bb) - (each ((bl bb.list)) - (set bl.links nil - bl.next nil - bl.prev nil - bl.rlinks nil)) bb.(link-graph) (let* ((visited (hash :eq-based))) (labels ((visit (bl) @@ -633,7 +634,8 @@ (del [visited bl]))) (if rep (upd bb.list (keep-if visited)))))) - bb.(join-blocks)) + bb.(join-blocks) + bb.(link-graph)) (defmeth basic-blocks merge-jump-thunks (bb) (let* ((candidates (mappend [andf [chain .links len (op eql 1)] |