Jlm
Loading...
Searching...
No Matches
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
12namespace jlm::llvm::aa
13{
14
25template<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
36public:
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,
67 {
68 EliminatedModRefSummarizer summarizer{};
69 return summarizer.SummarizeModRefs(rvsdgModule, pointsToGraph, statisticsCollector);
70 }
71
72private:
73 TModRefSummarizer ModRefSummarizer_;
74 TModRefEliminator ModRefEliminator_;
75};
76
77}
78
79#endif // JLM_LLVM_OPT_ALIAS_ANALYSES_ELIMINATEDMODREFSUMMARIZER_HPP
static jlm::util::StatisticsCollector statisticsCollector
Combines a ModeRefSummarizer and a ModRefEliminator.
~EliminatedModRefSummarizer() noexcept override=default
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)