diff options
| author | Dan Gohman <gohman@apple.com> | 2009-08-19 18:22:18 +0000 |
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2009-08-19 18:22:18 +0000 |
| commit | 915302c6059829c3b9cc8ee131e1e81f002287d1 (patch) | |
| tree | 5ee04332781f35dc58dd1362528ba6846ce966c6 | |
| parent | 5d5bc6d000c1a23cae7c12575aeba27653f34921 (diff) | |
| download | bcm5719-llvm-915302c6059829c3b9cc8ee131e1e81f002287d1.tar.gz bcm5719-llvm-915302c6059829c3b9cc8ee131e1e81f002287d1.zip | |
Make SROA and PredicateSimplifier cope if TargetData is not
available. This is very conservative for now.
llvm-svn: 79442
| -rw-r--r-- | llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp | 10 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp | 12 |
2 files changed, 16 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp b/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp index 4bcc339464a..26183365a6a 100644 --- a/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp +++ b/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp @@ -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"); diff --git a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp index 4f99ee8e6ef..378fb21a466 100644 --- a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp +++ b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp @@ -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 |

