diff options
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 9 | ||||
-rw-r--r-- | clang/test/CodeGen/target-data.c | 2 |
2 files changed, 7 insertions, 4 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 2651cfe4ef4..aea14306c77 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/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/clang/test/CodeGen/target-data.c b/clang/test/CodeGen/target-data.c index 2ed7f0916fc..a2c02be9491 100644 --- a/clang/test/CodeGen/target-data.c +++ b/clang/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 |