diff --git a/libevmasm/Assembly.cpp b/libevmasm/Assembly.cpp index 10fd20687..3efce6eab 100644 --- a/libevmasm/Assembly.cpp +++ b/libevmasm/Assembly.cpp @@ -940,3 +940,18 @@ Assembly const* Assembly::subAssemblyById(size_t _subId) const assertThrow(currentAssembly != this, AssemblyException, ""); return currentAssembly; } + +Assembly::OptimiserSettings Assembly::OptimiserSettings::translateSettings(frontend::OptimiserSettings const& _settings, langutil::EVMVersion const& _evmVersion) +{ + // Constructing it this way so that we notice changes in the fields. + evmasm::Assembly::OptimiserSettings asmSettings{false, false, false, false, false, false, _evmVersion, 0}; + 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; +} diff --git a/libevmasm/Assembly.h b/libevmasm/Assembly.h index 7d0973387..106da2fe3 100644 --- a/libevmasm/Assembly.h +++ b/libevmasm/Assembly.h @@ -128,6 +128,8 @@ public: /// This specifies an estimate on how often each opcode in this assembly will be executed, /// i.e. use a small value to optimise for size and a large value to optimise for runtime gas usage. size_t expectedExecutionsPerDeployment = frontend::OptimiserSettings{}.expectedExecutionsPerDeployment; + + static OptimiserSettings translateSettings(frontend::OptimiserSettings const& _settings, langutil::EVMVersion const& _evmVersion); }; /// Modify and return the current assembly such that creation and execution gas usage diff --git a/libsolidity/codegen/CompilerContext.cpp b/libsolidity/codegen/CompilerContext.cpp index 948502e69..68ec347c7 100644 --- a/libsolidity/codegen/CompilerContext.cpp +++ b/libsolidity/codegen/CompilerContext.cpp @@ -574,17 +574,7 @@ void CompilerContext::updateSourceLocation() evmasm::Assembly::OptimiserSettings CompilerContext::translateOptimiserSettings(OptimiserSettings const& _settings) { - // Constructing it this way so that we notice changes in the fields. - evmasm::Assembly::OptimiserSettings asmSettings{false, false, false, false, false, false, m_evmVersion, 0}; - 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 = m_evmVersion; - return asmSettings; + return evmasm::Assembly::OptimiserSettings::translateSettings(_settings, m_evmVersion); } evmasm::AssemblyItem CompilerContext::FunctionCompilationQueue::entryLabel( diff --git a/libsolidity/interface/CompilerStack.cpp b/libsolidity/interface/CompilerStack.cpp index f8aacde70..1632c755f 100644 --- a/libsolidity/interface/CompilerStack.cpp +++ b/libsolidity/interface/CompilerStack.cpp @@ -686,15 +686,8 @@ bool CompilerStack::compile(State _stopAfter) string const evmSourceName = m_evmAssemblyJson.begin()->first; Json::Value const evmJson = m_evmAssemblyJson.begin()->second; - evmasm::Assembly::OptimiserSettings optimiserSettings; - optimiserSettings.evmVersion = m_evmVersion; - optimiserSettings.expectedExecutionsPerDeployment = m_optimiserSettings.expectedExecutionsPerDeployment; - optimiserSettings.runCSE = m_optimiserSettings.runCSE; - optimiserSettings.runConstantOptimiser = m_optimiserSettings.runConstantOptimiser; - optimiserSettings.runDeduplicate = m_optimiserSettings.runDeduplicate; - optimiserSettings.runInliner = m_optimiserSettings.runInliner; - optimiserSettings.runJumpdestRemover = m_optimiserSettings.runJumpdestRemover; - optimiserSettings.runPeephole = m_optimiserSettings.runPeephole; + evmasm::Assembly::OptimiserSettings optimiserSettings = + evmasm::Assembly::OptimiserSettings::translateSettings(m_optimiserSettings, m_evmVersion); m_contracts[evmSourceName].evmAssembly = evmasm::Assembly::loadFromAssemblyJSON(m_evmAssemblyJson[evmSourceName]); if (m_optimiserSettings.enabled)