summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
Diffstat (limited to 'share')
-rw-r--r--share/txr/stdlib/optimize.tl9
1 files changed, 9 insertions, 0 deletions
diff --git a/share/txr/stdlib/optimize.tl b/share/txr/stdlib/optimize.tl
index 7a6b9dbb..a8a329de 100644
--- a/share/txr/stdlib/optimize.tl
+++ b/share/txr/stdlib/optimize.tl
@@ -65,6 +65,15 @@
(jmp @(require @jjlabel (neq jjlabel jlabel))) . @nil)
^((jmp ,jjlabel) ,*rest))
(@jelse insns))))
+ (((if @reg @jlabel0)
+ (jmp @jlabel1) . @rest)
+ (let ((jinsns [bb.hash jlabel1]))
+ (if-match (@(op eq jlabel1)
+ (if @(op eq reg) @nil)
+ (jmp @jlabel3) . @nil)
+ jinsns
+ ^(,(car insns) (jmp ,jlabel3) ,*rest)
+ insns)))
(((if @reg @jlabel) . @rest)
(let ((jinsns [bb.hash jlabel]))
(match-case jinsns