mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #9162 from ethereum/memoryEscalator
Memory Escalator
This commit is contained in:
@@ -952,6 +952,26 @@ option.
|
||||
|
||||
See :ref:`Using the Commandline Compiler <commandline-compiler>` for details about the Solidity linker.
|
||||
|
||||
memoryguard
|
||||
^^^^^^^^^^^
|
||||
|
||||
This function is available in the EVM dialect with objects. The caller of
|
||||
``let ptr := memoryguard(size)`` (where ``size`` has to be a literal number)
|
||||
promises that they only use memory in either the range ``[0, size)`` or the
|
||||
unbounded range starting at ``ptr``.
|
||||
|
||||
Since the presence of a ``memoryguard`` call indicates that all memory access
|
||||
adheres to this restriction, it allows the optimizer to perform additional
|
||||
optimization steps, for example the stack limit evader, which attempts to move
|
||||
stack variables that would otherwise be unreachable to memory.
|
||||
|
||||
The Yul optimizer promises to only use the memory range ``[size, ptr)`` for its purposes.
|
||||
If the optimizer does not need to reserve any memory, it holds that ``ptr == size``.
|
||||
|
||||
``memoryguard`` can be called multiple times, but needs to have the same literal as argument
|
||||
within one Yul subobject. If at least one ``memoryguard`` call is found in a subobject,
|
||||
the additional optimiser steps will be run on it.
|
||||
|
||||
|
||||
.. _yul-object:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user