Jlm
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 
13 namespace jlm::rvsdg
14 {
15 class Graph;
16 class GammaNode;
17 class LambdaNode;
18 class PhiNode;
19 class ThetaNode;
20 }
21 
22 namespace jlm::llvm
23 {
24 
28 class RvsdgTest
29 {
30 public:
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)
54  module_ = SetupRvsdg();
55  }
56 
57 private:
61  virtual std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
62  SetupRvsdg() = 0;
63 
64  std::unique_ptr<jlm::llvm::LlvmRvsdgModule> module_;
65 };
66 
88 class StoreTest1 final : public RvsdgTest
89 {
90 private:
91  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
92  SetupRvsdg() override;
93 
94 public:
96 
98 
103 };
104 
126 class StoreTest2 final : public RvsdgTest
127 {
128 private:
129  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
130  SetupRvsdg() override;
131 
132 public:
134 
136 
142 };
143 
160 class LoadTest1 final : public RvsdgTest
161 {
162 private:
163  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
164  SetupRvsdg() override;
165 
166 public:
168 
171 };
172 
199 class LoadTest2 final : public RvsdgTest
200 {
201 private:
202  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
203  SetupRvsdg() override;
204 
205 public:
207 
209 
215 
218 };
219 
235 class LoadFromUndefTest final : public RvsdgTest
236 {
237 private:
238  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
239  SetupRvsdg() override;
240 
241 public:
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 
254 private:
257 };
258 
278 class GetElementPtrTest final : public RvsdgTest
279 {
280 private:
281  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
282  SetupRvsdg() override;
283 
284 public:
286 
289 };
290 
302 class BitCastTest final : public RvsdgTest
303 {
304 private:
305  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
306  SetupRvsdg() override;
307 
308 public:
310 
312 };
313 
334 class Bits2PtrTest final : public RvsdgTest
335 {
336 public:
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 
361 private:
362  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
363  SetupRvsdg() override;
364 
367 
369 
371 };
372 
384 class ConstantPointerNullTest final : public RvsdgTest
385 {
386 private:
387  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
388  SetupRvsdg() override;
389 
390 public:
392 
394 };
395 
424 class CallTest1 final : public RvsdgTest
425 {
426 private:
427  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
428  SetupRvsdg() override;
429 
430 public:
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 
451 private:
454 };
455 
487 class CallTest2 final : public RvsdgTest
488 {
489 public:
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 
521 private:
522  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
523  SetupRvsdg() override;
524 
527 
530 };
531 
565 class IndirectCallTest1 final : public RvsdgTest
566 {
567 public:
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 
610 private:
611  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
612  SetupRvsdg() override;
613 
617 
622 };
623 
686 class IndirectCallTest2 final : public RvsdgTest
687 {
688 public:
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 
797 private:
798  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
799  SetupRvsdg() override;
800 
803 
811 
818 
822 };
823 
841 class ExternalCallTest1 final : public RvsdgTest
842 {
843 public:
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 
862 private:
863  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
864  SetupRvsdg() override;
865 
867 
869 
871 };
872 
903 class ExternalCallTest2 final : public RvsdgTest
904 {
905 public:
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 
927 private:
928  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
929  SetupRvsdg() override;
930 
932 
934 
936 };
937 
960 class GammaTest final : public RvsdgTest
961 {
962 private:
963  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
964  SetupRvsdg() override;
965 
966 public:
968 
970 };
971 
1018 class GammaTest2 final : public RvsdgTest
1019 {
1020 public:
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 
1087 private:
1088  std::unique_ptr<llvm::LlvmRvsdgModule>
1089  SetupRvsdg() override;
1090 
1094 
1096 
1099 
1105 };
1106 
1124 class ThetaTest final : public RvsdgTest
1125 {
1126 private:
1127  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1128  SetupRvsdg() override;
1129 
1130 public:
1134 };
1135 
1160 class DeltaTest1 final : public RvsdgTest
1161 {
1162 public:
1163  [[nodiscard]] const rvsdg::SimpleNode &
1164  CallG() const noexcept
1165  {
1166  return *CallG_;
1167  }
1168 
1171 
1173 
1175 
1176 private:
1177  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1178  SetupRvsdg() override;
1179 
1181 };
1182 
1209 class DeltaTest2 final : public RvsdgTest
1210 {
1211 public:
1212  [[nodiscard]] const rvsdg::SimpleNode &
1213  CallF1() const noexcept
1214  {
1215  return *CallF1_;
1216  }
1217 
1220 
1223 
1224 private:
1225  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1226  SetupRvsdg() override;
1227 
1229 };
1230 
1256 class DeltaTest3 final : public RvsdgTest
1257 {
1258 public:
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 
1289 private:
1290  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1291  SetupRvsdg() override;
1292 
1295 
1298 
1300 };
1301 
1328 class ImportTest final : public RvsdgTest
1329 {
1330 public:
1331  [[nodiscard]] const rvsdg::SimpleNode &
1332  CallF1() const noexcept
1333  {
1334  return *CallF1_;
1335  }
1336 
1339 
1342 
1343 private:
1344  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1345  SetupRvsdg() override;
1346 
1348 };
1349 
1381 class PhiTest1 final : public RvsdgTest
1382 {
1383 public:
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 
1411 private:
1412  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1413  SetupRvsdg() override;
1414 
1417 
1419 };
1420 
1492 class PhiTest2 final : public RvsdgTest
1493 {
1494 public:
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 
1615 private:
1616  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1617  SetupRvsdg() override;
1618 
1626 
1635 
1641 };
1642 
1659 class 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 
1668 private:
1669  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1670  SetupRvsdg() override;
1671 
1673 };
1674 
1691 class ExternalMemoryTest final : public RvsdgTest
1692 {
1693 private:
1694  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1695  SetupRvsdg() override;
1696 
1697 public:
1699 };
1700 
1723 class EscapedMemoryTest1 final : public RvsdgTest
1724 {
1725 private:
1726  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1727  SetupRvsdg() override;
1728 
1729 public:
1731 
1736 
1738 };
1739 
1772 class EscapedMemoryTest2 final : public RvsdgTest
1773 {
1774 private:
1775  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1776  SetupRvsdg() override;
1777 
1778 public:
1782 
1785 
1788 
1791 
1793 };
1794 
1812 class EscapedMemoryTest3 final : public RvsdgTest
1813 {
1814 private:
1815  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1816  SetupRvsdg() override;
1817 
1818 public:
1820 
1822 
1824 
1826 
1828 };
1829 
1857 class MemcpyTest final : public RvsdgTest
1858 {
1859 public:
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  LocalArray() const noexcept
1874  {
1875  return *LocalArray_;
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 
1896 private:
1897  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1898  SetupRvsdg() override;
1899 
1902 
1905 
1907 
1909 };
1910 
1941 class MemcpyTest2 final : public RvsdgTest
1942 {
1943 public:
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 
1972 private:
1973  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
1974  SetupRvsdg() override;
1975 
1978 
1980 
1982 };
1983 
2003 class MemcpyTest3 final : public RvsdgTest
2004 {
2005 public:
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 
2027 private:
2028  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2029  SetupRvsdg() override;
2030 
2032 
2034 
2036 };
2037 
2059 class LinkedListTest final : public RvsdgTest
2060 {
2061 public:
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 
2080 private:
2081  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2082  SetupRvsdg() override;
2083 
2085 
2087 
2089 };
2090 
2110 class AllMemoryNodesTest final : public RvsdgTest
2111 {
2112 public:
2113  [[nodiscard]] const jlm::rvsdg::DeltaNode &
2114  GetDeltaNode() const noexcept
2115  {
2116  JLM_ASSERT(Delta_);
2117  return *Delta_;
2118  }
2119 
2120  [[nodiscard]] const rvsdg::Output &
2121  GetDeltaOutput() const noexcept
2122  {
2123  JLM_ASSERT(Delta_);
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 
2176 private:
2177  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2178  SetupRvsdg() override;
2179 
2181 
2183 
2185 
2187 
2189 };
2190 
2207 class NAllocaNodesTest final : public RvsdgTest
2208 {
2209 public:
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 
2241 private:
2242  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2243  SetupRvsdg() override;
2244 
2246 
2247  std::vector<const rvsdg::SimpleNode *> AllocaNodes_ = {};
2248 
2250 };
2251 
2275 {
2276 public:
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 &
2292  GetLocalFunctionRegister() const noexcept
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 &
2307  {
2309  return *LocalFuncParamAllocaNode_;
2310  }
2311 
2312  [[nodiscard]] const jlm::rvsdg::LambdaNode &
2313  GetExportedFunction() const noexcept
2314  {
2316  return *ExportedFunc_;
2317  }
2318 
2319 private:
2320  std::unique_ptr<jlm::llvm::LlvmRvsdgModule>
2321  SetupRvsdg() override;
2322 
2329 };
2330 
2354 {
2355 public:
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 
2374 private:
2375  std::unique_ptr<llvm::LlvmRvsdgModule>
2376  SetupRvsdg() override;
2377 
2381 };
2382 
2398 class FreeNullTest final : public RvsdgTest
2399 {
2400 public:
2401  [[nodiscard]] rvsdg::LambdaNode &
2402  LambdaMain() const noexcept
2403  {
2404  return *LambdaMain_;
2405  }
2406 
2407 private:
2408  std::unique_ptr<llvm::LlvmRvsdgModule>
2409  SetupRvsdg() override;
2410 
2412 };
2413 
2440 class VariadicFunctionTest1 final : public RvsdgTest
2441 {
2442 public:
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 
2478 private:
2479  std::unique_ptr<llvm::LlvmRvsdgModule>
2480  SetupRvsdg() override;
2481 
2484 
2486 
2488 
2490 };
2491 
2522 class VariadicFunctionTest2 final : public RvsdgTest
2523 {
2524 public:
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 
2546 private:
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 & GetAllocaNode() const noexcept
const rvsdg::Output & GetLambdaOutput() const noexcept
rvsdg::SimpleNode * Alloca_
const jlm::rvsdg::LambdaNode & GetLambdaNode() const noexcept
const jlm::rvsdg::Output & GetAllocaOutput() const noexcept
const rvsdg::Output & GetDeltaOutput() const noexcept
const llvm::LlvmGraphImport & GetImportOutput() const noexcept
jlm::rvsdg::LambdaNode * Lambda_
rvsdg::SimpleNode * Malloc_
const rvsdg::SimpleNode & GetMallocNode() const noexcept
const jlm::rvsdg::DeltaNode & GetDeltaNode() const noexcept
const jlm::rvsdg::Output & GetMallocOutput() const noexcept
jlm::rvsdg::DeltaNode * Delta_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
BitCastTest class.
Definition: TestRvsdgs.hpp:303
rvsdg::Node * bitCast
Definition: TestRvsdgs.hpp:311
jlm::rvsdg::LambdaNode * lambda
Definition: TestRvsdgs.hpp:309
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
Definition: TestRvsdgs.cpp:335
Bits2PtrTest class.
Definition: TestRvsdgs.hpp:335
const jlm::rvsdg::LambdaNode & GetLambdaBits2Ptr() const noexcept
Definition: TestRvsdgs.hpp:338
jlm::rvsdg::LambdaNode * LambdaTest_
Definition: TestRvsdgs.hpp:366
rvsdg::SimpleNode * CallNode_
Definition: TestRvsdgs.hpp:370
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
Definition: TestRvsdgs.cpp:364
rvsdg::Node * BitsToPtrNode_
Definition: TestRvsdgs.hpp:368
jlm::rvsdg::LambdaNode * LambdaBits2Ptr_
Definition: TestRvsdgs.hpp:365
const jlm::rvsdg::LambdaNode & GetLambdaTest() const noexcept
Definition: TestRvsdgs.hpp:344
const rvsdg::Node & GetBitsToPtrNode() const noexcept
Definition: TestRvsdgs.hpp:356
const rvsdg::SimpleNode & GetCallNode() const noexcept
Definition: TestRvsdgs.hpp:350
CallTest1 class.
Definition: TestRvsdgs.hpp:425
rvsdg::SimpleNode * CallF_
Definition: TestRvsdgs.hpp:452
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
Definition: TestRvsdgs.cpp:479
rvsdg::SimpleNode * CallG_
Definition: TestRvsdgs.hpp:453
rvsdg::SimpleNode * alloca_y
Definition: TestRvsdgs.hpp:448
const rvsdg::SimpleNode & CallG() const noexcept
Definition: TestRvsdgs.hpp:438
rvsdg::SimpleNode * alloca_z
Definition: TestRvsdgs.hpp:449
jlm::rvsdg::LambdaNode * lambda_g
Definition: TestRvsdgs.hpp:444
jlm::rvsdg::LambdaNode * lambda_f
Definition: TestRvsdgs.hpp:443
rvsdg::SimpleNode * alloca_x
Definition: TestRvsdgs.hpp:447
const rvsdg::SimpleNode & CallF() const noexcept
Definition: TestRvsdgs.hpp:432
jlm::rvsdg::LambdaNode * lambda_h
Definition: TestRvsdgs.hpp:445
CallTest2 class.
Definition: TestRvsdgs.hpp:488
jlm::rvsdg::LambdaNode * lambda_test
Definition: TestRvsdgs.hpp:516
const rvsdg::SimpleNode & CallCreate2() const noexcept
Definition: TestRvsdgs.hpp:497
rvsdg::SimpleNode * CallCreate1_
Definition: TestRvsdgs.hpp:525
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
Definition: TestRvsdgs.cpp:647
rvsdg::SimpleNode * CallDestroy1_
Definition: TestRvsdgs.hpp:528
rvsdg::SimpleNode * CallCreate2_
Definition: TestRvsdgs.hpp:526
jlm::rvsdg::LambdaNode * lambda_create
Definition: TestRvsdgs.hpp:514
const rvsdg::SimpleNode & CallDestroy2() const noexcept
Definition: TestRvsdgs.hpp:509
jlm::rvsdg::LambdaNode * lambda_destroy
Definition: TestRvsdgs.hpp:515
rvsdg::SimpleNode * free
Definition: TestRvsdgs.hpp:519
const rvsdg::SimpleNode & CallDestroy1() const noexcept
Definition: TestRvsdgs.hpp:503
const rvsdg::SimpleNode & CallCreate1() const noexcept
Definition: TestRvsdgs.hpp:491
rvsdg::SimpleNode * malloc
Definition: TestRvsdgs.hpp:518
rvsdg::SimpleNode * CallDestroy2_
Definition: TestRvsdgs.hpp:529
ConstantPointerNullTest class.
Definition: TestRvsdgs.hpp:385
jlm::rvsdg::LambdaNode * lambda
Definition: TestRvsdgs.hpp:391
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
Definition: TestRvsdgs.cpp:439
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.
rvsdg::Node * constantFive
rvsdg::SimpleNode * CallG_
jlm::rvsdg::LambdaNode * lambda_g
const rvsdg::SimpleNode & CallG() const noexcept
DeltaTest2 class.
jlm::rvsdg::LambdaNode * lambda_f2
jlm::rvsdg::LambdaNode * lambda_f1
rvsdg::SimpleNode * CallF1_
const rvsdg::SimpleNode & CallF1() const noexcept
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 rvsdg::SimpleNode & CallF() const noexcept
const jlm::rvsdg::DeltaNode & DeltaG2() const noexcept
jlm::rvsdg::DeltaNode * DeltaG2_
jlm::rvsdg::LambdaNode * LambdaTest_
rvsdg::SimpleNode * CallF_
const jlm::rvsdg::LambdaNode & LambdaTest() const noexcept
jlm::rvsdg::DeltaNode * DeltaG1_
jlm::rvsdg::LambdaNode * LambdaF_
const jlm::rvsdg::DeltaNode & DeltaG1() const noexcept
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
const jlm::rvsdg::LambdaNode & LambdaF() const noexcept
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::Output * LocalFuncParam_
jlm::rvsdg::LambdaNode * ExportedFunc_
const rvsdg::Node & GetLocalFunctionParamAllocaNode() const noexcept
const jlm::rvsdg::LambdaNode & GetExportedFunction() const noexcept
const jlm::rvsdg::Output & GetLocalFunctionParam() const noexcept
const jlm::rvsdg::DeltaNode & GetGlobal() const noexcept
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_
const jlm::rvsdg::LambdaNode & GetLocalFunction() const noexcept
const jlm::rvsdg::Output & GetLocalFunctionRegister() const noexcept
const jlm::rvsdg::GraphImport & ExternalGArgument() const noexcept
Definition: TestRvsdgs.hpp:857
jlm::rvsdg::GraphImport * ExternalGArgument_
Definition: TestRvsdgs.hpp:870
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * LambdaF_
Definition: TestRvsdgs.hpp:866
const jlm::rvsdg::LambdaNode & LambdaF() const noexcept
Definition: TestRvsdgs.hpp:845
rvsdg::SimpleNode * CallG_
Definition: TestRvsdgs.hpp:868
const rvsdg::SimpleNode & CallG() const noexcept
Definition: TestRvsdgs.hpp:851
jlm::rvsdg::LambdaNode & LambdaG()
Definition: TestRvsdgs.hpp:907
rvsdg::SimpleNode & CallF()
Definition: TestRvsdgs.hpp:914
jlm::rvsdg::RegionArgument & ExternalF()
Definition: TestRvsdgs.hpp:921
jlm::rvsdg::LambdaNode * LambdaG_
Definition: TestRvsdgs.hpp:931
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::RegionArgument * ExternalFArgument_
Definition: TestRvsdgs.hpp:935
rvsdg::SimpleNode * CallF_
Definition: TestRvsdgs.hpp:933
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::Node & GetAllocaYFromG() const noexcept
rvsdg::LambdaNode * LambdaH_
rvsdg::Node & GetAllocaXFromH() const noexcept
rvsdg::Node * AllocaYFromH_
rvsdg::LambdaNode * LambdaG_
rvsdg::LambdaNode & GetLambdaG() const noexcept
rvsdg::GammaNode * Gamma_
rvsdg::SimpleNode & GetCallFromG() const noexcept
rvsdg::GammaNode & GetGamma() const noexcept
rvsdg::Node * AllocaXFromG_
rvsdg::LambdaNode * LambdaF_
rvsdg::Node & GetAllocaYFromH() const noexcept
rvsdg::Node * AllocaXFromH_
rvsdg::LambdaNode & GetLambdaH() const noexcept
rvsdg::Node & GetAllocaZ() const noexcept
rvsdg::LambdaNode & GetLambdaF() 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::SimpleNode & GetCallFromH() const noexcept
rvsdg::SimpleNode * CallFromG_
rvsdg::Node * AllocaZ_
GammaTest class.
Definition: TestRvsdgs.hpp:961
rvsdg::GammaNode * gamma
Definition: TestRvsdgs.hpp:969
jlm::rvsdg::LambdaNode * lambda
Definition: TestRvsdgs.hpp:967
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
GetElementPtrTest class.
Definition: TestRvsdgs.hpp:279
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
Definition: TestRvsdgs.cpp:275
jlm::rvsdg::LambdaNode * lambda
Definition: TestRvsdgs.hpp:285
ImportTest class.
rvsdg::SimpleNode * CallF1_
jlm::rvsdg::LambdaNode * lambda_f1
jlm::rvsdg::LambdaNode * lambda_f2
jlm::rvsdg::GraphImport * import_d2
jlm::rvsdg::GraphImport * import_d1
const rvsdg::SimpleNode & CallF1() const noexcept
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
IndirectCallTest1 class.
Definition: TestRvsdgs.hpp:566
jlm::rvsdg::LambdaNode * LambdaIndcall_
Definition: TestRvsdgs.hpp:620
rvsdg::SimpleNode * CallFour_
Definition: TestRvsdgs.hpp:616
const jlm::rvsdg::LambdaNode & GetLambdaTest() const noexcept
Definition: TestRvsdgs.hpp:605
const jlm::rvsdg::LambdaNode & GetLambdaIndcall() const noexcept
Definition: TestRvsdgs.hpp:599
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
Definition: TestRvsdgs.cpp:785
jlm::rvsdg::LambdaNode * LambdaFour_
Definition: TestRvsdgs.hpp:619
const rvsdg::SimpleNode & CallThree() const noexcept
Definition: TestRvsdgs.hpp:575
const jlm::rvsdg::LambdaNode & GetLambdaFour() const noexcept
Definition: TestRvsdgs.hpp:593
const rvsdg::SimpleNode & CallIndcall() const noexcept
Definition: TestRvsdgs.hpp:569
rvsdg::SimpleNode * CallIndcall_
Definition: TestRvsdgs.hpp:614
const jlm::rvsdg::LambdaNode & GetLambdaThree() const noexcept
Definition: TestRvsdgs.hpp:587
jlm::rvsdg::LambdaNode * LambdaTest_
Definition: TestRvsdgs.hpp:621
const rvsdg::SimpleNode & CallFour() const noexcept
Definition: TestRvsdgs.hpp:581
jlm::rvsdg::LambdaNode * LambdaThree_
Definition: TestRvsdgs.hpp:618
rvsdg::SimpleNode * CallThree_
Definition: TestRvsdgs.hpp:615
IndirectCallTest2 class.
Definition: TestRvsdgs.hpp:687
rvsdg::SimpleNode * CallIWithThree_
Definition: TestRvsdgs.hpp:813
rvsdg::SimpleNode & GetCallY() const noexcept
Definition: TestRvsdgs.hpp:774
rvsdg::SimpleNode * IndirectCall_
Definition: TestRvsdgs.hpp:812
jlm::rvsdg::SimpleNode * AllocaPx_
Definition: TestRvsdgs.hpp:819
rvsdg::SimpleNode * CallIWithFour_
Definition: TestRvsdgs.hpp:814
rvsdg::SimpleNode & GetTest2CallX() const noexcept
Definition: TestRvsdgs.hpp:768
jlm::rvsdg::DeltaNode * DeltaG1_
Definition: TestRvsdgs.hpp:801
jlm::rvsdg::SimpleNode * AllocaPy_
Definition: TestRvsdgs.hpp:820
jlm::rvsdg::LambdaNode * LambdaThree_
Definition: TestRvsdgs.hpp:804
rvsdg::SimpleNode * TestCallX_
Definition: TestRvsdgs.hpp:815
rvsdg::SimpleNode * CallY_
Definition: TestRvsdgs.hpp:817
rvsdg::SimpleNode * Test2CallX_
Definition: TestRvsdgs.hpp:816
jlm::rvsdg::LambdaNode * LambdaY_
Definition: TestRvsdgs.hpp:808
rvsdg::SimpleNode & GetCallIWithFour() const noexcept
Definition: TestRvsdgs.hpp:756
jlm::rvsdg::SimpleNode * AllocaPz_
Definition: TestRvsdgs.hpp:821
jlm::rvsdg::LambdaNode * LambdaFour_
Definition: TestRvsdgs.hpp:805
jlm::rvsdg::LambdaNode & GetLambdaI() const noexcept
Definition: TestRvsdgs.hpp:714
jlm::rvsdg::LambdaNode & GetLambdaFour() const noexcept
Definition: TestRvsdgs.hpp:708
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
Definition: TestRvsdgs.cpp:903
jlm::rvsdg::LambdaNode & GetLambdaTest() const noexcept
Definition: TestRvsdgs.hpp:732
rvsdg::SimpleNode & GetCallIWithThree() const noexcept
Definition: TestRvsdgs.hpp:750
jlm::rvsdg::LambdaNode & GetLambdaTest2() const noexcept
Definition: TestRvsdgs.hpp:738
jlm::rvsdg::SimpleNode & GetAllocaPy() const noexcept
Definition: TestRvsdgs.hpp:786
jlm::rvsdg::LambdaNode & GetLambdaX() const noexcept
Definition: TestRvsdgs.hpp:720
rvsdg::SimpleNode & GetIndirectCall() const noexcept
Definition: TestRvsdgs.hpp:744
jlm::rvsdg::LambdaNode * LambdaTest_
Definition: TestRvsdgs.hpp:809
jlm::rvsdg::LambdaNode * LambdaTest2_
Definition: TestRvsdgs.hpp:810
jlm::rvsdg::LambdaNode & GetLambdaY() const noexcept
Definition: TestRvsdgs.hpp:726
jlm::rvsdg::SimpleNode & GetAllocaPz() const noexcept
Definition: TestRvsdgs.hpp:792
jlm::rvsdg::LambdaNode * LambdaX_
Definition: TestRvsdgs.hpp:807
jlm::rvsdg::DeltaNode & GetDeltaG2() const noexcept
Definition: TestRvsdgs.hpp:696
jlm::rvsdg::LambdaNode * LambdaI_
Definition: TestRvsdgs.hpp:806
rvsdg::SimpleNode & GetTestCallX() const noexcept
Definition: TestRvsdgs.hpp:762
jlm::rvsdg::DeltaNode & GetDeltaG1() const noexcept
Definition: TestRvsdgs.hpp:690
jlm::rvsdg::DeltaNode * DeltaG2_
Definition: TestRvsdgs.hpp:802
jlm::rvsdg::LambdaNode & GetLambdaThree() const noexcept
Definition: TestRvsdgs.hpp:702
jlm::rvsdg::SimpleNode & GetAllocaPx() const noexcept
Definition: TestRvsdgs.hpp:780
RVSDG module containing a static function that is called with the wrong number of arguments.
const rvsdg::SimpleNode & GetCall() const noexcept
const rvsdg::LambdaNode & GetLambdaG() const noexcept
std::unique_ptr< llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
const rvsdg::LambdaNode & GetLambdaMain() const noexcept
LinkedListTest class.
const jlm::rvsdg::DeltaNode & GetDeltaMyList() const noexcept
jlm::rvsdg::LambdaNode * LambdaNext_
const rvsdg::SimpleNode & GetAlloca() const noexcept
rvsdg::SimpleNode * Alloca_
const jlm::rvsdg::LambdaNode & GetLambdaNext() const noexcept
jlm::rvsdg::DeltaNode * DeltaMyList_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
LoadFromUndefTest class.
Definition: TestRvsdgs.hpp:236
const jlm::rvsdg::LambdaNode & Lambda() const noexcept
Definition: TestRvsdgs.hpp:243
jlm::rvsdg::LambdaNode * Lambda_
Definition: TestRvsdgs.hpp:255
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
Definition: TestRvsdgs.cpp:238
const rvsdg::Node * UndefValueNode() const noexcept
Definition: TestRvsdgs.hpp:249
LoadTest1 class.
Definition: TestRvsdgs.hpp:161
jlm::rvsdg::LambdaNode * lambda
Definition: TestRvsdgs.hpp:167
rvsdg::Node * load_p
Definition: TestRvsdgs.hpp:169
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
Definition: TestRvsdgs.cpp:130
rvsdg::Node * load_x
Definition: TestRvsdgs.hpp:170
LoadTest2 class.
Definition: TestRvsdgs.hpp:200
rvsdg::SimpleNode * load_a
Definition: TestRvsdgs.hpp:217
rvsdg::SimpleNode * alloca_p
Definition: TestRvsdgs.hpp:214
rvsdg::Node * size
Definition: TestRvsdgs.hpp:208
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
Definition: TestRvsdgs.cpp:171
jlm::rvsdg::LambdaNode * lambda
Definition: TestRvsdgs.hpp:206
rvsdg::SimpleNode * alloca_y
Definition: TestRvsdgs.hpp:213
rvsdg::SimpleNode * load_x
Definition: TestRvsdgs.hpp:216
rvsdg::SimpleNode * alloca_a
Definition: TestRvsdgs.hpp:210
rvsdg::SimpleNode * alloca_x
Definition: TestRvsdgs.hpp:212
rvsdg::SimpleNode * alloca_b
Definition: TestRvsdgs.hpp:211
const rvsdg::SimpleNode & CallG() const noexcept
rvsdg::SimpleNode * CallG_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::LambdaNode * LambdaG_
const jlm::rvsdg::LambdaNode & LambdaF() const noexcept
const jlm::rvsdg::LambdaNode & LambdaG() const noexcept
jlm::rvsdg::LambdaNode * LambdaF_
const rvsdg::Node & Memcpy() const noexcept
const jlm::rvsdg::LambdaNode & Lambda() const noexcept
const rvsdg::Node & Alloca() const noexcept
jlm::rvsdg::LambdaNode * Lambda_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
const rvsdg::Node & Memcpy() const noexcept
MemcpyTest class.
const jlm::rvsdg::DeltaNode & LocalArray() const noexcept
const jlm::rvsdg::DeltaNode & GlobalArray() const noexcept
jlm::rvsdg::DeltaNode * GlobalArray_
jlm::rvsdg::LambdaNode * LambdaG_
const rvsdg::SimpleNode & CallF() const noexcept
jlm::rvsdg::DeltaNode * LocalArray_
const jlm::rvsdg::LambdaNode & LambdaF() const noexcept
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
const jlm::rvsdg::LambdaNode & LambdaG() const noexcept
rvsdg::SimpleNode * Memcpy_
rvsdg::SimpleNode * CallF_
const rvsdg::SimpleNode & Memcpy() const noexcept
jlm::rvsdg::LambdaNode * LambdaF_
RVSDG module with an arbitrary amount of alloca nodes.
std::vector< const rvsdg::SimpleNode * > AllocaNodes_
size_t GetNumAllocaNodes() const noexcept
const rvsdg::SimpleNode & GetAllocaNode(size_t index) const noexcept
const jlm::rvsdg::LambdaNode & GetFunction() const noexcept
NAllocaNodesTest(size_t numAllocaNodes)
const jlm::rvsdg::Output & GetAllocaOutput(size_t index) 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
const rvsdg::SimpleNode & CallFibm2() const noexcept
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 & CallFibm1() const noexcept
PhiTest2 class.
jlm::rvsdg::SimpleNode * PTestAlloca_
jlm::rvsdg::LambdaNode & GetLambdaTest() const noexcept
jlm::rvsdg::LambdaNode & GetLambdaA() const noexcept
jlm::rvsdg::SimpleNode & GetPdAlloca() const noexcept
jlm::rvsdg::SimpleNode * PaAlloca_
rvsdg::SimpleNode & GetCallB() const noexcept
jlm::rvsdg::LambdaNode * LambdaEight_
jlm::rvsdg::SimpleNode * PbAlloca_
jlm::rvsdg::LambdaNode * LambdaC_
jlm::rvsdg::LambdaNode & GetLambdaEight() const noexcept
jlm::rvsdg::LambdaNode & GetLambdaD() const noexcept
rvsdg::SimpleNode & GetCallD() const noexcept
rvsdg::SimpleNode * CallAFromD_
jlm::rvsdg::SimpleNode & GetPTestAlloca() const noexcept
rvsdg::SimpleNode & GetCallAFromTest() const noexcept
jlm::rvsdg::SimpleNode & GetPcAlloca() const noexcept
rvsdg::SimpleNode * CallAFromTest_
rvsdg::SimpleNode & GetCallC() const noexcept
rvsdg::SimpleNode & GetIndirectCall() const noexcept
rvsdg::SimpleNode * CallD_
jlm::rvsdg::LambdaNode & GetLambdaI() const noexcept
rvsdg::SimpleNode & GetCallAFromD() const noexcept
rvsdg::SimpleNode * IndirectCall_
jlm::rvsdg::SimpleNode & GetPaAlloca() const noexcept
jlm::rvsdg::LambdaNode * LambdaI_
rvsdg::SimpleNode * CallI_
rvsdg::SimpleNode & GetCallI() const noexcept
jlm::rvsdg::LambdaNode & GetLambdaB() const noexcept
rvsdg::SimpleNode * CallAFromC_
rvsdg::SimpleNode * CallB_
jlm::rvsdg::LambdaNode * LambdaTest_
jlm::rvsdg::LambdaNode * LambdaB_
rvsdg::SimpleNode * CallC_
jlm::rvsdg::LambdaNode & GetLambdaC() const noexcept
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::SimpleNode & GetCallAFromC() const noexcept
jlm::rvsdg::SimpleNode & GetPbAlloca() const noexcept
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.
const jlm::rvsdg::DeltaNode & GetDelta() const noexcept
RvsdgTest class.
Definition: TestRvsdgs.hpp:29
const rvsdg::Graph & graph()
Definition: TestRvsdgs.hpp:41
jlm::llvm::LlvmRvsdgModule & module()
Definition: TestRvsdgs.hpp:34
virtual std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg()=0
Create RVSDG for this test.
virtual ~RvsdgTest()=default
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > module_
Definition: TestRvsdgs.hpp:64
StoreTest1 class.
Definition: TestRvsdgs.hpp:89
rvsdg::SimpleNode * alloca_c
Definition: TestRvsdgs.hpp:101
rvsdg::SimpleNode * alloca_a
Definition: TestRvsdgs.hpp:99
rvsdg::SimpleNode * alloca_d
Definition: TestRvsdgs.hpp:102
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
Definition: TestRvsdgs.cpp:15
rvsdg::SimpleNode * size
Definition: TestRvsdgs.hpp:97
jlm::rvsdg::LambdaNode * lambda
Definition: TestRvsdgs.hpp:95
rvsdg::SimpleNode * alloca_b
Definition: TestRvsdgs.hpp:100
StoreTest2 class.
Definition: TestRvsdgs.hpp:127
rvsdg::SimpleNode * alloca_p
Definition: TestRvsdgs.hpp:141
jlm::rvsdg::LambdaNode * lambda
Definition: TestRvsdgs.hpp:133
rvsdg::SimpleNode * alloca_y
Definition: TestRvsdgs.hpp:140
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
Definition: TestRvsdgs.cpp:70
rvsdg::SimpleNode * alloca_x
Definition: TestRvsdgs.hpp:139
rvsdg::SimpleNode * alloca_b
Definition: TestRvsdgs.hpp:138
rvsdg::SimpleNode * size
Definition: TestRvsdgs.hpp:135
rvsdg::SimpleNode * alloca_a
Definition: TestRvsdgs.hpp:137
ThetaTest class.
jlm::rvsdg::LambdaNode * lambda
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
jlm::rvsdg::ThetaNode * theta
rvsdg::Node & GetAllocaNode() const noexcept
std::unique_ptr< llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::RegionArgument & GetImportH() const noexcept
rvsdg::RegionArgument * ImportH_
rvsdg::SimpleNode & GetCallH() const noexcept
rvsdg::LambdaNode & GetLambdaG() const noexcept
rvsdg::LambdaNode & GetLambdaF() const noexcept
jlm::rvsdg::LambdaNode * LambdaFst_
std::unique_ptr< jlm::llvm::LlvmRvsdgModule > SetupRvsdg() override
Create RVSDG for this test.
rvsdg::Node & GetAllocaNode() const noexcept
jlm::rvsdg::LambdaNode * LambdaG_
const jlm::rvsdg::LambdaNode & GetLambdaG() const noexcept
const jlm::rvsdg::LambdaNode & GetLambdaFst() const noexcept
Delta node.
Definition: delta.hpp:129
rvsdg::Output & output() const noexcept
Definition: delta.cpp:110
Conditional operator / pattern matching.
Definition: gamma.hpp:99
Lambda node.
Definition: lambda.hpp:83
rvsdg::Output * output() const noexcept
Definition: lambda.cpp:176
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
Definition: RvsdgModule.hpp:57
NodeOutput * output(size_t index) const noexcept
Definition: simple-node.hpp:88
#define JLM_ASSERT(x)
Definition: common.hpp:16
Global memory state passed between functions.