Instcombine cast (getelementptr Ptr, 0, 0, 0) to ... into: cast Ptr to ...

This fixes type safety problems in a variety of benchmarks that were confusing
DSA.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6837 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2003-06-21 23:12:02 +00:00
parent 1474b47600
commit 797249bc13

View File

@ -930,6 +930,23 @@ Instruction *InstCombiner::visitCastInst(CastInst &CI) {
}
}
// If casting the result of a getelementptr instruction with no offset, turn
// this into a cast of the original pointer!
//
if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(CI.getOperand(0))) {
bool AllZeroOperands = true;
for (unsigned i = 1, e = GEP->getNumOperands(); i != e; ++i)
if (!isa<Constant>(GEP->getOperand(i)) ||
!cast<Constant>(GEP->getOperand(i))->isNullValue()) {
AllZeroOperands = false;
break;
}
if (AllZeroOperands) {
CI.setOperand(0, GEP->getOperand(0));
return &CI;
}
}
return 0;
}