stack: Correctly insert %DYNAMIC-EXTENT-START.
commitb38992572b1f81fb092e3a9bd1a8fbd9bf5718eb
authorCharles Zhang <charleszhang99@yahoo.com>
Fri, 18 Aug 2023 23:36:18 +0000 (19 01:36 +0200)
committerCharles Zhang <charleszhang99@yahoo.com>
Sat, 19 Aug 2023 00:40:02 +0000 (19 02:40 +0200)
treed03f971608ddacaeb20bae247bf04f5c249b32db
parent59727f828bee8bcf0b9cfcbab0d6ec2da879bed8
stack: Correctly insert %DYNAMIC-EXTENT-START.

We need to do a forward walk through the flow graph in order to insert
%DYNAMIC-EXTENT-START correctly, as it's impossible do so with the
liveness iteration, which is a backwards flow algorithm. Inserting
%DYNAMIC-EXTENT-START before the other parts of stack analysis runs
has benefits too: we no longer push the same lvar multiple times, so
that uvl-set ordering can do more consistency checking for us. We also
don't need to keep track of DX-POPPED or calculate LVAR-DYNAMIC-DEST
anymore, which gave incorrect answers anyway in conjunction with
normalizing all stack objects in the same group to use the same lvar
as we do now. The test case :DYNAMIC-EXTENT-MESS-UP demonstrates the
problem.
src/compiler/envanal.lisp
src/compiler/node.lisp
src/compiler/stack.lisp
src/compiler/vop.lisp
tests/dynamic-extent.pure.lisp