Jlm
Loading...
Searching...
No Matches
AgnosticModRefSummarizer.hpp
Go to the documentation of this file.
1/*
2 * Copyright 2022 Nico Reißmann <nico.reissmann@gmail.com>
3 * See COPYING for terms of redistribution.
4 */
5
6#ifndef JLM_LLVM_OPT_ALIAS_ANALYSES_AGNOSTICMODREFSUMMARIZER_HPP
7#define JLM_LLVM_OPT_ALIAS_ANALYSES_AGNOSTICMODREFSUMMARIZER_HPP
8
11#include <jlm/util/time.hpp>
12
13namespace jlm::llvm::aa
14{
15
16class AgnosticModRefSet;
17class AgnosticModRefSummary;
18
33{
34public:
35 class Statistics;
36
38
40
42
45
46 std::unique_ptr<ModRefSummary>
48 const rvsdg::RvsdgModule & rvsdgModule,
49 const PointsToGraph & pointsToGraph,
51
61 static std::unique_ptr<ModRefSummary>
62 Create(
63 const rvsdg::RvsdgModule & rvsdgModule,
64 const PointsToGraph & pointsToGraph,
66
75 static std::unique_ptr<ModRefSummary>
76 Create(const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph);
77
78private:
82 [[nodiscard]] static AgnosticModRefSet
83 GetAllMemoryNodes(const PointsToGraph & pointsToGraph);
84
91 void
93 const rvsdg::Output & output,
94 ModRefEffect modRefEffect,
95 AgnosticModRefSet & modRefSet) const;
96
101 void
102 AnnotateRegion(const rvsdg::Region & region);
103
110 void
112
113 // The ModRefSummary being created by this class
114 std::unique_ptr<AgnosticModRefSummary> ModRefSummary_;
115};
116
124{
125 static constexpr auto memoryStateDistributionLabel_ = "MemoryStateDistribution";
126
127public:
129 const util::FilePath & sourceFile,
131 const PointsToGraph & pointsToGraph)
132 : util::Statistics(Id::AgnosticModRefSummarizer, sourceFile),
134 {
136 return;
137
138 AddMeasurement(Label::NumPointsToGraphMemoryNodes, pointsToGraph.numMemoryNodes());
139 }
140
141 [[nodiscard]] size_t
143 {
144 return GetMeasurementValue<uint64_t>(Label::NumPointsToGraphMemoryNodes);
145 }
146
147 [[nodiscard]] size_t
148 GetTime() const noexcept
149 {
150 return GetTimer(Label::Timer).ns();
151 }
152
153 void
155 {
157 return;
158
159 AddTimer(Label::Timer).start();
160 }
161
162 void
163 StopCollecting() noexcept
164 {
166 return;
167
168 GetTimer(Label::Timer).stop();
169 }
170
171 void
172 addMemoryStateDistribution(const std::vector<MemoryStateSummary> & memoryStateDistribution)
173 {
174 AddMeasurement(memoryStateDistributionLabel_, toString(memoryStateDistribution));
175 }
176
177 static std::unique_ptr<Statistics>
179 const util::FilePath & sourceFile,
181 const PointsToGraph & pointsToGraph)
182 {
183 return std::make_unique<Statistics>(sourceFile, statisticsCollector, pointsToGraph);
184 }
185
186private:
188};
189
190}
191
192#endif // JLM_LLVM_OPT_ALIAS_ANALYSES_AGNOSTICMODREFSUMMARIZER_HPP
class returned by the Agnostic ModRefSummarizer
Statistics(const util::FilePath &sourceFile, const util::StatisticsCollector &statisticsCollector, const PointsToGraph &pointsToGraph)
static std::unique_ptr< Statistics > Create(const util::FilePath &sourceFile, const util::StatisticsCollector &statisticsCollector, const PointsToGraph &pointsToGraph)
void addMemoryStateDistribution(const std::vector< MemoryStateSummary > &memoryStateDistribution)
std::unique_ptr< ModRefSummary > SummarizeModRefs(const rvsdg::RvsdgModule &rvsdgModule, const PointsToGraph &pointsToGraph, util::StatisticsCollector &statisticsCollector) override
static std::unique_ptr< ModRefSummary > Create(const rvsdg::RvsdgModule &rvsdgModule, const PointsToGraph &pointsToGraph, util::StatisticsCollector &statisticsCollector)
void AddPointerTargetsToModRefSet(const rvsdg::Output &output, ModRefEffect modRefEffect, AgnosticModRefSet &modRefSet) const
static AgnosticModRefSet GetAllMemoryNodes(const PointsToGraph &pointsToGraph)
AgnosticModRefSummarizer(const AgnosticModRefSummarizer &)=delete
AgnosticModRefSummarizer & operator=(const AgnosticModRefSummarizer &)=delete
void AnnotateRegion(const rvsdg::Region &region)
void AnnotateSimpleNode(const rvsdg::SimpleNode &node)
std::unique_ptr< AgnosticModRefSummary > ModRefSummary_
size_t numMemoryNodes() const noexcept
Represent acyclic RVSDG subgraphs.
Definition region.hpp:213
bool IsDemanded(Statistics::Id id) const noexcept
Statistics Interface.
util::Timer & GetTimer(const std::string &name)
util::Timer & AddTimer(std::string name)
void AddMeasurement(std::string name, T value)
void start() noexcept
Definition time.hpp:54
void stop() noexcept
Definition time.hpp:67
size_t ns() const
Definition time.hpp:83
std::string toString(const std::vector< MemoryStateSummary > &memoryStateDistribution)
static util::StatisticsCollector statisticsCollector