Skip to content

Commit 753d8ef

Browse files
committed
Extract duplicated code for initializing OptimiserSettings from CommandLineOptions into a common function
1 parent 94d7974 commit 753d8ef

File tree

4 files changed

+37
-49
lines changed

4 files changed

+37
-49
lines changed

solc/CommandLineInterface.cpp

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -551,13 +551,7 @@ bool CommandLineInterface::processInput()
551551
}
552552
case InputMode::Assembler:
553553
{
554-
return assemble(
555-
m_options.assembly.inputLanguage,
556-
m_options.assembly.targetMachine,
557-
m_options.optimizer.enabled,
558-
m_options.optimizer.expectedExecutionsPerDeployment,
559-
m_options.optimizer.yulSteps
560-
);
554+
return assemble(m_options.assembly.inputLanguage, m_options.assembly.targetMachine);
561555
}
562556
case InputMode::Linker:
563557
return link();
@@ -595,14 +589,7 @@ bool CommandLineInterface::compile()
595589
m_compiler->enableIRGeneration(m_options.compiler.outputs.ir || m_options.compiler.outputs.irOptimized);
596590
m_compiler->enableEwasmGeneration(m_options.compiler.outputs.ewasm);
597591

598-
OptimiserSettings settings = m_options.optimizer.enabled ? OptimiserSettings::standard() : OptimiserSettings::minimal();
599-
if (m_options.optimizer.expectedExecutionsPerDeployment.has_value())
600-
settings.expectedExecutionsPerDeployment = m_options.optimizer.expectedExecutionsPerDeployment.value();
601-
if (m_options.optimizer.noOptimizeYul)
602-
settings.runYulOptimiser = false;
603-
604-
if (m_options.optimizer.yulSteps.has_value())
605-
settings.yulOptimiserSteps = m_options.optimizer.yulSteps.value();
592+
OptimiserSettings settings = m_options.optimiserSettings();
606593
settings.optimizeStackAllocation = settings.runYulOptimiser;
607594
m_compiler->setOptimiserSettings(settings);
608595

@@ -939,27 +926,21 @@ string CommandLineInterface::objectWithLinkRefsHex(evmasm::LinkerObject const& _
939926
return out;
940927
}
941928

