From 8148f06ebc11112332b5c256b27a561a63b27c11 Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek Date: Fri, 12 Feb 2016 14:48:34 +0000 Subject: [PATCH] [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/cfe/trunk@260680 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/Targets.cpp | 9 ++++++--- test/CodeGen/target-data.c | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 2651cfe4ef..aea14306c7 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -5697,9 +5697,12 @@ class HexagonTargetInfo : public TargetInfo { public: HexagonTargetInfo(const llvm::Triple &Triple) : TargetInfo(Triple) { BigEndian = false; - DataLayoutString = "e-m:e-p:32:32:32-" - "i64:64:64-i32:32:32-i16:16:16-i1:8:8-" - "f64:64:64-f32:32:32-v64:64:64-v32:32:32-a:0-n16:32"; + // Specify the vector alignment explicitly. For v512x1, the calculated + // alignment would be 512*alignment(i1), which is 512 bytes, instead of + // the required minimum of 64 bytes. + DataLayoutString = "e-m:e-p:32:32:32-a:0-n16:32-" + "i64:64:64-i32:32:32-i16:16:16-i1:8:8-f32:32:32-f64:64:64-" + "v32:32:32-v64:64:64-v512:512:512-v1024:1024:1024-v2048:2048:2048"; SizeType = UnsignedInt; PtrDiffType = SignedInt; IntPtrType = SignedInt; diff --git a/test/CodeGen/target-data.c b/test/CodeGen/target-data.c index 2ed7f0916f..a2c02be949 100644 --- a/test/CodeGen/target-data.c +++ b/test/CodeGen/target-data.c @@ -157,7 +157,7 @@ // RUN: %clang_cc1 -triple hexagon-unknown -o - -emit-llvm %s | \ // RUN: FileCheck %s -check-prefix=HEXAGON -// HEXAGON: target datalayout = "e-m:e-p:32:32:32-i64:64:64-i32:32:32-i16:16:16-i1:8:8-f64:64:64-f32:32:32-v64:64:64-v32:32:32-a:0-n16:32" +// HEXAGON: target datalayout = "e-m:e-p:32:32:32-a:0-n16:32-i64:64:64-i32:32:32-i16:16:16-i1:8:8-f32:32:32-f64:64:64-v32:32:32-v64:64:64-v512:512:512-v1024:1024:1024-v2048:2048:2048" // RUN: %clang_cc1 -triple s390x-unknown -o - -emit-llvm %s | \ // RUN: FileCheck %s -check-prefix=SYSTEMZ -- 2.40.0