summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-11-27 05:19:56 +0000
committerChris Lattner <sabre@nondot.org>2009-11-27 05:19:56 +0000
commitcca130bb66a927b82fd030d60d1e8048898d1624 (patch)
tree1b2cbdadc89fadba1633242603edbf77b0fffe7e /lib
parent518c988ae99273c06e12d0e581cc06806fa72ed2 (diff)
downloadllvm-cca130bb66a927b82fd030d60d1e8048898d1624.tar.gz
llvm-cca130bb66a927b82fd030d60d1e8048898d1624.tar.bz2
llvm-cca130bb66a927b82fd030d60d1e8048898d1624.tar.xz
try again.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89990 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Analysis/MemoryDependenceAnalysis.cpp13
1 files changed, 6 insertions, 7 deletions
diff --git a/lib/Analysis/MemoryDependenceAnalysis.cpp b/lib/Analysis/MemoryDependenceAnalysis.cpp
index e5c3126812..1025fd5697 100644
--- a/lib/Analysis/MemoryDependenceAnalysis.cpp
+++ b/lib/Analysis/MemoryDependenceAnalysis.cpp
@@ -700,7 +700,6 @@ static bool isPHITranslatable(Instruction *Inst) {
// We can translate a GEP that uses a PHI in the current block for at least
// one of its operands.
- if (0)
if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Inst)) {
for (unsigned i = 0, e = GEP->getNumOperands(); i != e; ++i)
if (PHINode *PN = dyn_cast<PHINode>(GEP->getOperand(i)))
@@ -747,11 +746,11 @@ static Value *PHITranslateForPred(Instruction *Inst, BasicBlock *Pred,
if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Inst)) {
SmallVector<Value*, 8> GEPOps;
Value *APHIOp = 0;
+ BasicBlock *CurBB = GEP->getParent();
for (unsigned i = 0, e = GEP->getNumOperands(); i != e; ++i) {
- GEPOps.push_back(GEP->getOperand(i));
- if (PHINode *PN = dyn_cast<PHINode>(GEP->getOperand(i)))
- if (PN->getParent() == GEP->getParent())
- GEPOps.back() = APHIOp = PN->getIncomingValueForBlock(Pred);
+ GEPOps.push_back(GEP->getOperand(i)->DoPHITranslation(CurBB, Pred));
+ if (!isa<Constant>(GEPOps.back()))
+ APHIOp = GEPOps.back();
}
// Simplify the GEP to handle 'gep x, 0' -> x etc.
@@ -762,9 +761,9 @@ static Value *PHITranslateForPred(Instruction *Inst, BasicBlock *Pred,
for (Value::use_iterator UI = APHIOp->use_begin(), E = APHIOp->use_end();
UI != E; ++UI) {
if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(*UI))
- if (GEPI->getType() == GEPI->getType() &&
+ if (GEPI->getType() == GEP->getType() &&
GEPI->getNumOperands() == GEPOps.size() &&
- GEPI->getParent()->getParent() == Inst->getParent()->getParent()) {
+ GEPI->getParent()->getParent() == CurBB->getParent()) {
bool Mismatch = false;
for (unsigned i = 0, e = GEPOps.size(); i != e; ++i)
if (GEPI->getOperand(i) != GEPOps[i]) {