From bf6b46f16a5e691106a8868010807688fe756c84 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sat, 15 Apr 2023 01:11:50 -0700 Subject: 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. --- stdlib/optimize.tl | 16 ++++++++-------- 1 file 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)))) -- cgit v1.2.3