summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
Diffstat (limited to 'share')
-rw-r--r--share/txr/stdlib/optimize.tl8
1 files changed, 8 insertions, 0 deletions
diff --git a/share/txr/stdlib/optimize.tl b/share/txr/stdlib/optimize.tl
index 011b7bf0..537d064c 100644
--- a/share/txr/stdlib/optimize.tl
+++ b/share/txr/stdlib/optimize.tl
@@ -97,6 +97,14 @@
((@jlabel
(jmp @(and @jjlabel @(not @jlabel))) . @nil)
^((if ,reg ,jjlabel) ,*rest))
+ ((@jlabel
+ (ifq @reg nil @jjlabel) . @jrest)
+ (let ((xlabel (if jrest
+ bb.(cut-block jlabel jrest jinsns)
+ bb.(next-block jlabel))))
+ (if xlabel
+ ^((if ,reg ,xlabel) ,*rest)
+ insns)))
(@jelse insns))))
(((ifq @reg @creg @jlabel) . @rest)
(let ((jinsns [bb.hash jlabel]))