[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:16:04 PST 2016


Thanks for the very quick review David.

How do you feel about taking this in 3.8?

Cheers,
Pete
> On Feb 11, 2016, at 1:15 PM, Pete Cooper <peter_cooper at apple.com> wrote:
> 
> 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);
>     }
> 
> 
> 
> <D17158.47717.patch>



More information about the llvm-commits mailing list