projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
There is no EndPtr anymore - reinterpret the original comment in terms
[oota-llvm.git]
/
include
/
llvm
/
PassManagers.h
diff --git
a/include/llvm/PassManagers.h
b/include/llvm/PassManagers.h
index 120ac84bd78cf319d36b99597209b8fbc5138b83..c4f409ef525ce7c5bf0fab4ac6ab388e680fd04b 100644
(file)
--- a/
include/llvm/PassManagers.h
+++ b/
include/llvm/PassManagers.h
@@
-15,11
+15,10
@@
#define LLVM_PASSMANAGERS_H
#include "llvm/Pass.h"
#define LLVM_PASSMANAGERS_H
#include "llvm/Pass.h"
-#include "llvm/PassManager.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>
//===----------------------------------------------------------------------===//
@@
-97,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 '"
@@
-113,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'"
};
@@
-139,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;
};
};
@@
-172,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
@@
-201,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.
@@
-210,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;
}
@@
-228,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;
@@
-274,6
+268,8
@@
public:
}
virtual ~PMDataManager();
}
virtual ~PMDataManager();
+
+ virtual Pass *getAsPass() = 0;
/// Augment AvailableAnalysis by adding analysis made available by pass P.
void recordAvailableAnalysis(Pass *P);
/// Augment AvailableAnalysis by adding analysis made available by pass P.
void recordAvailableAnalysis(Pass *P);
@@
-285,11
+281,11
@@
public:
void removeNotPreservedAnalysis(Pass *P);
/// Remove dead passes used by P.
void removeNotPreservedAnalysis(Pass *P);
/// Remove dead passes used by P.
- void removeDeadPasses(Pass *P,
const StringRef &
Msg,
+ void removeDeadPasses(Pass *P,
StringRef
Msg,
enum PassDebuggingString);
/// Remove P.
enum PassDebuggingString);
/// Remove P.
- void freePass(Pass *P,
const StringRef &
Msg,
+ void freePass(Pass *P,
StringRef
Msg,
enum PassDebuggingString);
/// Add pass P into the PassVector. Update
enum PassDebuggingString);
/// Add pass P into the PassVector. Update
@@
-301,10
+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) {
- assert (0 && "Unable to find on the fly pass");
- return NULL;
- }
+ virtual Pass *getOnTheFlyPass(Pass *P, AnalysisID PI, Function &F);
/// Initialize available analysis information.
void initializeAnalysisInfo() {
/// Initialize available analysis information.
void initializeAnalysisInfo() {
@@
-321,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
@@
-345,7
+338,7
@@
public:
void dumpLastUses(Pass *P, unsigned Offset) const;
void dumpPassArguments() const;
void dumpPassInfo(Pass *P, enum PassDebuggingString S1,
void dumpLastUses(Pass *P, unsigned Offset) const;
void dumpPassArguments() const;
void dumpPassInfo(Pass *P, enum PassDebuggingString S1,
- enum PassDebuggingString S2,
const StringRef &
Msg);
+ enum PassDebuggingString S2,
StringRef
Msg);
void dumpRequiredSet(const Pass *P) const;
void dumpPreservedSet(const Pass *P) const;
void dumpRequiredSet(const Pass *P) const;
void dumpPreservedSet(const Pass *P) const;
@@
-389,12
+382,12
@@
protected:
bool isPassDebuggingExecutionsOrMore() const;
private:
bool isPassDebuggingExecutionsOrMore() const;
private:
- void dumpAnalysisUsage(
const StringRef &
Msg, const Pass *P,
-
const AnalysisUsage::VectorType &Set) const;
+ void dumpAnalysisUsage(
StringRef
Msg, const Pass *P,
+ const AnalysisUsage::VectorType &Set) const;
// Set of available Analysis. This information is used while scheduling
// Set of available Analysis. This information is used while scheduling
- // pass. If a pass requires an analysis which is not
not
available then
- //
equired analysis pass is scheduled to run before the pass itself is
+ // pass. If a pass requires an analysis which is not available then
+ //
the required analysis pass is scheduled to run before the pass itself is
// scheduled to run.
std::map<AnalysisID, Pass*> AvailableAnalysis;
// scheduled to run.
std::map<AnalysisID, Pass*> AvailableAnalysis;
@@
-412,13
+405,11
@@
private:
/// It batches all function passes and basic block pass managers together and
/// sequence them to process one function at a time before processing next
/// function.
/// It batches all function passes and basic block pass managers together and
/// sequence them to process one function at a time before processing next
/// function.
-
class FPPassManager : public ModulePass, public PMDataManager {
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.
@@
-436,6
+427,9
@@
public:
///
bool doFinalization(Module &M);
///
bool doFinalization(Module &M);
+ virtual PMDataManager *getAsPMDataManager() { return this; }
+ virtual Pass *getAsPass() { return this; }
+
/// Pass Manager itself does not invalidate any analysis info.
void getAnalysisUsage(AnalysisUsage &Info) const {
Info.setPreservesAll();
/// Pass Manager itself does not invalidate any analysis info.
void getAnalysisUsage(AnalysisUsage &Info) const {
Info.setPreservesAll();
@@
-459,8
+453,7
@@
public:
}
};
}
};
-extern Timer *StartPassTimer(Pass *);
-extern void StopPassTimer(Pass *, Timer *);
+Timer *getPassTimer(Pass *);
}
}