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 InterProceduralGraphNode;
37 class LlvmRvsdgModule;
38 class Variable;
39 
41 {
42  class Context;
43  class Statistics;
44 
45 public:
47 
49 
51 
53 
56 
59 
60  std::unique_ptr<InterProceduralGraphModule>
62 
63  static std::unique_ptr<InterProceduralGraphModule>
65  LlvmRvsdgModule & rvsdgModule,
67 
68 private:
69  void
70  ConvertImports(const rvsdg::Graph & graph);
71 
72  void
73  ConvertNodes(const rvsdg::Graph & graph);
74 
75  void
76  ConvertNode(const rvsdg::Node & node);
77 
78  void
79  ConvertDeltaNode(const rvsdg::DeltaNode & deltaNode);
80 
81  void
82  ConvertPhiNode(const rvsdg::PhiNode & phiNode);
83 
84  void
85  ConvertLambdaNode(const rvsdg::LambdaNode & lambdaNode);
86 
87  void
88  ConvertThetaNode(const rvsdg::ThetaNode & thetaNode);
89 
90  void
91  ConvertGammaNode(const rvsdg::GammaNode & gammaNode);
92 
93  void
94  ConvertSimpleNode(const rvsdg::SimpleNode & simpleNode);
95 
96  std::unique_ptr<ControlFlowGraph>
98 
99  void
100  ConvertRegion(rvsdg::Region & region);
101 
102  std::unique_ptr<DataNodeInit>
103  CreateInitialization(const rvsdg::DeltaNode & deltaNode);
104 
105  static bool
107 
109  getInterProceduralGraphNode(const rvsdg::Output & output) const;
110 
111  std::unique_ptr<Context> Context_;
112 };
113 
114 }
115 
116 #endif // JLM_LLVM_BACKEND_RVSDGTOIPGRAPHCONVERTER_HPP
static jlm::util::StatisticsCollector statisticsCollector
std::unique_ptr< DataNodeInit > CreateInitialization(const rvsdg::DeltaNode &deltaNode)
RvsdgToIpGraphConverter(const RvsdgToIpGraphConverter &)=delete
InterProceduralGraphNode & getInterProceduralGraphNode(const rvsdg::Output &output) const
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)
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