diff options
-rw-r--r-- | share/txr/stdlib/optimize.tl | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/share/txr/stdlib/optimize.tl b/share/txr/stdlib/optimize.tl index cf8a42b0..31702cb4 100644 --- a/share/txr/stdlib/optimize.tl +++ b/share/txr/stdlib/optimize.tl @@ -425,13 +425,19 @@ (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)))) + (let* ((jinsns (cdr [bb.hash jlabel].insns)) + (oinsns (match-case jinsns + (((jend @nil) . @nil) + ^(,(car jinsns) ,*rest)) + ((@nil (jend @nil) . @nil) + ^(,(car jinsns) ,(cadr jinsns) ,*rest)) + (@else insns)))) + (when (neq insns oinsns) + (pushnew bl bb.rescan) + (set bb.recalc t + bl.next nil + bl.links nil)) + oinsns)) (@else insns)))) (defmeth basic-blocks peephole (bb) |