summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2021-02-15 12:01:37 -0800
committerKaz Kylheku <kaz@kylheku.com>2021-02-15 12:01:37 -0800
commit4be8bc33aca9cd4c8aee2b6583939b0b552891e0 (patch)
tree1d5fb6631bdb777fb503030e37ca215f047a21dc
parent5408cc94bf0fbc51027f8b9e35590b73888b93d2 (diff)
downloadtxr-4be8bc33aca9cd4c8aee2b6583939b0b552891e0.tar.gz
txr-4be8bc33aca9cd4c8aee2b6583939b0b552891e0.tar.bz2
txr-4be8bc33aca9cd4c8aee2b6583939b0b552891e0.zip
compiler: re-scan block altered by frame-move.
* share/txr/stdlib/optimize.tl (basic-blocks peephole-block): If we move a frame instruction past a jump into the next block, we must add that block's label to the rescan list. There may be an opportunity to propagate the frame instruction deeper into that block. I'm not seeing a difference from this change in the compilation of the standard library, which indicates that this is happening by fluke; the alteration of that block is happening before it has been visited.
-rw-r--r--share/txr/stdlib/optimize.tl1
1 files changed, 1 insertions, 0 deletions
diff --git a/share/txr/stdlib/optimize.tl b/share/txr/stdlib/optimize.tl
index 305bab9d..e2cb0020 100644
--- a/share/txr/stdlib/optimize.tl
+++ b/share/txr/stdlib/optimize.tl
@@ -161,6 +161,7 @@
((and xlabel ylabel)
(set [bb.hash ylabel]
^(,ylabel ,(car insns) ,*(cdr yinsns)))
+ (push ylabel bb.rescan)
^((if (t ,reg) ,xlabel)))
(t insns))))
(@jelse insns))))