Assembly::OptimiserSettings: add translateSettings(..).

This commit is contained in:
Alexander Arlt 2022-05-09 23:12:53 +02:00
parent 706e6aaefa
commit 793adf46f7
4 changed files with 20 additions and 20 deletions

View File

@ -940,3 +940,18 @@ Assembly const* Assembly::subAssemblyById(size_t _subId) const
assertThrow(currentAssembly != this, AssemblyException, ""); assertThrow(currentAssembly != this, AssemblyException, "");
return currentAssembly; 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;
}

View File

@ -128,6 +128,8 @@ public:
/// This specifies an estimate on how often each opcode in this assembly will be executed, /// 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. /// 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; 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 /// Modify and return the current assembly such that creation and execution gas usage

View File

@ -574,17 +574,7 @@ void CompilerContext::updateSourceLocation()
evmasm::Assembly::OptimiserSettings CompilerContext::translateOptimiserSettings(OptimiserSettings const& _settings) evmasm::Assembly::OptimiserSettings CompilerContext::translateOptimiserSettings(OptimiserSettings const& _settings)
{ {
// Constructing it this way so that we notice changes in the fields. return evmasm::Assembly::OptimiserSettings::translateSettings(_settings, m_evmVersion);
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;
} }
evmasm::AssemblyItem CompilerContext::FunctionCompilationQueue::entryLabel( evmasm::AssemblyItem CompilerContext::FunctionCompilationQueue::entryLabel(

View File

@ -686,15 +686,8 @@ bool CompilerStack::compile(State _stopAfter)
string const evmSourceName = m_evmAssemblyJson.begin()->first; string const evmSourceName = m_evmAssemblyJson.begin()->first;
Json::Value const evmJson = m_evmAssemblyJson.begin()->second; Json::Value const evmJson = m_evmAssemblyJson.begin()->second;
evmasm::Assembly::OptimiserSettings optimiserSettings; evmasm::Assembly::OptimiserSettings optimiserSettings =
optimiserSettings.evmVersion = m_evmVersion; evmasm::Assembly::OptimiserSettings::translateSettings(m_optimiserSettings, 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;
m_contracts[evmSourceName].evmAssembly = evmasm::Assembly::loadFromAssemblyJSON(m_evmAssemblyJson[evmSourceName]); m_contracts[evmSourceName].evmAssembly = evmasm::Assembly::loadFromAssemblyJSON(m_evmAssemblyJson[evmSourceName]);
if (m_optimiserSettings.enabled) if (m_optimiserSettings.enabled)