llir-opt  0.0.1
Low-Level Post-Link Optimiser for OCaml and C
pass.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 class Prog;
8 class PassManager;
9 class PassConfig;
10 class Target;
11 
12 
13 
17 class Pass {
18 public:
22  Pass(PassManager *passManager);
23 
27  virtual ~Pass();
28 
32  virtual bool Run(Prog &prog) = 0;
33 
37  virtual const char *GetPassName() const = 0;
38 
40  template<typename T> T* getAnalysis();
41 
42 
43 protected:
45  const PassConfig &GetConfig() const;
47  const Target *GetTarget() const;
48 
49 protected:
52 };
PassManager
Definition: pass_manager.h:74
Pass
Definition: pass.h:17
PassConfig
Definition: pass_manager.h:45
Target
Definition: target.h:24
Pass::getAnalysis
T * getAnalysis()
Returns an available analysis.
Definition: pass_manager.h:191
Pass::Pass
Pass(PassManager *passManager)
Definition: pass.cpp:12
Pass::~Pass
virtual ~Pass()
Definition: pass.cpp:18
Pass::GetTarget
const Target * GetTarget() const
Returns a reference to the target.
Definition: pass.cpp:29
Pass::GetPassName
virtual const char * GetPassName() const =0
Prog
Definition: prog.h:33
Pass::GetConfig
const PassConfig & GetConfig() const
Returns a reference to the configuration.
Definition: pass.cpp:23
Pass::passManager_
PassManager * passManager_
Pass manager scheduling this pass.
Definition: pass.h:51
Pass::Run
virtual bool Run(Prog &prog)=0