mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
[libsolidity] Add basic optimizer support for assembly json import.
This commit is contained in:
parent
4473b3ca2d
commit
4f2056ff8f
@ -661,12 +661,24 @@ bool CompilerStack::compile(State _stopAfter)
|
||||
|
||||
string const evmAssemblyJsonSource = m_evmAssemblyJson.begin()->first;
|
||||
|
||||
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;
|
||||
|
||||
m_contracts[evmAssemblyJsonSource].evmAssembly = make_shared<evmasm::Assembly>(evmAssemblyJsonSource);
|
||||
m_contracts[evmAssemblyJsonSource].evmAssembly->loadFromAssemblyJSON(m_evmAssemblyJson[evmAssemblyJsonSource]);
|
||||
m_contracts[evmAssemblyJsonSource].evmAssembly->optimise(optimiserSettings);
|
||||
m_contracts[evmAssemblyJsonSource].object = m_contracts[evmAssemblyJsonSource].evmAssembly->assemble();
|
||||
|
||||
m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly = make_shared<evmasm::Assembly>(evmAssemblyJsonSource);
|
||||
m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly->loadFromAssemblyJSON(m_evmAssemblyJson[evmAssemblyJsonSource][".data"]["0"]);
|
||||
m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly->optimise(optimiserSettings);
|
||||
m_contracts[evmAssemblyJsonSource].runtimeObject = m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly->assemble();
|
||||
}
|
||||
else
|
||||
|
@ -1218,12 +1218,15 @@ bool CommandLineParser::processArgs()
|
||||
}
|
||||
if (m_options.optimizer.enabled && (m_options.assembly.inputLanguage != Input::StrictAssembly && m_options.assembly.inputLanguage != Input::Ewasm))
|
||||
{
|
||||
serr() <<
|
||||
"Optimizer can only be used for strict assembly. Use --" <<
|
||||
g_strStrictAssembly <<
|
||||
"." <<
|
||||
endl;
|
||||
return false;
|
||||
if (m_options.input.mode != InputMode::CompilerWithEvmAssemblyJsonImport)
|
||||
{
|
||||
serr() <<
|
||||
"Optimizer can only be used for strict assembly or with assembly import. Use --" <<
|
||||
g_strStrictAssembly <<
|
||||
" or --" << g_strImportEvmAssemblerJson << "." <<
|
||||
endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (m_options.assembly.targetMachine == Machine::Ewasm && m_options.assembly.inputLanguage != Input::StrictAssembly && m_options.assembly.inputLanguage != Input::Ewasm)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user