Improve SSA renaming memory usage (dotnet/coreclr#15000)
* Cleanup DumpStacks
It's not exactly useful to dump all the stacks after pushing to a stack. Nor is it useful to dump all the stack after popping only some, perhaps none, in PopBlockStacks.
Also dump stack from top to bottom, makes it easier to find the top, which is usually what you care about during SSA renaming.
* Stop passing null block to SsaRenameState::Push
It makes no difference if the definition is in the "block before any real blocks..." or at the start of the first block, it's just an unnecessary complication.
* Stop handling byrefStatesMatchGcHeapStates in SsaRenameState
SsaBuilder already handles that, doing it again in SsaRenameState just duplicates logic.
* Stop using "count" as a name for "SSA number"
Worst name ever.
Also use "block" consistently, instead of a mix of "bb" and "block".
* Delete "ConstructedArray", not needed
* Various cleanup
- Change SsaRenameState to a class
- Cleanup remaining function comments
- Move SsaRenameStateForBlock & SsaRenameStateLocDef inside SsaRenameState
- Make EnsureStacks private
- Reorder data members
- Use m_ prefix consistently
* Replace jitstd::list with a custom stack
std::list has a few drawbacks:
- It's a doubly linked list but a singly linked list suffices so every node wastes 8 bytes for an extra pointer.
- The list object itself is relatively large 2 head/tail pointers, node count and memory allocator. There can be hundreds of such objects (one for each local variable) so the smaller the better.
Replace with a simple singly linked, intrusive list based stack.
* Share push code between lclvar and memory
It's pretty much the same logic (the only difference is that in the memory case "top" can't ever be null so by sharing the code we get a redundant null check).
Commit migrated from https://github.com/dotnet/coreclr/commit/
fb583867ae37e75cf9f5c4f556627283a257d67b