27std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
37 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
38 auto graph = &
module->Rvsdg();
52 std::vector<jlm::rvsdg::Output *>{ d[1], fct->GetFunctionArguments()[0] });
64 fct->finalize({ c_amp_d[0] });
66 GraphExport::Create(*fct->output(),
"f");
82std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
92 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
93 auto graph = &
module->Rvsdg();
108 std::vector<jlm::rvsdg::Output *>{ a[1], fct->GetFunctionArguments()[0] });
123 fct->finalize({ p_amp_y[0] });
125 GraphExport::Create(*fct->output(),
"f");
142std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
150 auto intType = BitType::Create(32);
155 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath("LoadTest1.c"), "", "");
156 auto graph = &
module->Rvsdg();
163 fct->GetFunctionArguments()[0],
164 { fct->GetFunctionArguments()[1] },
171 GraphExport::Create(*fct->output(),
"f");
183std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
194 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
195 auto graph = &
module->Rvsdg();
210 std::vector<jlm::rvsdg::Output *>{ a[1], fct->GetFunctionArguments()[0] });
228 fct->finalize({ y_star_p[0] });
230 GraphExport::Create(*fct->output(),
"f");
250std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
263 auto & rvsdg = rvsdgModule->Rvsdg();
266 rvsdg.GetRootRegion(),
287std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
293 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
294 auto graph = &
module->Rvsdg();
315 { fct->GetFunctionArguments()[1] },
325 fct->finalize({ sum, ldy[1] });
327 GraphExport::Create(*fct->output(),
"f");
340std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
349 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
350 auto graph = &
module->Rvsdg();
358 fct->finalize({ cast });
360 GraphExport::Create(*fct->output(),
"f");
369std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
375 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
376 auto graph = &
module->Rvsdg();
378 auto setupBit2PtrFunction = [&]()
389 auto valueArgument = lambda->GetFunctionArguments()[0];
390 auto iOStateArgument = lambda->GetFunctionArguments()[1];
391 auto memoryStateArgument = lambda->GetFunctionArguments()[2];
395 lambda->finalize({ cast, iOStateArgument, memoryStateArgument });
411 auto valueArgument = lambda->GetFunctionArguments()[0];
412 auto iOStateArgument = lambda->GetFunctionArguments()[1];
413 auto memoryStateArgument = lambda->GetFunctionArguments()[2];
415 auto cvbits2ptr = lambda->AddContextVar(*b2p).inner;
420 { valueArgument, iOStateArgument, memoryStateArgument });
424 GraphExport::Create(*lambda->output(),
"testfct");
426 return std::make_tuple(lambda, &call);
429 auto [lambdaBits2Ptr, bitsToPtrNode] = setupBit2PtrFunction();
430 auto [lambdaTest, callNode] = setupTestFunction(lambdaBits2Ptr->output());
443std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
454 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
455 auto graph = &
module->Rvsdg();
461 auto constantPointerNullResult =
464 fct->GetFunctionArguments()[0],
465 constantPointerNullResult,
466 { fct->GetFunctionArguments()[1] },
469 fct->finalize({ st[0] });
471 GraphExport::Create(*fct->output(),
"f");
482std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
488 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
489 auto graph = &
module->Rvsdg();
506 auto pointerArgument1 = lambda->GetFunctionArguments()[0];
507 auto pointerArgument2 = lambda->GetFunctionArguments()[1];
508 auto iOStateArgument = lambda->GetFunctionArguments()[2];
509 auto memoryStateArgument = lambda->GetFunctionArguments()[3];
513 { memoryStateArgument },
524 lambda->finalize({ sum, iOStateArgument, ld2[1] });
544 auto pointerArgument1 = lambda->GetFunctionArguments()[0];
545 auto pointerArgument2 = lambda->GetFunctionArguments()[1];
546 auto iOStateArgument = lambda->GetFunctionArguments()[2];
547 auto memoryStateArgument = lambda->GetFunctionArguments()[3];
551 { memoryStateArgument },
562 lambda->finalize({ diff, iOStateArgument, ld2[1] });
578 auto iOStateArgument = lambda->GetFunctionArguments()[0];
579 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
581 auto cvf = lambda->AddContextVar(*f->
output()).inner;
582 auto cvg = lambda->AddContextVar(*g->output()).inner;
591 std::vector<jlm::rvsdg::Output *>({ x[1], memoryStateArgument }));
606 { x[0], y[0], iOStateArgument, stz[0] });
609 g->GetOperation().Type(),
612 &CallOperation::GetIOStateOutput(callF),
613 &CallOperation::GetMemoryStateOutput(callF) });
617 lambda->finalize({ sum,
620 GraphExport::Create(*lambda->output(),
"h");
626 return std::make_tuple(lambda, allocaX, allocaY, allocaZ, &callF, &callG);
629 auto lambdaF = SetupF();
630 auto lambdaG = SetupG();
631 auto [lambdaH, allocaX, allocaY, allocaZ, callF, callG] = SetupH(lambdaF, lambdaG);
650std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
656 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
657 auto graph = &
module->Rvsdg();
659 auto SetupCreate = [&]()
671 auto valueArgument = lambda->GetFunctionArguments()[0];
672 auto iOStateArgument = lambda->GetFunctionArguments()[1];
673 auto memoryStateArgument = lambda->GetFunctionArguments()[2];
685 return std::make_tuple(lambda, &mallocNode);
688 auto SetupDestroy = [&]()
700 auto pointerArgument = lambda->GetFunctionArguments()[0];
701 auto iOStateArgument = lambda->GetFunctionArguments()[1];
702 auto memoryStateArgument = lambda->GetFunctionArguments()[2];
707 lambda->finalize({ freeResults[1], freeResults[0] });
710 return std::make_tuple(lambda, freeNode);
724 auto iOStateArgument = lambda->GetFunctionArguments()[0];
725 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
727 auto create_cv = lambda->AddContextVar(*lambdaCreate->
output()).inner;
728 auto destroy_cv = lambda->AddContextVar(*lambdaDestroy->output()).inner;
736 { six, iOStateArgument, memoryStateArgument });
741 &CallOperation::GetIOStateOutput(create1),
742 &CallOperation::GetMemoryStateOutput(create1) });
746 lambdaDestroy->GetOperation().Type(),
748 &CallOperation::GetIOStateOutput(create2),
749 &CallOperation::GetMemoryStateOutput(create2) });
752 lambdaDestroy->GetOperation().Type(),
754 &CallOperation::GetIOStateOutput(destroy1),
755 &CallOperation::GetMemoryStateOutput(destroy1) });
759 GraphExport::Create(*lambda->output(),
"test");
761 return std::make_tuple(lambda, &create1, &create2, &destroy1, &destroy2);
764 auto [lambdaCreate, mallocNode] = SetupCreate();
765 auto [lambdaDestroy, freeNode] = SetupDestroy();
766 auto [lambdaTest, callCreate1, callCreate2, callDestroy1, callDestroy2] =
767 SetupTest(lambdaCreate, lambdaDestroy);
776 this->
malloc = mallocNode;
777 this->
free = freeNode;
788std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
801 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
802 auto graph = &
module->Rvsdg();
804 auto SetupConstantFunction = [&](ssize_t n,
const std::string & name)
809 auto iOStateArgument = lambda->GetFunctionArguments()[0];
810 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
814 return lambda->finalize({ constant, iOStateArgument, memoryStateArgument });
817 auto SetupIndirectCallFunction = [&]()
828 auto pointerArgument = lambda->GetFunctionArguments()[0];
829 auto functionOfPointer =
832 auto iOStateArgument = lambda->GetFunctionArguments()[1];
833 auto memoryStateArgument = lambda->GetFunctionArguments()[2];
837 constantFunctionType,
838 { iOStateArgument, memoryStateArgument });
840 auto lambdaOutput = lambda->finalize(outputs(&call));
842 return std::make_tuple(lambdaOutput, &call);
845 auto SetupTestFunction =
855 auto iOStateArgument = lambda->GetFunctionArguments()[0];
856 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
858 auto fctindcall_cv = lambda->AddContextVar(*fctindcall).inner;
859 auto fctfour_cv = lambda->AddContextVar(*fctfour).inner;
860 auto fctthree_cv = lambda->AddContextVar(*fctthree).inner;
865 { fctfour_cv, iOStateArgument, memoryStateArgument });
870 &CallOperation::GetIOStateOutput(call_four),
871 &CallOperation::GetMemoryStateOutput(call_four) });
875 auto lambdaOutput = lambda->finalize({
add,
878 GraphExport::Create(*lambda->output(),
"test");
880 return std::make_tuple(lambdaOutput, &call_three, &call_four);
883 auto fctfour = SetupConstantFunction(4,
"four");
884 auto fctthree = SetupConstantFunction(3,
"three");
885 auto [fctindcall, callIndirectFunction] = SetupIndirectCallFunction();
886 auto [fcttest, callFunctionThree, callFunctionFour] = SetupTestFunction(
906std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
919 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
920 auto graph = &
module->Rvsdg();
936 return &delta->finalize(constant);
953 return &delta->finalize(constant);
956 auto SetupConstantFunction = [&](ssize_t n,
const std::string & name)
961 auto iOStateArgument = lambda->GetFunctionArguments()[0];
962 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
966 return lambda->finalize({ constant, iOStateArgument, memoryStateArgument });
981 auto pointerArgument = lambda->GetFunctionArguments()[0];
982 auto iOStateArgument = lambda->GetFunctionArguments()[1];
983 auto memoryStateArgument = lambda->GetFunctionArguments()[2];
988 constantFunctionType,
989 { iOStateArgument, memoryStateArgument });
991 auto lambdaOutput = lambda->finalize(outputs(&call));
993 return std::make_tuple(lambdaOutput, &call);
996 auto SetupIndirectCallFunction = [&](ssize_t n,
997 const std::string & name,
1010 auto pointerArgument = lambda->GetFunctionArguments()[0];
1011 auto iOStateArgument = lambda->GetFunctionArguments()[1];
1012 auto memoryStateArgument = lambda->GetFunctionArguments()[2];
1014 auto functionICv = lambda->AddContextVar(functionI).inner;
1015 auto argumentFunctionCv = lambda->AddContextVar(argumentFunction).inner;
1017 { argumentFunctionCv },
1018 constantFunctionType)
1028 { argumentFunctionPtr, iOStateArgument, storeNode[0] });
1030 auto lambdaOutput = lambda->finalize(outputs(&call));
1032 return std::make_tuple(lambdaOutput, &call);
1047 auto iOStateArgument = lambda->GetFunctionArguments()[0];
1048 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
1050 auto functionXCv = lambda->AddContextVar(functionX).inner;
1051 auto functionYCv = lambda->AddContextVar(functionY).inner;
1052 auto globalG1Cv = lambda->AddContextVar(globalG1).inner;
1053 auto globalG2Cv = lambda->AddContextVar(globalG2).inner;
1061 std::vector<jlm::rvsdg::Output *>{ pxAlloca[1], memoryStateArgument });
1063 std::vector<jlm::rvsdg::Output *>({ pyAlloca[1], pxMerge }));
1068 { pxAlloca[0], iOStateArgument, pyMerge });
1092 auto lambdaOutput = lambda->finalize({ sum,
1095 GraphExport::Create(*lambdaOutput,
"test");
1097 return std::make_tuple(
1101 jlm::util::assertedCast<rvsdg::SimpleNode>(
1103 jlm::util::assertedCast<rvsdg::SimpleNode>(
1116 auto iOStateArgument = lambda->GetFunctionArguments()[0];
1117 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
1123 std::vector<jlm::rvsdg::Output *>{ pzAlloca[1], memoryStateArgument });
1125 auto functionXCv = lambda->AddContextVar(functionX).inner;
1130 { pzAlloca[0], iOStateArgument, pzMerge });
1132 auto lambdaOutput = lambda->finalize(outputs(&callX));
1133 GraphExport::Create(*lambdaOutput,
"test2");
1135 return std::make_tuple(
1138 jlm::util::assertedCast<jlm::rvsdg::SimpleNode>(
1142 auto deltaG1 = SetupG1();
1143 auto deltaG2 = SetupG2();
1144 auto lambdaThree = SetupConstantFunction(3,
"three");
1145 auto lambdaFour = SetupConstantFunction(4,
"four");
1146 auto [lambdaI, indirectCall] = SetupI();
1147 auto [lambdaX, callIWithThree] = SetupIndirectCallFunction(5,
"x", *lambdaI, *lambdaThree);
1148 auto [lambdaY, callIWithFour] = SetupIndirectCallFunction(6,
"y", *lambdaI, *lambdaFour);
1149 auto [lambdaTest, testCallX, callY, allocaPx, allocaPy] =
1150 SetupTestFunction(*lambdaX, *lambdaY, *deltaG1, *deltaG2);
1151 auto [lambdaTest2, test2CallX, allocaPz] = SetupTest2Function(*lambdaX);
1180std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1187 auto rvsdg = &rvsdgModule->Rvsdg();
1199 auto SetupFunctionGDeclaration = [&]()
1222 rvsdg->GetRootRegion(),
1224 auto pathArgument = lambda->GetFunctionArguments()[0];
1225 auto modeArgument = lambda->GetFunctionArguments()[1];
1226 auto iOStateArgument = lambda->GetFunctionArguments()[2];
1227 auto memoryStateArgument = lambda->GetFunctionArguments()[3];
1229 auto functionGCv = lambda->AddContextVar(*functionG).inner;
1237 std::vector<jlm::rvsdg::Output *>{ allocaPath[1], memoryStateArgument });
1239 std::vector<jlm::rvsdg::Output *>({ allocaMode[1], mergePath }));
1253 { loadPath[0], loadMode[0], iOStateArgument, loadMode[1] });
1255 lambda->finalize(outputs(&callG));
1256 GraphExport::Create(*lambda->output(),
"f");
1258 return std::make_tuple(lambda, &callG);
1270std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1276 auto & rvsdg = rvsdgModule->Rvsdg();
1310 lambdaLlvmLifetimeStartType,
1311 "llvm.lifetime.start.p0",
1316 lambdaLlvmLifetimeEndType,
1317 "llvm.lifetime.end.p0",
1329 rvsdg.GetRootRegion(),
1342 std::vector<jlm::rvsdg::Output *>{ allocaResults[1], memoryStateArgument });
1345 llvmLifetimeStartArgument,
1346 lambdaLlvmLifetimeStartType,
1347 { twentyFour, allocaResults[0], iOStateArgument, memoryState });
1375 auto storeResults1 =
1380 auto storeResults2 =
1384 llvmLifetimeEndArgument,
1385 lambdaLlvmLifetimeEndType,
1389 storeResults2[0] });
1396std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1413 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
1414 auto graph = &
module->Rvsdg();
1422 auto & predicateNode = MatchOperation::CreateNode(*biteq, { { 0, 1 } }, 0, 2);
1424 auto gammanode = GammaNode::create(predicateNode.output(0), 2);
1425 auto p1ev = gammanode->AddEntryVar(fct->GetFunctionArguments()[1]);
1426 auto p2ev = gammanode->AddEntryVar(fct->GetFunctionArguments()[2]);
1427 auto p3ev = gammanode->AddEntryVar(fct->GetFunctionArguments()[3]);
1428 auto p4ev = gammanode->AddEntryVar(fct->GetFunctionArguments()[4]);
1430 auto tmp1 = gammanode->AddExitVar({ p1ev.branchArgument[0], p3ev.branchArgument[1] });
1431 auto tmp2 = gammanode->AddExitVar({ p2ev.branchArgument[0], p4ev.branchArgument[1] });
1435 { fct->GetFunctionArguments()[5] },
1442 fct->finalize({ sum, ld2[1] });
1444 GraphExport::Create(*fct->output(),
"f");
1450 this->
gamma = gammanode;
1455std::unique_ptr<llvm::LlvmRvsdgModule>
1462 auto rvsdg = &rvsdgModule->Rvsdg();
1464 auto SetupLambdaF = [&]()
1474 auto gammaInputX = gammaNode->AddEntryVar(xAddress);
1475 auto gammaInputY = gammaNode->AddEntryVar(yAddress);
1476 auto gammaInputZ = gammaNode->AddEntryVar(zAddress);
1477 auto gammaInputMemoryState = gammaNode->AddEntryVar(memoryState);
1481 gammaInputX.branchArgument[0],
1482 { gammaInputMemoryState.branchArgument[0] },
1488 gammaInputZ.branchArgument[0],
1490 { loadXResults[1] },
1495 gammaInputY.branchArgument[1],
1496 { gammaInputMemoryState.branchArgument[1] },
1502 gammaInputZ.branchArgument[1],
1504 { loadYResults[1] },
1508 auto gammaOutputA = gammaNode->AddExitVar({ loadXResults[0], loadYResults[0] });
1509 auto gammaOutputMemoryState =
1510 gammaNode->AddExitVar({ storeZRegion0Results[0], storeZRegion1Results[0] });
1512 return std::make_tuple(gammaOutputA.output, gammaOutputMemoryState.output);
1527 rvsdg->GetRootRegion(),
1529 auto cArgument = lambda->GetFunctionArguments()[0];
1530 auto xArgument = lambda->GetFunctionArguments()[1];
1531 auto yArgument = lambda->GetFunctionArguments()[2];
1532 auto iOStateArgument = lambda->GetFunctionArguments()[3];
1533 auto memoryStateArgument = lambda->GetFunctionArguments()[4];
1540 std::vector<jlm::rvsdg::Output *>{ allocaZResults[1], memoryStateArgument });
1543 auto storeZResults =
1548 auto & predicateNode = MatchOperation::CreateNode(*bitEq, { { 0, 1 } }, 0, 2);
1550 auto [gammaOutputA, gammaOutputMemoryState] =
1551 SetupGamma(predicateNode.output(0), xArgument, yArgument, allocaZResults[0], memoryState);
1555 { gammaOutputMemoryState },
1561 lambda->finalize({ sum, iOStateArgument, loadZResults[1] });
1563 return std::make_tuple(
1573 const char * functionName)
1583 rvsdg->GetRootRegion(),
1585 auto iOStateArgument = lambda->GetFunctionArguments()[0];
1586 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
1587 auto lambdaFArgument = lambda->AddContextVar(lambdaF).inner;
1595 std::vector<jlm::rvsdg::Output *>{ allocaXResults[1], memoryStateArgument });
1597 std::vector<jlm::rvsdg::Output *>({ allocaYResults[1], memoryState }));
1604 auto storeXResults =
1607 auto storeYResults =
1613 { predicate, allocaXResults[0], allocaYResults[0], iOStateArgument, storeYResults[0] });
1615 lambda->finalize(outputs(&call));
1616 GraphExport::Create(*lambda->output(), functionName);
1618 return std::make_tuple(
1625 auto [lambdaF, gammaNode, allocaZ] = SetupLambdaF();
1626 auto [lambdaG, callFromG, allocaXFromG, allocaYFromG] = SetupLambdaGH(*lambdaF, 0, 1, 2,
"g");
1627 auto [lambdaH, callFromH, allocaXFromH, allocaYFromH] = SetupLambdaGH(*lambdaF, 1, 3, 4,
"h");
1634 this->
Gamma_ = gammaNode;
1648std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1663 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
1664 auto graph = &
module->Rvsdg();
1674 auto n = thetanode->AddLoopVar(zero);
1675 auto l = thetanode->AddLoopVar(fct->GetFunctionArguments()[0]);
1676 auto a = thetanode->AddLoopVar(fct->GetFunctionArguments()[1]);
1677 auto c = thetanode->AddLoopVar(fct->GetFunctionArguments()[2]);
1678 auto s = thetanode->AddLoopVar(fct->GetFunctionArguments()[3]);
1686 auto & predicateNode = MatchOperation::CreateNode(*cmp, { { 1, 1 } }, 0, 2);
1688 n.post->divert_to(sum);
1689 s.post->divert_to(store[0]);
1690 thetanode->set_predicate(predicateNode.output(0));
1692 fct->finalize({ s.output });
1693 GraphExport::Create(*fct->output(),
"f");
1699 this->
theta = thetanode;
1705std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1711 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
1712 auto graph = &
module->Rvsdg();
1714 auto SetupGlobalF = [&]()
1728 return &dfNode->finalize(constant);
1731 auto SetupFunctionG = [&]()
1743 auto pointerArgument = lambda->GetFunctionArguments()[0];
1744 auto iOStateArgument = lambda->GetFunctionArguments()[1];
1745 auto memoryStateArgument = lambda->GetFunctionArguments()[2];
1749 { memoryStateArgument },
1753 return lambda->finalize({ ld[0], iOStateArgument, ld[1] });
1767 auto iOStateArgument = lambda->GetFunctionArguments()[0];
1768 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
1770 auto cvf = lambda->AddContextVar(*f).inner;
1771 auto cvg = lambda->AddContextVar(*g).inner;
1778 { cvf, iOStateArgument, st[0] });
1780 auto lambdaOutput = lambda->finalize(outputs(&callG));
1781 GraphExport::Create(*lambda->output(),
"h");
1786 auto f = SetupGlobalF();
1787 auto g = SetupFunctionG();
1788 auto [h, callFunctionG,
constantFive] = SetupFunctionH(f, g);
1798 this->
CallG_ = callFunctionG;
1804std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1810 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
1811 auto graph = &
module->Rvsdg();
1813 auto SetupD1 = [&]()
1827 return &delta->finalize(constant);
1830 auto SetupD2 = [&]()
1844 return &delta->finalize(constant);
1858 auto iOStateArgument = lambda->GetFunctionArguments()[0];
1859 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
1861 auto cvd1 = lambda->AddContextVar(*d1).inner;
1865 return lambda->finalize({ iOStateArgument, st[0] });
1879 auto iOStateArgument = lambda->GetFunctionArguments()[0];
1880 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
1882 auto cvd1 = lambda->AddContextVar(*d1).inner;
1883 auto cvd2 = lambda->AddContextVar(*d2).inner;
1884 auto cvf1 = lambda->AddContextVar(*f1).inner;
1892 { iOStateArgument, st[0] });
1899 auto lambdaOutput = lambda->finalize(outputs(&call));
1900 GraphExport::Create(*lambdaOutput,
"f2");
1902 return std::make_tuple(lambdaOutput, &call);
1905 auto d1 = SetupD1();
1906 auto d2 = SetupD2();
1907 auto f1 = SetupF1(d1);
1908 auto [f2, callF1] = SetupF2(f1, d1, d2);
1922std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1928 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
1929 auto graph = &
module->Rvsdg();
1931 auto SetupG1 = [&]()
1945 return &delta->finalize(constant);
1956 auto ctxVar = delta->AddContextVar(g1);
1958 return &delta->finalize(ctxVar.inner);
1972 auto iOStateArgument = lambda->GetFunctionArguments()[0];
1973 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
1974 auto g1CtxVar = lambda->AddContextVar(g1).inner;
1975 auto g2CtxVar = lambda->AddContextVar(g2).inner;
1979 { memoryStateArgument },
1992 return lambda->finalize({ &truncResult, iOStateArgument, loadResults[1] });
2006 auto iOStateArgument = lambda->GetFunctionArguments()[0];
2007 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
2009 auto lambdaFArgument = lambda->AddContextVar(lambdaF).inner;
2014 { iOStateArgument, memoryStateArgument });
2016 auto lambdaOutput = lambda->finalize(
2018 GraphExport::Create(*lambdaOutput,
"test");
2020 return std::make_tuple(lambdaOutput, &call);
2023 auto g1 = SetupG1();
2024 auto g2 = SetupG2(*g1);
2025 auto f = SetupF(*g1, *g2);
2026 auto [test, callF] = SetupTest(*f);
2042std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2048 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
2049 auto graph = &
module->Rvsdg();
2062 auto iOStateArgument = lambda->GetFunctionArguments()[0];
2063 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
2065 auto cvd1 = lambda->AddContextVar(*d1).inner;
2070 return lambda->finalize({ iOStateArgument, st[0] });
2084 auto iOStateArgument = lambda->GetFunctionArguments()[0];
2085 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
2087 auto cvd1 = lambda->AddContextVar(*d1).inner;
2088 auto cvd2 = lambda->AddContextVar(*d2).inner;
2089 auto cvf1 = lambda->AddContextVar(*f1).inner;
2096 { iOStateArgument, st[0] });
2103 auto lambdaOutput = lambda->finalize(outputs(&call));
2104 GraphExport::Create(*lambda->output(),
"f2");
2106 return std::make_tuple(lambdaOutput, &call);
2111 BitType::Create(32),
2126 auto f1 = SetupF1(d1);
2127 auto [f2, callF1] = SetupF2(f1, d1, d2);
2141std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2147 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
2148 auto graph = &
module->Rvsdg();
2159 auto SetupFib = [&]()
2165 auto fibrv = pb.
AddFixVar(fibFunctionType);
2170 auto valueArgument = lambda->GetFunctionArguments()[0];
2171 auto pointerArgument = lambda->GetFunctionArguments()[1];
2172 auto iOStateArgument = lambda->GetFunctionArguments()[2];
2173 auto memoryStateArgument = lambda->GetFunctionArguments()[3];
2174 auto ctxVarFib = lambda->AddContextVar(*fibrv.recref).inner;
2178 auto & predicateNode = MatchOperation::CreateNode(*bitult, { { 0, 1 } }, 0, 2);
2180 auto gammaNode = GammaNode::create(predicateNode.output(0), 2);
2181 auto nev = gammaNode->AddEntryVar(valueArgument);
2182 auto resultev = gammaNode->AddEntryVar(pointerArgument);
2183 auto fibev = gammaNode->AddEntryVar(ctxVarFib);
2184 auto gIIoState = gammaNode->AddEntryVar(iOStateArgument);
2185 auto gIMemoryState = gammaNode->AddEntryVar(memoryStateArgument);
2191 fibev.branchArgument[0],
2194 resultev.branchArgument[0],
2195 gIIoState.branchArgument[0],
2196 gIMemoryState.branchArgument[0] });
2201 fibev.branchArgument[0],
2204 resultev.branchArgument[0],
2205 &CallOperation::GetIOStateOutput(callFibm1),
2206 &CallOperation::GetMemoryStateOutput(callFibm1) });
2209 resultev.branchArgument[0],
2219 resultev.branchArgument[0],
2230 auto sumex = gammaNode->AddExitVar({ sum, nev.branchArgument[1] });
2231 auto gOIoState = gammaNode->AddExitVar(
2233 auto gOMemoryState = gammaNode->AddExitVar({ ldnm2[1], gIMemoryState.branchArgument[1] });
2241 auto lambdaOutput = lambda->finalize({ gOIoState.output, store[0] });
2243 fibrv.result->divert_to(lambdaOutput);
2244 auto phiNode = pb.
end();
2246 return std::make_tuple(phiNode, lambdaOutput, gammaNode, &callFibm1, &callFibm2);
2261 auto iOStateArgument = lambda->GetFunctionArguments()[0];
2262 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
2263 auto fibcv = lambda->AddContextVar(*phiNode->output(0)).inner;
2270 std::vector<jlm::rvsdg::Output *>{ allocaResults[1], memoryStateArgument });
2278 { constantTen, gep, iOStateArgument, state });
2280 auto lambdaOutput = lambda->finalize(outputs(&call));
2281 GraphExport::Create(*lambdaOutput,
"test");
2283 return std::make_tuple(
2289 auto [phiNode, fibfct, gammaNode, callFib1, callFib2] = SetupFib();
2290 auto [testfct, callFib,
alloca] = SetupTestFunction(phiNode);
2296 this->
gamma = gammaNode;
2297 this->
phi = phiNode;
2309std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2336 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
2337 auto graph = &
module->Rvsdg();
2339 auto SetupEight = [&]()
2344 auto iOStateArgument = lambda->GetFunctionArguments()[0];
2345 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
2349 return lambda->finalize({ constant, iOStateArgument, memoryStateArgument });
2357 auto pointerArgument = lambda->GetFunctionArguments()[0];
2358 auto functionArgument =
2361 auto iOStateArgument = lambda->GetFunctionArguments()[1];
2362 auto memoryStateArgument = lambda->GetFunctionArguments()[2];
2366 constantFunctionType,
2367 { iOStateArgument, memoryStateArgument });
2369 auto lambdaOutput = lambda->finalize(outputs(&call));
2371 return std::make_tuple(lambdaOutput, &call);
2381 auto pointerArgument = lambda->GetFunctionArguments()[0];
2382 auto iOStateArgument = lambda->GetFunctionArguments()[1];
2383 auto memoryStateArgument = lambda->GetFunctionArguments()[2];
2385 auto functionBCv = lambda->AddContextVar(functionB).inner;
2386 auto functionDCv = lambda->AddContextVar(functionD).inner;
2396 std::vector<jlm::rvsdg::Output *>({ paAlloca[1], storeNode[0] }));
2401 { paAlloca[0], iOStateArgument, paMerge });
2412 auto lambdaOutput = lambda->finalize({ sum,
2416 return std::make_tuple(
2420 jlm::util::assertedCast<jlm::rvsdg::SimpleNode>(
2432 auto pointerArgument = lambda->GetFunctionArguments()[0];
2433 auto iOStateArgument = lambda->GetFunctionArguments()[1];
2434 auto memoryStateArgument = lambda->GetFunctionArguments()[2];
2436 auto functionICv = lambda->AddContextVar(functionI).inner;
2437 auto functionCCv = lambda->AddContextVar(functionC).inner;
2438 auto functionEightCv = lambda->AddContextVar(functionEight).inner;
2448 std::vector<jlm::rvsdg::Output *>({ pbAlloca[1], storeNode[0] }));
2467 auto lambdaOutput = lambda->finalize({ sum,
2471 return std::make_tuple(
2475 jlm::util::assertedCast<jlm::rvsdg::SimpleNode>(
2484 auto xArgument = lambda->GetFunctionArguments()[0];
2485 auto iOStateArgument = lambda->GetFunctionArguments()[1];
2486 auto memoryStateArgument = lambda->GetFunctionArguments()[2];
2488 auto functionACv = lambda->AddContextVar(functionA).inner;
2497 std::vector<jlm::rvsdg::Output *>({ pcAlloca[1], storeNode[0] }));
2502 { pcAlloca[0], iOStateArgument, pcMerge });
2515 return std::make_tuple(
2518 jlm::util::assertedCast<jlm::rvsdg::SimpleNode>(
2527 auto xArgument = lambda->GetFunctionArguments()[0];
2528 auto iOStateArgument = lambda->GetFunctionArguments()[1];
2529 auto memoryStateArgument = lambda->GetFunctionArguments()[2];
2531 auto functionACv = lambda->AddContextVar(functionA).inner;
2539 std::vector<jlm::rvsdg::Output *>({ pdAlloca[1], storeNode[0] }));
2544 { pdAlloca[0], iOStateArgument, pdMerge });
2546 auto lambdaOutput = lambda->finalize(outputs(&callA));
2548 return std::make_tuple(
2551 jlm::util::assertedCast<jlm::rvsdg::SimpleNode>(
2559 auto lambdaARv = phiBuilder.
AddFixVar(recFunctionType);
2560 auto lambdaBRv = phiBuilder.
AddFixVar(recFunctionType);
2561 auto lambdaCRv = phiBuilder.
AddFixVar(recFunctionType);
2562 auto lambdaDRv = phiBuilder.
AddFixVar(recFunctionType);
2566 auto [lambdaAOutput, callB, callD, paAlloca] =
2567 SetupA(*phiBuilder.
subregion(), *lambdaBRv.recref, *lambdaDRv.recref);
2569 auto [lambdaBOutput, callI, callC, pbAlloca] =
2570 SetupB(*phiBuilder.
subregion(), *lambdaICv.inner, *lambdaCRv.recref, *lambdaEightCv.inner);
2572 auto [lambdaCOutput, callAFromC, pcAlloca] = SetupC(*phiBuilder.
subregion(), *lambdaARv.recref);
2574 auto [lambdaDOutput, callAFromD, pdAlloca] = SetupD(*phiBuilder.
subregion(), *lambdaARv.recref);
2576 lambdaARv.result->divert_to(lambdaAOutput);
2577 lambdaBRv.result->divert_to(lambdaBOutput);
2578 lambdaCRv.result->divert_to(lambdaCOutput);
2579 lambdaDRv.result->divert_to(lambdaDOutput);
2583 return std::make_tuple(
2611 auto iOStateArgument = lambda->GetFunctionArguments()[0];
2612 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
2614 auto functionACv = lambda->AddContextVar(functionA).inner;
2619 std::vector<jlm::rvsdg::Output *>({ pTestAlloca[1], memoryStateArgument }));
2624 { pTestAlloca[0], iOStateArgument, pTestMerge });
2626 auto lambdaOutput = lambda->finalize(outputs(&callA));
2627 GraphExport::Create(*lambdaOutput,
"test");
2629 return std::make_tuple(
2632 jlm::util::assertedCast<jlm::rvsdg::SimpleNode>(
2636 auto lambdaEight = SetupEight();
2637 auto [lambdaI, indirectCall] = SetupI();
2653 pdAlloca] = SetupPhi(*lambdaEight, *lambdaI);
2655 auto [lambdaTest, callAFromTest, pTestAlloca] = SetupTest(*lambdaA.output);
2686std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2693 auto & rvsdg = rvsdgModule->Rvsdg();
2700 pb.
begin(&rvsdg.GetRootRegion());
2701 auto myArrayRecVar = pb.
AddFixVar(pointerType);
2706 auto myArrayArgument = delta->AddContextVar(*myArrayRecVar.recref).inner;
2709 auto & constantStruct =
2713 auto deltaOutput = &delta->finalize(constantArray);
2715 myArrayRecVar.result->divert_to(deltaOutput);
2717 auto phiNode = pb.
end();
2718 GraphExport::Create(*phiNode->output(0),
"myArray");
2723std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2735 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
2736 auto graph = &
module->Rvsdg();
2760std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2767 auto rvsdg = &rvsdgModule->Rvsdg();
2769 auto SetupDeltaA = [&]()
2772 &rvsdg->GetRootRegion(),
2783 return &deltaNode->finalize(constant);
2786 auto SetupDeltaB = [&]()
2789 &rvsdg->GetRootRegion(),
2800 return &deltaNode->finalize(constant);
2808 &rvsdg->GetRootRegion(),
2811 auto contextVariableA = deltaNode->AddContextVar(deltaA).inner;
2813 return &deltaNode->finalize(contextVariableA);
2821 &rvsdg->GetRootRegion(),
2824 auto contextVariableX = deltaNode->AddContextVar(deltaX).inner;
2826 auto deltaOutput = &deltaNode->finalize(contextVariableX);
2827 GraphExport::Create(*deltaOutput,
"y");
2842 rvsdg->GetRootRegion(),
2844 auto pointerArgument = lambda->GetFunctionArguments()[0];
2845 auto iOStateArgument = lambda->GetFunctionArguments()[1];
2846 auto memoryStateArgument = lambda->GetFunctionArguments()[2];
2848 auto contextVariableB = lambda->AddContextVar(deltaB).inner;
2854 { loadResults1[1] },
2862 auto lambdaOutput = lambda->finalize({ loadResults2[0], iOStateArgument, storeResults[0] });
2864 GraphExport::Create(*lambdaOutput,
"test");
2866 return std::make_tuple(
2868 jlm::util::assertedCast<rvsdg::SimpleNode>(
2872 auto deltaA = SetupDeltaA();
2873 auto deltaB = SetupDeltaB();
2874 auto deltaX = SetupDeltaX(*deltaA);
2875 auto deltaY = SetupDeltaY(*deltaX);
2876 auto [lambdaTest, loadNode1] = SetupLambdaTest(*deltaB);
2893std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2900 auto rvsdg = &rvsdgModule->Rvsdg();
2914 auto SetupExternalFunction1Declaration = [&]()
2918 externalFunction1Type,
2919 "ExternalFunction1",
2924 auto SetupExternalFunction2Declaration = [&]()
2928 externalFunction2Type,
2929 "ExternalFunction2",
2934 auto SetupReturnAddressFunction = [&]()
2944 rvsdg->GetRootRegion(),
2946 auto iOStateArgument = lambda->GetFunctionArguments()[0];
2947 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
2959 GraphExport::Create(*lambdaOutput,
"ReturnAddress");
2961 return std::make_tuple(lambdaOutput, &mallocNode);
2973 rvsdg->GetRootRegion(),
2976 "CallExternalFunction1",
2978 auto iOStateArgument = lambda->GetFunctionArguments()[0];
2979 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
2981 auto externalFunction1 = lambda->AddContextVar(*externalFunction1Argument).inner;
2991 externalFunction1Type,
2996 auto lambdaOutput = lambda->finalize(outputs(&call));
2998 GraphExport::Create(*lambdaOutput,
"CallExternalFunction1");
3000 return std::make_tuple(lambdaOutput, &call, &mallocNode);
3012 rvsdg->GetRootRegion(),
3015 "CallExternalFunction2",
3017 auto iOStateArgument = lambda->GetFunctionArguments()[0];
3018 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
3020 auto externalFunction2 = lambda->AddContextVar(*externalFunction2Argument).inner;
3024 externalFunction2Type,
3025 { iOStateArgument, memoryStateArgument });
3029 { &CallOperation::GetMemoryStateOutput(call) },
3033 auto lambdaOutput = lambda->finalize(
3036 GraphExport::Create(*lambdaOutput,
"CallExternalFunction2");
3038 return std::make_tuple(
3041 jlm::util::assertedCast<rvsdg::SimpleNode>(
3045 auto externalFunction1 = SetupExternalFunction1Declaration();
3046 auto externalFunction2 = SetupExternalFunction2Declaration();
3047 auto [returnAddressFunction, returnAddressMalloc] = SetupReturnAddressFunction();
3048 auto [callExternalFunction1, externalFunction1Call, callExternalFunction1Malloc] =
3049 SetupCallExternalFunction1(externalFunction1);
3050 auto [callExternalFunction2, externalFunction2Call, loadNode] =
3051 SetupCallExternalFunction2(externalFunction2);
3077std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
3084 auto rvsdg = &rvsdgModule->Rvsdg();
3093 auto SetupExternalFunctionDeclaration = [&]()
3097 externalFunctionType,
3103 auto SetupGlobal = [&]()
3106 &rvsdg->GetRootRegion(),
3117 auto deltaOutput = &delta->finalize(constant);
3119 GraphExport::Create(*deltaOutput,
"global");
3133 rvsdg->GetRootRegion(),
3135 auto iOStateArgument = lambda->GetFunctionArguments()[0];
3136 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
3138 auto externalFunction = lambda->AddContextVar(*externalFunctionArgument).inner;
3142 externalFunctionType,
3143 { iOStateArgument, memoryStateArgument });
3147 { &CallOperation::GetMemoryStateOutput(call) },
3151 auto lambdaOutput = lambda->finalize(
3154 GraphExport::Create(*lambdaOutput,
"test");
3156 return std::make_tuple(
3159 jlm::util::assertedCast<rvsdg::SimpleNode>(
3163 auto importExternalFunction = SetupExternalFunctionDeclaration();
3164 auto deltaGlobal = SetupGlobal();
3165 auto [lambdaTest, callExternalFunction, loadNode] = SetupTestFunction(importExternalFunction);
3177std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
3184 auto rvsdg = &rvsdgModule->Rvsdg();
3188 auto SetupInitArray = [&]()
3191 &rvsdg->GetRootRegion(),
3202 auto deltaOutput = &delta->finalize(constantDataArray);
3204 GraphExport::Create(*deltaOutput,
"initArray");
3209 auto SetupGlobalArray = [&]()
3212 &rvsdg->GetRootRegion(),
3221 auto constantAggregateZero =
3224 auto deltaOutput = &delta->finalize(constantAggregateZero);
3226 GraphExport::Create(*deltaOutput,
"globalArray");
3240 rvsdg->GetRootRegion(),
3242 auto iOStateArgument = lambda->GetFunctionArguments()[0];
3243 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
3245 auto globalArrayArgument = lambda->AddContextVar(globalArray).inner;
3257 { storeResults[0] },
3261 auto lambdaOutput = lambda->finalize({ loadResults[0], iOStateArgument, loadResults[1] });
3263 GraphExport::Create(*lambdaOutput,
"f");
3265 return lambdaOutput;
3268 auto SetupFunctionG =
3278 rvsdg->GetRootRegion(),
3280 auto iOStateArgument = lambda->GetFunctionArguments()[0];
3281 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
3283 auto localArrayArgument = lambda->AddContextVar(localArray).inner;
3284 auto globalArrayArgument = lambda->AddContextVar(globalArray).inner;
3285 auto functionFArgument = lambda->AddContextVar(lambdaF).inner;
3296 { memoryStateArgument });
3301 { iOStateArgument, memcpyResults[0] });
3303 auto lambdaOutput = lambda->finalize(outputs(&call));
3305 GraphExport::Create(*lambdaOutput,
"g");
3307 return std::make_tuple(
3313 auto initArray = SetupInitArray();
3314 auto globalArray = SetupGlobalArray();
3315 auto lambdaF = SetupFunctionF(*globalArray);
3316 auto [lambdaG, callF, memcpyNode] = SetupFunctionG(*initArray, *globalArray, *lambdaF);
3331std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
3338 auto rvsdg = &rvsdgModule->Rvsdg();
3344 auto SetupFunctionG = [&]()
3356 rvsdg->GetRootRegion(),
3358 auto s1Argument = lambda->GetFunctionArguments()[0];
3359 auto s2Argument = lambda->GetFunctionArguments()[1];
3360 auto iOStateArgument = lambda->GetFunctionArguments()[2];
3361 auto memoryStateArgument = lambda->GetFunctionArguments()[3];
3376 auto lambdaOutput = lambda->finalize({ iOStateArgument, memcpyResults[0] });
3393 rvsdg->GetRootRegion(),
3395 auto s1Argument = lambda->GetFunctionArguments()[0];
3396 auto s2Argument = lambda->GetFunctionArguments()[1];
3397 auto iOStateArgument = lambda->GetFunctionArguments()[2];
3398 auto memoryStateArgument = lambda->GetFunctionArguments()[3];
3400 auto functionFArgument = lambda->AddContextVar(functionF).inner;
3413 { ldS1[0], ldS2[0], iOStateArgument, ldS2[1] });
3415 auto lambdaOutput = lambda->finalize(outputs(&call));
3417 GraphExport::Create(*lambdaOutput,
"f");
3419 return std::make_tuple(lambdaOutput, &call);
3422 auto [lambdaG, memcpyNode] = SetupFunctionG();
3423 auto [lambdaF, callG] = SetupFunctionF(*lambdaG);
3433std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
3440 auto rvsdg = &rvsdgModule->Rvsdg();
3452 rvsdg->GetRootRegion(),
3466 std::vector<jlm::rvsdg::Output *>{ allocaResults[1], memoryStateArgument });
3468 auto memcpyResults =
3478 auto lambdaOutput =
Lambda_->
finalize({ iOStateArgument, memcpyResults[0] });
3480 GraphExport::Create(*lambdaOutput,
"f");
3488std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
3495 auto & rvsdg = rvsdgModule->Rvsdg();
3500 auto SetupDeltaMyList = [&]()
3503 &rvsdg.GetRootRegion(),
3506 auto constantPointerNullResult =
3509 auto deltaOutput = &delta->finalize(constantPointerNullResult);
3510 GraphExport::Create(*deltaOutput,
"myList");
3524 rvsdg.GetRootRegion(),
3526 auto iOStateArgument = lambda->GetFunctionArguments()[0];
3527 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
3529 auto myListArgument = lambda->AddContextVar(myList).inner;
3536 std::vector<jlm::rvsdg::Output *>{ alloca[1], memoryStateArgument });
3550 auto lambdaOutput = lambda->finalize({ load4[0], iOStateArgument, load4[1] });
3551 GraphExport::Create(*lambdaOutput,
"next");
3556 auto deltaMyList = SetupDeltaMyList();
3557 auto [alloca, lambdaNext] = SetupFunctionNext(*deltaMyList);
3569std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
3582 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
3583 auto graph = &
module->Rvsdg();
3588 BitType::Create(32),
3599 auto constantPointerNullResult =
3618 std::vector<jlm::rvsdg::Output *>{ entryMemoryState, allocaOutputs[1] });
3631 { afterMallocMemoryState },
3635 auto loadAllocaOutputs =
3641 { loadAllocaOutputs[1] },
3648 loadAllocaOutputs[0],
3649 loadImportedOutputs[0],
3650 { loadImportedOutputs[1] },
3656 loadAllocaOutputs[0],
3657 { storeImportedOutputs[0] },
3668std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
3679 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
3680 auto graph = &
module->Rvsdg();
3709std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
3725 auto module = llvm::LlvmRvsdgModule::Create(util::FilePath(""), "", "");
3726 const auto graph = &
module->Rvsdg();
3731 const auto constantZero =
3741 const auto constantOne =
3754 { mergedMemoryState },
3784std::unique_ptr<llvm::LlvmRvsdgModule>
3794 auto module = llvm::LlvmRvsdgModule::Create(jlm::util::FilePath(""), "", "");
3795 auto graph = &
module->Rvsdg();
3803 auto constantPointerNullResult =
3816std::unique_ptr<llvm::LlvmRvsdgModule>
3823 auto & rvsdg = rvsdgModule->Rvsdg();
3831 variableArgumentType,
3836 auto setupLambdaG = [&]()
3842 rvsdg.GetRootRegion(),
3844 auto iOStateArgument = lambda->GetFunctionArguments()[0];
3845 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
3849 return lambda->finalize({ five, iOStateArgument, memoryStateArgument });
3862 rvsdg.GetRootRegion(),
3864 auto iOStateArgument = lambda->GetFunctionArguments()[0];
3865 auto memoryStateArgument = lambda->GetFunctionArguments()[1];
3866 auto lambdaGArgument = lambda->AddContextVar(lambdaG).inner;
3876 std::vector<rvsdg::Output *>{ memoryStateArgument, allocaResults[1] });
3890 { loadResults[0], vaList, iOStateArgument, loadResults[1] });
3892 auto lambdaOutput = lambda->finalize(outputs(&call));
3894 GraphExport::Create(*lambdaOutput,
"main");
3896 return std::make_tuple(lambdaOutput, &call);
3909 auto [lambdaMainOutput, call] = setupLambdaMain(*fn);
3916std::unique_ptr<llvm::LlvmRvsdgModule>
3922 auto & rvsdg = rvsdgModule->Rvsdg();
3952 rvsdg.GetRootRegion(),
3967 {
one, varArgList, iOStateArgument, memoryStateArgument });
3972 { &CallOperation::GetMemoryStateOutput(*CallH_) },
3981 rvsdg.GetRootRegion(),
3992 std::vector<jlm::rvsdg::Output *>{ allocaResults[1], memoryStateArgument });
4000 { allocaResults[0], iOStateArgument, storeResults[0] });
4008std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
4014 auto & rvsdg = rvsdgModule->Rvsdg();
4018 "struct.__va_list_tag",
4055 lambdaLlvmLifetimeStartType,
4056 "llvm.lifetime.start.p0",
4061 lambdaLlvmLifetimeEndType,
4062 "llvm.lifetime.end.p0",
4081 rvsdg.GetRootRegion(),
4098 std::vector<jlm::rvsdg::Output *>{ allocaResults[1], memoryStateArgument });
4102 llvmLifetimeStartArgument,
4103 lambdaLlvmLifetimeStartType,
4104 { twentyFour, allocaResults[0], iOStateArgument, memoryState });
4106 llvmVaStartArgument,
4121 auto gammaVaAddress = gammaNode->AddEntryVar(allocaResults[0]);
4122 auto gammaLoadResult = gammaNode->AddEntryVar(loadResults[0]);
4123 auto gammaMemoryState = gammaNode->AddEntryVar(loadResults[1]);
4133 { gammaMemoryState.branchArgument[0] },
4138 auto storeResultsGamma0 =
4147 gammaVaAddress.branchArgument[1],
4152 { gammaMemoryState.branchArgument[1] },
4157 loadResultsGamma1[0],
4162 gammaVaAddress.branchArgument[1],
4164 { loadResultsGamma1[1] },
4167 auto gammaAddress = gammaNode->AddExitVar({ loadResultsGamma0[0], gepResult2 });
4168 auto gammaOutputMemoryState =
4169 gammaNode->AddExitVar({ storeResultsGamma0[0], storeResultsGamma1[0] });
4172 gammaAddress.output,
4173 { gammaOutputMemoryState.output },
4181 llvmLifetimeEndArgument,
4182 lambdaLlvmLifetimeEndType,
4196 rvsdg.GetRootRegion(),
4213 { three, vaListResult, iOStateArgument, memoryStateArgument });
jlm::llvm::LlvmGraphImport * Import_
rvsdg::SimpleNode * Alloca_
jlm::rvsdg::LambdaNode * Lambda_
rvsdg::SimpleNode * Malloc_
jlm::rvsdg::DeltaNode * Delta_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
static std::vector< rvsdg::Output * > create(std::shared_ptr< const rvsdg::Type > allocatedType, rvsdg::Output *count, const size_t alignment)
static std::shared_ptr< const ArrayType > Create(std::shared_ptr< const Type > type, size_t nelements)
static jlm::rvsdg::Output * create(jlm::rvsdg::Output *operand, std::shared_ptr< const jlm::rvsdg::Type > rtype)
jlm::rvsdg::LambdaNode * lambda
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * LambdaTest_
rvsdg::SimpleNode * CallNode_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::Node * BitsToPtrNode_
jlm::rvsdg::LambdaNode * LambdaBits2Ptr_
static rvsdg::Output & GetMemoryStateOutput(const rvsdg::Node &node) noexcept
static rvsdg::SimpleNode & CreateNode(rvsdg::Region ®ion, std::unique_ptr< CallOperation > callOperation, const std::vector< rvsdg::Output * > &operands)
static rvsdg::Output & GetIOStateOutput(const rvsdg::Node &node) noexcept
rvsdg::SimpleNode * CallF_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::SimpleNode * CallG_
rvsdg::SimpleNode * alloca_y
rvsdg::SimpleNode * alloca_z
jlm::rvsdg::LambdaNode * lambda_g
jlm::rvsdg::LambdaNode * lambda_f
rvsdg::SimpleNode * alloca_x
jlm::rvsdg::LambdaNode * lambda_h
jlm::rvsdg::LambdaNode * lambda_test
rvsdg::SimpleNode * CallCreate1_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::SimpleNode * CallDestroy1_
rvsdg::SimpleNode * CallCreate2_
jlm::rvsdg::LambdaNode * lambda_create
jlm::rvsdg::LambdaNode * lambda_destroy
rvsdg::SimpleNode * malloc
rvsdg::SimpleNode * CallDestroy2_
static rvsdg::Output * Create(rvsdg::Region ®ion, const std::shared_ptr< const rvsdg::Type > &type)
static rvsdg::Output * Create(const std::vector< rvsdg::Output * > &operands)
static rvsdg::Output * Create(const std::vector< rvsdg::Output * > &elements)
static rvsdg::Node & createNode(rvsdg::Region ®ion)
jlm::rvsdg::LambdaNode * lambda
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::Node * constantPointerNullNode
static rvsdg::Output & Create(rvsdg::Region &, const std::vector< rvsdg::Output * > &operands, std::shared_ptr< const rvsdg::Type > resultType)
jlm::rvsdg::DeltaNode * delta_f
jlm::rvsdg::LambdaNode * lambda_h
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::Node * constantFive
rvsdg::SimpleNode * CallG_
jlm::rvsdg::LambdaNode * lambda_g
jlm::rvsdg::LambdaNode * lambda_f2
jlm::rvsdg::LambdaNode * lambda_f1
rvsdg::SimpleNode * CallF1_
jlm::rvsdg::DeltaNode * delta_d2
jlm::rvsdg::DeltaNode * delta_d1
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::DeltaNode * DeltaG2_
jlm::rvsdg::LambdaNode * LambdaTest_
rvsdg::SimpleNode * CallF_
jlm::rvsdg::DeltaNode * DeltaG1_
jlm::rvsdg::LambdaNode * LambdaF_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::DeltaNode * DeltaX
jlm::rvsdg::DeltaNode * DeltaA
jlm::rvsdg::DeltaNode * DeltaB
jlm::rvsdg::LambdaNode * LambdaTest
rvsdg::SimpleNode * LoadNode1
jlm::rvsdg::DeltaNode * DeltaY
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * CallExternalFunction2
rvsdg::SimpleNode * ExternalFunction1Call
rvsdg::SimpleNode * ReturnAddressMalloc
jlm::rvsdg::LambdaNode * CallExternalFunction1
rvsdg::SimpleNode * ExternalFunction2Call
jlm::rvsdg::LambdaNode * ReturnAddressFunction
jlm::rvsdg::GraphImport * ExternalFunction1Import
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::GraphImport * ExternalFunction2Import
rvsdg::SimpleNode * CallExternalFunction1Malloc
rvsdg::SimpleNode * LoadNode
rvsdg::SimpleNode * CallExternalFunction
rvsdg::SimpleNode * LoadNode
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::GraphImport * ImportExternalFunction
jlm::rvsdg::DeltaNode * DeltaGlobal
jlm::rvsdg::LambdaNode * LambdaTest
jlm::rvsdg::Output * LocalFuncParam_
jlm::rvsdg::LambdaNode * ExportedFunc_
rvsdg::Node * LocalFuncParamAllocaNode_
jlm::rvsdg::DeltaNode * Global_
jlm::rvsdg::Output * LocalFuncRegister_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * LocalFunc_
jlm::rvsdg::GraphImport * ExternalGArgument_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * LambdaF_
rvsdg::SimpleNode * CallG_
jlm::rvsdg::LambdaNode * LambdaG_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::RegionArgument * ExternalFArgument_
rvsdg::SimpleNode * CallF_
jlm::rvsdg::LambdaNode * LambdaF
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
std::unique_ptr< llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::LambdaNode * LambdaMain_
static std::unique_ptr< llvm::ThreeAddressCode > Create(const Variable *pointer, const std::vector< const Variable * > &memoryStates, const Variable *iOState)
rvsdg::LambdaNode * LambdaH_
rvsdg::Node * AllocaYFromH_
rvsdg::LambdaNode * LambdaG_
rvsdg::GammaNode * Gamma_
rvsdg::Node * AllocaXFromG_
rvsdg::LambdaNode * LambdaF_
rvsdg::Node * AllocaXFromH_
rvsdg::SimpleNode * CallFromH_
std::unique_ptr< llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::Node * AllocaYFromG_
rvsdg::SimpleNode * CallFromG_
jlm::rvsdg::LambdaNode * lambda
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
static rvsdg::Output * create(rvsdg::Output *baseAddress, const std::vector< rvsdg::Output * > &indices, std::shared_ptr< const rvsdg::Type > gepType)
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::Node * getElementPtrX
rvsdg::Node * getElementPtrY
jlm::rvsdg::LambdaNode * lambda
static std::shared_ptr< const IOStateType > Create()
rvsdg::SimpleNode * CallF1_
jlm::rvsdg::LambdaNode * lambda_f1
jlm::rvsdg::LambdaNode * lambda_f2
jlm::rvsdg::GraphImport * import_d2
jlm::rvsdg::GraphImport * import_d1
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * LambdaIndcall_
rvsdg::SimpleNode * CallFour_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * LambdaFour_
rvsdg::SimpleNode * CallIndcall_
jlm::rvsdg::LambdaNode * LambdaTest_
jlm::rvsdg::LambdaNode * LambdaThree_
rvsdg::SimpleNode * CallThree_
rvsdg::SimpleNode * CallIWithThree_
rvsdg::SimpleNode * IndirectCall_
jlm::rvsdg::SimpleNode * AllocaPx_
rvsdg::SimpleNode * CallIWithFour_
jlm::rvsdg::DeltaNode * DeltaG1_
jlm::rvsdg::SimpleNode * AllocaPy_
jlm::rvsdg::LambdaNode * LambdaThree_
rvsdg::SimpleNode * TestCallX_
rvsdg::SimpleNode * CallY_
rvsdg::SimpleNode * Test2CallX_
jlm::rvsdg::LambdaNode * LambdaY_
jlm::rvsdg::SimpleNode * AllocaPz_
jlm::rvsdg::LambdaNode * LambdaFour_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * LambdaTest_
jlm::rvsdg::LambdaNode * LambdaTest2_
jlm::rvsdg::LambdaNode * LambdaX_
jlm::rvsdg::LambdaNode * LambdaI_
jlm::rvsdg::DeltaNode * DeltaG2_
static std::unique_ptr< ThreeAddressCode > create(const Variable *argument)
static rvsdg::Node & Create(rvsdg::Region ®ion, IntegerValueRepresentation representation)
rvsdg::LambdaNode * LambdaMain_
rvsdg::SimpleNode * Call_
rvsdg::LambdaNode * LambdaG_
std::unique_ptr< llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * LambdaNext_
rvsdg::SimpleNode * Alloca_
jlm::rvsdg::DeltaNode * DeltaMyList_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
static std::unique_ptr< LlvmDeltaOperation > Create(std::shared_ptr< const rvsdg::Type > type, const std::string &name, const Linkage &linkage, std::string section, bool constant, const size_t alignment)
static LlvmGraphImport & createGlobalImport(rvsdg::Graph &graph, std::shared_ptr< const rvsdg::Type > valueType, std::shared_ptr< const rvsdg::Type > importedType, std::string name, Linkage linkage, const bool isConstant, const size_t alignment)
static LlvmGraphImport & createFunctionImport(rvsdg::Graph &graph, std::shared_ptr< const rvsdg::FunctionType > functionType, std::string name, Linkage linkage, CallingConvention callingConvention)
static std::unique_ptr< LlvmLambdaOperation > Create(std::shared_ptr< const jlm::rvsdg::FunctionType > type, std::string name, const jlm::llvm::Linkage &linkage, jlm::llvm::CallingConvention callingConvention, jlm::llvm::AttributeSet attributes)
static std::unique_ptr< LlvmRvsdgModule > Create(const util::FilePath &sourceFileName, const std::string &targetTriple, const std::string &dataLayout)
rvsdg::Node * UndefValueNode_
jlm::rvsdg::LambdaNode * Lambda_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
static std::unique_ptr< llvm::ThreeAddressCode > Create(const Variable *address, const Variable *state, std::shared_ptr< const rvsdg::Type > loadedType, size_t alignment)
jlm::rvsdg::LambdaNode * lambda
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::SimpleNode * load_a
rvsdg::SimpleNode * alloca_p
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * lambda
rvsdg::SimpleNode * alloca_y
rvsdg::SimpleNode * load_x
rvsdg::SimpleNode * alloca_a
rvsdg::SimpleNode * alloca_x
rvsdg::SimpleNode * alloca_b
static rvsdg::Output & addressOutput(const rvsdg::Node &node)
static rvsdg::Output & memoryStateOutput(const rvsdg::Node &node)
static rvsdg::SimpleNode & createNode(rvsdg::Output &size, rvsdg::Output &ioState)
static rvsdg::Output & ioStateOutput(const rvsdg::Node &node)
static std::unique_ptr< llvm::ThreeAddressCode > create(const Variable *destination, const Variable *source, const Variable *length, const std::vector< const Variable * > &memoryStates)
rvsdg::SimpleNode * CallG_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * LambdaG_
jlm::rvsdg::LambdaNode * LambdaF_
jlm::rvsdg::LambdaNode * Lambda_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::DeltaNode * GlobalArray_
jlm::rvsdg::LambdaNode * LambdaG_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::DeltaNode * InitArray_
rvsdg::SimpleNode * Memcpy_
rvsdg::SimpleNode * CallF_
jlm::rvsdg::LambdaNode * LambdaF_
static rvsdg::Output * Create(const std::vector< rvsdg::Output * > &operands)
static std::shared_ptr< const MemoryStateType > Create()
std::vector< const rvsdg::SimpleNode * > AllocaNodes_
jlm::rvsdg::LambdaNode * Function_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::SimpleNode * CallFib_
rvsdg::SimpleNode * alloca
rvsdg::SimpleNode * CallFibm2_
jlm::rvsdg::LambdaNode * lambda_test
jlm::rvsdg::LambdaNode * lambda_fib
rvsdg::SimpleNode * CallFibm1_
jlm::rvsdg::PhiNode * phi
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::SimpleNode * PTestAlloca_
jlm::rvsdg::SimpleNode * PaAlloca_
jlm::rvsdg::LambdaNode * LambdaEight_
jlm::rvsdg::SimpleNode * PbAlloca_
jlm::rvsdg::LambdaNode * LambdaC_
rvsdg::SimpleNode * CallAFromD_
rvsdg::SimpleNode * CallAFromTest_
rvsdg::SimpleNode * CallD_
rvsdg::SimpleNode * IndirectCall_
jlm::rvsdg::LambdaNode * LambdaI_
rvsdg::SimpleNode * CallI_
rvsdg::SimpleNode * CallAFromC_
rvsdg::SimpleNode * CallB_
jlm::rvsdg::LambdaNode * LambdaTest_
jlm::rvsdg::LambdaNode * LambdaB_
rvsdg::SimpleNode * CallC_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::SimpleNode * PcAlloca_
jlm::rvsdg::SimpleNode * PdAlloca_
jlm::rvsdg::LambdaNode * LambdaD_
jlm::rvsdg::LambdaNode * LambdaA_
jlm::rvsdg::DeltaNode * Delta_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
static std::shared_ptr< const PointerType > Create()
const rvsdg::Graph & graph()
static std::unique_ptr< llvm::ThreeAddressCode > Create(const Variable *address, const Variable *value, const Variable *state, size_t alignment)
rvsdg::SimpleNode * alloca_c
rvsdg::SimpleNode * alloca_a
rvsdg::SimpleNode * alloca_d
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * lambda
rvsdg::SimpleNode * alloca_b
rvsdg::SimpleNode * alloca_p
jlm::rvsdg::LambdaNode * lambda
rvsdg::SimpleNode * alloca_y
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::SimpleNode * alloca_x
rvsdg::SimpleNode * alloca_b
rvsdg::SimpleNode * alloca_a
static std::shared_ptr< const StructType > CreateIdentified(const std::string &name, std::vector< std::shared_ptr< const Type > > types, bool isPacked)
jlm::rvsdg::LambdaNode * lambda
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::ThetaNode * theta
static rvsdg::Output & create(size_t ndstbits, rvsdg::Output &operand)
static jlm::rvsdg::Output * Create(rvsdg::Region ®ion, std::shared_ptr< const jlm::rvsdg::Type > type)
static std::shared_ptr< const VariableArgumentType > Create()
static rvsdg::Output * Create(rvsdg::Region ®ion, const std::vector< rvsdg::Output * > &operands)
std::unique_ptr< llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::Node * AllocaNode_
rvsdg::SimpleNode * CallH_
rvsdg::RegionArgument * ImportH_
rvsdg::LambdaNode * LambdaF_
rvsdg::LambdaNode * LambdaG_
jlm::rvsdg::LambdaNode * LambdaFst_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::Node * AllocaNode_
jlm::rvsdg::LambdaNode * LambdaG_
static rvsdg::Output & create(size_t ndstbits, rvsdg::Output &operand)
static std::shared_ptr< const BitType > Create(std::size_t nbits)
Creates bit type of specified width.
rvsdg::Region * subregion() const noexcept
rvsdg::Output & finalize(rvsdg::Output *result)
static DeltaNode * Create(rvsdg::Region *parent, std::unique_ptr< DeltaOperation > op)
rvsdg::Output & output() const noexcept
static std::shared_ptr< const FunctionType > Create(std::vector< std::shared_ptr< const jlm::rvsdg::Type > > argumentTypes, std::vector< std::shared_ptr< const jlm::rvsdg::Type > > resultTypes)
static GammaNode * create(jlm::rvsdg::Output *predicate, size_t nalternatives)
Region & GetRootRegion() const noexcept
rvsdg::Output * finalize(const std::vector< jlm::rvsdg::Output * > &results)
std::vector< rvsdg::Output * > GetFunctionArguments() const
ContextVar AddContextVar(jlm::rvsdg::Output &origin)
Adds a context/free variable to the lambda node.
static LambdaNode * Create(rvsdg::Region &parent, std::unique_ptr< LambdaOperation > operation)
rvsdg::Output * output() const noexcept
rvsdg::Region * subregion() const noexcept
LambdaOperation & GetOperation() const noexcept override
const std::shared_ptr< const FunctionType > & Type() const noexcept
std::unique_ptr< BitBinaryOperation > create(size_t nbits) const override
std::unique_ptr< BitCompareOperation > create(size_t nbits) const override
static Output * Create(Output &predicate, const std::unordered_map< uint64_t, uint64_t > &mapping, const uint64_t defaultAlternative, const size_t numAlternatives)
NodeOutput * output(size_t index) const noexcept
PhiNode::ContextVar AddContextVar(jlm::rvsdg::Output &origin)
PhiNode::FixVar AddFixVar(std::shared_ptr< const jlm::rvsdg::Type > type)
void begin(rvsdg::Region *parent)
rvsdg::Region * subregion() const noexcept
A phi node represents the fixpoint of mutually recursive definitions.
Represents the argument of a region.
Represent acyclic RVSDG subgraphs.
NodeOutput * output(size_t index) const noexcept
static ThetaNode * create(rvsdg::Region *parent)
Global memory state passed between functions.
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.
rvsdg::Output * inner
Access to bound object in subregion.