diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-06-14 13:26:32 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-06-14 13:26:32 +0000 |
commit | d3c84e671974f2cad4e2d680c7eada9291b777ad (patch) | |
tree | 407e2db2ff3a0eac7bb915340a24863182f76e0d /llvm/lib | |
parent | 74d67c2086a2ac36f03c72d1f89aa02f00768b17 (diff) | |
download | bcm5719-llvm-d3c84e671974f2cad4e2d680c7eada9291b777ad.tar.gz bcm5719-llvm-d3c84e671974f2cad4e2d680c7eada9291b777ad.zip |
AMDGPU: Refactor to prepare for manually selecting more intrinsics
llvm-svn: 363385
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp index 2c104758047..60bf9537185 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp @@ -217,6 +217,7 @@ private: void SelectBRCOND(SDNode *N); void SelectFMAD_FMA(SDNode *N); void SelectATOMIC_CMP_SWAP(SDNode *N); + void SelectDSAppendConsume(SDNode *N, unsigned IntrID); void SelectINTRINSIC_W_CHAIN(SDNode *N); protected: @@ -1980,15 +1981,7 @@ void AMDGPUDAGToDAGISel::SelectATOMIC_CMP_SWAP(SDNode *N) { CurDAG->RemoveDeadNode(N); } -void AMDGPUDAGToDAGISel::SelectINTRINSIC_W_CHAIN(SDNode *N) { - unsigned IntrID = cast<ConstantSDNode>(N->getOperand(1))->getZExtValue(); - if ((IntrID != Intrinsic::amdgcn_ds_append && - IntrID != Intrinsic::amdgcn_ds_consume) || - N->getValueType(0) != MVT::i32) { - SelectCode(N); - return; - } - +void AMDGPUDAGToDAGISel::SelectDSAppendConsume(SDNode *N, unsigned IntrID) { // The address is assumed to be uniform, so if it ends up in a VGPR, it will // be copied to an SGPR with readfirstlane. unsigned Opc = IntrID == Intrinsic::amdgcn_ds_append ? @@ -2026,6 +2019,23 @@ void AMDGPUDAGToDAGISel::SelectINTRINSIC_W_CHAIN(SDNode *N) { CurDAG->SelectNodeTo(N, Opc, N->getVTList(), Ops); } +void AMDGPUDAGToDAGISel::SelectINTRINSIC_W_CHAIN(SDNode *N) { + unsigned IntrID = cast<ConstantSDNode>(N->getOperand(1))->getZExtValue(); + switch (IntrID) { + case Intrinsic::amdgcn_ds_append: + case Intrinsic::amdgcn_ds_consume: { + if (N->getValueType(0) != MVT::i32) + break; + SelectDSAppendConsume(N, IntrID); + return; + } + default: + break; + } + + SelectCode(N); +} + bool AMDGPUDAGToDAGISel::SelectVOP3ModsImpl(SDValue In, SDValue &Src, unsigned &Mods) const { Mods = 0; |