[PATCH] D65523: SROA: Check Total Bits of vector type

Suyog Sarda via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 31 10:03:24 PDT 2019


ssarda created this revision.
ssarda added reviewers: t.p.northover, reames, arsenm, kparzysz.
ssarda added a project: LLVM.
Herald added subscribers: llvm-commits, hiraditya, wdng.

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


Repository:
  rL LLVM

https://reviews.llvm.org/D65523

Files:
  llvm/lib/Transforms/Scalar/SROA.cpp
  llvm/test/Transforms/SROA/vector-promotion-different-size.ll


Index: llvm/test/Transforms/SROA/vector-promotion-different-size.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/SROA/vector-promotion-different-size.ll
@@ -0,0 +1,13 @@
+; 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
+}
Index: llvm/lib/Transforms/Scalar/SROA.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/SROA.cpp
+++ llvm/lib/Transforms/Scalar/SROA.cpp
@@ -1888,6 +1888,13 @@
   bool HaveCommonEltTy = true;
   auto CheckCandidateType = [&](Type *Ty) {
     if (auto *VTy = dyn_cast<VectorType>(Ty)) {
+      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();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65523.212612.patch
Type: text/x-patch
Size: 1372 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190731/b14bae86/attachment.bin>


More information about the llvm-commits mailing list