mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
docs: Info about --yul-optimizations and optimizer steps in Yul section
This commit is contained in:
parent
ace1eacb88
commit
d037f7a3c5
53
docs/yul.rst
53
docs/yul.rst
@ -1034,3 +1034,56 @@ If you want to use Solidity in stand-alone Yul mode, you activate the optimizer
|
|||||||
solc --strict-assembly --optimize
|
solc --strict-assembly --optimize
|
||||||
|
|
||||||
In Solidity mode, the Yul optimizer is activated together with the regular optimizer.
|
In Solidity mode, the Yul optimizer is activated together with the regular optimizer.
|
||||||
|
|
||||||
|
Optimization step sequence
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
By default the Yul optimizer applies its predefined sequence of optimization steps to the generated assembly.
|
||||||
|
You can override this sequence and supply your own using the `--yul-optimizations` option when compiling
|
||||||
|
in Solidity mode:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
solc --optimize --ir-optimized --yul-optimizations 'dhfoD[xarrscLMcCTU]uljmul'
|
||||||
|
|
||||||
|
By enclosing part of the sequence in square brackets (`[]`) you tell the optimizer to repeatedly
|
||||||
|
apply that part until it no longer improves the size of the resulting assembly.
|
||||||
|
You can use brackets multiple times in a single sequence but they cannot be nested.
|
||||||
|
|
||||||
|
The following optimization steps are available:
|
||||||
|
|
||||||
|
============ ===============================
|
||||||
|
Abbreviation Full name
|
||||||
|
============ ===============================
|
||||||
|
f `BlockFlattener`
|
||||||
|
l `CircularReferencesPruner`
|
||||||
|
c `CommonSubexpressionEliminator`
|
||||||
|
C `ConditionalSimplifier`
|
||||||
|
U `ConditionalUnsimplifier`
|
||||||
|
n `ControlFlowSimplifier`
|
||||||
|
D `DeadCodeEliminator`
|
||||||
|
v `EquivalentFunctionCombiner`
|
||||||
|
e `ExpressionInliner`
|
||||||
|
j `ExpressionJoiner`
|
||||||
|
s `ExpressionSimplifier`
|
||||||
|
x `ExpressionSplitter`
|
||||||
|
I `ForLoopConditionIntoBody`
|
||||||
|
O `ForLoopConditionOutOfBody`
|
||||||
|
o `ForLoopInitRewriter`
|
||||||
|
i `FullInliner`
|
||||||
|
g `FunctionGrouper`
|
||||||
|
h `FunctionHoister`
|
||||||
|
T `LiteralRematerialiser`
|
||||||
|
L `LoadResolver`
|
||||||
|
M `LoopInvariantCodeMotion`
|
||||||
|
r `RedundantAssignEliminator`
|
||||||
|
m `Rematerialiser`
|
||||||
|
V `SSAReverser`
|
||||||
|
a `SSATransform`
|
||||||
|
t `StructuralSimplifier`
|
||||||
|
u `UnusedPruner`
|
||||||
|
d `VarDeclInitializer`
|
||||||
|
============ ===============================
|
||||||
|
|
||||||
|
Some steps depend on properties ensured by `BlockFlattener`, `FunctionGrouper`, `ForLoopInitRewriter`.
|
||||||
|
For this reason the Yul optimizer always applies them before applying any steps supplied by the user.
|
||||||
|
Loading…
Reference in New Issue
Block a user