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{
125public:
127 const util::FilePath & sourceFile,
129 const PointsToGraph & pointsToGraph)
130 : util::Statistics(Id::AgnosticModRefSummarizer, sourceFile),
132 {
134 return;
135
136 AddMeasurement(Label::NumPointsToGraphMemoryNodes, pointsToGraph.numMemoryNodes());
137 }
138
139 [[nodiscard]] size_t
141 {
142 return GetMeasurementValue<uint64_t>(Label::NumPointsToGraphMemoryNodes);
143 }
144
145 [[nodiscard]] size_t
146 GetTime() const noexcept
147 {
148 return GetTimer(Label::Timer).ns();
149 }
150
151 void
153 {
155 return;
156
157 AddTimer(Label::Timer).start();
158 }
159
160 void
161 StopCollecting() noexcept
162 {
164 return;
165
166 GetTimer(Label::Timer).stop();
167 }
168
169 static std::unique_ptr<Statistics>
171 const util::FilePath & sourceFile,
173 const PointsToGraph & pointsToGraph)
174 {
175 return std::make_unique<Statistics>(sourceFile, statisticsCollector, pointsToGraph);
176 }
177
178private:
180};
181
182}
183
184#endif // JLM_LLVM_OPT_ALIAS_ANALYSES_AGNOSTICMODREFSUMMARIZER_HPP
static jlm::util::StatisticsCollector statisticsCollector
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)
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