[ilasm] Lazily allocate memory in Indx256 (#76590)
authorMark Plesko <markples@microsoft.com>
Wed, 5 Oct 2022 03:48:29 +0000 (20:48 -0700)
committerGitHub <noreply@github.com>
Wed, 5 Oct 2022 03:48:29 +0000 (20:48 -0700)
commit324bd24ba1b62493d6a50c13789da943920b4436
tree482844c036180373c5597bab99353a52ffa0625f
parentd384ba94f4e1af4c41a83279bb2736984128b893
[ilasm] Lazily allocate memory in Indx256 (#76590)

Indx256 is a trie (or prefix tree) used to map labels to instructions.  It is very space-intensive because it allocates 256-element arrays for child nodes.  This is a localized fix to lazily allocate the child arrays and to split them into two 128-element arrays to handle common cases such as ildasm's output (IL_<hex>).  A more aggressive change to a different data structure would save much more memory but should probably include an analysis of why a trie was originally used.

Fixes #38515, #38529, #43818, and #73139.  I don't think hugeExpr1 (#38515) is going to get picked up by our current testing since the ilasmroundtrip run doesn't turn off tiered compilation, but I did check its behavior on x86 locally.
src/coreclr/ilasm/asmtemplates.h
src/tests/JIT/jit64/opt/cse/HugeField1.csproj
src/tests/JIT/jit64/opt/cse/HugeField2.csproj
src/tests/JIT/jit64/opt/cse/hugeexpr1.csproj