diff options
author | Artem Belevich <tra@google.com> | 2018-04-06 21:10:24 +0000 |
---|---|---|
committer | Artem Belevich <tra@google.com> | 2018-04-06 21:10:24 +0000 |
commit | 0ba89cfbe081b75b4c1ae9e1137342a7531d4afb (patch) | |
tree | 4952498a3be913aa19a211c990a2d36215e4a9c2 /llvm/lib/Target/NVPTX | |
parent | 85b0197285300bdf79b95dba334e155c8dbaf4e2 (diff) |
[NVPTX] Fixed vectorized LDG for f16.
v2f16 is a special case in NVPTX. v4f16 may be loaded as a pair of v2f16
and that was not previously handled correctly by tryLDGLDU()
Differential Revision: https://reviews.llvm.org/D45339
Diffstat (limited to 'llvm/lib/Target/NVPTX')
-rw-r--r-- | llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp b/llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp index 99305440eef..9538d795cc9 100644 --- a/llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp @@ -1239,6 +1239,12 @@ bool NVPTXDAGToDAGISel::tryLDGLDU(SDNode *N) { if (EltVT.isVector()) { NumElts = EltVT.getVectorNumElements(); EltVT = EltVT.getVectorElementType(); + // vectors of f16 are loaded/stored as multiples of v2f16 elements. + if (EltVT == MVT::f16 && N->getValueType(0) == MVT::v2f16) { + assert(NumElts % 2 == 0 && "Vector must have even number of elements"); + EltVT = MVT::v2f16; + NumElts /= 2; + } } // Build the "promoted" result VTList for the load. If we are really loading |