summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorArtem Belevich <tra@google.com>2018-12-01 00:21:52 +0000
committerArtem Belevich <tra@google.com>2018-12-01 00:21:52 +0000
commite5664b15593d6e0302e89d96fd62b39b407eeff9 (patch)
treed98fbe7ce67bed2c429d96847fddd533f2a6e678 /llvm/lib
parent8e10e9423d61c530aa6a04ba97db934a6ca9b81d (diff)
downloadbcm5719-llvm-e5664b15593d6e0302e89d96fd62b39b407eeff9.tar.gz
bcm5719-llvm-e5664b15593d6e0302e89d96fd62b39b407eeff9.zip
[NVPTX] Add lowering of i128 numbers as struct fields
Addition to D34555 - override VTs computation with ComputePTXValueVTs for struct fields. Author: Denys Zariaiev<denys.zariaiev@gmail.com> Differential Revision: https://reviews.llvm.org/D55144 llvm-svn: 348057
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp b/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp
index c352b9b9c9d..eceb4fc6d88 100644
--- a/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp
+++ b/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp
@@ -180,6 +180,18 @@ static void ComputePTXValueVTs(const TargetLowering &TLI, const DataLayout &DL,
return;
}
+ // Given a struct type, recursively traverse the elements with custom ComputePTXValueVTs.
+ if (StructType *STy = dyn_cast<StructType>(Ty)) {
+ auto const *SL = DL.getStructLayout(STy);
+ auto ElementNum = 0;
+ for(auto *EI : STy->elements()) {
+ ComputePTXValueVTs(TLI, DL, EI, ValueVTs, Offsets,
+ StartingOffset + SL->getElementOffset(ElementNum));
+ ++ElementNum;
+ }
+ return;
+ }
+
ComputeValueVTs(TLI, DL, Ty, TempVTs, &TempOffsets, StartingOffset);
for (unsigned i = 0, e = TempVTs.size(); i != e; ++i) {
EVT VT = TempVTs[i];
OpenPOWER on IntegriCloud