Skip to content

Commit cd629ea

Browse files
committed
SROA: Check Total Bits of vector type
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
1 parent c62136e commit cd629ea

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

llvm/lib/Transforms/Scalar/SROA.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -1888,6 +1888,14 @@ static VectorType *isVectorPromotionViable(Partition &P, const DataLayout &DL) {
18881888
bool HaveCommonEltTy = true;
18891889
auto CheckCandidateType = [&](Type *Ty) {
18901890
if (auto *VTy = dyn_cast<VectorType>(Ty)) {
1891+
// Return if bitcast to vectors is different for total size in bits.
1892+
if (!CandidateTys.empty()) {
1893+
VectorType *V = CandidateTys[0];
1894+
if (DL.getTypeSizeInBits(VTy) != DL.getTypeSizeInBits(V)) {
1895+
CandidateTys.clear();
1896+
return;
1897+
}
1898+
}
18911899
CandidateTys.push_back(VTy);
18921900
if (!CommonEltTy)
18931901
CommonEltTy = VTy->getElementType();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
; RUN: opt < %s -sroa -S | FileCheck %s
2+
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"
3+
4+
define <4 x i1> @vector_bitcast() {
5+
; CHECK-LABEL: @vector_bitcast
6+
; CHECK: alloca i1
7+
8+
%a = alloca <3 x i1>
9+
store <3 x i1> <i1 1,i1 0,i1 1>, <3 x i1>* %a
10+
%cast = bitcast <3 x i1>* %a to <4 x i1>*
11+
%vec = load <4 x i1>, <4 x i1>* %cast
12+
ret <4 x i1> %vec
13+
}
14+
15+
define void @vector_bitcast_2() {
16+
; CHECK-LABEL: @vector_bitcast_2
17+
; CHECK: alloca <32 x i16>
18+
19+
%"sum$1.host2" = alloca <32 x i16>
20+
store <32 x i16> undef, <32 x i16>* %"sum$1.host2"
21+
%bc = bitcast <32 x i16>* %"sum$1.host2" to <64 x i16>*
22+
%bcl = load <64 x i16>, <64 x i16>* %bc
23+
ret void
24+
}

0 commit comments

Comments
 (0)