Skip to content

Commit 9620f4f

Browse files
authored
Merge pull request #15950 from ethereum/ssacfg_builder_improve_function_call_visitor
SSACFG Builder: Improve function call visitor
2 parents a652292 + 74cd757 commit 9620f4f

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

libyul/backends/evm/SSAControlFlowGraphBuilder.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -548,21 +548,22 @@ void SSAControlFlowGraphBuilder::assign(std::vector<std::reference_wrapper<Scope
548548
std::vector<SSACFG::ValueId> SSAControlFlowGraphBuilder::visitFunctionCall(FunctionCall const& _call)
549549
{
550550
bool canContinue = true;
551-
SSACFG::Operation operation = [&](){
552-
if (BuiltinFunction const* builtin = resolveBuiltinFunction(_call.functionName, m_dialect))
551+
SSACFG::Operation operation = std::visit(util::GenericVisitor{
552+
[&](BuiltinName const& _builtinName)
553553
{
554-
SSACFG::Operation result{{}, SSACFG::BuiltinCall{_call.debugData, *builtin, _call}, {}};
554+
auto const& builtin = m_dialect.builtin(_builtinName.handle);
555+
SSACFG::Operation result{{}, SSACFG::BuiltinCall{_call.debugData, builtin, _call}, {}};
555556
for (auto&& [idx, arg]: _call.arguments | ranges::views::enumerate | ranges::views::reverse)
556-
if (!builtin->literalArgument(idx).has_value())
557+
if (!builtin.literalArgument(idx).has_value())
557558
result.inputs.emplace_back(std::visit(*this, arg));
558-
for (size_t i = 0; i < builtin->numReturns; ++i)
559+
for (size_t i = 0; i < builtin.numReturns; ++i)
559560
result.outputs.emplace_back(m_graph.newVariable(m_currentBlock));
560-
canContinue = builtin->controlFlowSideEffects.canContinue;
561+
canContinue = builtin.controlFlowSideEffects.canContinue;
561562
return result;
562-
}
563-
else
563+
},
564+
[&](Identifier const& _identifier)
564565
{
565-
YulName const functionName{resolveFunctionName(_call.functionName, m_dialect)};
566+
YulName const& functionName = _identifier.name;
566567
Scope::Function const& function = lookupFunction(functionName);
567568
auto const* definition = findFunctionDefinition(&function);
568569
yulAssert(definition);
@@ -574,7 +575,7 @@ std::vector<SSACFG::ValueId> SSAControlFlowGraphBuilder::visitFunctionCall(Funct
574575
result.outputs.emplace_back(m_graph.newVariable(m_currentBlock));
575576
return result;
576577
}
577-
}();
578+
}, _call.functionName);
578579
auto results = operation.outputs;
579580
currentBlock().operations.emplace_back(std::move(operation));
580581
if (!canContinue)

0 commit comments

Comments
 (0)