There exists a body of code that was applied to a branch of the llvm backend in the past whose purpose was to allow garbage collection to be triggered by the allocator when the allocator ran out of space, rather than attempting to only trigger garbage collection after a rewrite step. This can prevent leaks when a long sequence of function calls occurs between two rewrite steps.
However, that code has bit-rotted and it is not at all trivial to resurrect the branch. Instead, we are going to attempt to replay the changes of the branch onto develop behind a feature flag.
This is pretty low priority and also very time consuming, so we should not pick up this work unless it is likely to directly affect the current milestone or if we have a lot of free time on our hands. With that being said, I am going to attempt to describe the changes that were made in the interests of documenting the work that will be required.
Right now this is going to be pretty low level because I don't have access to a clear picture of the high-level changes that were made due to the messiness of the branch. I will try to separate this out into a high level work plan in the future.
Here are the low-level changes that need to be replayed:
There exists a body of code that was applied to a branch of the llvm backend in the past whose purpose was to allow garbage collection to be triggered by the allocator when the allocator ran out of space, rather than attempting to only trigger garbage collection after a rewrite step. This can prevent leaks when a long sequence of function calls occurs between two rewrite steps.
However, that code has bit-rotted and it is not at all trivial to resurrect the branch. Instead, we are going to attempt to replay the changes of the branch onto develop behind a feature flag.
This is pretty low priority and also very time consuming, so we should not pick up this work unless it is likely to directly affect the current milestone or if we have a lot of free time on our hands. With that being said, I am going to attempt to describe the changes that were made in the interests of documenting the work that will be required.
Right now this is going to be pretty low level because I don't have access to a clear picture of the high-level changes that were made due to the messiness of the branch. I will try to separate this out into a high level work plan in the future.
Here are the low-level changes that need to be replayed: