---
type: slide
---
# Solidity Optimizer Overview
@chriseth / February 2023
---
## Different Kinds of Optimizers
- Currently no optimization on Solidity AST basis
- Yul Optimizer (IR-level)
- EVMASM optimizer (opcode-level)
---
## EVMASM optimizer
- Entry point is ``Assembly::optimise``
- Inliner (uses size/cost tradeoff)
- Jumpdest Remover
- Peephole Optimizer
- Block Deduplicator
- CSE (does more thas just CSE)
- Constant Optimizer (uses size/cost tradeoff)
---
## Yul Optimizer
- Built from different easy to understand steps.
- Proper Yul code between each step.
- No "hidden" data structures or analysis information.
- If a job can be done by combining two simple steps, split it.
---
### Optimizer Step Details
- Each step has name and unique letter:
- `static constexpr char const* name{"SSATransform"};`
- `OptimiserSuite::stepNameToAbbreviationMap`
- Use `yulopti` tool to run individual steps on Yul code
---
### Some Important Steps
- Disambiguator
- CSE
- Conditional Simplifier
- DeadCodeEliminator
- ExpressionSplitter / ExpressionJoiner
- SSATransform
- LoadResolver
- NameSimplifier
---
### Some More Important Steps
- StackToMemoryMover
- UnusedAssignEliminator
- UnusedStoreEliminator
- UnusedPruner
- FullInliner
- ExpressionInliner