summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
Diffstat (limited to 'share')
-rw-r--r--share/txr/stdlib/optimize.tl11
1 files changed, 10 insertions, 1 deletions
diff --git a/share/txr/stdlib/optimize.tl b/share/txr/stdlib/optimize.tl
index 8f166a6f..109dc9b3 100644
--- a/share/txr/stdlib/optimize.tl
+++ b/share/txr/stdlib/optimize.tl
@@ -57,6 +57,7 @@
list
rescan
recalc
+ reelim
(:static start (gensym "start-"))
(:static jump-ops '(jmp if ifq ifql close swtch ret abscsr
uwprot catch block jend))
@@ -359,6 +360,12 @@
(pushnew bl bb.rescan)
(set bb.recalc t)
(cdr insns))
+ (@(require ((close (t @n) @nil @nil @jlabel . @nil) . @nil)
+ (dead-treg (car insns) n))
+ (pushnew bl bb.rescan)
+ (set bb.recalc t
+ bb.reelim t)
+ ^((jmp ,jlabel) ,*(cdr insns)))
(@(require ((@(or gcall gapply) (t @n) @idx . @nil) . @nil)
(dead-treg (car insns) n)
[%const-foldable% [bb.symvec idx]])
@@ -436,7 +443,9 @@
bb.(calc-liveness rescan)
(set bb.recalc nil))
(each ((bl rescan))
- (set bl.insns bb.(peephole-block bl bl.insns)))))
+ (set bl.insns bb.(peephole-block bl bl.insns))))
+ (when bb.reelim
+ bb.(elim-dead-code)))
(defmeth basic-blocks thread-jumps (bb)
(each ((bl bb.list))