diff options
Diffstat (limited to 'stdlib/optimize.tl')
-rw-r--r-- | stdlib/optimize.tl | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/stdlib/optimize.tl b/stdlib/optimize.tl index 518264f5..5a59a531 100644 --- a/stdlib/optimize.tl +++ b/stdlib/optimize.tl @@ -437,13 +437,22 @@ (pushnew bl.next bb.rescan) (set bb.recalc t) nil) - (@(require ((ifq @(as reg (d @dn)) (t 0) @jlabel) . @nil) + (@(require @(or ((@(or ifq ifql) @(as reg (d @dn)) (t 0) @jlabel) . @nil) + ((@(or ifq ifql) (t 0) @(as reg (d @dn)) @jlabel) . @nil)) (not (memqual reg bb.lt-dregs))) (pushnew bl.next bb.rescan) (set bb.recalc t bl.next nil bl.links (list [bb.hash jlabel])) ^((jmp ,jlabel))) + (@(require ((@(or ifq ifql) @(as reg0 (d @n0)) @(as reg1 (d @n1)) @label) + . @nil) + (neql n0 n1) + (not (and (memqual reg0 bb.lt-dregs) + (memqual reg1 bb.lt-dregs)))) + ^((jmp ,label))) + (((@(or ifq ifql) @reg @reg . @nil) . @nil) + (rest insns)) ;; wasteful move of previously tested value (@(require ((ifq (t @reg) (d @n) @nil) . @nil) (let* ((nxbl bl.next) |