if (SrcSize >= MidSize && MidSize >= DstSize)
return true;
+ // Cases where the source and destination type are the same, but the middle
+ // type is bigger are noops.
+ //
+ if (SrcSize == DstSize && MidSize > SrcSize)
+ return true;
+
// If we are monotonically growing, things are more complex.
//
if (SrcSize <= MidSize && MidSize <= DstSize) {
*cast<Constant>(GEP.getOperand(1));
assert(Indices[0] != 0 && "Constant folding of uint's failed!?");
- } else if (*GEP.idx_begin() == ConstantUInt::getNullValue(Type::LongTy)) {
+ } else if (*GEP.idx_begin() == ConstantUInt::getNullValue(Type::LongTy) &&
+ Src->getNumOperands() != 1) {
// Otherwise we can do the fold if the first index of the GEP is a zero
Indices.insert(Indices.end(), Src->idx_begin(), Src->idx_end());
Indices.insert(Indices.end(), GEP.idx_begin()+1, GEP.idx_end());