Move several non-performance-critical member functinos out of line.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106444 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2010-06-21 18:46:45 +00:00
parent b1e51f6910
commit e407c1d158
6 changed files with 61 additions and 42 deletions

View File

@ -31,7 +31,6 @@
#include "llvm/System/DataTypes.h"
#include <cassert>
#include <string>
#include <utility>
#include <vector>
@ -89,13 +88,8 @@ class Pass {
Pass(const Pass &); // DO NOT IMPLEMENT
public:
explicit Pass(PassKind K, intptr_t pid) : Resolver(0), PassID(pid), Kind(K) {
assert(pid && "pid cannot be 0");
}
explicit Pass(PassKind K, const void *pid)
: Resolver(0), PassID((intptr_t)pid), Kind(K) {
assert(pid && "pid cannot be 0");
}
explicit Pass(PassKind K, intptr_t pid);
explicit Pass(PassKind K, const void *pid);
virtual ~Pass();
@ -138,13 +132,8 @@ public:
virtual PassManagerType getPotentialPassManagerType() const;
// Access AnalysisResolver
inline void setResolver(AnalysisResolver *AR) {
assert(!Resolver && "Resolver is already set");
Resolver = AR;
}
inline AnalysisResolver *getResolver() {
return Resolver;
}
void setResolver(AnalysisResolver *AR);
AnalysisResolver *getResolver() const { return Resolver; }
/// getAnalysisUsage - This function should be overriden by passes that need
/// analysis information to do their job. If a pass specifies that it uses a
@ -170,11 +159,9 @@ public:
/// an analysis interface through multiple inheritance. If needed, it should
/// override this to adjust the this pointer as needed for the specified pass
/// info.
virtual void *getAdjustedAnalysisPointer(const PassInfo *) {
return this;
}
virtual ImmutablePass *getAsImmutablePass() { return 0; }
virtual PMDataManager *getAsPMDataManager() { return 0; }
virtual void *getAdjustedAnalysisPointer(const PassInfo *);
virtual ImmutablePass *getAsImmutablePass();
virtual PMDataManager *getAsPMDataManager();
/// verifyAnalysis() - This member can be implemented by a analysis pass to
/// check state of analysis information.

View File

@ -49,22 +49,13 @@ public:
// addRequired - Add the specified ID to the required set of the usage info
// for a pass.
//
AnalysisUsage &addRequiredID(AnalysisID ID) {
assert(ID && "Pass class not registered!");
Required.push_back(ID);
return *this;
}
AnalysisUsage &addRequiredID(AnalysisID ID);
template<class PassClass>
AnalysisUsage &addRequired() {
return addRequiredID(Pass::getClassPassInfo<PassClass>());
}
AnalysisUsage &addRequiredTransitiveID(AnalysisID ID) {
assert(ID && "Pass class not registered!");
Required.push_back(ID);
RequiredTransitive.push_back(ID);
return *this;
}
AnalysisUsage &addRequiredTransitiveID(AnalysisID ID);
template<class PassClass>
AnalysisUsage &addRequiredTransitive() {
AnalysisID ID = Pass::getClassPassInfo<PassClass>();

View File

@ -302,10 +302,7 @@ public:
/// 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, const PassInfo *PI, Function &F);
/// Initialize available analysis information.
void initializeAnalysisInfo() {

View File

@ -109,13 +109,7 @@ public:
}
/// createPass() - Use this method to create an instance of this pass.
Pass *createPass() const {
assert((!isAnalysisGroup() || NormalCtor) &&
"No default implementation found for analysis group!");
assert(NormalCtor &&
"Cannot call createPass on PassInfo without default ctor!");
return NormalCtor();
}
Pass *createPass() const;
/// addInterfaceImplemented - This method is called when this pass is
/// registered as a member of an analysis group with the RegisterAnalysisGroup

View File

@ -35,6 +35,15 @@ using namespace llvm;
// Pass Implementation
//
Pass::Pass(PassKind K, intptr_t pid) : Resolver(0), PassID(pid), Kind(K) {
assert(pid && "pid cannot be 0");
}
Pass::Pass(PassKind K, const void *pid)
: Resolver(0), PassID((intptr_t)pid), Kind(K) {
assert(pid && "pid cannot be 0");
}
// Force out-of-line virtual method.
Pass::~Pass() {
delete Resolver;
@ -92,6 +101,23 @@ void Pass::verifyAnalysis() const {
// By default, don't do anything.
}
void *Pass::getAdjustedAnalysisPointer(const PassInfo *) {
return this;
}
ImmutablePass *Pass::getAsImmutablePass() {
return 0;
}
PMDataManager *Pass::getAsPMDataManager() {
return 0;
}
void Pass::setResolver(AnalysisResolver *AR) {
assert(!Resolver && "Resolver is already set");
Resolver = AR;
}
// print - Print out the internal state of the pass. This is called by Analyze
// to print out the contents of an analysis. Otherwise it is not necessary to
// implement this method.
@ -364,6 +390,14 @@ void PassInfo::unregisterPass() {
getPassRegistrar()->UnregisterPass(*this);
}
Pass *PassInfo::createPass() const {
assert((!isAnalysisGroup() || NormalCtor) &&
"No default implementation found for analysis group!");
assert(NormalCtor &&
"Cannot call createPass on PassInfo without default ctor!");
return NormalCtor();
}
//===----------------------------------------------------------------------===//
// Analysis Group Implementation Code
//===----------------------------------------------------------------------===//
@ -467,4 +501,15 @@ void AnalysisUsage::setPreservesCFG() {
GetCFGOnlyPasses(Preserved).enumeratePasses();
}
AnalysisUsage &AnalysisUsage::addRequiredID(AnalysisID ID) {
assert(ID && "Pass class not registered!");
Required.push_back(ID);
return *this;
}
AnalysisUsage &AnalysisUsage::addRequiredTransitiveID(AnalysisID ID) {
assert(ID && "Pass class not registered!");
Required.push_back(ID);
RequiredTransitive.push_back(ID);
return *this;
}

View File

@ -1147,6 +1147,11 @@ void PMDataManager::addLowerLevelRequiredPass(Pass *P, Pass *RequiredPass) {
llvm_unreachable("Unable to schedule pass");
}
Pass *PMDataManager::getOnTheFlyPass(Pass *P, const PassInfo *PI, Function &F) {
assert(0 && "Unable to find on the fly pass");
return NULL;
}
// Destructor
PMDataManager::~PMDataManager() {
for (SmallVector<Pass *, 8>::iterator I = PassVector.begin(),