Skip to content

Commit

Permalink
SROA: Check Total Bits of vector type
Browse files Browse the repository at this point in the history
While Promoting alloca instruction of Vector Type, 
Check total size in bits of its slices too.
If they don't match, don't promote the alloca instruction.

Bug : https://bugs.llvm.org/show_bug.cgi?id=42585

llvm-svn: 372480
  • Loading branch information
ssarda-qcom committed Sep 21, 2019
1 parent c62136e commit cd629ea
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
8 changes: 8 additions & 0 deletions llvm/lib/Transforms/Scalar/SROA.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1888,6 +1888,14 @@ static VectorType *isVectorPromotionViable(Partition &P, const DataLayout &DL) {
bool HaveCommonEltTy = true;
auto CheckCandidateType = [&](Type *Ty) {
if (auto *VTy = dyn_cast<VectorType>(Ty)) {
// Return if bitcast to vectors is different for total size in bits.
if (!CandidateTys.empty()) {
VectorType *V = CandidateTys[0];
if (DL.getTypeSizeInBits(VTy) != DL.getTypeSizeInBits(V)) {
CandidateTys.clear();
return;
}
}
CandidateTys.push_back(VTy);
if (!CommonEltTy)
CommonEltTy = VTy->getElementType();
Expand Down
24 changes: 24 additions & 0 deletions llvm/test/Transforms/SROA/vector-promotion-different-size.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
; RUN: opt < %s -sroa -S | FileCheck %s
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-n8:16:32:64"

define <4 x i1> @vector_bitcast() {
; CHECK-LABEL: @vector_bitcast
; CHECK: alloca i1

%a = alloca <3 x i1>
store <3 x i1> <i1 1,i1 0,i1 1>, <3 x i1>* %a
%cast = bitcast <3 x i1>* %a to <4 x i1>*
%vec = load <4 x i1>, <4 x i1>* %cast
ret <4 x i1> %vec
}

define void @vector_bitcast_2() {
; CHECK-LABEL: @vector_bitcast_2
; CHECK: alloca <32 x i16>

%"sum$1.host2" = alloca <32 x i16>
store <32 x i16> undef, <32 x i16>* %"sum$1.host2"
%bc = bitcast <32 x i16>* %"sum$1.host2" to <64 x i16>*
%bcl = load <64 x i16>, <64 x i16>* %bc
ret void
}

0 comments on commit cd629ea

Please sign in to comment.