Index: llvm/lib/IR/Operator.cpp =================================================================== --- llvm/lib/IR/Operator.cpp +++ llvm/lib/IR/Operator.cpp @@ -38,7 +38,7 @@ Align Result = Align(llvm::Value::MaximumAlignment); for (gep_type_iterator GTI = gep_type_begin(this), GTE = gep_type_end(this); GTI != GTE; ++GTI) { - int64_t Offset = 1; + uint64_t Offset; ConstantInt *OpC = dyn_cast(GTI.getOperand()); if (StructType *STy = GTI.getStructTypeOrNull()) { @@ -46,11 +46,9 @@ Offset = SL->getElementOffset(OpC->getZExtValue()); } else { assert(GTI.isSequential() && "should be sequencial"); - /// If the index isn't know we take 1 because it is the index that will + /// If the index isn't known, we take 1 because it is the index that will /// give the worse alignment of the offset. - int64_t ElemCount = 1; - if (OpC) - ElemCount = OpC->getZExtValue(); + const uint64_t ElemCount = OpC ? OpC->getZExtValue() : 1; Offset = DL.getTypeAllocSize(GTI.getIndexedType()) * ElemCount; } Result = Align(MinAlign(Offset, Result.value()));