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;
|
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 = make_shared<evmasm::Assembly>(evmAssemblyJsonSource);
|
||||||
m_contracts[evmAssemblyJsonSource].evmAssembly->loadFromAssemblyJSON(m_evmAssemblyJson[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].object = m_contracts[evmAssemblyJsonSource].evmAssembly->assemble();
|
||||||
|
|
||||||
m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly = make_shared<evmasm::Assembly>(evmAssemblyJsonSource);
|
m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly = make_shared<evmasm::Assembly>(evmAssemblyJsonSource);
|
||||||
m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly->loadFromAssemblyJSON(m_evmAssemblyJson[evmAssemblyJsonSource][".data"]["0"]);
|
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();
|
m_contracts[evmAssemblyJsonSource].runtimeObject = m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly->assemble();
|
||||||
}
|
}
|
||||||
else
|
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))
|
if (m_options.optimizer.enabled && (m_options.assembly.inputLanguage != Input::StrictAssembly && m_options.assembly.inputLanguage != Input::Ewasm))
|
||||||
{
|
{
|
||||||
serr() <<
|
if (m_options.input.mode != InputMode::CompilerWithEvmAssemblyJsonImport)
|
||||||
"Optimizer can only be used for strict assembly. Use --" <<
|
{
|
||||||
g_strStrictAssembly <<
|
serr() <<
|
||||||
"." <<
|
"Optimizer can only be used for strict assembly or with assembly import. Use --" <<
|
||||||
endl;
|
g_strStrictAssembly <<
|
||||||
return false;
|
" 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)
|
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