Skip to content

Commit

Permalink
[AMDGPU] Minor change to d16 buffer load implementation
Browse files Browse the repository at this point in the history
Summary:
By not reconstructing the operand list of the SDNode, this change makes
it easier to add the forthcoming new tbuffer and buffer intrinsics.

Subscribers: arsenm, kzhuravl, wdng, nhaehnle, yaxunl, dstuttard, t-tye, llvm-commits

Differential Revision: https://reviews.llvm.org/D49995

Change-Id: I0cb79ef0801532645d7dd954a6d7355139db7b38
llvm-svn: 338784
  • Loading branch information
Tim Renouf committed Aug 2, 2018
1 parent abd85fb commit 366a49d
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 18 deletions.
24 changes: 7 additions & 17 deletions llvm/lib/Target/AMDGPU/SIISelLowering.cpp
Expand Up @@ -3627,18 +3627,9 @@ static SDValue adjustLoadValueTypeImpl(SDValue Result, EVT LoadVT,
SDValue SITargetLowering::adjustLoadValueType(unsigned Opcode,
MemSDNode *M,
SelectionDAG &DAG,
ArrayRef<SDValue> Ops,
bool IsIntrinsic) const {
SDLoc DL(M);
SmallVector<SDValue, 10> Ops;
Ops.reserve(M->getNumOperands());

Ops.push_back(M->getOperand(0));
if (IsIntrinsic)
Ops.push_back(DAG.getConstant(Opcode, DL, MVT::i32));

// Skip 1, as it is the intrinsic ID.
for (unsigned I = 2, E = M->getNumOperands(); I != E; ++I)
Ops.push_back(M->getOperand(I));

bool Unpacked = Subtarget->hasUnpackedD16VMem();
EVT LoadVT = M->getValueType(0);
Expand Down Expand Up @@ -5099,20 +5090,16 @@ SDValue SITargetLowering::LowerINTRINSIC_W_CHAIN(SDValue Op,
EVT IntVT = VT.changeTypeToInteger();
auto *M = cast<MemSDNode>(Op);
EVT LoadVT = Op.getValueType();
bool IsD16 = LoadVT.getScalarType() == MVT::f16;
if (IsD16)
return adjustLoadValueType(AMDGPUISD::BUFFER_LOAD_FORMAT_D16, M, DAG);

if (LoadVT.getScalarType() == MVT::f16)
return adjustLoadValueType(AMDGPUISD::BUFFER_LOAD_FORMAT_D16,
M, DAG, Ops);
return DAG.getMemIntrinsicNode(Opc, DL, Op->getVTList(), Ops, IntVT,
M->getMemOperand());
}
case Intrinsic::amdgcn_tbuffer_load: {
MemSDNode *M = cast<MemSDNode>(Op);
EVT LoadVT = Op.getValueType();
bool IsD16 = LoadVT.getScalarType() == MVT::f16;
if (IsD16) {
return adjustLoadValueType(AMDGPUISD::TBUFFER_LOAD_FORMAT_D16, M, DAG);
}

SDValue Ops[] = {
Op.getOperand(0), // Chain
Expand All @@ -5127,6 +5114,9 @@ SDValue SITargetLowering::LowerINTRINSIC_W_CHAIN(SDValue Op,
Op.getOperand(10) // slc
};

if (LoadVT.getScalarType() == MVT::f16)
return adjustLoadValueType(AMDGPUISD::TBUFFER_LOAD_FORMAT_D16,
M, DAG, Ops);
return DAG.getMemIntrinsicNode(AMDGPUISD::TBUFFER_LOAD_FORMAT, DL,
Op->getVTList(), Ops, LoadVT,
M->getMemOperand());
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/AMDGPU/SIISelLowering.h
Expand Up @@ -81,7 +81,7 @@ class SITargetLowering final : public AMDGPUTargetLowering {
SDValue LowerBRCOND(SDValue Op, SelectionDAG &DAG) const;

SDValue adjustLoadValueType(unsigned Opcode, MemSDNode *M,
SelectionDAG &DAG,
SelectionDAG &DAG, ArrayRef<SDValue> Ops,
bool IsIntrinsic = false) const;

SDValue handleD16VData(SDValue VData, SelectionDAG &DAG) const;
Expand Down

0 comments on commit 366a49d

Please sign in to comment.