Jlm
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 
10 #include <jlm/util/Statistics.hpp>
11 #include <jlm/util/time.hpp>
12 
13 namespace jlm::llvm::aa
14 {
15 
16 class AgnosticModRefSummary;
17 
32 {
33 public:
34  class Statistics;
35 
37 
39 
41 
44 
45  std::unique_ptr<ModRefSummary>
47  const rvsdg::RvsdgModule & rvsdgModule,
48  const PointsToGraph & pointsToGraph,
49  util::StatisticsCollector & statisticsCollector) override;
50 
60  static std::unique_ptr<ModRefSummary>
61  Create(
62  const rvsdg::RvsdgModule & rvsdgModule,
63  const PointsToGraph & pointsToGraph,
64  util::StatisticsCollector & statisticsCollector);
65 
74  static std::unique_ptr<ModRefSummary>
75  Create(const rvsdg::RvsdgModule & rvsdgModule, const PointsToGraph & pointsToGraph);
76 
77 private:
81  [[nodiscard]] static util::HashSet<PointsToGraph::NodeIndex>
82  GetAllMemoryNodes(const PointsToGraph & pointsToGraph);
83 
89  void
91  const rvsdg::Output & output,
92  util::HashSet<PointsToGraph::NodeIndex> & modRefSet) const;
93 
98  void
99  AnnotateRegion(const rvsdg::Region & region);
100 
107  void
109 
110  // The ModRefSummary being created by this class
111  std::unique_ptr<AgnosticModRefSummary> ModRefSummary_;
112 };
113 
121 {
122 public:
124  const util::FilePath & sourceFile,
125  const util::StatisticsCollector & statisticsCollector,
126  const PointsToGraph & pointsToGraph)
127  : util::Statistics(Id::AgnosticModRefSummarizer, sourceFile),
128  StatisticsCollector_(statisticsCollector)
129  {
130  if (!StatisticsCollector_.IsDemanded(*this))
131  return;
132 
134  }
135 
136  [[nodiscard]] size_t
138  {
139  return GetMeasurementValue<uint64_t>(Label::NumPointsToGraphMemoryNodes);
140  }
141 
142  [[nodiscard]] size_t
143  GetTime() const noexcept
144  {
145  return GetTimer(Label::Timer).ns();
146  }
147 
148  void
149  StartCollecting() noexcept
150  {
151  if (!StatisticsCollector_.IsDemanded(*this))
152  return;
153 
155  }
156 
157  void
158  StopCollecting() noexcept
159  {
160  if (!StatisticsCollector_.IsDemanded(*this))
161  return;
162 
164  }
165 
166  static std::unique_ptr<Statistics>
168  const util::FilePath & sourceFile,
169  const util::StatisticsCollector & statisticsCollector,
170  const PointsToGraph & pointsToGraph)
171  {
172  return std::make_unique<Statistics>(sourceFile, statisticsCollector, pointsToGraph);
173  }
174 
175 private:
177 };
178 
179 }
180 
181 #endif // JLM_LLVM_OPT_ALIAS_ANALYSES_AGNOSTICMODREFSUMMARIZER_HPP
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
void AddPointerTargetsToModRefSet(const rvsdg::Output &output, util::HashSet< PointsToGraph::NodeIndex > &modRefSet) const
static std::unique_ptr< ModRefSummary > Create(const rvsdg::RvsdgModule &rvsdgModule, const PointsToGraph &pointsToGraph, util::StatisticsCollector &statisticsCollector)
static util::HashSet< PointsToGraph::NodeIndex > GetAllMemoryNodes(const PointsToGraph &pointsToGraph)
AgnosticModRefSummarizer & operator=(const AgnosticModRefSummarizer &)=delete
AgnosticModRefSummarizer(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
Definition: Statistics.hpp:537
Statistics Interface.
Definition: Statistics.hpp:31
util::Timer & GetTimer(const std::string &name)
Definition: Statistics.cpp:134
util::Timer & AddTimer(std::string name)
Definition: Statistics.cpp:155
void AddMeasurement(std::string name, T value)
Definition: Statistics.hpp:174
void start() noexcept
Definition: time.hpp:54
void stop() noexcept
Definition: time.hpp:67
size_t ns() const
Definition: time.hpp:83
static const char * NumPointsToGraphMemoryNodes
Definition: Statistics.hpp:223
static const char * Timer
Definition: Statistics.hpp:240