@@ -548,21 +548,22 @@ void SSAControlFlowGraphBuilder::assign(std::vector<std::reference_wrapper<Scope
548
548
std::vector<SSACFG::ValueId> SSAControlFlowGraphBuilder::visitFunctionCall (FunctionCall const & _call)
549
549
{
550
550
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 )
553
553
{
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}, {}};
555
556
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 ())
557
558
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)
559
560
result.outputs .emplace_back (m_graph.newVariable (m_currentBlock));
560
- canContinue = builtin-> controlFlowSideEffects .canContinue ;
561
+ canContinue = builtin. controlFlowSideEffects .canContinue ;
561
562
return result;
562
- }
563
- else
563
+ },
564
+ [&](Identifier const & _identifier)
564
565
{
565
- YulName const functionName{ resolveFunctionName (_call. functionName , m_dialect)} ;
566
+ YulName const & functionName = _identifier. name ;
566
567
Scope::Function const & function = lookupFunction (functionName);
567
568
auto const * definition = findFunctionDefinition (&function);
568
569
yulAssert (definition);
@@ -574,7 +575,7 @@ std::vector<SSACFG::ValueId> SSAControlFlowGraphBuilder::visitFunctionCall(Funct
574
575
result.outputs .emplace_back (m_graph.newVariable (m_currentBlock));
575
576
return result;
576
577
}
577
- }( );
578
+ }, _call. functionName );
578
579
auto results = operation.outputs ;
579
580
currentBlock ().operations .emplace_back (std::move (operation));
580
581
if (!canContinue)
0 commit comments