summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorNeil Henning <neil.henning@amd.com>2018-10-31 10:34:48 +0000
committerNeil Henning <neil.henning@amd.com>2018-10-31 10:34:48 +0000
commit63718b214aff93535f2c349db367f6165bb67e9c (patch)
tree96a26ad3a7cf5860a1065a355700cdece0fd901f /llvm/lib
parent262baa4753e22ef25906a2fcea6e7e0d7140d9f2 (diff)
downloadbcm5719-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.cpp6
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);
}
OpenPOWER on IntegriCloud