implement getelementptr.ll:test10

llvm-svn: 21541
This commit is contained in:
Chris Lattner 2005-04-25 20:17:30 +00:00
parent 615fe53900
commit 3f22e5ba5d

View File

@ -2277,8 +2277,26 @@ Instruction *InstCombiner::FoldGEPSetCC(User *GEPLHS, Value *RHS,
Constant::getNullValue(Offset->getType()));
}
} else if (User *GEPRHS = dyn_castGetElementPtr(RHS)) {
if (PtrBase != GEPRHS->getOperand(0))
// If the base pointers are different, but the indices are the same, just
// compare the base pointer.
if (PtrBase != GEPRHS->getOperand(0)) {
bool IndicesTheSame = GEPLHS->getNumOperands()==GEPRHS->getNumOperands();
if (IndicesTheSame)
for (unsigned i = 1, e = GEPLHS->getNumOperands(); i != e; ++i)
if (GEPLHS->getOperand(i) != GEPRHS->getOperand(i)) {
IndicesTheSame = false;
break;
}
// If all indices are the same, just compare the base pointers.
if (IndicesTheSame)
return new SetCondInst(Cond, GEPLHS->getOperand(0),
GEPRHS->getOperand(0));
// Otherwise, the base pointers are different and the indices are
// different, bail out.
return 0;
}
// If one of the GEPs has all zero indices, recurse.
bool AllZeros = true;