Jlm
Loading...
Searching...
No Matches
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
13namespace jlm::util
14{
16}
17
18namespace jlm::rvsdg
19{
20class DeltaNode;
21class Graph;
22class GammaNode;
23class Input;
24class LambdaNode;
25class Node;
26class PhiNode;
27class Region;
28}
29
30namespace jlm::llvm
31{
32
33class ControlFlowGraph;
34class DataNodeInit;
35class InterProceduralGraphModule;
36class InterProceduralGraphNode;
37class LlvmRvsdgModule;
38class Variable;
39
41{
42 class Context;
43 class Statistics;
44
45public:
47
49
51
53
56
59
60 std::unique_ptr<InterProceduralGraphModule>
62
63 static std::unique_ptr<InterProceduralGraphModule>
65 LlvmRvsdgModule & rvsdgModule,
67
68private:
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
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)
RvsdgToIpGraphConverter & operator=(RvsdgToIpGraphConverter &&)=delete
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)
void ConvertNodes(const rvsdg::Graph &graph)
void ConvertLambdaNode(const rvsdg::LambdaNode &lambdaNode)
void ConvertSimpleNode(const rvsdg::SimpleNode &simpleNode)
void ConvertGammaNode(const rvsdg::GammaNode &gammaNode)
RvsdgToIpGraphConverter & operator=(const RvsdgToIpGraphConverter &)=delete
void ConvertPhiNode(const rvsdg::PhiNode &phiNode)
std::unique_ptr< ControlFlowGraph > CreateControlFlowGraph(const rvsdg::LambdaNode &lambda)
Conditional operator / pattern matching.
Definition gamma.hpp:99
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