netlistsvg icon indicating copy to clipboard operation
netlistsvg copied to clipboard

Refactor FlatModule.gather from stack to heap overflow

Open kshaa opened this issue 2 years ago • 0 comments

I ran into the same error as mentioned in issue #98 and saw that there's a proposition to fix it by refactoring FlatModule.gather from a recursive function to a loop, because it seems tail recursive-ish, this PR does exactly that.

Unfortunately it seems that gather isn't completely tail recursive (one condition leads to a recursive call and then afterwards modifies inputs) so I just left that part recursive and refactored all the other parts. However in my use case it seemed that this condition that can't be refactored wasn't the one causing a stack overflow, so in essence the patch is worthy and does fix at least some of the badly performing use cases.

TL;DR - This patch allows using more RAM on beefy netlists before everything crashes and burns. I.e. a stack overflow has been refactored into a heap overflow (or into a successful case if there's enough RAM).

kshaa avatar Apr 01 '22 09:04 kshaa