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:
parent
74ccd0f755
commit
ec70d92221
@ -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);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -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:
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
@ -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:
|
||||||
|
@ -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);
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user