diff options
author | Neil Henning <neil.henning@amd.com> | 2018-10-31 10:34:48 +0000 |
---|---|---|
committer | Neil Henning <neil.henning@amd.com> | 2018-10-31 10:34:48 +0000 |
commit | 63718b214aff93535f2c349db367f6165bb67e9c (patch) | |
tree | 96a26ad3a7cf5860a1065a355700cdece0fd901f /llvm/lib | |
parent | 262baa4753e22ef25906a2fcea6e7e0d7140d9f2 (diff) | |
download | bcm5719-llvm-63718b214aff93535f2c349db367f6165bb67e9c.tar.gz bcm5719-llvm-63718b214aff93535f2c349db367f6165bb67e9c.zip |
[AMDGPU] support image load/store a16
Our a16 support was only enabled for sample/gather and buffer
load/store, but not for image load/store operations (which take an i16
as the pixel index rather than a half).
Fix our isel lowering and add test cases to prove it out.
Differential Revision: https://reviews.llvm.org/D53750
llvm-svn: 345710
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp index 13b92fc07a1..e41cf6e771b 100644 --- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp @@ -4726,9 +4726,11 @@ SDValue SITargetLowering::lowerImage(SDValue Op, // Check for 16 bit addresses and pack if true. unsigned DimIdx = AddrIdx + BaseOpcode->NumExtraArgs; MVT VAddrVT = Op.getOperand(DimIdx).getSimpleValueType(); - if (VAddrVT.getScalarType() == MVT::f16 && + const MVT VAddrScalarVT = VAddrVT.getScalarType(); + if (((VAddrScalarVT == MVT::f16) || (VAddrScalarVT == MVT::i16)) && ST->hasFeature(AMDGPU::FeatureR128A16)) { IsA16 = true; + const MVT VectorVT = VAddrScalarVT == MVT::f16 ? MVT::v2f16 : MVT::v2i16; for (unsigned i = AddrIdx; i < (AddrIdx + NumMIVAddrs); ++i) { SDValue AddrLo, AddrHi; // Push back extra arguments. @@ -4747,7 +4749,7 @@ SDValue SITargetLowering::lowerImage(SDValue Op, AddrHi = Op.getOperand(i + 1); i++; } - AddrLo = DAG.getNode(ISD::SCALAR_TO_VECTOR, DL, MVT::v2f16, + AddrLo = DAG.getNode(ISD::SCALAR_TO_VECTOR, DL, VectorVT, {AddrLo, AddrHi}); AddrLo = DAG.getBitcast(MVT::i32, AddrLo); } |