diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2021-02-15 12:01:37 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2021-02-15 12:01:37 -0800 |
commit | 4be8bc33aca9cd4c8aee2b6583939b0b552891e0 (patch) | |
tree | 1d5fb6631bdb777fb503030e37ca215f047a21dc | |
parent | 5408cc94bf0fbc51027f8b9e35590b73888b93d2 (diff) | |
download | txr-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.tl | 1 |
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)))) |