summaryrefslogtreecommitdiffstats
path: root/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/optimize.tl19
1 files changed, 11 insertions, 8 deletions
diff --git a/stdlib/optimize.tl b/stdlib/optimize.tl
index 902ca89f..a2717425 100644
--- a/stdlib/optimize.tl
+++ b/stdlib/optimize.tl
@@ -414,16 +414,19 @@
(match-case jinsns
((@jlabel
(end (t @reg)) . @jrest)
- (let* ((xbl (if jrest
- bb.(cut-block jbl jrest jinsns)
- jbl.next))
- (ybl bl.next)
+ (let* ((ybl bl.next)
+ (xbl (if ybl
+ (if jrest
+ bb.(cut-block jbl jrest jinsns)
+ jbl.next)))
(yinsns ybl.insns))
(cond
- ((and xbl ybl)
- (set ybl.insns ^(,ybl.label ,(car insns) ,*(cdr yinsns)))
- (pushnew ybl bb.rescan)
- ^((if (t ,reg) ,xbl.label)))
+ (xbl
+ (set ybl.insns ^(,ybl.label ,(car insns) ,*(cdr yinsns)))
+ (pushnew ybl bb.rescan)
+ (set bb.recalc t)
+ (set bb.links (list ybl xbl))
+ ^((if (t ,reg) ,xbl.label)))
(t insns))))
(@jelse insns))))
(@(require ((if @(as reg (d @dn)) @jlabel) . @nil)