1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00

Tighten up the AnalysisUsage of lots of passes, primarily to correctly indicate whether or not they invalidate the CFGA

llvm-svn: 2386
This commit is contained in:
Chris Lattner 2002-04-28 21:27:06 +00:00
parent 74ccd0f755
commit ec70d92221
15 changed files with 62 additions and 4 deletions

View File

@ -209,6 +209,10 @@ struct SparcFunctionAsmPrinter : public FunctionPass, public AsmPrinter {
return false; return false;
} }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
}
void emitFunction(const Function *F); void emitFunction(const Function *F);
private : private :
void emitBasicBlock(const BasicBlock *BB); void emitBasicBlock(const BasicBlock *BB);
@ -427,6 +431,11 @@ public:
return false; return false;
} }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
}
private:
void emitGlobalsAndConstants(const Module *M); void emitGlobalsAndConstants(const Module *M);
void printGlobalVariable(const GlobalVariable *GV); void printGlobalVariable(const GlobalVariable *GV);
@ -436,7 +445,6 @@ public:
static void FoldConstants(const Module *M, static void FoldConstants(const Module *M,
std::hash_set<const Constant*> &moduleConstants); std::hash_set<const Constant*> &moduleConstants);
}; };

View File

@ -76,6 +76,10 @@ static bool doHoistPHIConstants(Function *M) {
namespace { namespace {
struct HoistPHIConstants : public FunctionPass { struct HoistPHIConstants : public FunctionPass {
virtual bool runOnFunction(Function *F) { return doHoistPHIConstants(F); } virtual bool runOnFunction(Function *F) { return doHoistPHIConstants(F); }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.preservesCFG();
}
}; };
} }

View File

@ -82,6 +82,10 @@ namespace {
Constants.clear(); Constants.clear();
return false; return false;
} }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
}
}; };
struct DynamicConstantMerge : public ConstantMerge { struct DynamicConstantMerge : public ConstantMerge {

View File

@ -49,6 +49,10 @@ namespace {
bool runOnFunction(Function *F) { bool runOnFunction(Function *F) {
return doit(F, TraceBasicBlockExits, TraceFunctionExits, PrintfFunc); return doit(F, TraceBasicBlockExits, TraceFunctionExits, PrintfFunc);
} }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.preservesCFG();
}
}; };
} // end anonymous namespace } // end anonymous namespace

View File

@ -472,6 +472,10 @@ static bool doRPR(Function *F) {
namespace { namespace {
struct RaisePointerReferences : public FunctionPass { struct RaisePointerReferences : public FunctionPass {
virtual bool runOnFunction(Function *F) { return doRPR(F); } virtual bool runOnFunction(Function *F) { return doRPR(F); }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.preservesCFG();
}
}; };
} }

View File

@ -219,6 +219,12 @@ namespace {
return Modified; return Modified;
} }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
// FIXME: This pass does not preserve the CFG because it folds terminator
// instructions!
//AU.preservesCFG();
}
}; };
} }

View File

@ -175,6 +175,10 @@ namespace {
virtual bool runOnFunction(Function *F) { virtual bool runOnFunction(Function *F) {
return doDecomposeMultiDimRefs(F); return doDecomposeMultiDimRefs(F);
} }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.preservesCFG();
}
}; };
} }

View File

@ -51,7 +51,7 @@ namespace {
// This transformation requires dominator and immediate dominator info // This transformation requires dominator and immediate dominator info
virtual void getAnalysisUsage(AnalysisUsage &AU) const { virtual void getAnalysisUsage(AnalysisUsage &AU) const {
//preservesCFG(AU); AU.preservesCFG();
AU.addRequired(DominatorSet::ID); AU.addRequired(DominatorSet::ID);
AU.addRequired(ImmediateDominators::ID); AU.addRequired(ImmediateDominators::ID);
} }

View File

@ -203,6 +203,7 @@ namespace {
virtual void getAnalysisUsage(AnalysisUsage &AU) const { virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired(LoopInfo::ID); AU.addRequired(LoopInfo::ID);
AU.preservesCFG();
} }
}; };
} }

View File

@ -42,10 +42,12 @@ namespace {
} }
public: public:
virtual bool runOnFunction(Function *F); virtual bool runOnFunction(Function *F);
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.preservesCFG();
}
// Visitation implementation - Implement instruction combining for different // Visitation implementation - Implement instruction combining for different
// instruction types. The semantics are as follows: // instruction types. The semantics are as follows:
// Return Value: // Return Value:

View File

@ -470,6 +470,10 @@ namespace {
SCCP S(F); SCCP S(F);
return S.doSCCP(); return S.doSCCP();
} }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
// FIXME: SCCP does not preserve the CFG because it folds terminators!
//AU.preservesCFG();
}
}; };
} }

View File

@ -64,6 +64,9 @@ namespace {
virtual bool runOnFunction(Function *F) { virtual bool runOnFunction(Function *F) {
return doSymbolStripping(F); return doSymbolStripping(F);
} }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
}
}; };
struct FullSymbolStripping : public SymbolStripping { struct FullSymbolStripping : public SymbolStripping {

View File

@ -53,6 +53,7 @@ namespace {
// //
virtual void getAnalysisUsage(AnalysisUsage &AU) const { virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired(DominanceFrontier::ID); AU.addRequired(DominanceFrontier::ID);
AU.preservesCFG();
} }
private: private:

View File

@ -81,6 +81,10 @@ namespace { // Anonymous namespace for class
return false; return false;
} }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
}
// Verification methods... // Verification methods...
void verifySymbolTable(SymbolTable *ST); void verifySymbolTable(SymbolTable *ST);
void visitFunction(Function *F); void visitFunction(Function *F);

View File

@ -110,6 +110,7 @@ public:
virtual void getAnalysisUsage(AnalysisUsage &AU) const { virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired(ID); AU.addRequired(ID);
AU.setPreservesAll();
} }
}; };
@ -137,6 +138,10 @@ struct InstForest : public FunctionPass {
void doit(Function *F) { void doit(Function *F) {
std::cout << analysis::InstForest<char>(F); std::cout << analysis::InstForest<char>(F);
} }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
}
}; };
struct IndVars : public FunctionPass { struct IndVars : public FunctionPass {
@ -152,6 +157,7 @@ struct IndVars : public FunctionPass {
void getAnalysisUsage(AnalysisUsage &AU) const { void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired(LoopInfo::ID); AU.addRequired(LoopInfo::ID);
AU.setPreservesAll();
} }
}; };
@ -183,6 +189,9 @@ struct Exprs : public FunctionPass {
std::cout << "\n\n"; std::cout << "\n\n";
} }
} }
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
}
}; };