local_storage.pl
Nonescaping memory that remains after scalar promotion.
local_storage_module/2 replaces an entry allocation and its address chain with a named local object and fixed-offset accesses. A local object's address is not a value: it cannot become a heap lower, a call argument or a stored pointer. Pointer *contents* still have ordinary Fil-C capabilities.
Selection is deliberately smaller than escape classification: strict SSA, no returns-twice operation, a constant entry size, and all accesses within the exact size. Heap allocations have rounded bounds; selecting an access in their padding would change the IR's meaning. Overlapping and misaligned accesses remain, with all their checks. Local payload/aux storage is limited to 4096 bytes per function; larger objects and the remainder keep the heap fallback. Plain-mode and checked modules are unchanged.
M has named local objects for the eligible allocations of M0.
F0 is an unchecked Fil-C function. Unknown or unsupported allocation uses keep their heap representation.
Only in-bounds accesses qualify, but not necessarily disjoint ones: those are the objects promote could not turn into SSA values.
Payload and aux round to 16; reserve a header, a root, and alignment slack too. This is selection policy, not a relaxation of local bounds.