forked from OSchip/llvm-project
[ConstantFold] Fix a crash when folding a GEP that has vector index
LLVM crashes when factoring out an out-of-bound index into preceding dimension and the preceding dimension uses vector index. Simply bail out now when this case happens. Differential Revision: https://reviews.llvm.org/D38677 llvm-svn: 316824
This commit is contained in:
parent
fd0a35a649
commit
eb92e569de
|
@ -2219,6 +2219,9 @@ Constant *llvm::ConstantFoldGetElementPtr(Type *PointeeTy, Constant *C,
|
|||
Unknown = true;
|
||||
continue;
|
||||
}
|
||||
if (!isa<ConstantInt>(Idxs[i - 1]))
|
||||
// FIXME: add the support of cosntant vector index.
|
||||
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
|
||||
|
|
|
@ -13,3 +13,12 @@ define <8 x i64*> @patatino2() {
|
|||
%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> <i64 0, i64 1>, <2 x i64> <i64 8192, i64 8192>)
|
||||
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 0, i64 1>, i64 8192
|
||||
ret <2 x i8*> %1
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue