From: Matt Arsenault Date: Fri, 14 Jun 2019 13:26:32 +0000 (+0000) Subject: AMDGPU: Refactor to prepare for manually selecting more intrinsics X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ad0d02bdceb81ab347fa3668e1dab3947ea06060;p=llvm AMDGPU: Refactor to prepare for manually selecting more intrinsics git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363385 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp b/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp index 2c104758047..60bf9537185 100644 --- a/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp +++ b/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(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(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;