summaryrefslogtreecommitdiffstats
path: root/share/txr/stdlib/optimize.tl
diff options
context:
space:
mode:
Diffstat (limited to 'share/txr/stdlib/optimize.tl')
-rw-r--r--share/txr/stdlib/optimize.tl7
1 files changed, 5 insertions, 2 deletions
diff --git a/share/txr/stdlib/optimize.tl b/share/txr/stdlib/optimize.tl
index a2054ca3..fcaece3b 100644
--- a/share/txr/stdlib/optimize.tl
+++ b/share/txr/stdlib/optimize.tl
@@ -37,8 +37,9 @@
links
insns)
- (defstruct (basic-blocks insns) nil
+ (defstruct (basic-blocks insns lt-dregs) nil
insns
+ lt-dregs
root
(hash (hash))
(li-hash (hash :eq-based))
@@ -257,7 +258,9 @@
(while* (nequal ninsn insn)
(set insn ninsn
ninsn (match-case insn
- ((if (d @reg) @jlabel) nil)
+ (@(require (if @(as reg (d @reg)) @jlabel)
+ (not (memqual reg bb.lt-dregs)))
+ nil)
((if (t 0) @jlabel)
^(jmp ,jlabel))
((jmp @jlabel)