llir-opt  0.0.1
Low-Level Post-Link Optimiser for OCaml and C
pta.h
1 // This file if part of the llir-opt project.
2 // Licensing information can be found in the LICENSE file.
3 // (C) 2018 Nandor Licker. All rights reserved.
4 
5 #pragma once
6 
7 #include <unordered_set>
8 
9 #include "core/analysis.h"
10 
11 
12 
16 class PointsToAnalysis final : public Analysis {
17 public:
19  static const char *kPassID;
20 
22  PointsToAnalysis(PassManager *passManager) : Analysis(passManager) {}
23 
25  bool Run(Prog &prog) override;
26 
28  const char *GetPassName() const override;
29 
31  bool IsReachable(Func *func) { return reachable_.count(func) != 0; }
32 
33 private:
35  std::unordered_set<Func *> reachable_;
36 };
37 
38 template<> struct AnalysisID<PointsToAnalysis> { static char ID; };
AnalysisID
Definition: analysis.h:12
PointsToAnalysis::GetPassName
const char * GetPassName() const override
Returns the name of the pass.
Definition: pta.cpp:37
Func
Definition: func.h:30
PassManager
Definition: pass_manager.h:74
PointsToAnalysis::Run
bool Run(Prog &prog) override
Runs the pass.
Definition: pta.cpp:848
ID
Definition: id.h:19
PointsToAnalysis::kPassID
static const char * kPassID
Pass identifier.
Definition: pta.h:19
PointsToAnalysis::IsReachable
bool IsReachable(Func *func)
Returns the set of functions pointed to.
Definition: pta.h:31
Prog
Definition: prog.h:33
PointsToAnalysis::PointsToAnalysis
PointsToAnalysis(PassManager *passManager)
Initialises the pass.
Definition: pta.h:22
PointsToAnalysis
Definition: pta.h:16
Analysis
Definition: analysis.h:19