summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 411af8d9..73aa6dc6 100644
--- a/share/txr/stdlib/optimize.tl
+++ b/share/txr/stdlib/optimize.tl
@@ -391,6 +391,14 @@
(@(require ((ifq @(as reg (d @dn)) (t 0) @jlabel) . @nil)
(not (memqual reg bb.lt-dregs)))
^((jmp ,jlabel)))
+ (((jmp @jlabel) . @rest)
+ (let ((jinsns (cdr [bb.hash jlabel].insns)))
+ (match-case jinsns
+ (((jend @nil) . @nil)
+ ^(,(car jinsns) ,*rest))
+ ((@nil (jend @nil) . @nil)
+ ^(,(car jinsns) ,(cadr jinsns) ,*rest))
+ (@else insns))))
(@else insns)))
(defmeth basic-blocks peephole (bb)