1
//===- llvm/PassManager.h - Container for Passes ----------------*- C++ -*-===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// This file defines the PassManager class. This class is used to hold,
11
// maintain, and optimize execution of Passes. The PassManager class ensures
12
// that analysis results are available before a pass runs, and that Pass's are
13
// destroyed when the PassManager is destroyed.
15
//===----------------------------------------------------------------------===//
17
#ifndef LLVM_PASSMANAGER_H
18
#define LLVM_PASSMANAGER_H
20
#include "llvm/Pass.h"
27
class PassManagerImpl;
28
class FunctionPassManagerImpl;
30
/// PassManagerBase - An abstract interface to allow code to add passes to
31
/// a pass manager without having to hard-code what kind of pass manager
33
class PassManagerBase {
35
virtual ~PassManagerBase();
37
/// add - Add a pass to the queue of passes to run. This passes ownership of
38
/// the Pass to the PassManager. When the PassManager is destroyed, the pass
39
/// will be destroyed as well, so there is no need to delete the pass. This
40
/// implies that all passes MUST be allocated with 'new'.
41
virtual void add(Pass *P) = 0;
44
/// PassManager manages ModulePassManagers
45
class PassManager : public PassManagerBase {
51
/// add - Add a pass to the queue of passes to run. This passes ownership of
52
/// the Pass to the PassManager. When the PassManager is destroyed, the pass
53
/// will be destroyed as well, so there is no need to delete the pass. This
54
/// implies that all passes MUST be allocated with 'new'.
57
/// run - Execute all of the passes scheduled for execution. Keep track of
58
/// whether any of the passes modifies the module, and if so, return true.
62
/// addImpl - Add a pass to the queue of passes to run, without
63
/// checking whether to add a printer pass.
64
void addImpl(Pass *P);
66
/// PassManagerImpl_New is the actual class. PassManager is just the
67
/// wraper to publish simple pass manager interface
71
/// FunctionPassManager manages FunctionPasses and BasicBlockPassManagers.
72
class FunctionPassManager : public PassManagerBase {
74
/// FunctionPassManager ctor - This initializes the pass manager. It needs,
75
/// but does not take ownership of, the specified Module.
76
explicit FunctionPassManager(Module *M);
77
~FunctionPassManager();
79
/// add - Add a pass to the queue of passes to run. This passes
80
/// ownership of the Pass to the PassManager. When the
81
/// PassManager_X is destroyed, the pass will be destroyed as well, so
82
/// there is no need to delete the pass. (TODO delete passes.)
83
/// This implies that all passes MUST be allocated with 'new'.
86
/// run - Execute all of the passes scheduled for execution. Keep
87
/// track of whether any of the passes modifies the function, and if
90
bool run(Function &F);
92
/// doInitialization - Run all of the initializers for the function passes.
94
bool doInitialization();
96
/// doFinalization - Run all of the finalizers for the function passes.
98
bool doFinalization();
101
/// addImpl - Add a pass to the queue of passes to run, without
102
/// checking whether to add a printer pass.
103
void addImpl(Pass *P);
105
FunctionPassManagerImpl *FPM;
109
} // End llvm namespace