Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===- LegacyPassManager.h - Legacy Container for Passes --------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file defines the legacy PassManager class.  This class is used to hold,
10
// maintain, and optimize execution of Passes.  The PassManager class ensures
11
// that analysis results are available before a pass runs, and that Pass's are
12
// destroyed when the PassManager is destroyed.
13
//
14
//===----------------------------------------------------------------------===//
15
 
16
#ifndef LLVM_IR_LEGACYPASSMANAGER_H
17
#define LLVM_IR_LEGACYPASSMANAGER_H
18
 
19
#include "llvm/Support/CBindingWrapping.h"
20
 
21
namespace llvm {
22
 
23
class Function;
24
class Pass;
25
class Module;
26
 
27
namespace legacy {
28
 
29
// Whether or not -debug-pass has been specified. For use to check if it's
30
// specified alongside the new PM.
31
bool debugPassSpecified();
32
 
33
class PassManagerImpl;
34
class FunctionPassManagerImpl;
35
 
36
/// PassManagerBase - An abstract interface to allow code to add passes to
37
/// a pass manager without having to hard-code what kind of pass manager
38
/// it is.
39
class PassManagerBase {
40
public:
41
  virtual ~PassManagerBase();
42
 
43
  /// Add a pass to the queue of passes to run.  This passes ownership of
44
  /// the Pass to the PassManager.  When the PassManager is destroyed, the pass
45
  /// will be destroyed as well, so there is no need to delete the pass.  This
46
  /// may even destroy the pass right away if it is found to be redundant. This
47
  /// implies that all passes MUST be allocated with 'new'.
48
  virtual void add(Pass *P) = 0;
49
};
50
 
51
/// PassManager manages ModulePassManagers
52
class PassManager : public PassManagerBase {
53
public:
54
 
55
  PassManager();
56
  ~PassManager() override;
57
 
58
  void add(Pass *P) override;
59
 
60
  /// run - Execute all of the passes scheduled for execution.  Keep track of
61
  /// whether any of the passes modifies the module, and if so, return true.
62
  bool run(Module &M);
63
 
64
private:
65
  /// PassManagerImpl_New is the actual class. PassManager is just the
66
  /// wraper to publish simple pass manager interface
67
  PassManagerImpl *PM;
68
};
69
 
70
/// FunctionPassManager manages FunctionPasses.
71
class FunctionPassManager : public PassManagerBase {
72
public:
73
  /// FunctionPassManager ctor - This initializes the pass manager.  It needs,
74
  /// but does not take ownership of, the specified Module.
75
  explicit FunctionPassManager(Module *M);
76
  ~FunctionPassManager() override;
77
 
78
  void add(Pass *P) override;
79
 
80
  /// run - Execute all of the passes scheduled for execution.  Keep
81
  /// track of whether any of the passes modifies the function, and if
82
  /// so, return true.
83
  ///
84
  bool run(Function &F);
85
 
86
  /// doInitialization - Run all of the initializers for the function passes.
87
  ///
88
  bool doInitialization();
89
 
90
  /// doFinalization - Run all of the finalizers for the function passes.
91
  ///
92
  bool doFinalization();
93
 
94
private:
95
  FunctionPassManagerImpl *FPM;
96
  Module *M;
97
};
98
 
99
} // End legacy namespace
100
 
101
// Create wrappers for C Binding types (see CBindingWrapping.h).
102
DEFINE_STDCXX_CONVERSION_FUNCTIONS(legacy::PassManagerBase, LLVMPassManagerRef)
103
 
104
} // End llvm namespace
105
 
106
#endif