mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Extract duplicated code for initializing OptimiserSettings from CommandLineOptions into a common function
This commit is contained in:
@@ -551,13 +551,7 @@ bool CommandLineInterface::processInput()
|
||||
}
|
||||
case InputMode::Assembler:
|
||||
{
|
||||
return assemble(
|
||||
m_options.assembly.inputLanguage,
|
||||
m_options.assembly.targetMachine,
|
||||
m_options.optimizer.enabled,
|
||||
m_options.optimizer.expectedExecutionsPerDeployment,
|
||||
m_options.optimizer.yulSteps
|
||||
);
|
||||
return assemble(m_options.assembly.inputLanguage, m_options.assembly.targetMachine);
|
||||
}
|
||||
case InputMode::Linker:
|
||||
return link();
|
||||
@@ -595,16 +589,7 @@ bool CommandLineInterface::compile()
|
||||
m_compiler->enableIRGeneration(m_options.compiler.outputs.ir || m_options.compiler.outputs.irOptimized);
|
||||
m_compiler->enableEwasmGeneration(m_options.compiler.outputs.ewasm);
|
||||
|
||||
OptimiserSettings settings = m_options.optimizer.enabled ? OptimiserSettings::standard() : OptimiserSettings::minimal();
|
||||
if (m_options.optimizer.expectedExecutionsPerDeployment.has_value())
|
||||
settings.expectedExecutionsPerDeployment = m_options.optimizer.expectedExecutionsPerDeployment.value();
|
||||
if (m_options.optimizer.noOptimizeYul)
|
||||
settings.runYulOptimiser = false;
|
||||
|
||||
if (m_options.optimizer.yulSteps.has_value())
|
||||
settings.yulOptimiserSteps = m_options.optimizer.yulSteps.value();
|
||||
settings.optimizeStackAllocation = settings.runYulOptimiser;
|
||||
m_compiler->setOptimiserSettings(settings);
|
||||
m_compiler->setOptimiserSettings(m_options.optimiserSettings());
|
||||
|
||||
if (m_options.input.mode == InputMode::CompilerWithASTImport)
|
||||
{
|
||||
@@ -939,27 +924,21 @@ string CommandLineInterface::objectWithLinkRefsHex(evmasm::LinkerObject const& _
|
||||
return out;
|
||||
}
|
||||
|
||||
bool CommandLineInterface::assemble(
|
||||
yul::AssemblyStack::Language _language,
|
||||
yul::AssemblyStack::Machine _targetMachine,
|
||||
bool _optimize,
|
||||
optional<unsigned int> _expectedExecutionsPerDeployment,
|
||||
optional<string> _yulOptimiserSteps
|
||||
)
|
||||
bool CommandLineInterface::assemble(yul::AssemblyStack::Language _language, yul::AssemblyStack::Machine _targetMachine)
|
||||
{
|
||||
solAssert(_optimize || !_yulOptimiserSteps.has_value(), "");
|
||||
|
||||
bool successful = true;
|
||||
map<string, yul::AssemblyStack> assemblyStacks;
|
||||
for (auto const& src: m_fileReader.sourceCodes())
|
||||
{
|
||||
OptimiserSettings settings = _optimize ? OptimiserSettings::full() : OptimiserSettings::minimal();
|
||||
if (_expectedExecutionsPerDeployment.has_value())
|
||||
settings.expectedExecutionsPerDeployment = _expectedExecutionsPerDeployment.value();
|
||||
if (_yulOptimiserSteps.has_value())
|
||||
settings.yulOptimiserSteps = _yulOptimiserSteps.value();
|
||||
// --no-optimize-yul option is not accepted in assembly mode.
|
||||
solAssert(!m_options.optimizer.noOptimizeYul, "");
|
||||
|
||||
auto& stack = assemblyStacks[src.first] = yul::AssemblyStack(
|
||||
m_options.output.evmVersion,
|
||||
_language,
|
||||
m_options.optimiserSettings()
|
||||
);
|
||||
|
||||
auto& stack = assemblyStacks[src.first] = yul::AssemblyStack(m_options.output.evmVersion, _language, settings);
|
||||
try
|
||||
{
|
||||
if (!stack.parseAndAnalyze(src.first, src.second))
|
||||
|
||||
Reference in New Issue
Block a user