Optimise libevmasm in yul

This commit is contained in:
Alex Beregszaszi
2021-07-05 13:46:53 +02:00
committed by Kamil Śliwak
parent f6cb933f24
commit 847e30e6ff
2 changed files with 25 additions and 2 deletions
+24 -2
View File
@@ -36,8 +36,6 @@
#include <libyul/ObjectParser.h>
#include <libyul/optimiser/Suite.h>
#include <libsolidity/interface/OptimiserSettings.h>
#include <libevmasm/Assembly.h>
#include <liblangutil/Scanner.h>
#include <optional>
@@ -65,6 +63,28 @@ Dialect const& languageToDialect(AssemblyStack::Language _language, EVMVersion _
return Dialect::yulDeprecated();
}
// Duplicated from libsolidity/codegen/CompilerContext.cpp
// TODO: refactor and remove duplication
evmasm::Assembly::OptimiserSettings translateOptimiserSettings(
frontend::OptimiserSettings const& _settings,
langutil::EVMVersion _evmVersion
)
{
// Constructing it this way so that we notice changes in the fields.
evmasm::Assembly::OptimiserSettings asmSettings{false, false, false, false, false, false, false, _evmVersion, 0};
asmSettings.isCreation = true;
asmSettings.runInliner = _settings.runInliner;
asmSettings.runJumpdestRemover = _settings.runJumpdestRemover;
asmSettings.runPeephole = _settings.runPeephole;
asmSettings.runDeduplicate = _settings.runDeduplicate;
asmSettings.runCSE = _settings.runCSE;
asmSettings.runConstantOptimiser = _settings.runConstantOptimiser;
asmSettings.expectedExecutionsPerDeployment = _settings.expectedExecutionsPerDeployment;
asmSettings.evmVersion = _evmVersion;
return asmSettings;
}
}
@@ -261,6 +281,8 @@ AssemblyStack::assembleEVMWithDeployed(optional<string_view> _deployName) const
EthAssemblyAdapter adapter(assembly);
compileEVM(adapter, m_optimiserSettings.optimizeStackAllocation);
assembly.optimise(translateOptimiserSettings(m_optimiserSettings, m_evmVersion));
optional<size_t> subIndex;
// Pick matching assembly if name was given