diff options
author | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2018-04-17 21:40:04 +0000 |
---|---|---|
committer | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2018-04-17 21:40:04 +0000 |
commit | 0bee630814d0031fa17997c3c21c8499ac42db60 (patch) | |
tree | d7feaaf3d7d7f15c80083a503cf385b2c2746c39 /llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp | |
parent | f437e35671089ab3bdbf11b65a53fe22b9f24172 (diff) | |
download | bcm5719-llvm-0bee630814d0031fa17997c3c21c8499ac42db60.tar.gz bcm5719-llvm-0bee630814d0031fa17997c3c21c8499ac42db60.zip |
LoadStoreVectorizer crashes due to unsized type
When we skip bitcasts while looking for GEP in LoadSoreVectorizer
we should also verify that the type is sized otherwise we assert
Differential Revision: https://reviews.llvm.org/D45709
llvm-svn: 330221
Diffstat (limited to 'llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp')
-rw-r--r-- | llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp b/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp index 984d972a6fd..2e4707f916d 100644 --- a/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp @@ -284,8 +284,10 @@ GetElementPtrInst *Vectorizer::getSourceGEP(Value *Src) const { // in pointee type size here. Currently it will not be vectorized. Value *SrcPtr = getLoadStorePointerOperand(Src); Value *SrcBase = SrcPtr->stripPointerCasts(); - if (DL.getTypeStoreSize(SrcPtr->getType()->getPointerElementType()) == - DL.getTypeStoreSize(SrcBase->getType()->getPointerElementType())) + Type *SrcPtrType = SrcPtr->getType()->getPointerElementType(); + Type *SrcBaseType = SrcBase->getType()->getPointerElementType(); + if (SrcPtrType->isSized() && SrcBaseType->isSized() && + DL.getTypeStoreSize(SrcPtrType) == DL.getTypeStoreSize(SrcBaseType)) SrcPtr = SrcBase; return dyn_cast<GetElementPtrInst>(SrcPtr); } |