Skip to content

Commit 919132b

Browse files
committed
[libsolidity] Add basic optimizer support for assembly json import.
1 parent a222b74 commit 919132b

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

libsolidity/interface/CompilerStack.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -661,12 +661,24 @@ bool CompilerStack::compile(State _stopAfter)
661661

662662
string const evmAssemblyJsonSource = m_evmAssemblyJson.begin()->first;
663663

664+
evmasm::Assembly::OptimiserSettings optimiserSettings;
665+
optimiserSettings.evmVersion = m_evmVersion;
666+
optimiserSettings.expectedExecutionsPerDeployment = m_optimiserSettings.expectedExecutionsPerDeployment;
667+
optimiserSettings.runCSE = m_optimiserSettings.runCSE;
668+
optimiserSettings.runConstantOptimiser = m_optimiserSettings.runConstantOptimiser;
669+
optimiserSettings.runDeduplicate = m_optimiserSettings.runDeduplicate;
670+
optimiserSettings.runInliner = m_optimiserSettings.runInliner;
671+
optimiserSettings.runJumpdestRemover = m_optimiserSettings.runJumpdestRemover;
672+
optimiserSettings.runPeephole = m_optimiserSettings.runPeephole;
673+
664674
m_contracts[evmAssemblyJsonSource].evmAssembly = make_shared<evmasm::Assembly>(evmAssemblyJsonSource);
665675
m_contracts[evmAssemblyJsonSource].evmAssembly->loadFromAssemblyJSON(m_evmAssemblyJson[evmAssemblyJsonSource]);
676+
m_contracts[evmAssemblyJsonSource].evmAssembly->optimise(optimiserSettings);
666677
m_contracts[evmAssemblyJsonSource].object = m_contracts[evmAssemblyJsonSource].evmAssembly->assemble();
667678

668679
m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly = make_shared<evmasm::Assembly>(evmAssemblyJsonSource);
669680
m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly->loadFromAssemblyJSON(m_evmAssemblyJson[evmAssemblyJsonSource][".data"]["0"]);
681+
m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly->optimise(optimiserSettings);
670682
m_contracts[evmAssemblyJsonSource].runtimeObject = m_contracts[evmAssemblyJsonSource].evmRuntimeAssembly->assemble();
671683
}
672684
else

solc/CommandLineParser.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,12 +1218,15 @@ bool CommandLineParser::processArgs()
12181218
}
12191219
if (m_options.optimizer.enabled && (m_options.assembly.inputLanguage != Input::StrictAssembly && m_options.assembly.inputLanguage != Input::Ewasm))
12201220
{
1221-
serr() <<
1222-
"Optimizer can only be used for strict assembly. Use --" <<
1223-
g_strStrictAssembly <<
1224-
"." <<
1225-
endl;
1226-
return false;
1221+
if (m_options.input.mode != InputMode::CompilerWithEvmAssemblyJsonImport)
1222+
{
1223+
serr() <<
1224+
"Optimizer can only be used for strict assembly or with assembly import. Use --" <<
1225+
g_strStrictAssembly <<
1226+
" or --" << g_strImportEvmAssemblerJson << "." <<
1227+
endl;
1228+
return false;
1229+
}
12271230
}
12281231
if (m_options.assembly.targetMachine == Machine::Ewasm && m_options.assembly.inputLanguage != Input::StrictAssembly && m_options.assembly.inputLanguage != Input::Ewasm)
12291232
{

0 commit comments

Comments
 (0)