diff options
| author | Tom Stellard <tstellar@redhat.com> | 2017-11-13 22:26:54 +0000 |
|---|---|---|
| committer | Tom Stellard <tstellar@redhat.com> | 2017-11-13 22:26:54 +0000 |
| commit | 8baf891c0f1426d89835f878ba94cb198d93b155 (patch) | |
| tree | 32d3801f63e8c161aac4c7f59ba271e714e9dd01 | |
| parent | f042b00be5f69c21b3fe846f7343dd44ed92a74e (diff) | |
Merging r316824:
------------------------------------------------------------------------
r316824 | haicheng | 2017-10-27 19:27:14 -0700 (Fri, 27 Oct 2017) | 7 lines
[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
------------------------------------------------------------------------
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_50@318096 91177308-0d34-0410-b5e6-96231b3b80d8
| -rw-r--r-- | lib/IR/ConstantFold.cpp | 3 | ||||
| -rw-r--r-- | test/Transforms/InstCombine/gep-vector.ll | 9 |
2 files changed, 12 insertions, 0 deletions
diff --git a/lib/IR/ConstantFold.cpp b/lib/IR/ConstantFold.cpp index 311b0a76ce8a..996331e68e83 100644 --- a/lib/IR/ConstantFold.cpp +++ b/lib/IR/ConstantFold.cpp @@ -2199,6 +2199,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 diff --git a/test/Transforms/InstCombine/gep-vector.ll b/test/Transforms/InstCombine/gep-vector.ll index ce021bf207fc..f7ed1a776f53 100644 --- a/test/Transforms/InstCombine/gep-vector.ll +++ b/test/Transforms/InstCombine/gep-vector.ll @@ -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 +} |
