[llvm] r372480 - SROA: Check Total Bits of vector type
Suyog Sarda via llvm-commits
llvm-commits at lists.llvm.org
Sat Sep 21 11:16:37 PDT 2019
Author: ssarda
Date: Sat Sep 21 11:16:37 2019
New Revision: 372480
URL: http://llvm.org/viewvc/llvm-project?rev=372480&view=rev
Log:
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
Added:
llvm/trunk/test/Transforms/SROA/vector-promotion-different-size.ll
Modified:
llvm/trunk/lib/Transforms/Scalar/SROA.cpp
Modified: llvm/trunk/lib/Transforms/Scalar/SROA.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SROA.cpp?rev=372480&r1=372479&r2=372480&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/SROA.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/SROA.cpp Sat Sep 21 11:16:37 2019
@@ -1888,6 +1888,14 @@ static VectorType *isVectorPromotionViab
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();
Added: llvm/trunk/test/Transforms/SROA/vector-promotion-different-size.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SROA/vector-promotion-different-size.ll?rev=372480&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/SROA/vector-promotion-different-size.ll (added)
+++ llvm/trunk/test/Transforms/SROA/vector-promotion-different-size.ll Sat Sep 21 11:16:37 2019
@@ -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
+}
More information about the llvm-commits
mailing list