summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2016-02-12 14:47:38 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2016-02-12 14:47:38 +0000
commite59964377cdf3b716d2792d22cf7235bc6a3ef58 (patch)
tree6f12f07ccbf67c4aa39cda7624ff67412cb59ff0 /llvm/lib
parent74bcf03f873987c8bf4f090308649b85860b9228 (diff)
downloadbcm5719-llvm-e59964377cdf3b716d2792d22cf7235bc6a3ef58.tar.gz
bcm5719-llvm-e59964377cdf3b716d2792d22cf7235bc6a3ef58.zip
[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. llvm-svn: 260678
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp b/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp
index 34b03fb74ce..4d7a1f4a6bf 100644
--- a/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp
@@ -121,19 +121,19 @@ namespace llvm {
FunctionPass *createHexagonStoreWidening();
} // end namespace llvm;
-/// HexagonTargetMachine ctor - Create an ILP32 architecture model.
-///
-/// Hexagon_TODO: Do I need an aggregate alignment?
-///
HexagonTargetMachine::HexagonTargetMachine(const Target &T, const Triple &TT,
StringRef CPU, StringRef FS,
const TargetOptions &Options,
Reloc::Model RM, CodeModel::Model CM,
CodeGenOpt::Level OL)
- : LLVMTargetMachine(T, "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", TT, CPU, FS, Options, RM, CM, OL),
+ // 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.
+ : LLVMTargetMachine(T, "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",
+ TT, CPU, FS, Options, RM, CM, OL),
TLOF(make_unique<HexagonTargetObjectFile>()) {
initAsmInfo();
}
OpenPOWER on IntegriCloud