[PATCH] D17158: Don't promote load alignment from packed structure elements

Pete Cooper via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 11 13:15:09 PST 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL260587: Set load alignment on aggregate loads. (authored by pete).

Changed prior to commit:
  http://reviews.llvm.org/D17158?vs=47690&id=47717#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D17158

Files:
  llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
  llvm/trunk/test/Transforms/InstCombine/unpack-fca.ll

Index: llvm/trunk/test/Transforms/InstCombine/unpack-fca.ll
===================================================================
--- llvm/trunk/test/Transforms/InstCombine/unpack-fca.ll
+++ llvm/trunk/test/Transforms/InstCombine/unpack-fca.ll
@@ -136,3 +136,18 @@
   %1 = load %B, %B* %b.ptr, align 8
   ret %B %1
 }
+
+%struct.S = type <{ i8, %struct.T }>
+%struct.T = type { i32, i32 }
+
+; Make sure that we do not increase alignment of packed struct element
+define i32 @packed_alignment(%struct.S* dereferenceable(9) %s) {
+; CHECK-LABEL: packed_alignment
+; CHECK-NEXT: %tv.elt1 = getelementptr inbounds %struct.S, %struct.S* %s, i64 0, i32 1, i32 1
+; CHECK-NEXT: %tv.unpack2 = load i32, i32* %tv.elt1, align 1
+; CHECK-NEXT: ret i32 %tv.unpack2
+  %t = getelementptr inbounds %struct.S, %struct.S* %s, i32 0, i32 1
+  %tv = load %struct.T, %struct.T* %t, align 1
+  %v = extractvalue %struct.T %tv, 1
+  ret i32 %v
+}
Index: llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
===================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
@@ -552,7 +552,8 @@
         ConstantInt::get(IdxType, i),
       };
       auto *Ptr = IC.Builder->CreateInBoundsGEP(ST, Addr, makeArrayRef(Indices), EltName);
-      auto *L = IC.Builder->CreateLoad(ST->getTypeAtIndex(i), Ptr, LoadName);
+      auto *L = IC.Builder->CreateAlignedLoad(Ptr, LI.getAlignment(),
+                                              LoadName);
       V = IC.Builder->CreateInsertValue(V, L, i);
     }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D17158.47717.patch
Type: text/x-patch
Size: 1644 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160211/e5883046/attachment.bin>


More information about the llvm-commits mailing list