6 #ifndef JLM_LLVM_OPT_REDUCTION_HPP
7 #define JLM_LLVM_OPT_REDUCTION_HPP
27 class CallExitMemoryStateSplitOperation;
28 class LambdaEntryMemoryStateSplitOperation;
29 class LambdaExitMemoryStateMergeOperation;
30 class LoadNonVolatileOperation;
31 class MemoryStateJoinOperation;
32 class MemoryStateMergeOperation;
33 class MemoryStateSplitOperation;
34 class StoreNonVolatileOperation;
61 Run(rvsdg::RvsdgModule & rvsdgModule, util::StatisticsCollector & statisticsCollector) override;
79 [[nodiscard]] static
bool
82 [[nodiscard]] static
bool
85 [[nodiscard]] static
bool
88 [[nodiscard]] static
bool
91 [[nodiscard]] static
bool
94 [[nodiscard]] static
bool
97 [[nodiscard]] static
bool
100 [[nodiscard]] static
bool
103 static std::optional<std::vector<rvsdg::Output *>>
106 const std::vector<rvsdg::Output *> &
operands);
108 static std::optional<std::vector<rvsdg::Output *>>
111 const std::vector<rvsdg::Output *> &
operands);
113 static std::optional<std::vector<rvsdg::Output *>>
116 const std::vector<rvsdg::Output *> &
operands);
118 static std::optional<std::vector<rvsdg::Output *>>
121 const std::vector<rvsdg::Output *> &
operands);
123 static std::optional<std::vector<rvsdg::Output *>>
126 const std::vector<rvsdg::Output *> &
operands);
128 static std::optional<std::vector<rvsdg::Output *>>
131 const std::vector<rvsdg::Output *> &
operands);
133 static std::optional<std::vector<rvsdg::Output *>>
136 const std::vector<rvsdg::Output *> &
operands);
138 static std::optional<std::vector<rvsdg::Output *>>
141 const std::vector<rvsdg::Output *> &
operands);
165 AddIteration(
const rvsdg::Region & region,
size_t numIterations);
167 std::optional<size_t>
168 GetNumIterations(
const rvsdg::Region & region)
const noexcept;
170 static std::unique_ptr<Statistics>
173 return std::make_unique<Statistics>(sourceFile);
static std::unique_ptr< Statistics > Create(const util::FilePath &sourceFile)
std::unordered_map< const rvsdg::Region *, size_t > NumIterations_
~Statistics() noexcept override=default
static bool ReduceLambdaExitMemoryStateMergeNode(rvsdg::SimpleNode &simpleNode)
static std::optional< std::vector< rvsdg::Output * > > NormalizeMemoryStateMergeNode(const MemoryStateMergeOperation &operation, const std::vector< rvsdg::Output * > &operands)
void ReduceNodesInRegion(rvsdg::Region ®ion)
static bool ReduceMemoryStateSplitNode(rvsdg::SimpleNode &simpleNode)
std::unique_ptr< Statistics > Statistics_
void Run(rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
static std::optional< std::vector< rvsdg::Output * > > NormalizeLoadNode(const LoadNonVolatileOperation &operation, const std::vector< rvsdg::Output * > &operands)
static std::optional< std::vector< rvsdg::Output * > > NormalizeLambdaEntryMemoryStateSplitNode(const LambdaEntryMemoryStateSplitOperation &operation, const std::vector< rvsdg::Output * > &operands)
static std::optional< std::vector< rvsdg::Output * > > NormalizeMemoryStateSplitNode(const MemoryStateSplitOperation &operation, const std::vector< rvsdg::Output * > &operands)
static std::optional< std::vector< rvsdg::Output * > > NormalizeStoreNode(const StoreNonVolatileOperation &operation, const std::vector< rvsdg::Output * > &operands)
bool ReduceStructuralNode(rvsdg::StructuralNode &structuralNode)
static std::optional< std::vector< rvsdg::Output * > > NormalizeMemoryStateJoinNode(const MemoryStateJoinOperation &operation, const std::vector< rvsdg::Output * > &operands)
static bool ReduceSimpleNode(rvsdg::SimpleNode &simpleNode)
static bool ReduceBinaryNode(rvsdg::SimpleNode &simpleNode)
static bool ReduceStoreNode(rvsdg::SimpleNode &simpleNode)
static bool ReduceMemoryStateMergeNode(rvsdg::SimpleNode &simpleNode)
~NodeReduction() noexcept override
static std::optional< std::vector< rvsdg::Output * > > NormalizeCallExitMemoryStateSplitNode(const CallExitMemoryStateSplitOperation &operation, const std::vector< rvsdg::Output * > &operands)
static bool ReduceGammaNode(rvsdg::StructuralNode &gammaNode)
static bool ReduceLoadNode(rvsdg::SimpleNode &simpleNode)
static std::optional< std::vector< rvsdg::Output * > > NormalizeLambdaExitMemoryStateMergeNode(const LambdaExitMemoryStateMergeOperation &operation, const std::vector< rvsdg::Output * > &operands)
Represent acyclic RVSDG subgraphs.
Global memory state passed between functions.
static std::vector< jlm::rvsdg::Output * > operands(const Node *node)