summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--stdlib/optimize.tl20
1 files changed, 8 insertions, 12 deletions
diff --git a/stdlib/optimize.tl b/stdlib/optimize.tl
index 57eca186..2274e424 100644
--- a/stdlib/optimize.tl
+++ b/stdlib/optimize.tl
@@ -564,6 +564,14 @@
bb.list))
(hash (group-by [chain .insns cdr] candidates)))
(dohash (insns bls hash)
+ (let ((link (car (car bls).links)))
+ (each ((bb bb.list))
+ (if (and (not (member bb bls))
+ (null (cdr bb.links))
+ (eq bb.next link)
+ (starts-with (cdr bb.insns) insns)
+ (eql (len bb.insns) (len insns)))
+ (push bb bls))))
(when (cdr bls)
(whenlet ((keep (or (keep-if (op some @1.rlinks (op eq @@1) .next) bls)
(list (car bls))))
@@ -625,18 +633,6 @@
,lab2
(end (t ,ty))
,*rest))
- ((@(symbolp @lab1)
- @(consp @insn)
- (jmp @lab3)
- @(symbolp @lab2)
- @insn
- @(symbolp @lab3)
- . @rest)
- ^(,lab1
- ,lab2
- ,insn
- ,lab3
- ,*rest))
(@else else)))
(defun rewrite (fun list)