Index: lib/IR/ConstantFold.cpp =================================================================== --- lib/IR/ConstantFold.cpp +++ lib/IR/ConstantFold.cpp @@ -2210,6 +2210,8 @@ Unknown = true; continue; } + if (!isa(Idxs[i - 1])) + continue; if (InRangeIndex && i == *InRangeIndex + 1) { // If an index is marked inrange, we cannot apply this canonicalization to // the following index, as that will cause the inrange index to point to Index: test/Transforms/InstCombine/gep-vector.ll =================================================================== --- test/Transforms/InstCombine/gep-vector.ll +++ test/Transforms/InstCombine/gep-vector.ll @@ -13,3 +13,12 @@ %el = getelementptr inbounds i64, i64* undef, <8 x i64> undef ret <8 x i64*> %el } + +@block = global [64 x [8192 x i8]] zeroinitializer, align 1 + +; CHECK-LABEL:vectorindex +; CHECK-NEXT: ret <2 x i8*> getelementptr inbounds ([64 x [8192 x i8]], [64 x [8192 x i8]]* @block, <2 x i64> zeroinitializer, <2 x i64> , <2 x i64> ) +define <2 x i8*> @vectorindex() { + %1 = getelementptr inbounds [64 x [8192 x i8]], [64 x [8192 x i8]]* @block, i64 0, <2 x i64> , i64 8192 + ret <2 x i8*> %1 +}