mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
Make SROA and PredicateSimplifier cope if TargetData is not
available. This is very conservative for now. llvm-svn: 79442
This commit is contained in:
parent
ba656de4a4
commit
e982de2e30
@ -2284,8 +2284,6 @@ namespace {
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.addRequiredID(BreakCriticalEdgesID);
|
||||
AU.addRequired<DominatorTree>();
|
||||
AU.addRequired<TargetData>();
|
||||
AU.addPreserved<TargetData>();
|
||||
}
|
||||
|
||||
private:
|
||||
@ -2409,7 +2407,13 @@ namespace {
|
||||
bool PredicateSimplifier::runOnFunction(Function &F) {
|
||||
DominatorTree *DT = &getAnalysis<DominatorTree>();
|
||||
DTDFS = new DomTreeDFS(DT);
|
||||
TargetData *TD = &getAnalysis<TargetData>();
|
||||
TargetData *TD = getAnalysisIfAvailable<TargetData>();
|
||||
|
||||
// FIXME: PredicateSimplifier should still be able to do basic
|
||||
// optimizations without TargetData. But for now, just exit if
|
||||
// it's not available.
|
||||
if (!TD) return false;
|
||||
|
||||
Context = &F.getContext();
|
||||
|
||||
DEBUG(errs() << "Entering Function: " << F.getName() << "\n");
|
||||
|
@ -68,7 +68,6 @@ namespace {
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.addRequired<DominatorTree>();
|
||||
AU.addRequired<DominanceFrontier>();
|
||||
AU.addRequired<TargetData>();
|
||||
AU.setPreservesCFG();
|
||||
}
|
||||
|
||||
@ -150,9 +149,16 @@ FunctionPass *llvm::createScalarReplAggregatesPass(signed int Threshold) {
|
||||
|
||||
|
||||
bool SROA::runOnFunction(Function &F) {
|
||||
TD = &getAnalysis<TargetData>();
|
||||
|
||||
TD = getAnalysisIfAvailable<TargetData>();
|
||||
|
||||
bool Changed = performPromotion(F);
|
||||
|
||||
// FIXME: ScalarRepl currently depends on TargetData more than it
|
||||
// theoretically needs to. It should be refactored in order to support
|
||||
// target-independent IR. Until this is done, just skip the actual
|
||||
// scalar-replacement portion of this pass.
|
||||
if (!TD) return Changed;
|
||||
|
||||
while (1) {
|
||||
bool LocalChange = performScalarRepl(F);
|
||||
if (!LocalChange) break; // No need to repromote if no scalarrepl
|
||||
|
Loading…
Reference in New Issue
Block a user