Jlm
Loading...
Searching...
No Matches
push.hpp
Go to the documentation of this file.
1/*
2 * Copyright 2017 Nico Reißmann <nico.reissmann@gmail.com>
3 * See COPYING for terms of redistribution.
4 */
5
6#ifndef JLM_LLVM_OPT_PUSH_HPP
7#define JLM_LLVM_OPT_PUSH_HPP
8
9#include <jlm/rvsdg/theta.hpp>
11
12namespace jlm::rvsdg
13{
14class GammaNode;
15class LambdaNode;
16}
17
18namespace jlm::llvm
19{
20
37{
38 class Context;
39
40public:
41 class Statistics;
42
43 ~NodeHoisting() noexcept override;
44
46
47 void
48 Run(rvsdg::RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) override;
49
50private:
51 void
52 hoistNodesInRootRegion(rvsdg::Region & region);
53
54 void
55 hoistNodesInLambda(rvsdg::LambdaNode & lambdaNode);
56
57 void
58 markNodes(const rvsdg::Region & region);
59
60 void
61 hoistNodes(rvsdg::Region & region);
62
63 void
64 copyNodeToTargetRegion(rvsdg::Node & node) const;
65
66 static std::vector<rvsdg::Output *>
67 getOperandsFromTargetRegion(rvsdg::Node & node, rvsdg::Region & targetRegion);
68
69 static rvsdg::Output &
70 getOperandFromTargetRegion(rvsdg::Output & output, rvsdg::Region & targetRegion);
71
72 size_t
73 computeRegionDepth(const rvsdg::Region & region) const;
74
75 rvsdg::Region &
76 computeTargetRegion(const rvsdg::Node & node) const;
77
78 rvsdg::Region &
79 computeTargetRegion(const rvsdg::Output & output) const;
80
81 static bool
82 isInvariantMemoryStateLoopVar(const rvsdg::ThetaNode::LoopVar & loopVar);
83
84 std::unique_ptr<Context> context_{};
85};
86
87}
88
89#endif
static jlm::util::StatisticsCollector statisticsCollector
Node Hoisting Transformation.
Definition push.hpp:37
void hoistNodesInRootRegion(rvsdg::Region &region)
Definition push.cpp:359
void hoistNodes(rvsdg::Region &region)
Definition push.cpp:322
void hoistNodesInLambda(rvsdg::LambdaNode &lambdaNode)
Definition push.cpp:348
void Run(rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
Definition push.cpp:389
~NodeHoisting() noexcept override
rvsdg::Region & computeTargetRegion(const rvsdg::Node &node) const
Definition push.cpp:183
static std::vector< rvsdg::Output * > getOperandsFromTargetRegion(rvsdg::Node &node, rvsdg::Region &targetRegion)
Definition push.cpp:283
std::unique_ptr< Context > context_
Definition push.hpp:84
static bool isInvariantMemoryStateLoopVar(const rvsdg::ThetaNode::LoopVar &loopVar)
Definition push.cpp:98
void copyNodeToTargetRegion(rvsdg::Node &node) const
Definition push.cpp:296
void markNodes(const rvsdg::Region &region)
Definition push.cpp:226
static rvsdg::Output & getOperandFromTargetRegion(rvsdg::Output &output, rvsdg::Region &targetRegion)
Definition push.cpp:256
size_t computeRegionDepth(const rvsdg::Region &region) const
Represents an RVSDG transformation.
Global memory state passed between functions.