MCPcopy Create free account
hub / github.com/argotorg/solidity / optimize

Method optimize

libyul/YulStack.cpp:90–150  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

88}
89
90void YulStack::optimize()
91{
92 yulAssert(m_stackState >= AnalysisSuccessful, "Analysis was not successful.");
93 yulAssert(m_parserResult);
94
95 try
96 {
97 if (
98 !m_optimiserSettings.runYulOptimiser &&
99 yul::MSizeFinder::containsMSize(*m_parserResult)
100 )
101 return;
102
103 auto [optimizeStackAllocation, yulOptimiserSteps, yulOptimiserCleanupSteps] = [&]() -> std::tuple<bool, std::string, std::string>
104 {
105 if (!m_optimiserSettings.runYulOptimiser)
106 {
107 // Yul optimizer disabled, but empty sequence (:) explicitly provided
108 if (OptimiserSuite::isEmptyOptimizerSequence(m_optimiserSettings.yulOptimiserSteps + ":" + m_optimiserSettings.yulOptimiserCleanupSteps))
109 return std::make_tuple(true, "", "");
110 // Yul optimizer disabled, and no sequence explicitly provided (assumes default sequence)
111 else
112 {
113 yulAssert(
114 m_optimiserSettings.yulOptimiserSteps == OptimiserSettings::DefaultYulOptimiserSteps &&
115 m_optimiserSettings.yulOptimiserCleanupSteps == OptimiserSettings::DefaultYulOptimiserCleanupSteps
116 );
117 // Defaults are the minimum necessary to avoid running into "Stack too deep" constantly.
118 return std::make_tuple(true, "u", "");
119 }
120 }
121 return std::make_tuple(
122 m_optimiserSettings.optimizeStackAllocation,
123 m_optimiserSettings.yulOptimiserSteps,
124 m_optimiserSettings.yulOptimiserCleanupSteps
125 );
126 }();
127
128 m_stackState = Parsed;
129 solAssert(m_objectOptimizer);
130 m_objectOptimizer->optimize(
131 *m_parserResult,
132 ObjectOptimizer::Settings{
133 m_evmVersion,
134 m_eofVersion,
135 optimizeStackAllocation,
136 yulOptimiserSteps,
137 yulOptimiserCleanupSteps,
138 m_optimiserSettings.expectedExecutionsPerDeployment
139 }
140 );
141
142 // Optimizer does not maintain correct native source locations in the AST.
143 // We can work around it by regenerating the AST from scratch from optimized IR.
144 reparse();
145 }
146 catch (UnimplementedFeatureError const& _error)
147 {

Callers 8

LLVMFuzzerTestOneInputFunction · 0.45
LLVMFuzzerTestOneInputFunction · 0.45
assembleMethod · 0.45
parseAndAnalyzeMethod · 0.45
runMethod · 0.45
compileYulMethod · 0.45
generateIRMethod · 0.45
assembleYulMethod · 0.45

Calls

no outgoing calls

Tested by 2

parseAndAnalyzeMethod · 0.36
runMethod · 0.36