mirror of
https://github.com/RPCS3/llvm.git
synced 2025-04-02 21:31:41 +00:00
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372480 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e241a62e3a
commit
46ff2e05c5
@ -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();
|
||||
|
24
test/Transforms/SROA/vector-promotion-different-size.ll
Normal file
24
test/Transforms/SROA/vector-promotion-different-size.ll
Normal file
@ -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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user