diff options
-rw-r--r-- | stdlib/optimize.tl | 19 |
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) |