Jlm
EliminatedModRefSummarizer.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2023 Nico Reißmann <nico.reissmann@gmail.com>
3  * See COPYING for terms of redistribution.
4  */
5 
6 #ifndef JLM_LLVM_OPT_ALIAS_ANALYSES_ELIMINATEDMODREFSUMMARIZER_HPP
7 #define JLM_LLVM_OPT_ALIAS_ANALYSES_ELIMINATEDMODREFSUMMARIZER_HPP
8 
11 
12 namespace jlm::llvm::aa
13 {
14 
25 template<class TModRefSummarizer, class TModRefEliminator>
27 {
28  static_assert(
29  std::is_base_of_v<ModRefSummarizer, TModRefSummarizer>,
30  "T is not derived from ModRefSummarizer.");
31 
32  static_assert(
33  std::is_base_of_v<ModRefEliminator, TModRefEliminator>,
34  "T is not derived from ModRefEliminator.");
35 
36 public:
37  ~EliminatedModRefSummarizer() noexcept override = default;
38 
40 
42 
44 
46  operator=(const EliminatedModRefSummarizer &) = delete;
47 
49  operator=(EliminatedModRefSummarizer &&) = delete;
50 
51  std::unique_ptr<ModRefSummary>
53  const rvsdg::RvsdgModule & rvsdgModule,
54  const PointsToGraph & pointsToGraph,
55  util::StatisticsCollector & statisticsCollector) override
56  {
57  auto seedModRefSummary =
58  ModRefSummarizer_.SummarizeModRefs(rvsdgModule, pointsToGraph, statisticsCollector);
59  return ModRefEliminator_.EliminateModRefs(rvsdgModule, *seedModRefSummary, statisticsCollector);
60  }
61 
62  static std::unique_ptr<ModRefSummary>
64  const rvsdg::RvsdgModule & rvsdgModule,
65  const PointsToGraph & pointsToGraph,
66  util::StatisticsCollector & statisticsCollector)
67  {
68  EliminatedModRefSummarizer summarizer{};
69  return summarizer.SummarizeModRefs(rvsdgModule, pointsToGraph, statisticsCollector);
70  }
71 
72 private:
73  TModRefSummarizer ModRefSummarizer_;
74  TModRefEliminator ModRefEliminator_;
75 };
76 
77 }
78 
79 #endif // JLM_LLVM_OPT_ALIAS_ANALYSES_ELIMINATEDMODREFSUMMARIZER_HPP
Combines a ModeRefSummarizer and a ModRefEliminator.
std::unique_ptr< ModRefSummary > SummarizeModRefs(const rvsdg::RvsdgModule &rvsdgModule, const PointsToGraph &pointsToGraph, util::StatisticsCollector &statisticsCollector) override
~EliminatedModRefSummarizer() noexcept override=default
static std::unique_ptr< ModRefSummary > Create(const rvsdg::RvsdgModule &rvsdgModule, const PointsToGraph &pointsToGraph, util::StatisticsCollector &statisticsCollector)