kazutakahirata wrote:

@erichkeane Here is the memory impact measured by instrumenting 
`LookupSpecialMember` on a compile of `SLPVectorizer.ii` (where the cache 
reaches 27,016 entries):

- **Before (`FoldingSet` + `BumpAlloc`)**:
  - Each `SpecialMemberOverloadResultEntry` is 160 bytes (152-byte 
`FastFoldingSetNode` + 8-byte result) allocated on `BumpAlloc`.
  - Arena allocations: 27,016 × 160 bytes = ~4.12 MiB (unreclaimable until 
`Sema` teardown).
  - Hash buckets with pointers: 65,536 × 8 bytes = ~0.50 MiB.
  - Total: ~4.62 MiB.

- **After (`DenseMap`)**:
  - Each bucket is 24 bytes (16-byte key + 8-byte result).
  - Arena allocations: 0 bytes.
  - Hash buckets with key-value pairs: 65,536 × 24 bytes = ~1.50 MiB.
  - Total: ~1.50 MiB.

As far as performance goes, compiling about 25,000 C++ source files sped up by 
0.05% — pretty much a wash despite N = 25,000.


https://github.com/llvm/llvm-project/pull/221304
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to