Jlm
Loading...
Searching...
No Matches
StoreValueForwarding.hpp
Go to the documentation of this file.
1/*
2 * Copyright 2026 HÃ¥vard Krogstie <krogstie.havard@gmail.com>
3 * See COPYING for terms of redistribution.
4 */
5
6#ifndef JLM_LLVM_OPT_STOREVALUEFORWARDING_HPP
7#define JLM_LLVM_OPT_STOREVALUEFORWARDING_HPP
8
12
13namespace jlm::rvsdg
14{
15class DeltaNode;
16class Region;
17}
18
19namespace jlm::llvm
20{
21
22struct ValueOrigin;
23class LoadTracingInfo;
24
31{
32 class Statistics;
33 struct Context;
34
35public:
36 ~StoreValueForwarding() noexcept override;
37
39
41
43
45 operator=(const StoreValueForwarding &) = delete;
46
48 operator=(StoreValueForwarding &&) = delete;
49
50 void
51 Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override;
52
53private:
59 void
60 traverseInterProceduralRegion(rvsdg::Region & region);
61
67 void
68 traverseIntraProceduralRegion(rvsdg::Region & region);
69
75 void
76 processLoad(rvsdg::SimpleNode & loadNode);
77
83 void
84 processLoadWithoutMemoryStates(rvsdg::SimpleNode & loadNode);
85
91 {
95 rvsdg::DeltaNode * deltaNode{};
96
100 std::vector<GetElementPtrOperation::Constant> gepConstants;
101 };
102
109 std::optional<TracedDelta>
111
118 void
119 forwardLoadWithoutMemoryStates(rvsdg::SimpleNode & loadNode, const TracedDelta & tracedDelta);
120
126 void
128
135 void
137
150 ValueOrigin storeValueOrigin,
151 rvsdg::Region & targetRegion,
152 LoadTracingInfo & tracingInfo);
153
160 void
162
173
174 std::unique_ptr<Context> context_;
175};
176
177}
178
179#endif
static jlm::util::StatisticsCollector statisticsCollector
Store Value Forwarding Statistics class.
Store Value Forwarding Optimization.
void processLoadWithoutMemoryStates(rvsdg::SimpleNode &loadNode)
void processLoad(rvsdg::SimpleNode &loadNode)
~StoreValueForwarding() noexcept override
std::unique_ptr< Context > context_
void forwardValueOrigins(LoadTracingInfo &tracingInfo)
void connectUnroutedLoopPosts(LoadTracingInfo &tracingInfo)
rvsdg::Output & getValueOriginOutput(ValueOrigin storeValueOrigin, rvsdg::Region &targetRegion, LoadTracingInfo &tracingInfo)
void processLoadWithMemoryStates(rvsdg::SimpleNode &loadNode)
void forwardLoadWithoutMemoryStates(rvsdg::SimpleNode &loadNode, const TracedDelta &tracedDelta)
rvsdg::Output & routeOutputToRegion(rvsdg::Output &output, rvsdg::Region &region)
void Run(rvsdg::RvsdgModule &module, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
std::optional< TracedDelta > traceLoadWithoutMemoryStates(const rvsdg::SimpleNode &loadNode)
void traverseInterProceduralRegion(rvsdg::Region &region)
void traverseIntraProceduralRegion(rvsdg::Region &region)
Represent acyclic RVSDG subgraphs.
Definition region.hpp:213
Represents an RVSDG transformation.
Global memory state passed between functions.
std::vector< GetElementPtrOperation::Constant > gepConstants