mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Tighten up the AnalysisUsage of lots of passes, primarily to correctly indicate whether or not they invalidate the CFGA
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2386 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -76,6 +76,10 @@ static bool doHoistPHIConstants(Function *M) {
|
||||
namespace {
|
||||
struct HoistPHIConstants : public FunctionPass {
|
||||
virtual bool runOnFunction(Function *F) { return doHoistPHIConstants(F); }
|
||||
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.preservesCFG();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
@@ -82,6 +82,10 @@ namespace {
|
||||
Constants.clear();
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesAll();
|
||||
}
|
||||
};
|
||||
|
||||
struct DynamicConstantMerge : public ConstantMerge {
|
||||
|
@@ -49,6 +49,10 @@ namespace {
|
||||
bool runOnFunction(Function *F) {
|
||||
return doit(F, TraceBasicBlockExits, TraceFunctionExits, PrintfFunc);
|
||||
}
|
||||
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.preservesCFG();
|
||||
}
|
||||
};
|
||||
} // end anonymous namespace
|
||||
|
||||
|
@@ -472,6 +472,10 @@ static bool doRPR(Function *F) {
|
||||
namespace {
|
||||
struct RaisePointerReferences : public FunctionPass {
|
||||
virtual bool runOnFunction(Function *F) { return doRPR(F); }
|
||||
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.preservesCFG();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
@@ -219,6 +219,12 @@ namespace {
|
||||
|
||||
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) {
|
||||
return doDecomposeMultiDimRefs(F);
|
||||
}
|
||||
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.preservesCFG();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
@@ -51,7 +51,7 @@ namespace {
|
||||
|
||||
// This transformation requires dominator and immediate dominator info
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
//preservesCFG(AU);
|
||||
AU.preservesCFG();
|
||||
AU.addRequired(DominatorSet::ID);
|
||||
AU.addRequired(ImmediateDominators::ID);
|
||||
}
|
||||
|
@@ -203,6 +203,7 @@ namespace {
|
||||
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.addRequired(LoopInfo::ID);
|
||||
AU.preservesCFG();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@@ -42,10 +42,12 @@ namespace {
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
|
||||
virtual bool runOnFunction(Function *F);
|
||||
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.preservesCFG();
|
||||
}
|
||||
|
||||
// Visitation implementation - Implement instruction combining for different
|
||||
// instruction types. The semantics are as follows:
|
||||
// Return Value:
|
||||
|
@@ -470,6 +470,10 @@ namespace {
|
||||
SCCP S(F);
|
||||
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) {
|
||||
return doSymbolStripping(F);
|
||||
}
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesAll();
|
||||
}
|
||||
};
|
||||
|
||||
struct FullSymbolStripping : public SymbolStripping {
|
||||
|
@@ -53,6 +53,7 @@ namespace {
|
||||
//
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.addRequired(DominanceFrontier::ID);
|
||||
AU.preservesCFG();
|
||||
}
|
||||
|
||||
private:
|
||||
|
Reference in New Issue
Block a user