Jlm
RvsdgToIpGraphConverter.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2025 Nico Reißmann <nico.reissmann@gmail.com>
3  * See COPYING for terms of redistribution.
4  */
5 
6 #ifndef JLM_LLVM_BACKEND_RVSDGTOIPGRAPHCONVERTER_HPP
7 #define JLM_LLVM_BACKEND_RVSDGTOIPGRAPHCONVERTER_HPP
8 
9 #include <jlm/rvsdg/theta.hpp>
10 
11 #include <memory>
12 
13 namespace jlm::util
14 {
16 }
17 
18 namespace jlm::rvsdg
19 {
20 class DeltaNode;
21 class Graph;
22 class GammaNode;
23 class Input;
24 class LambdaNode;
25 class Node;
26 class PhiNode;
27 class Region;
28 }
29 
30 namespace jlm::llvm
31 {
32 
33 class ControlFlowGraph;
34 class DataNodeInit;
35 class InterProceduralGraphModule;
36 class LlvmRvsdgModule;
37 class Variable;
38 
40 {
41  class Context;
42  class Statistics;
43 
44 public:
46 
48 
50 
52 
55 
58 
59  std::unique_ptr<InterProceduralGraphModule>
60  ConvertModule(LlvmRvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector);
61 
62  static std::unique_ptr<InterProceduralGraphModule>
64  LlvmRvsdgModule & rvsdgModule,
65  util::StatisticsCollector & statisticsCollector);
66 
67 private:
68  void
69  ConvertImports(const rvsdg::Graph & graph);
70 
71  void
72  ConvertNodes(const rvsdg::Graph & graph);
73 
74  void
75  ConvertNode(const rvsdg::Node & node);
76 
77  void
78  ConvertDeltaNode(const rvsdg::DeltaNode & deltaNode);
79 
80  void
81  ConvertPhiNode(const rvsdg::PhiNode & phiNode);
82 
83  void
84  ConvertLambdaNode(const rvsdg::LambdaNode & lambdaNode);
85 
86  void
87  ConvertThetaNode(const rvsdg::ThetaNode & thetaNode);
88 
89  void
90  ConvertGammaNode(const rvsdg::GammaNode & gammaNode);
91 
92  void
93  ConvertSimpleNode(const rvsdg::SimpleNode & simpleNode);
94 
95  std::unique_ptr<ControlFlowGraph>
97 
98  void
99  ConvertRegion(rvsdg::Region & region);
100 
101  std::unique_ptr<DataNodeInit>
102  CreateInitialization(const rvsdg::DeltaNode & deltaNode);
103 
104  static bool
105  RequiresSsaPhiOperation(const rvsdg::ThetaNode::LoopVar & loopVar, const Variable & v);
106 
107  std::unique_ptr<Context> Context_;
108 };
109 
110 }
111 
112 #endif // JLM_LLVM_BACKEND_RVSDGTOIPGRAPHCONVERTER_HPP
std::unique_ptr< DataNodeInit > CreateInitialization(const rvsdg::DeltaNode &deltaNode)
RvsdgToIpGraphConverter(const RvsdgToIpGraphConverter &)=delete
std::unique_ptr< InterProceduralGraphModule > ConvertModule(LlvmRvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector)
static std::unique_ptr< InterProceduralGraphModule > CreateAndConvertModule(LlvmRvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector)
void ConvertDeltaNode(const rvsdg::DeltaNode &deltaNode)
static bool RequiresSsaPhiOperation(const rvsdg::ThetaNode::LoopVar &loopVar, const Variable &v)
RvsdgToIpGraphConverter(RvsdgToIpGraphConverter &&)=delete
void ConvertImports(const rvsdg::Graph &graph)
void ConvertNode(const rvsdg::Node &node)
void ConvertThetaNode(const rvsdg::ThetaNode &thetaNode)
RvsdgToIpGraphConverter & operator=(RvsdgToIpGraphConverter &&)=delete
void ConvertNodes(const rvsdg::Graph &graph)
void ConvertLambdaNode(const rvsdg::LambdaNode &lambdaNode)
RvsdgToIpGraphConverter & operator=(const RvsdgToIpGraphConverter &)=delete
void ConvertSimpleNode(const rvsdg::SimpleNode &simpleNode)
void ConvertGammaNode(const rvsdg::GammaNode &gammaNode)
void ConvertPhiNode(const rvsdg::PhiNode &phiNode)
std::unique_ptr< ControlFlowGraph > CreateControlFlowGraph(const rvsdg::LambdaNode &lambda)
Delta node.
Definition: delta.hpp:129
Conditional operator / pattern matching.
Definition: gamma.hpp:99
Lambda node.
Definition: lambda.hpp:83
A phi node represents the fixpoint of mutually recursive definitions.
Definition: Phi.hpp:46
Represent acyclic RVSDG subgraphs.
Definition: region.hpp:213
Global memory state passed between functions.
Description of a loop-carried variable.
Definition: theta.hpp:50