From 9f34dc17fe9cfe530e339f9419588ea4877cbe38 Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek Date: Fri, 12 Feb 2016 14:47:38 +0000 Subject: [Hexagon] Specify vector alignment in DataLayout string The DataLayout can calculate alignment of vectors based on the alignment of the element type and the number of elements. In fact, it is the product of these two values. The problem is that for vectors of N x i1, this will return the alignment of N bytes, since the alignment of i1 is 8 bits. The vector types of vNi1 should be aligned to N bits instead. Provide explicit alignment for HVX vectors to avoid such complications. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260678 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/Hexagon/vector-align.ll | 38 ++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 test/CodeGen/Hexagon/vector-align.ll (limited to 'test/CodeGen/Hexagon/vector-align.ll') diff --git a/test/CodeGen/Hexagon/vector-align.ll b/test/CodeGen/Hexagon/vector-align.ll new file mode 100644 index 00000000000..557ee3f97f2 --- /dev/null +++ b/test/CodeGen/Hexagon/vector-align.ll @@ -0,0 +1,38 @@ +; RUN: llc -march=hexagon -mcpu=hexagonv60 -enable-hexagon-hvx < %s \ +; RUN: | FileCheck %s + +; Check that the store to Q6VecPredResult does not get expanded into multiple +; stores. There should be no memd's. This relies on the alignment specified +; in the data layout string, so don't provide one here to make sure that the +; default one from HexagonTargetMachine is correct. + +; CHECK-NOT: memd + + +@Q6VecPredResult = common global <16 x i32> zeroinitializer, align 64 + +; Function Attrs: nounwind +define i32 @foo() #0 { +entry: + %0 = tail call <16 x i32> @llvm.hexagon.V6.lvsplatw(i32 1) + %1 = tail call <512 x i1> @llvm.hexagon.V6.vandvrt(<16 x i32> %0, i32 -2147483648) + store <512 x i1> %1, <512 x i1>* bitcast (<16 x i32>* @Q6VecPredResult to <512 x i1>*), align 64, !tbaa !1 + tail call void @print_vecpred(i32 64, i8* bitcast (<16 x i32>* @Q6VecPredResult to i8*)) #3 + ret i32 0 +} + +; Function Attrs: nounwind readnone +declare <512 x i1> @llvm.hexagon.V6.vandvrt(<16 x i32>, i32) #1 + +; Function Attrs: nounwind readnone +declare <16 x i32> @llvm.hexagon.V6.lvsplatw(i32) #1 + +declare void @print_vecpred(i32, i8*) #2 + +attributes #0 = { nounwind "target-cpu"="hexagonv60" "target-features"="+hvx" } +attributes #1 = { nounwind readnone } +attributes #2 = { nounwind } + +!1 = !{!2, !2, i64 0} +!2 = !{!"omnipotent char", !3, i64 0} +!3 = !{!"Simple C/C++ TBAA"} -- cgit v1.2.3