mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-17 16:46:50 +00:00
implement getelementptr.ll:test10
llvm-svn: 21541
This commit is contained in:
parent
615fe53900
commit
3f22e5ba5d
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user