diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2023-04-15 01:11:50 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2023-04-15 01:11:50 -0700 |
commit | bf6b46f16a5e691106a8868010807688fe756c84 (patch) | |
tree | 0a079968684326a4f38cedb767deca0bb855a92d /stdlib | |
parent | 8943016ffc30123525ebf29ad52f8d5a5efbf703 (diff) | |
download | txr-bf6b46f16a5e691106a8868010807688fe756c84.tar.gz txr-bf6b46f16a5e691106a8868010807688fe756c84.tar.bz2 txr-bf6b46f16a5e691106a8868010807688fe756c84.zip |
compiler: tighten cases in liveness calculation
* stdlib/optimize.tl (basic-blocks local-liveness): Handle all
instructions explicitly with no catch-all behavior. Make a
copy of the live-info even for instructions that have no
source or destination operands, so that they don't mistakenly
marked as having defs or refs.
Diffstat (limited to 'stdlib')
-rw-r--r-- | stdlib/optimize.tl | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/stdlib/optimize.tl b/stdlib/optimize.tl index 88099fa7..24cad22f 100644 --- a/stdlib/optimize.tl +++ b/stdlib/optimize.tl @@ -241,14 +241,14 @@ (refs li insn reg)) ((close @reg . @nil) (defs li insn reg)) - ((@op . @nil) - (caseq op - ((end jend xend prof or apply call or gapply gcall mov if - ifq ifql swtch block ret abscsr catch handle getv - getvb getfb getl1b getlx getf setl1 setlx bindv close) - (error `wrongly handled @insn instruction`)) - (t (set [bb.li-hash insn] li)))) - (@else (set [bb.li-hash else] li))))))) + ((@(or jmp frame dframe uwprot) . @nil) + (set [bb.li-hash insn] li) + (copy li)) + ((@nil . @nil) + (error `unhandled/mishandled @insn instruction`)) + (@else + (set [bb.li-hash else] li) + (copy li))))))) (let ((li (liveness bl.insns))) (set bl.used li.used bl.defined li.defined)))) |