942-
bool CommandLineInterface::assemble(
943-
yul::AssemblyStack::Language _language,
944-
yul::AssemblyStack::Machine _targetMachine,
945-
bool _optimize,
946-
optional<unsigned int> _expectedExecutionsPerDeployment,
947-
optional<string> _yulOptimiserSteps
948-
)
929+
bool CommandLineInterface::assemble(yul::AssemblyStack::Language _language, yul::AssemblyStack::Machine _targetMachine)
949930
{
950-
solAssert(_optimize || !_yulOptimiserSteps.has_value(), "");
951-
952931
bool successful = true;
953932
map<string, yul::AssemblyStack> assemblyStacks;
954933
for (auto const& src: m_fileReader.sourceCodes())
955934
{
956-
OptimiserSettings settings = _optimize ? OptimiserSettings::full() : OptimiserSettings::minimal();
957-
if (_expectedExecutionsPerDeployment.has_value())
958-
settings.expectedExecutionsPerDeployment = _expectedExecutionsPerDeployment.value();
959-
if (_yulOptimiserSteps.has_value())
960-
settings.yulOptimiserSteps = _yulOptimiserSteps.value();
935+
// --no-optimize-yul option is not accepted in assembly mode.
936+
solAssert(!m_options.optimizer.noOptimizeYul, "");
937+
938+
auto& stack = assemblyStacks[src.first] = yul::AssemblyStack(
939+
m_options.output.evmVersion,
940+
_language,
941+
m_options.optimiserSettings()
942+
);
961943

962-
auto& stack = assemblyStacks[src.first] = yul::AssemblyStack(m_options.output.evmVersion, _language, settings);
963944
try
964945
{
965946
if (!stack.parseAndAnalyze(src.first, src.second))

solc/CommandLineInterface.h

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,7 @@ class CommandLineInterface
7474
/// @returns the full object with library placeholder hints in hex.
7575
static std::string objectWithLinkRefsHex(evmasm::LinkerObject const& _obj);
7676

77-
bool assemble(
78-
yul::AssemblyStack::Language _language,
79-
yul::AssemblyStack::Machine _targetMachine,
80-
bool _optimize,
81-
std::optional<unsigned int> _expectedExecutionsPerDeployment = std::nullopt,
82-
std::optional<std::string> _yulOptimiserSteps = std::nullopt
83-
);
77+
bool assemble(yul::AssemblyStack::Language _language, yul::AssemblyStack::Machine _targetMachine);
8478

8579
void outputCompilationResults();
8680

solc/CommandLineParser.cpp

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,29 @@ bool CommandLineOptions::operator==(CommandLineOptions const& _other) const noex
298298
modelChecker.settings == _other.modelChecker.settings;
299299
}
300300

301+
OptimiserSettings CommandLineOptions::optimiserSettings() const
302+
{
303+
OptimiserSettings settings;
304+
305+
if (optimizer.enabled && input.mode == InputMode::Assembler)
306+
settings = OptimiserSettings::full();
307+
else if (optimizer.enabled)
308+
settings = OptimiserSettings::standard();
309+
else
310+
settings = OptimiserSettings::minimal();
311+
312+
if (optimizer.noOptimizeYul)
313+
settings.runYulOptimiser = false;
314+
315+
if (optimizer.expectedExecutionsPerDeployment.has_value())
316+
settings.expectedExecutionsPerDeployment = optimizer.expectedExecutionsPerDeployment.value();
317+
318+
if (optimizer.yulSteps.has_value())
319+
settings.yulOptimiserSteps = optimizer.yulSteps.value();
320+
321+
return settings;
322+
}
323+
301324
bool CommandLineParser::parseInputPathsAndRemappings()
302325
{
303326
m_options.input.ignoreMissingFiles = (m_args.count(g_strIgnoreMissingFiles) > 0);
@@ -965,19 +988,9 @@ General Information)").c_str(),
965988
if (!m_args[g_strOptimizeRuns].defaulted())
966989
m_options.optimizer.expectedExecutionsPerDeployment = m_args.at(g_strOptimizeRuns).as<unsigned>();
967990

968-
OptimiserSettings optimiserSettings;
969-
if (m_options.optimizer.enabled && m_options.input.mode == InputMode::Assembler)
970-
optimiserSettings = OptimiserSettings::full();
971-
else if (m_options.optimizer.enabled)
972-
optimiserSettings = OptimiserSettings::standard();
973-
else
974-
optimiserSettings = OptimiserSettings::minimal();
975-
976-
if (m_options.optimizer.noOptimizeYul)
977-
optimiserSettings.runYulOptimiser = false;
978-
979991
if (m_args.count(g_strYulOptimizations))
980992
{
993+
OptimiserSettings optimiserSettings = m_options.optimiserSettings();
981994
if (!optimiserSettings.runYulOptimiser)
982995
{
983996
serr() << "--" << g_strYulOptimizations << " is invalid if Yul optimizer is disabled" << endl;

solc/CommandLineParser.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ struct CommandLineOptions
102102
bool operator==(CommandLineOptions const& _other) const noexcept;
103103
bool operator!=(CommandLineOptions const& _other) const noexcept { return !(*this == _other); }
104104

105+
OptimiserSettings optimiserSettings() const;
105106

106107
struct
107108
{
@@ -169,7 +170,6 @@ struct CommandLineOptions
169170
bool initialize = false;
170171
ModelCheckerSettings settings;
171172
} modelChecker;
172-
173173
};
174174

175175
/// Parses the command-line arguments and produces a filled-out CommandLineOptions structure.

0 commit comments

Comments
 (0)