Before trying to introduce/eliminate cast/ext/trunc to make indices type as

pointer type, make sure that the pointer size is a valid sequential index type.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69574 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Sanjiv Gupta 2009-04-20 06:05:54 +00:00
parent 848b3142ad
commit 428098de62

View File

@ -10695,7 +10695,12 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
gep_type_iterator GTI = gep_type_begin(GEP);
for (User::op_iterator i = GEP.op_begin() + 1, e = GEP.op_end();
i != e; ++i, ++GTI) {
if (isa<SequentialType>(*GTI)) {
// Before trying to eliminate/introduce cast/ext/trunc to make
// indices as pointer types, make sure that the pointer size
// makes a valid sequential index.
const SequentialType *ST = dyn_cast<SequentialType>(*GTI);
Value *PtrTypeVal = Constant::getNullValue(TD->getIntPtrType());
if (ST && ST->indexValid(PtrTypeVal)) {
if (CastInst *CI = dyn_cast<CastInst>(*i)) {
if (CI->getOpcode() == Instruction::ZExt ||
CI->getOpcode() == Instruction::SExt) {