summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2009-08-19 18:22:18 +0000
committerDan Gohman <gohman@apple.com>2009-08-19 18:22:18 +0000
commit915302c6059829c3b9cc8ee131e1e81f002287d1 (patch)
tree5ee04332781f35dc58dd1362528ba6846ce966c6
parent5d5bc6d000c1a23cae7c12575aeba27653f34921 (diff)
downloadbcm5719-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.cpp10
-rw-r--r--llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp12
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
OpenPOWER on IntegriCloud