mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-15 07:34:33 +00:00
Fix bug where we didn't initialize and finalize basic block passes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1599 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bafff3380e
commit
a4e4b23b6d
@ -150,7 +150,7 @@ public:
|
|||||||
for (std::vector<AnalysisID>::iterator I = Required.begin(),
|
for (std::vector<AnalysisID>::iterator I = Required.begin(),
|
||||||
E = Required.end(); I != E; ++I) {
|
E = Required.end(); I != E; ++I) {
|
||||||
if (getAnalysisOrNullDown(*I) == 0)
|
if (getAnalysisOrNullDown(*I) == 0)
|
||||||
add(I->createPass());
|
add((PassClass*)I->createPass());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tell the pass to add itself to this PassManager... the way it does so
|
// Tell the pass to add itself to this PassManager... the way it does so
|
||||||
@ -282,14 +282,19 @@ template<> struct PassManagerTraits<BasicBlock> : public BasicBlockPass {
|
|||||||
// ParentClass - The type of the parent PassManager...
|
// ParentClass - The type of the parent PassManager...
|
||||||
typedef PassManagerT<Method> ParentClass;
|
typedef PassManagerT<Method> ParentClass;
|
||||||
|
|
||||||
|
// PMType - The type of the passmanager that subclasses this class
|
||||||
|
typedef PassManagerT<BasicBlock> PMType;
|
||||||
|
|
||||||
// runPass - Specify how the pass should be run on the UnitType
|
// runPass - Specify how the pass should be run on the UnitType
|
||||||
static bool runPass(PassClass *P, BasicBlock *M) {
|
static bool runPass(PassClass *P, BasicBlock *M) {
|
||||||
// todo, init and finalize
|
// todo, init and finalize
|
||||||
return P->runOnBasicBlock(M);
|
return P->runOnBasicBlock(M);
|
||||||
}
|
}
|
||||||
|
|
||||||
// run - Implement the Pass interface...
|
// Implement the BasicBlockPass interface...
|
||||||
|
virtual bool doInitialization(Module *M);
|
||||||
virtual bool runOnBasicBlock(BasicBlock *BB);
|
virtual bool runOnBasicBlock(BasicBlock *BB);
|
||||||
|
virtual bool doFinalization(Module *M);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -364,8 +369,22 @@ template<> struct PassManagerTraits<Module> : public Pass {
|
|||||||
|
|
||||||
// PassManagerTraits<BasicBlock> Implementations
|
// PassManagerTraits<BasicBlock> Implementations
|
||||||
//
|
//
|
||||||
|
inline bool PassManagerTraits<BasicBlock>::doInitialization(Module *M) {
|
||||||
|
bool Changed = false;
|
||||||
|
for (unsigned i = 0, e = ((PMType*)this)->Passes.size(); i != e; ++i)
|
||||||
|
((PMType*)this)->Passes[i]->doInitialization(M);
|
||||||
|
return Changed;
|
||||||
|
}
|
||||||
|
|
||||||
inline bool PassManagerTraits<BasicBlock>::runOnBasicBlock(BasicBlock *BB) {
|
inline bool PassManagerTraits<BasicBlock>::runOnBasicBlock(BasicBlock *BB) {
|
||||||
return ((PassManagerT<BasicBlock>*)this)->runOnUnit(BB);
|
return ((PMType*)this)->runOnUnit(BB);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool PassManagerTraits<BasicBlock>::doFinalization(Module *M) {
|
||||||
|
bool Changed = false;
|
||||||
|
for (unsigned i = 0, e = ((PMType*)this)->Passes.size(); i != e; ++i)
|
||||||
|
((PMType*)this)->Passes[i]->doFinalization(M);
|
||||||
|
return Changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -382,9 +401,6 @@ inline bool PassManagerTraits<Method>::runOnMethod(Method *M) {
|
|||||||
return ((PMType*)this)->runOnUnit(M);
|
return ((PMType*)this)->runOnUnit(M);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// PassManagerTraits<Module> Implementations
|
|
||||||
//
|
|
||||||
inline bool PassManagerTraits<Method>::doFinalization(Module *M) {
|
inline bool PassManagerTraits<Method>::doFinalization(Module *M) {
|
||||||
bool Changed = false;
|
bool Changed = false;
|
||||||
for (unsigned i = 0, e = ((PMType*)this)->Passes.size(); i != e; ++i)
|
for (unsigned i = 0, e = ((PMType*)this)->Passes.size(); i != e; ++i)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user