Jlm
Loading...
Searching...
No Matches
TestRvsdgs.hpp
Go to the documentation of this file.
1/*
2 * Copyright 2020 Nico Reißmann <nico.reissmann@gmail.com>
3 * See COPYING for terms of redistribution.
4 */
5
6#ifndef JLM_LLVM_TESTRVSDGS_HPP
7#define JLM_LLVM_TESTRVSDGS_HPP
8
11#include <jlm/rvsdg/lambda.hpp>
12
13namespace jlm::rvsdg
14{
15class Graph;
16class GammaNode;
17class LambdaNode;
18class PhiNode;
19class ThetaNode;
20}
21
22namespace jlm::llvm
23{
24
29{
30public:
31 virtual ~RvsdgTest() = default;
32
35 {
37 return *module_;
38 }
39
40 const rvsdg::Graph &
42 {
43 return module().Rvsdg();
44 }
45
50 void
52 {
53 if (module_ == nullptr)
55 }
56
57private:
61 virtual std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
63
64 std::unique_ptr<jlm::llvm::LlvmRvsdgModule> module_;
65};
66
88class StoreTest1 final : public RvsdgTest
89{
90private:
91 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
92 SetupRvsdg() override;
93
94public:
96
98
103};
104
126class StoreTest2 final : public RvsdgTest
127{
128private:
129 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
130 SetupRvsdg() override;
131
132public:
134
136
142};
143
160class LoadTest1 final : public RvsdgTest
161{
162private:
163 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
164 SetupRvsdg() override;
165
166public:
168
171};
172
219
235class LoadFromUndefTest final : public RvsdgTest
236{
237private:
238 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
239 SetupRvsdg() override;
240
241public:
242 [[nodiscard]] const jlm::rvsdg::LambdaNode &
243 Lambda() const noexcept
244 {
245 return *Lambda_;
246 }
247
248 [[nodiscard]] const rvsdg::Node *
249 UndefValueNode() const noexcept
250 {
251 return UndefValueNode_;
252 }
253
254private:
257};
258
278class GetElementPtrTest final : public RvsdgTest
279{
280private:
281 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
282 SetupRvsdg() override;
283
284public:
286
289};
290
302class BitCastTest final : public RvsdgTest
303{
304private:
305 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
306 SetupRvsdg() override;
307
308public:
310
312};
313
334class Bits2PtrTest final : public RvsdgTest
335{
336public:
337 [[nodiscard]] const jlm::rvsdg::LambdaNode &
338 GetLambdaBits2Ptr() const noexcept
339 {
340 return *LambdaBits2Ptr_;
341 }
342
343 [[nodiscard]] const jlm::rvsdg::LambdaNode &
344 GetLambdaTest() const noexcept
345 {
346 return *LambdaTest_;
347 }
348
349 [[nodiscard]] const rvsdg::SimpleNode &
350 GetCallNode() const noexcept
351 {
352 return *CallNode_;
353 }
354
355 [[nodiscard]] const rvsdg::Node &
356 GetBitsToPtrNode() const noexcept
357 {
358 return *BitsToPtrNode_;
359 }
360
361private:
362 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
363 SetupRvsdg() override;
364
367
369
371};
372
385{
386private:
387 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
388 SetupRvsdg() override;
389
390public:
392
394};
395
424class CallTest1 final : public RvsdgTest
425{
426private:
427 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
428 SetupRvsdg() override;
429
430public:
431 [[nodiscard]] const rvsdg::SimpleNode &
432 CallF() const noexcept
433 {
434 return *CallF_;
435 }
436
437 [[nodiscard]] const rvsdg::SimpleNode &
438 CallG() const noexcept
439 {
440 return *CallG_;
441 }
442
446
450
451private:
454};
455
487class CallTest2 final : public RvsdgTest
488{
489public:
490 [[nodiscard]] const rvsdg::SimpleNode &
491 CallCreate1() const noexcept
492 {
493 return *CallCreate1_;
494 }
495
496 [[nodiscard]] const rvsdg::SimpleNode &
497 CallCreate2() const noexcept
498 {
499 return *CallCreate2_;
500 }
501
502 [[nodiscard]] const rvsdg::SimpleNode &
503 CallDestroy1() const noexcept
504 {
505 return *CallDestroy1_;
506 }
507
508 [[nodiscard]] const rvsdg::SimpleNode &
509 CallDestroy2() const noexcept
510 {
511 return *CallDestroy2_;
512 }
513
517
520
521private:
522 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
523 SetupRvsdg() override;
524
527
530};
531
565class IndirectCallTest1 final : public RvsdgTest
566{
567public:
568 [[nodiscard]] const rvsdg::SimpleNode &
569 CallIndcall() const noexcept
570 {
571 return *CallIndcall_;
572 }
573
574 [[nodiscard]] const rvsdg::SimpleNode &
575 CallThree() const noexcept
576 {
577 return *CallThree_;
578 }
579
580 [[nodiscard]] const rvsdg::SimpleNode &
581 CallFour() const noexcept
582 {
583 return *CallFour_;
584 }
585
586 [[nodiscard]] const jlm::rvsdg::LambdaNode &
587 GetLambdaThree() const noexcept
588 {
589 return *LambdaThree_;
590 }
591
592 [[nodiscard]] const jlm::rvsdg::LambdaNode &
593 GetLambdaFour() const noexcept
594 {
595 return *LambdaFour_;
596 }
597
598 [[nodiscard]] const jlm::rvsdg::LambdaNode &
599 GetLambdaIndcall() const noexcept
600 {
601 return *LambdaIndcall_;
602 }
603
604 [[nodiscard]] const jlm::rvsdg::LambdaNode &
605 GetLambdaTest() const noexcept
606 {
607 return *LambdaTest_;
608 }
609
610private:
611 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
612 SetupRvsdg() override;
613
617
622};
623
686class IndirectCallTest2 final : public RvsdgTest
687{
688public:
689 [[nodiscard]] jlm::rvsdg::DeltaNode &
690 GetDeltaG1() const noexcept
691 {
692 return *DeltaG1_;
693 }
694
695 [[nodiscard]] jlm::rvsdg::DeltaNode &
696 GetDeltaG2() const noexcept
697 {
698 return *DeltaG2_;
699 }
700
701 [[nodiscard]] jlm::rvsdg::LambdaNode &
702 GetLambdaThree() const noexcept
703 {
704 return *LambdaThree_;
705 }
706
707 [[nodiscard]] jlm::rvsdg::LambdaNode &
708 GetLambdaFour() const noexcept
709 {
710 return *LambdaFour_;
711 }
712
713 [[nodiscard]] jlm::rvsdg::LambdaNode &
714 GetLambdaI() const noexcept
715 {
716 return *LambdaI_;
717 }
718
719 [[nodiscard]] jlm::rvsdg::LambdaNode &
720 GetLambdaX() const noexcept
721 {
722 return *LambdaX_;
723 }
724
725 [[nodiscard]] jlm::rvsdg::LambdaNode &
726 GetLambdaY() const noexcept
727 {
728 return *LambdaY_;
729 }
730
731 [[nodiscard]] jlm::rvsdg::LambdaNode &
732 GetLambdaTest() const noexcept
733 {
734 return *LambdaTest_;
735 }
736
737 [[nodiscard]] jlm::rvsdg::LambdaNode &
738 GetLambdaTest2() const noexcept
739 {
740 return *LambdaTest2_;
741 }
742
743 [[nodiscard]] rvsdg::SimpleNode &
744 GetIndirectCall() const noexcept
745 {
746 return *IndirectCall_;
747 }
748
749 [[nodiscard]] rvsdg::SimpleNode &
750 GetCallIWithThree() const noexcept
751 {
752 return *CallIWithThree_;
753 }
754
755 [[nodiscard]] rvsdg::SimpleNode &
756 GetCallIWithFour() const noexcept
757 {
758 return *CallIWithFour_;
759 }
760
761 [[nodiscard]] rvsdg::SimpleNode &
762 GetTestCallX() const noexcept
763 {
764 return *TestCallX_;
765 }
766
767 [[nodiscard]] rvsdg::SimpleNode &
768 GetTest2CallX() const noexcept
769 {
770 return *Test2CallX_;
771 }
772
773 [[nodiscard]] rvsdg::SimpleNode &
774 GetCallY() const noexcept
775 {
776 return *CallY_;
777 }
778
779 [[nodiscard]] jlm::rvsdg::SimpleNode &
780 GetAllocaPx() const noexcept
781 {
782 return *AllocaPx_;
783 }
784
785 [[nodiscard]] jlm::rvsdg::SimpleNode &
786 GetAllocaPy() const noexcept
787 {
788 return *AllocaPy_;
789 }
790
791 [[nodiscard]] jlm::rvsdg::SimpleNode &
792 GetAllocaPz() const noexcept
793 {
794 return *AllocaPz_;
795 }
796
797private:
798 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
799 SetupRvsdg() override;
800
803
811
818
822};
823
841class ExternalCallTest1 final : public RvsdgTest
842{
843public:
844 [[nodiscard]] const jlm::rvsdg::LambdaNode &
845 LambdaF() const noexcept
846 {
847 return *LambdaF_;
848 }
849
850 [[nodiscard]] const rvsdg::SimpleNode &
851 CallG() const noexcept
852 {
853 return *CallG_;
854 }
855
856 [[nodiscard]] const jlm::rvsdg::GraphImport &
857 ExternalGArgument() const noexcept
858 {
859 return *ExternalGArgument_;
860 }
861
862private:
863 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
864 SetupRvsdg() override;
865
867
869
871};
872
903class ExternalCallTest2 final : public RvsdgTest
904{
905public:
906 [[nodiscard]] jlm::rvsdg::LambdaNode &
908 {
909 JLM_ASSERT(LambdaG_ != nullptr);
910 return *LambdaG_;
911 }
912
913 [[nodiscard]] rvsdg::SimpleNode &
915 {
916 JLM_ASSERT(CallF_ != nullptr);
917 return *CallF_;
918 }
919
920 [[nodiscard]] jlm::rvsdg::RegionArgument &
922 {
923 JLM_ASSERT(ExternalFArgument_ != nullptr);
924 return *ExternalFArgument_;
925 }
926
927private:
928 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
929 SetupRvsdg() override;
930
932
934
936};
937
960class GammaTest final : public RvsdgTest
961{
962private:
963 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
964 SetupRvsdg() override;
965
966public:
968
970};
971
1018class GammaTest2 final : public RvsdgTest
1019{
1020public:
1021 [[nodiscard]] rvsdg::LambdaNode &
1022 GetLambdaF() const noexcept
1023 {
1024 return *LambdaF_;
1025 }
1026
1027 [[nodiscard]] rvsdg::LambdaNode &
1028 GetLambdaG() const noexcept
1029 {
1030 return *LambdaG_;
1031 }
1032
1033 [[nodiscard]] rvsdg::LambdaNode &
1034 GetLambdaH() const noexcept
1035 {
1036 return *LambdaH_;
1037 }
1038
1039 [[nodiscard]] rvsdg::GammaNode &
1040 GetGamma() const noexcept
1041 {
1042 return *Gamma_;
1043 }
1044
1045 [[nodiscard]] rvsdg::SimpleNode &
1046 GetCallFromG() const noexcept
1047 {
1048 return *CallFromG_;
1049 }
1050
1051 [[nodiscard]] rvsdg::SimpleNode &
1052 GetCallFromH() const noexcept
1053 {
1054 return *CallFromH_;
1055 }
1056
1057 [[nodiscard]] rvsdg::Node &
1058 GetAllocaXFromG() const noexcept
1059 {
1060 return *AllocaXFromG_;
1061 }
1062
1063 [[nodiscard]] rvsdg::Node &
1064 GetAllocaYFromG() const noexcept
1065 {
1066 return *AllocaYFromG_;
1067 }
1068
1069 [[nodiscard]] rvsdg::Node &
1070 GetAllocaXFromH() const noexcept
1071 {
1072 return *AllocaXFromH_;
1073 }
1074
1075 [[nodiscard]] rvsdg::Node &
1076 GetAllocaYFromH() const noexcept
1077 {
1078 return *AllocaYFromH_;
1079 }
1080
1081 [[nodiscard]] rvsdg::Node &
1082 GetAllocaZ() const noexcept
1083 {
1084 return *AllocaZ_;
1085 }
1086
1087private:
1088 std::unique_ptr<llvm::LlvmRvsdgModule>
1089 SetupRvsdg() override;
1090
1094
1096
1099
1105};
1106
1124class ThetaTest final : public RvsdgTest
1125{
1126private:
1127 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1128 SetupRvsdg() override;
1129
1130public:
1134};
1135
1160class DeltaTest1 final : public RvsdgTest
1161{
1162public:
1163 [[nodiscard]] const rvsdg::SimpleNode &
1164 CallG() const noexcept
1165 {
1166 return *CallG_;
1167 }
1168
1171
1173
1175
1176private:
1177 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1178 SetupRvsdg() override;
1179
1181};
1182
1209class DeltaTest2 final : public RvsdgTest
1210{
1211public:
1212 [[nodiscard]] const rvsdg::SimpleNode &
1213 CallF1() const noexcept
1214 {
1215 return *CallF1_;
1216 }
1217
1220
1223
1224private:
1225 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1226 SetupRvsdg() override;
1227
1229};
1230
1256class DeltaTest3 final : public RvsdgTest
1257{
1258public:
1259 [[nodiscard]] const jlm::rvsdg::LambdaNode &
1260 LambdaF() const noexcept
1261 {
1262 return *LambdaF_;
1263 }
1264
1265 [[nodiscard]] const jlm::rvsdg::LambdaNode &
1266 LambdaTest() const noexcept
1267 {
1268 return *LambdaTest_;
1269 }
1270
1271 [[nodiscard]] const jlm::rvsdg::DeltaNode &
1272 DeltaG1() const noexcept
1273 {
1274 return *DeltaG1_;
1275 }
1276
1277 [[nodiscard]] const jlm::rvsdg::DeltaNode &
1278 DeltaG2() const noexcept
1279 {
1280 return *DeltaG2_;
1281 }
1282
1283 [[nodiscard]] const rvsdg::SimpleNode &
1284 CallF() const noexcept
1285 {
1286 return *CallF_;
1287 }
1288
1289private:
1290 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1291 SetupRvsdg() override;
1292
1295
1298
1300};
1301
1328class ImportTest final : public RvsdgTest
1329{
1330public:
1331 [[nodiscard]] const rvsdg::SimpleNode &
1332 CallF1() const noexcept
1333 {
1334 return *CallF1_;
1335 }
1336
1339
1342
1343private:
1344 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1345 SetupRvsdg() override;
1346
1348};
1349
1381class PhiTest1 final : public RvsdgTest
1382{
1383public:
1384 [[nodiscard]] const rvsdg::SimpleNode &
1385 CallFib() const noexcept
1386 {
1387 return *CallFib_;
1388 }
1389
1390 [[nodiscard]] const rvsdg::SimpleNode &
1391 CallFibm1() const noexcept
1392 {
1393 return *CallFibm1_;
1394 }
1395
1396 [[nodiscard]] const rvsdg::SimpleNode &
1397 CallFibm2() const noexcept
1398 {
1399 return *CallFibm2_;
1400 }
1401
1404
1406
1408
1410
1411private:
1412 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1413 SetupRvsdg() override;
1414
1417
1419};
1420
1492class PhiTest2 final : public RvsdgTest
1493{
1494public:
1495 [[nodiscard]] jlm::rvsdg::LambdaNode &
1496 GetLambdaEight() const noexcept
1497 {
1498 return *LambdaEight_;
1499 }
1500
1501 [[nodiscard]] jlm::rvsdg::LambdaNode &
1502 GetLambdaI() const noexcept
1503 {
1504 return *LambdaI_;
1505 }
1506
1507 [[nodiscard]] jlm::rvsdg::LambdaNode &
1508 GetLambdaA() const noexcept
1509 {
1510 return *LambdaA_;
1511 }
1512
1513 [[nodiscard]] jlm::rvsdg::LambdaNode &
1514 GetLambdaB() const noexcept
1515 {
1516 return *LambdaB_;
1517 }
1518
1519 [[nodiscard]] jlm::rvsdg::LambdaNode &
1520 GetLambdaC() const noexcept
1521 {
1522 return *LambdaC_;
1523 }
1524
1525 [[nodiscard]] jlm::rvsdg::LambdaNode &
1526 GetLambdaD() const noexcept
1527 {
1528 return *LambdaD_;
1529 }
1530
1531 [[nodiscard]] jlm::rvsdg::LambdaNode &
1532 GetLambdaTest() const noexcept
1533 {
1534 return *LambdaTest_;
1535 }
1536
1537 [[nodiscard]] rvsdg::SimpleNode &
1538 GetCallAFromTest() const noexcept
1539 {
1540 return *CallAFromTest_;
1541 }
1542
1543 [[nodiscard]] rvsdg::SimpleNode &
1544 GetCallAFromC() const noexcept
1545 {
1546 return *CallAFromC_;
1547 }
1548
1549 [[nodiscard]] rvsdg::SimpleNode &
1550 GetCallAFromD() const noexcept
1551 {
1552 return *CallAFromD_;
1553 }
1554
1555 [[nodiscard]] rvsdg::SimpleNode &
1556 GetCallB() const noexcept
1557 {
1558 return *CallB_;
1559 }
1560
1561 [[nodiscard]] rvsdg::SimpleNode &
1562 GetCallC() const noexcept
1563 {
1564 return *CallC_;
1565 }
1566
1567 [[nodiscard]] rvsdg::SimpleNode &
1568 GetCallD() const noexcept
1569 {
1570 return *CallD_;
1571 }
1572
1573 [[nodiscard]] rvsdg::SimpleNode &
1574 GetCallI() const noexcept
1575 {
1576 return *CallI_;
1577 }
1578
1579 [[nodiscard]] rvsdg::SimpleNode &
1580 GetIndirectCall() const noexcept
1581 {
1582 return *IndirectCall_;
1583 }
1584
1585 [[nodiscard]] jlm::rvsdg::SimpleNode &
1586 GetPTestAlloca() const noexcept
1587 {
1588 return *PTestAlloca_;
1589 }
1590
1591 [[nodiscard]] jlm::rvsdg::SimpleNode &
1592 GetPaAlloca() const noexcept
1593 {
1594 return *PaAlloca_;
1595 }
1596
1597 [[nodiscard]] jlm::rvsdg::SimpleNode &
1598 GetPbAlloca() const noexcept
1599 {
1600 return *PbAlloca_;
1601 }
1602
1603 [[nodiscard]] jlm::rvsdg::SimpleNode &
1604 GetPcAlloca() const noexcept
1605 {
1606 return *PcAlloca_;
1607 }
1608
1609 [[nodiscard]] jlm::rvsdg::SimpleNode &
1610 GetPdAlloca() const noexcept
1611 {
1612 return *PdAlloca_;
1613 }
1614
1615private:
1616 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1617 SetupRvsdg() override;
1618
1626
1635
1641};
1642
1659class PhiWithDeltaTest final : public RvsdgTest
1660{
1661 [[nodiscard]] const jlm::rvsdg::DeltaNode &
1662 GetDelta() const noexcept
1663 {
1664 JLM_ASSERT(Delta_ != nullptr);
1665 return *Delta_;
1666 }
1667
1668private:
1669 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1670 SetupRvsdg() override;
1671
1673};
1674
1691class ExternalMemoryTest final : public RvsdgTest
1692{
1693private:
1694 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1695 SetupRvsdg() override;
1696
1697public:
1699};
1700
1723class EscapedMemoryTest1 final : public RvsdgTest
1724{
1725private:
1726 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1727 SetupRvsdg() override;
1728
1729public:
1731
1736
1738};
1739
1794
1812class EscapedMemoryTest3 final : public RvsdgTest
1813{
1814private:
1815 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1816 SetupRvsdg() override;
1817
1818public:
1820
1822
1824
1826
1828};
1829
1857class MemcpyTest final : public RvsdgTest
1858{
1859public:
1860 [[nodiscard]] const jlm::rvsdg::LambdaNode &
1861 LambdaF() const noexcept
1862 {
1863 return *LambdaF_;
1864 }
1865
1866 [[nodiscard]] const jlm::rvsdg::LambdaNode &
1867 LambdaG() const noexcept
1868 {
1869 return *LambdaG_;
1870 }
1871
1872 [[nodiscard]] const jlm::rvsdg::DeltaNode &
1873 InitArray() const noexcept
1874 {
1875 return *InitArray_;
1876 }
1877
1878 [[nodiscard]] const jlm::rvsdg::DeltaNode &
1879 GlobalArray() const noexcept
1880 {
1881 return *GlobalArray_;
1882 }
1883
1884 [[nodiscard]] const rvsdg::SimpleNode &
1885 CallF() const noexcept
1886 {
1887 return *CallF_;
1888 }
1889
1890 [[nodiscard]] const rvsdg::SimpleNode &
1891 Memcpy() const noexcept
1892 {
1893 return *Memcpy_;
1894 }
1895
1896private:
1897 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1898 SetupRvsdg() override;
1899
1902
1905
1907
1909};
1910
1941class MemcpyTest2 final : public RvsdgTest
1942{
1943public:
1944 [[nodiscard]] const jlm::rvsdg::LambdaNode &
1945 LambdaF() const noexcept
1946 {
1947 JLM_ASSERT(LambdaF_ != nullptr);
1948 return *LambdaF_;
1949 }
1950
1951 [[nodiscard]] const jlm::rvsdg::LambdaNode &
1952 LambdaG() const noexcept
1953 {
1954 JLM_ASSERT(LambdaG_ != nullptr);
1955 return *LambdaG_;
1956 }
1957
1958 [[nodiscard]] const rvsdg::SimpleNode &
1959 CallG() const noexcept
1960 {
1961 JLM_ASSERT(CallG_ != nullptr);
1962 return *CallG_;
1963 }
1964
1965 [[nodiscard]] const rvsdg::Node &
1966 Memcpy() const noexcept
1967 {
1968 JLM_ASSERT(Memcpy_ != nullptr);
1969 return *Memcpy_;
1970 }
1971
1972private:
1973 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1974 SetupRvsdg() override;
1975
1978
1980
1982};
1983
2003class MemcpyTest3 final : public RvsdgTest
2004{
2005public:
2006 [[nodiscard]] const jlm::rvsdg::LambdaNode &
2007 Lambda() const noexcept
2008 {
2009 JLM_ASSERT(Lambda_ != nullptr);
2010 return *Lambda_;
2011 }
2012
2013 [[nodiscard]] const rvsdg::Node &
2014 Alloca() const noexcept
2015 {
2016 JLM_ASSERT(Alloca_ != nullptr);
2017 return *Alloca_;
2018 }
2019
2020 [[nodiscard]] const rvsdg::Node &
2021 Memcpy() const noexcept
2022 {
2023 JLM_ASSERT(Memcpy_ != nullptr);
2024 return *Memcpy_;
2025 }
2026
2027private:
2028 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2029 SetupRvsdg() override;
2030
2032
2034
2036};
2037
2059class LinkedListTest final : public RvsdgTest
2060{
2061public:
2062 [[nodiscard]] const rvsdg::SimpleNode &
2063 GetAlloca() const noexcept
2064 {
2065 return *Alloca_;
2066 }
2067
2068 [[nodiscard]] const jlm::rvsdg::LambdaNode &
2069 GetLambdaNext() const noexcept
2070 {
2071 return *LambdaNext_;
2072 }
2073
2074 [[nodiscard]] const jlm::rvsdg::DeltaNode &
2075 GetDeltaMyList() const noexcept
2076 {
2077 return *DeltaMyList_;
2078 }
2079
2080private:
2081 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2082 SetupRvsdg() override;
2083
2085
2087
2089};
2090
2110class AllMemoryNodesTest final : public RvsdgTest
2111{
2112public:
2113 [[nodiscard]] const jlm::rvsdg::DeltaNode &
2114 GetDeltaNode() const noexcept
2115 {
2117 return *Delta_;
2118 }
2119
2120 [[nodiscard]] const rvsdg::Output &
2121 GetDeltaOutput() const noexcept
2122 {
2124 return Delta_->output();
2125 }
2126
2127 [[nodiscard]] const llvm::LlvmGraphImport &
2128 GetImportOutput() const noexcept
2129 {
2131 return *Import_;
2132 }
2133
2134 [[nodiscard]] const jlm::rvsdg::LambdaNode &
2135 GetLambdaNode() const noexcept
2136 {
2138 return *Lambda_;
2139 }
2140
2141 [[nodiscard]] const rvsdg::Output &
2142 GetLambdaOutput() const noexcept
2143 {
2145 return *Lambda_->output();
2146 }
2147
2148 [[nodiscard]] const rvsdg::SimpleNode &
2149 GetAllocaNode() const noexcept
2150 {
2152 return *Alloca_;
2153 }
2154
2155 [[nodiscard]] const jlm::rvsdg::Output &
2156 GetAllocaOutput() const noexcept
2157 {
2159 return *Alloca_->output(0);
2160 }
2161
2162 [[nodiscard]] const rvsdg::SimpleNode &
2163 GetMallocNode() const noexcept
2164 {
2166 return *Malloc_;
2167 }
2168
2169 [[nodiscard]] const jlm::rvsdg::Output &
2170 GetMallocOutput() const noexcept
2171 {
2173 return *Malloc_->output(0);
2174 }
2175
2176private:
2177 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2178 SetupRvsdg() override;
2179
2181
2183
2185
2187
2189};
2190
2207class NAllocaNodesTest final : public RvsdgTest
2208{
2209public:
2210 explicit NAllocaNodesTest(size_t numAllocaNodes)
2211 : NumAllocaNodes_(numAllocaNodes)
2212 {}
2213
2214 [[nodiscard]] size_t
2215 GetNumAllocaNodes() const noexcept
2216 {
2217 return NumAllocaNodes_;
2218 }
2219
2220 [[nodiscard]] const rvsdg::SimpleNode &
2221 GetAllocaNode(size_t index) const noexcept
2222 {
2223 JLM_ASSERT(index < AllocaNodes_.size());
2224 return *AllocaNodes_[index];
2225 }
2226
2227 [[nodiscard]] const jlm::rvsdg::Output &
2228 GetAllocaOutput(size_t index) const noexcept
2229 {
2230 JLM_ASSERT(index < AllocaNodes_.size());
2231 return *AllocaNodes_[index]->output(0);
2232 }
2233
2234 [[nodiscard]] const jlm::rvsdg::LambdaNode &
2235 GetFunction() const noexcept
2236 {
2238 return *Function_;
2239 }
2240
2241private:
2242 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2243 SetupRvsdg() override;
2244
2246
2247 std::vector<const rvsdg::SimpleNode *> AllocaNodes_ = {};
2248
2250};
2251
2275{
2276public:
2277 [[nodiscard]] const jlm::rvsdg::DeltaNode &
2278 GetGlobal() const noexcept
2279 {
2281 return *Global_;
2282 }
2283
2284 [[nodiscard]] const jlm::rvsdg::LambdaNode &
2285 GetLocalFunction() const noexcept
2286 {
2288 return *LocalFunc_;
2289 }
2290
2291 [[nodiscard]] const jlm::rvsdg::Output &
2293 {
2295 return *LocalFuncRegister_;
2296 }
2297
2298 [[nodiscard]] const jlm::rvsdg::Output &
2299 GetLocalFunctionParam() const noexcept
2300 {
2302 return *LocalFuncParam_;
2303 }
2304
2305 [[nodiscard]] const rvsdg::Node &
2311
2312 [[nodiscard]] const jlm::rvsdg::LambdaNode &
2313 GetExportedFunction() const noexcept
2314 {
2316 return *ExportedFunc_;
2317 }
2318
2319private:
2320 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2321 SetupRvsdg() override;
2322
2329};
2330
2354{
2355public:
2356 [[nodiscard]] const rvsdg::LambdaNode &
2357 GetLambdaMain() const noexcept
2358 {
2359 return *LambdaMain_;
2360 }
2361
2362 [[nodiscard]] const rvsdg::LambdaNode &
2363 GetLambdaG() const noexcept
2364 {
2365 return *LambdaG_;
2366 }
2367
2368 [[nodiscard]] const rvsdg::SimpleNode &
2369 GetCall() const noexcept
2370 {
2371 return *Call_;
2372 }
2373
2374private:
2375 std::unique_ptr<llvm::LlvmRvsdgModule>
2376 SetupRvsdg() override;
2377
2381};
2382
2398class FreeNullTest final : public RvsdgTest
2399{
2400public:
2401 [[nodiscard]] rvsdg::LambdaNode &
2402 LambdaMain() const noexcept
2403 {
2404 return *LambdaMain_;
2405 }
2406
2407private:
2408 std::unique_ptr<llvm::LlvmRvsdgModule>
2409 SetupRvsdg() override;
2410
2412};
2413
2441{
2442public:
2443 [[nodiscard]] rvsdg::LambdaNode &
2444 GetLambdaF() const noexcept
2445 {
2446 JLM_ASSERT(LambdaF_ != nullptr);
2447 return *LambdaF_;
2448 }
2449
2450 [[nodiscard]] rvsdg::LambdaNode &
2451 GetLambdaG() const noexcept
2452 {
2453 JLM_ASSERT(LambdaG_ != nullptr);
2454 return *LambdaG_;
2455 }
2456
2457 [[nodiscard]] rvsdg::RegionArgument &
2458 GetImportH() const noexcept
2459 {
2460 JLM_ASSERT(ImportH_ != nullptr);
2461 return *ImportH_;
2462 }
2463
2464 [[nodiscard]] rvsdg::SimpleNode &
2465 GetCallH() const noexcept
2466 {
2467 JLM_ASSERT(CallH_ != nullptr);
2468 return *CallH_;
2469 }
2470
2471 [[nodiscard]] rvsdg::Node &
2472 GetAllocaNode() const noexcept
2473 {
2474 JLM_ASSERT(AllocaNode_ != nullptr);
2475 return *AllocaNode_;
2476 }
2477
2478private:
2479 std::unique_ptr<llvm::LlvmRvsdgModule>
2480 SetupRvsdg() override;
2481
2484
2486
2488
2490};
2491
2523{
2524public:
2525 [[nodiscard]] const jlm::rvsdg::LambdaNode &
2526 GetLambdaFst() const noexcept
2527 {
2528 JLM_ASSERT(LambdaFst_ != nullptr);
2529 return *LambdaFst_;
2530 }
2531
2532 [[nodiscard]] const jlm::rvsdg::LambdaNode &
2533 GetLambdaG() const noexcept
2534 {
2535 JLM_ASSERT(LambdaG_ != nullptr);
2536 return *LambdaG_;
2537 }
2538
2539 [[nodiscard]] rvsdg::Node &
2540 GetAllocaNode() const noexcept
2541 {
2542 JLM_ASSERT(AllocaNode_ != nullptr);
2543 return *AllocaNode_;
2544 }
2545
2546private:
2547 std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2548 SetupRvsdg() override;
2549
2552
2554};
2555
2556}
2557
2558#endif
RVSDG module with one of each memory node type.
jlm::llvm::LlvmGraphImport * Import_
const rvsdg::SimpleNode & GetMallocNode() const noexcept
rvsdg::SimpleNode * Alloca_
const jlm::rvsdg::Output & GetMallocOutput() const noexcept
const jlm::rvsdg::DeltaNode & GetDeltaNode() const noexcept
const rvsdg::SimpleNode & GetAllocaNode() const noexcept
const rvsdg::Output & GetDeltaOutput() const noexcept
const jlm::rvsdg::Output & GetAllocaOutput() const noexcept
const llvm::LlvmGraphImport & GetImportOutput() const noexcept
jlm::rvsdg::LambdaNode * Lambda_
rvsdg::SimpleNode * Malloc_
const jlm::rvsdg::LambdaNode & GetLambdaNode() const noexcept
const rvsdg::Output & GetLambdaOutput() const noexcept
jlm::rvsdg::DeltaNode * Delta_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
BitCastTest class.
jlm::rvsdg::LambdaNode * lambda
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
Bits2PtrTest class.
const rvsdg::Node & GetBitsToPtrNode() const noexcept
const jlm::rvsdg::LambdaNode & GetLambdaTest() const noexcept
jlm::rvsdg::LambdaNode * LambdaTest_
rvsdg::SimpleNode * CallNode_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
const jlm::rvsdg::LambdaNode & GetLambdaBits2Ptr() const noexcept
rvsdg::Node * BitsToPtrNode_
jlm::rvsdg::LambdaNode * LambdaBits2Ptr_
const rvsdg::SimpleNode & GetCallNode() const noexcept
CallTest1 class.
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
const rvsdg::SimpleNode & CallG() const noexcept
jlm::rvsdg::LambdaNode * lambda_g
jlm::rvsdg::LambdaNode * lambda_f
rvsdg::SimpleNode * alloca_x
const rvsdg::SimpleNode & CallF() const noexcept
jlm::rvsdg::LambdaNode * lambda_h
CallTest2 class.
const rvsdg::SimpleNode & CallDestroy1() const noexcept
jlm::rvsdg::LambdaNode * lambda_test
const rvsdg::SimpleNode & CallCreate2() const noexcept
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 * free
const rvsdg::SimpleNode & CallDestroy2() const noexcept
const rvsdg::SimpleNode & CallCreate1() const noexcept
rvsdg::SimpleNode * malloc
rvsdg::SimpleNode * CallDestroy2_
ConstantPointerNullTest class.
jlm::rvsdg::LambdaNode * lambda
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
DeltaTest1 class.
jlm::rvsdg::DeltaNode * delta_f
jlm::rvsdg::LambdaNode * lambda_h
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
const rvsdg::SimpleNode & CallG() const noexcept
rvsdg::Node * constantFive
rvsdg::SimpleNode * CallG_
jlm::rvsdg::LambdaNode * lambda_g
DeltaTest2 class.
const rvsdg::SimpleNode & CallF1() const noexcept
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.
DeltaTest3 class.
const jlm::rvsdg::LambdaNode & LambdaTest() const noexcept
const jlm::rvsdg::DeltaNode & DeltaG2() const noexcept
jlm::rvsdg::DeltaNode * DeltaG2_
const jlm::rvsdg::DeltaNode & DeltaG1() const noexcept
const rvsdg::SimpleNode & CallF() const noexcept
jlm::rvsdg::LambdaNode * LambdaTest_
rvsdg::SimpleNode * CallF_
jlm::rvsdg::DeltaNode * DeltaG1_
jlm::rvsdg::LambdaNode * LambdaF_
const jlm::rvsdg::LambdaNode & LambdaF() const noexcept
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
EscapedMemoryTest1 class.
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.
EscapedMemoryTest2 class.
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
EscapedMemoryTest3 class.
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
RVSDG module with a static function escaping through another function.
jlm::rvsdg::LambdaNode * ExportedFunc_
const rvsdg::Node & GetLocalFunctionParamAllocaNode() const noexcept
const jlm::rvsdg::LambdaNode & GetExportedFunction() const noexcept
const jlm::rvsdg::Output & GetLocalFunctionRegister() const noexcept
const jlm::rvsdg::Output & GetLocalFunctionParam() const noexcept
const jlm::rvsdg::DeltaNode & GetGlobal() const noexcept
const jlm::rvsdg::LambdaNode & GetLocalFunction() const noexcept
jlm::rvsdg::Output * LocalFuncRegister_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * LocalFunc_
const rvsdg::SimpleNode & CallG() const noexcept
jlm::rvsdg::GraphImport * ExternalGArgument_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
const jlm::rvsdg::GraphImport & ExternalGArgument() const noexcept
const jlm::rvsdg::LambdaNode & LambdaF() const noexcept
jlm::rvsdg::LambdaNode * LambdaF_
rvsdg::SimpleNode * CallG_
rvsdg::SimpleNode & CallF()
jlm::rvsdg::LambdaNode * LambdaG_
jlm::rvsdg::LambdaNode & LambdaG()
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::RegionArgument & ExternalF()
jlm::rvsdg::RegionArgument * ExternalFArgument_
rvsdg::SimpleNode * CallF_
ExternalMemoryTest class.
jlm::rvsdg::LambdaNode * LambdaF
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
RVSDG module with a call to free(NULL).
rvsdg::LambdaNode & LambdaMain() const noexcept
std::unique_ptr< llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::LambdaNode * LambdaMain_
GammaTest2 class.
rvsdg::LambdaNode * LambdaH_
rvsdg::Node * AllocaYFromH_
rvsdg::Node & GetAllocaYFromH() const noexcept
rvsdg::LambdaNode * LambdaG_
rvsdg::GammaNode * Gamma_
rvsdg::Node & GetAllocaYFromG() const noexcept
rvsdg::LambdaNode & GetLambdaF() const noexcept
rvsdg::Node * AllocaXFromG_
rvsdg::Node & GetAllocaXFromH() const noexcept
rvsdg::LambdaNode & GetLambdaG() const noexcept
rvsdg::LambdaNode * LambdaF_
rvsdg::Node * AllocaXFromH_
rvsdg::SimpleNode & GetCallFromG() const noexcept
rvsdg::SimpleNode & GetCallFromH() const noexcept
rvsdg::GammaNode & GetGamma() const noexcept
rvsdg::SimpleNode * CallFromH_
std::unique_ptr< llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::Node * AllocaYFromG_
rvsdg::Node & GetAllocaXFromG() const noexcept
rvsdg::Node & GetAllocaZ() const noexcept
rvsdg::SimpleNode * CallFromG_
rvsdg::LambdaNode & GetLambdaH() const noexcept
GammaTest class.
rvsdg::GammaNode * gamma
jlm::rvsdg::LambdaNode * lambda
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
GetElementPtrTest class.
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * lambda
ImportTest class.
rvsdg::SimpleNode * CallF1_
const rvsdg::SimpleNode & CallF1() const noexcept
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.
IndirectCallTest1 class.
jlm::rvsdg::LambdaNode * LambdaIndcall_
rvsdg::SimpleNode * CallFour_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
const rvsdg::SimpleNode & CallThree() const noexcept
const jlm::rvsdg::LambdaNode & GetLambdaFour() const noexcept
jlm::rvsdg::LambdaNode * LambdaFour_
const jlm::rvsdg::LambdaNode & GetLambdaThree() const noexcept
const jlm::rvsdg::LambdaNode & GetLambdaTest() const noexcept
rvsdg::SimpleNode * CallIndcall_
const rvsdg::SimpleNode & CallIndcall() const noexcept
const jlm::rvsdg::LambdaNode & GetLambdaIndcall() const noexcept
jlm::rvsdg::LambdaNode * LambdaTest_
const rvsdg::SimpleNode & CallFour() const noexcept
jlm::rvsdg::LambdaNode * LambdaThree_
rvsdg::SimpleNode * CallThree_
IndirectCallTest2 class.
rvsdg::SimpleNode * CallIWithThree_
rvsdg::SimpleNode * IndirectCall_
jlm::rvsdg::SimpleNode * AllocaPx_
rvsdg::SimpleNode * CallIWithFour_
jlm::rvsdg::DeltaNode * DeltaG1_
jlm::rvsdg::SimpleNode * AllocaPy_
rvsdg::SimpleNode & GetCallIWithThree() const noexcept
jlm::rvsdg::LambdaNode * LambdaThree_
jlm::rvsdg::SimpleNode & GetAllocaPx() const noexcept
jlm::rvsdg::LambdaNode & GetLambdaY() const noexcept
rvsdg::SimpleNode * TestCallX_
rvsdg::SimpleNode * CallY_
rvsdg::SimpleNode * Test2CallX_
jlm::rvsdg::LambdaNode & GetLambdaTest2() const noexcept
rvsdg::SimpleNode & GetTestCallX() const noexcept
jlm::rvsdg::LambdaNode * LambdaY_
jlm::rvsdg::DeltaNode & GetDeltaG2() const noexcept
jlm::rvsdg::LambdaNode & GetLambdaTest() const noexcept
jlm::rvsdg::SimpleNode * AllocaPz_
jlm::rvsdg::LambdaNode & GetLambdaFour() const noexcept
jlm::rvsdg::LambdaNode * LambdaFour_
rvsdg::SimpleNode & GetIndirectCall() const noexcept
rvsdg::SimpleNode & GetTest2CallX() const noexcept
jlm::rvsdg::LambdaNode & GetLambdaThree() const noexcept
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::DeltaNode & GetDeltaG1() const noexcept
rvsdg::SimpleNode & GetCallIWithFour() const noexcept
jlm::rvsdg::SimpleNode & GetAllocaPz() const noexcept
rvsdg::SimpleNode & GetCallY() const noexcept
jlm::rvsdg::LambdaNode & GetLambdaX() const noexcept
jlm::rvsdg::LambdaNode * LambdaTest_
jlm::rvsdg::LambdaNode * LambdaTest2_
jlm::rvsdg::LambdaNode * LambdaX_
jlm::rvsdg::LambdaNode & GetLambdaI() const noexcept
jlm::rvsdg::LambdaNode * LambdaI_
jlm::rvsdg::SimpleNode & GetAllocaPy() const noexcept
jlm::rvsdg::DeltaNode * DeltaG2_
RVSDG module containing a static function that is called with the wrong number of arguments.
const rvsdg::SimpleNode & GetCall() const noexcept
const rvsdg::LambdaNode & GetLambdaMain() const noexcept
std::unique_ptr< llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
const rvsdg::LambdaNode & GetLambdaG() const noexcept
LinkedListTest class.
const jlm::rvsdg::DeltaNode & GetDeltaMyList() const noexcept
const rvsdg::SimpleNode & GetAlloca() const noexcept
jlm::rvsdg::LambdaNode * LambdaNext_
const jlm::rvsdg::LambdaNode & GetLambdaNext() const noexcept
rvsdg::SimpleNode * Alloca_
jlm::rvsdg::DeltaNode * DeltaMyList_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
LoadFromUndefTest class.
const jlm::rvsdg::LambdaNode & Lambda() const noexcept
const rvsdg::Node * UndefValueNode() const noexcept
jlm::rvsdg::LambdaNode * Lambda_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
LoadTest1 class.
jlm::rvsdg::LambdaNode * lambda
rvsdg::Node * load_p
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::Node * load_x
LoadTest2 class.
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
rvsdg::SimpleNode * CallG_
const jlm::rvsdg::LambdaNode & LambdaF() const noexcept
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * LambdaG_
const rvsdg::Node & Memcpy() const noexcept
const jlm::rvsdg::LambdaNode & LambdaG() const noexcept
jlm::rvsdg::LambdaNode * LambdaF_
const rvsdg::SimpleNode & CallG() const noexcept
const jlm::rvsdg::LambdaNode & Lambda() const noexcept
const rvsdg::Node & Memcpy() const noexcept
jlm::rvsdg::LambdaNode * Lambda_
const rvsdg::Node & Alloca() const noexcept
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
MemcpyTest class.
const jlm::rvsdg::DeltaNode & GlobalArray() const noexcept
jlm::rvsdg::DeltaNode * GlobalArray_
const jlm::rvsdg::LambdaNode & LambdaG() const noexcept
jlm::rvsdg::LambdaNode * LambdaG_
const rvsdg::SimpleNode & Memcpy() const noexcept
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::DeltaNode * InitArray_
rvsdg::SimpleNode * Memcpy_
rvsdg::SimpleNode * CallF_
const jlm::rvsdg::DeltaNode & InitArray() const noexcept
const jlm::rvsdg::LambdaNode & LambdaF() const noexcept
jlm::rvsdg::LambdaNode * LambdaF_
const rvsdg::SimpleNode & CallF() const noexcept
RVSDG module with an arbitrary amount of alloca nodes.
std::vector< const rvsdg::SimpleNode * > AllocaNodes_
const rvsdg::SimpleNode & GetAllocaNode(size_t index) const noexcept
const jlm::rvsdg::Output & GetAllocaOutput(size_t index) const noexcept
size_t GetNumAllocaNodes() const noexcept
NAllocaNodesTest(size_t numAllocaNodes)
const jlm::rvsdg::LambdaNode & GetFunction() const noexcept
jlm::rvsdg::LambdaNode * Function_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
PhiTest1 class.
rvsdg::GammaNode * gamma
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.
const rvsdg::SimpleNode & CallFib() const noexcept
const rvsdg::SimpleNode & CallFibm2() const noexcept
const rvsdg::SimpleNode & CallFibm1() const noexcept
PhiTest2 class.
jlm::rvsdg::SimpleNode & GetPaAlloca() const noexcept
jlm::rvsdg::SimpleNode * PTestAlloca_
rvsdg::SimpleNode & GetIndirectCall() const noexcept
rvsdg::SimpleNode & GetCallAFromC() const noexcept
jlm::rvsdg::SimpleNode * PaAlloca_
jlm::rvsdg::LambdaNode * LambdaEight_
jlm::rvsdg::SimpleNode * PbAlloca_
jlm::rvsdg::LambdaNode & GetLambdaC() const noexcept
jlm::rvsdg::LambdaNode & GetLambdaI() const noexcept
jlm::rvsdg::LambdaNode * LambdaC_
rvsdg::SimpleNode * CallAFromD_
rvsdg::SimpleNode & GetCallC() const noexcept
jlm::rvsdg::SimpleNode & GetPbAlloca() const noexcept
jlm::rvsdg::LambdaNode & GetLambdaD() const noexcept
rvsdg::SimpleNode * CallAFromTest_
jlm::rvsdg::SimpleNode & GetPcAlloca() const noexcept
jlm::rvsdg::LambdaNode & GetLambdaTest() const noexcept
rvsdg::SimpleNode * CallD_
rvsdg::SimpleNode & GetCallAFromTest() const noexcept
jlm::rvsdg::LambdaNode & GetLambdaB() const noexcept
rvsdg::SimpleNode * IndirectCall_
jlm::rvsdg::LambdaNode * LambdaI_
rvsdg::SimpleNode * CallI_
rvsdg::SimpleNode * CallAFromC_
rvsdg::SimpleNode * CallB_
jlm::rvsdg::LambdaNode & GetLambdaA() const noexcept
jlm::rvsdg::LambdaNode * LambdaTest_
jlm::rvsdg::LambdaNode * LambdaB_
rvsdg::SimpleNode * CallC_
rvsdg::SimpleNode & GetCallD() const noexcept
jlm::rvsdg::LambdaNode & GetLambdaEight() const noexcept
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::SimpleNode & GetCallAFromD() const noexcept
jlm::rvsdg::SimpleNode * PcAlloca_
jlm::rvsdg::SimpleNode & GetPdAlloca() const noexcept
rvsdg::SimpleNode & GetCallI() const noexcept
jlm::rvsdg::SimpleNode * PdAlloca_
jlm::rvsdg::LambdaNode * LambdaD_
rvsdg::SimpleNode & GetCallB() const noexcept
jlm::rvsdg::LambdaNode * LambdaA_
jlm::rvsdg::SimpleNode & GetPTestAlloca() const noexcept
jlm::rvsdg::DeltaNode * Delta_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
const jlm::rvsdg::DeltaNode & GetDelta() const noexcept
RvsdgTest class.
const rvsdg::Graph & graph()
jlm::llvm::LlvmRvsdgModule & module()
virtual ~RvsdgTest()=default
virtual std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg()=0
Create RVSDG for this test.
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > module_
StoreTest1 class.
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.
rvsdg::SimpleNode * size
jlm::rvsdg::LambdaNode * lambda
rvsdg::SimpleNode * alloca_b
StoreTest2 class.
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 * size
rvsdg::SimpleNode * alloca_a
ThetaTest class.
jlm::rvsdg::LambdaNode * lambda
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::ThetaNode * theta
rvsdg::LambdaNode & GetLambdaF() const noexcept
std::unique_ptr< llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::LambdaNode & GetLambdaG() const noexcept
rvsdg::Node & GetAllocaNode() const noexcept
rvsdg::SimpleNode & GetCallH() const noexcept
rvsdg::RegionArgument * ImportH_
rvsdg::RegionArgument & GetImportH() const noexcept
jlm::rvsdg::LambdaNode * LambdaFst_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
const jlm::rvsdg::LambdaNode & GetLambdaG() const noexcept
rvsdg::Node & GetAllocaNode() const noexcept
jlm::rvsdg::LambdaNode * LambdaG_
const jlm::rvsdg::LambdaNode & GetLambdaFst() const noexcept
rvsdg::Output & output() const noexcept
Definition delta.cpp:110
Conditional operator / pattern matching.
Definition gamma.hpp:99
rvsdg::Output * output() const noexcept
Definition lambda.cpp:177
A phi node represents the fixpoint of mutually recursive definitions.
Definition Phi.hpp:46
Represents the argument of a region.
Definition region.hpp:41
Graph & Rvsdg() noexcept
NodeOutput * output(size_t index) const noexcept
#define JLM_ASSERT(x)
Definition common.hpp:16
Global memory state passed between functions.