forked from OSchip/llvm-project
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
This commit is contained in:
parent
f437e35671
commit
0bee630814
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
; RUN: opt -load-store-vectorizer < %s -S | FileCheck %s
|
||||
|
||||
%struct_render_pipeline_state = type opaque
|
||||
|
||||
define fastcc void @main(%struct_render_pipeline_state addrspace(1)* %pso) unnamed_addr {
|
||||
; CHECK: load i16
|
||||
; CHECK: load i16
|
||||
entry:
|
||||
%tmp = bitcast %struct_render_pipeline_state addrspace(1)* %pso to i16 addrspace(1)*
|
||||
%tmp1 = load i16, i16 addrspace(1)* %tmp, align 2
|
||||
%tmp2 = bitcast %struct_render_pipeline_state addrspace(1)* %pso to i8 addrspace(1)*
|
||||
%sunkaddr51 = getelementptr i8, i8 addrspace(1)* %tmp2, i64 6
|
||||
%tmp3 = bitcast i8 addrspace(1)* %sunkaddr51 to i16 addrspace(1)*
|
||||
%tmp4 = load i16, i16 addrspace(1)* %tmp3, align 2
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue