projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
There are times when the landing pad won't have a call to 'eh.selector' in
[oota-llvm.git]
/
include
/
llvm
/
PassManagers.h
diff --git
a/include/llvm/PassManagers.h
b/include/llvm/PassManagers.h
index 81b7e7af816e4a1f32f957e7905f421f4fb0377b..c4f409ef525ce7c5bf0fab4ac6ab388e680fd04b 100644
(file)
--- a/
include/llvm/PassManagers.h
+++ b/
include/llvm/PassManagers.h
@@
-14,11
+14,11
@@
#ifndef LLVM_PASSMANAGERS_H
#define LLVM_PASSMANAGERS_H
#ifndef LLVM_PASSMANAGERS_H
#define LLVM_PASSMANAGERS_H
-#include "llvm/Pass
Manager
.h"
+#include "llvm/Pass.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/DenseMap.h"
-#include <
deque
>
+#include <
vector
>
#include <map>
//===----------------------------------------------------------------------===//
#include <map>
//===----------------------------------------------------------------------===//
@@
-96,14
+96,8
@@
namespace llvm {
class StringRef;
class Value;
class Timer;
class StringRef;
class Value;
class Timer;
+ class PMDataManager;
-/// FunctionPassManager and PassManager, two top level managers, serve
-/// as the public interface of pass manager infrastructure.
-enum TopLevelManagerType {
- TLM_Function, // FunctionPassManager
- TLM_Pass // PassManager
-};
-
// enums for debugging strings
enum PassDebuggingString {
EXECUTION_MSG, // "Executing Pass '"
// enums for debugging strings
enum PassDebuggingString {
EXECUTION_MSG, // "Executing Pass '"
@@
-112,6
+106,7
@@
enum PassDebuggingString {
ON_BASICBLOCK_MSG, // "' on BasicBlock '" + PassName + "'...\n"
ON_FUNCTION_MSG, // "' on Function '" + FunctionName + "'...\n"
ON_MODULE_MSG, // "' on Module '" + ModuleName + "'...\n"
ON_BASICBLOCK_MSG, // "' on BasicBlock '" + PassName + "'...\n"
ON_FUNCTION_MSG, // "' on Function '" + FunctionName + "'...\n"
ON_MODULE_MSG, // "' on Module '" + ModuleName + "'...\n"
+ ON_REGION_MSG, // " 'on Region ...\n'"
ON_LOOP_MSG, // " 'on Loop ...\n'"
ON_CG_MSG // "' on Call Graph ...\n'"
};
ON_LOOP_MSG, // " 'on Loop ...\n'"
ON_CG_MSG // "' on Call Graph ...\n'"
};
@@
-138,30
+133,28
@@
public:
//===----------------------------------------------------------------------===//
// PMStack
//
//===----------------------------------------------------------------------===//
// PMStack
//
-/// PMStack
+/// PMStack - This class implements a stack data structure of PMDataManager
+/// pointers.
+///
/// Top level pass managers (see PassManager.cpp) maintain active Pass Managers
/// using PMStack. Each Pass implements assignPassManager() to connect itself
/// with appropriate manager. assignPassManager() walks PMStack to find
/// suitable manager.
/// Top level pass managers (see PassManager.cpp) maintain active Pass Managers
/// using PMStack. Each Pass implements assignPassManager() to connect itself
/// with appropriate manager. assignPassManager() walks PMStack to find
/// suitable manager.
-///
-/// PMStack is just a wrapper around standard deque that overrides pop() and
-/// push() methods.
class PMStack {
public:
class PMStack {
public:
- typedef std::deque<PMDataManager *>::reverse_iterator iterator;
- iterator begin() { return S.rbegin(); }
- iterator end() { return S.rend(); }
-
- void handleLastUserOverflow();
+ typedef std::vector<PMDataManager *>::const_reverse_iterator iterator;
+ iterator begin() const { return S.rbegin(); }
+ iterator end() const { return S.rend(); }
void pop();
void pop();
-
inline PMDataManager *top()
{ return S.back(); }
+
PMDataManager *top() const
{ return S.back(); }
void push(PMDataManager *PM);
void push(PMDataManager *PM);
- inline bool empty() { return S.empty(); }
+ bool empty() const { return S.empty(); }
+
+ void dump() const;
- void dump();
private:
private:
- std::
deque
<PMDataManager *> S;
+ std::
vector
<PMDataManager *> S;
};
};
@@
-171,26
+164,31
@@
private:
/// PMTopLevelManager manages LastUser info and collects common APIs used by
/// top level pass managers.
class PMTopLevelManager {
/// PMTopLevelManager manages LastUser info and collects common APIs used by
/// top level pass managers.
class PMTopLevelManager {
-public:
+protected:
+ explicit PMTopLevelManager(PMDataManager *PMDM);
virtual unsigned getNumContainedManagers() const {
return (unsigned)PassManagers.size();
}
virtual unsigned getNumContainedManagers() const {
return (unsigned)PassManagers.size();
}
- /// Schedule pass P for execution. Make sure that passes required by
- /// P are run before P is run. Update analysis info maintained by
- /// the manager. Remove dead passes. This is a recursive function.
- void schedulePass(Pass *P);
+ void initializeAllAnalysisInfo();
+private:
/// This is implemented by top level pass manager and used by
/// schedulePass() to add analysis info passes that are not available.
virtual void addTopLevelPass(Pass *P) = 0;
/// This is implemented by top level pass manager and used by
/// schedulePass() to add analysis info passes that are not available.
virtual void addTopLevelPass(Pass *P) = 0;
+public:
+ /// Schedule pass P for execution. Make sure that passes required by
+ /// P are run before P is run. Update analysis info maintained by
+ /// the manager. Remove dead passes. This is a recursive function.
+ void schedulePass(Pass *P);
+
/// Set pass P as the last user of the given analysis passes.
/// Set pass P as the last user of the given analysis passes.
- void setLastUser(
SmallVector<Pass *, 12
> &AnalysisPasses, Pass *P);
+ void setLastUser(
const SmallVectorImpl<Pass *
> &AnalysisPasses, Pass *P);
/// Collect passes whose last user is P
/// Collect passes whose last user is P
- void collectLastUses(SmallVector
<Pass *, 12
> &LastUses, Pass *P);
+ void collectLastUses(SmallVector
Impl<Pass *
> &LastUses, Pass *P);
/// Find the pass that implements Analysis AID. Search immutable
/// passes and all pass managers. If desired pass is not found
/// Find the pass that implements Analysis AID. Search immutable
/// passes and all pass managers. If desired pass is not found
@@
-200,7
+198,6
@@
public:
/// Find analysis usage information for the pass P.
AnalysisUsage *findAnalysisUsage(Pass *P);
/// Find analysis usage information for the pass P.
AnalysisUsage *findAnalysisUsage(Pass *P);
- explicit PMTopLevelManager(enum TopLevelManagerType t);
virtual ~PMTopLevelManager();
/// Add immutable pass and initialize it.
virtual ~PMTopLevelManager();
/// Add immutable pass and initialize it.
@@
-209,7
+206,7
@@
public:
ImmutablePasses.push_back(P);
}
ImmutablePasses.push_back(P);
}
- inline SmallVector
<ImmutablePass *, 8
>& getImmutablePasses() {
+ inline SmallVector
Impl<ImmutablePass *
>& getImmutablePasses() {
return ImmutablePasses;
}
return ImmutablePasses;
}
@@
-227,8
+224,6
@@
public:
void dumpPasses() const;
void dumpArguments() const;
void dumpPasses() const;
void dumpArguments() const;
- void initializeAllAnalysisInfo();
-
// Active Pass Managers
PMStack activeStack;
// Active Pass Managers
PMStack activeStack;
@@
-302,7
+297,7
@@
public:
/// through getAnalysis interface.
virtual void addLowerLevelRequiredPass(Pass *P, Pass *RequiredPass);
/// through getAnalysis interface.
virtual void addLowerLevelRequiredPass(Pass *P, Pass *RequiredPass);
- virtual Pass *getOnTheFlyPass(Pass *P,
const PassInfo *
PI, Function &F);
+ virtual Pass *getOnTheFlyPass(Pass *P,
AnalysisID
PI, Function &F);
/// Initialize available analysis information.
void initializeAnalysisInfo() {
/// Initialize available analysis information.
void initializeAnalysisInfo() {
@@
-319,8
+314,8
@@
public:
/// Populate RequiredPasses with analysis pass that are required by
/// pass P and are available. Populate ReqPassNotAvailable with analysis
/// pass that are required by pass P but are not available.
/// Populate RequiredPasses with analysis pass that are required by
/// pass P and are available. Populate ReqPassNotAvailable with analysis
/// pass that are required by pass P but are not available.
- void collectRequiredAnalysis(SmallVector
<Pass *, 8
> &RequiredPasses,
- SmallVector
<AnalysisID, 8
> &ReqPassNotAvailable,
+ void collectRequiredAnalysis(SmallVector
Impl<Pass *
> &RequiredPasses,
+ SmallVector
Impl<AnalysisID
> &ReqPassNotAvailable,
Pass *P);
/// All Required analyses should be available to the pass as it runs! Here
Pass *P);
/// All Required analyses should be available to the pass as it runs! Here
@@
-414,7
+409,7
@@
class FPPassManager : public ModulePass, public PMDataManager {
public:
static char ID;
explicit FPPassManager(int Depth)
public:
static char ID;
explicit FPPassManager(int Depth)
- : ModulePass(
&
ID), PMDataManager(Depth) { }
+ : ModulePass(ID), PMDataManager(Depth) { }
/// run - Execute all of the passes scheduled for execution. Keep track of
/// whether any of the passes modifies the module, and if so, return true.
/// run - Execute all of the passes scheduled for execution. Keep track of
/// whether any of the passes modifies the module, and if so, return true.