Jlm
PointsToAnalysisStateEncoder.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2021 Nico Reißmann <nico.reissmann@gmail.com>
3  * Copyright 2023 Håvard Krogstie <krogstie.havard@gmail.com>
4  * See COPYING for terms of redistribution.
5  */
6 
15 
16 namespace jlm::llvm::aa
17 {
18 
19 template<typename TPointsToAnalysis, typename TModRefSummarizer>
21  ~PointsToAnalysisStateEncoder() noexcept = default;
22 
23 template<typename TPointsToAnalysis, typename TModRefSummarizer>
24 void
25 PointsToAnalysisStateEncoder<TPointsToAnalysis, TModRefSummarizer>::Run(
26  rvsdg::RvsdgModule & rvsdgModule,
27  util::StatisticsCollector & statisticsCollector)
28 {
29  TPointsToAnalysis ptaPass;
30  auto pointsToGraph = ptaPass.Analyze(rvsdgModule, statisticsCollector);
31 
32  if (statisticsCollector.IsDemanded(util::Statistics::Id::AliasAnalysisPrecisionEvaluation))
33  {
34  AliasAnalysisPrecisionEvaluator precisionEvaluator;
35 
36  // Use different alias analyses, and their combination
37  LocalAliasAnalysis localAA;
38  PointsToGraphAliasAnalysis ptgAA(*pointsToGraph);
39  ChainedAliasAnalysis ptgPlusLocalAA(ptgAA, localAA);
40 
41  precisionEvaluator.EvaluateAliasAnalysisClient(rvsdgModule, localAA, statisticsCollector);
42  precisionEvaluator.EvaluateAliasAnalysisClient(rvsdgModule, ptgAA, statisticsCollector);
43  precisionEvaluator.EvaluateAliasAnalysisClient(
44  rvsdgModule,
45  ptgPlusLocalAA,
46  statisticsCollector);
47  }
48 
49  auto modRefSummary = TModRefSummarizer::Create(rvsdgModule, *pointsToGraph, statisticsCollector);
50 
51  MemoryStateEncoder encoder;
52  encoder.Encode(rvsdgModule, *modRefSummary, statisticsCollector);
53 }
54 
55 // Explicitly instantiate combinations
58 
59 }
void EvaluateAliasAnalysisClient(const rvsdg::RvsdgModule &rvsdgModule, AliasAnalysis &aliasAnalysis, util::StatisticsCollector &statisticsCollector)
void Encode(rvsdg::RvsdgModule &rvsdgModule, const ModRefSummary &modRefSummary, util::StatisticsCollector &statisticsCollector)