<div dir="ltr">We should merge this into 3.8</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Feb 11, 2016 at 1:16 PM, Pete Cooper <span dir="ltr"><<a href="mailto:peter_cooper@apple.com" target="_blank">peter_cooper@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thanks for the very quick review David.<br>
<br>
How do you feel about taking this in 3.8?<br>
<br>
Cheers,<br>
Pete<br>
<div><div class="h5">> On Feb 11, 2016, at 1:15 PM, Pete Cooper <<a href="mailto:peter_cooper@apple.com">peter_cooper@apple.com</a>> wrote:<br>
><br>
> This revision was automatically updated to reflect the committed changes.<br>
> Closed by commit rL260587: Set load alignment on aggregate loads. (authored by pete).<br>
><br>
> Changed prior to commit:<br>
>  <a href="http://reviews.llvm.org/D17158?vs=47690&id=47717#toc" rel="noreferrer" target="_blank">http://reviews.llvm.org/D17158?vs=47690&id=47717#toc</a><br>
><br>
> Repository:<br>
>  rL LLVM<br>
><br>
> <a href="http://reviews.llvm.org/D17158" rel="noreferrer" target="_blank">http://reviews.llvm.org/D17158</a><br>
><br>
> Files:<br>
>  llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp<br>
>  llvm/trunk/test/Transforms/InstCombine/unpack-fca.ll<br>
><br>
> Index: llvm/trunk/test/Transforms/InstCombine/unpack-fca.ll<br>
> ===================================================================<br>
> --- llvm/trunk/test/Transforms/InstCombine/unpack-fca.ll<br>
> +++ llvm/trunk/test/Transforms/InstCombine/unpack-fca.ll<br>
> @@ -136,3 +136,18 @@<br>
>   %1 = load %B, %B* %b.ptr, align 8<br>
>   ret %B %1<br>
> }<br>
> +<br>
> +%struct.S = type <{ i8, %struct.T }><br>
> +%struct.T = type { i32, i32 }<br>
> +<br>
> +; Make sure that we do not increase alignment of packed struct element<br>
> +define i32 @packed_alignment(%struct.S* dereferenceable(9) %s) {<br>
> +; CHECK-LABEL: packed_alignment<br>
> +; CHECK-NEXT: %tv.elt1 = getelementptr inbounds %struct.S, %struct.S* %s, i64 0, i32 1, i32 1<br>
> +; CHECK-NEXT: %tv.unpack2 = load i32, i32* %tv.elt1, align 1<br>
> +; CHECK-NEXT: ret i32 %tv.unpack2<br>
> +  %t = getelementptr inbounds %struct.S, %struct.S* %s, i32 0, i32 1<br>
> +  %tv = load %struct.T, %struct.T* %t, align 1<br>
> +  %v = extractvalue %struct.T %tv, 1<br>
> +  ret i32 %v<br>
> +}<br>
> Index: llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp<br>
> ===================================================================<br>
> --- llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp<br>
> +++ llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp<br>
> @@ -552,7 +552,8 @@<br>
>         ConstantInt::get(IdxType, i),<br>
>       };<br>
>       auto *Ptr = IC.Builder->CreateInBoundsGEP(ST, Addr, makeArrayRef(Indices), EltName);<br>
> -      auto *L = IC.Builder->CreateLoad(ST->getTypeAtIndex(i), Ptr, LoadName);<br>
> +      auto *L = IC.Builder->CreateAlignedLoad(Ptr, LI.getAlignment(),<br>
> +                                              LoadName);<br>
>       V = IC.Builder->CreateInsertValue(V, L, i);<br>
>     }<br>
><br>
><br>
><br>
</div></div>> <D17158.47717.patch><br>
<br>
</blockquote></div><br></div>