diff options
| author | Nicolai Haehnle <nhaehnle@gmail.com> | 2018-06-21 13:37:45 +0000 |
|---|---|---|
| committer | Nicolai Haehnle <nhaehnle@gmail.com> | 2018-06-21 13:37:45 +0000 |
| commit | db6911a6f9592fa394c0e0a1c0cf268a696e018f (patch) | |
| tree | 3ec101f3343c0b9944d9f6384f37f95e000274bb /llvm/lib/Target/AMDGPU/SIISelLowering.cpp | |
| parent | b29ee701229ba46c160e365234c214c2d59b7702 (diff) | |
| download | bcm5719-llvm-db6911a6f9592fa394c0e0a1c0cf268a696e018f.tar.gz bcm5719-llvm-db6911a6f9592fa394c0e0a1c0cf268a696e018f.zip | |
AMDGPU: Remove old-style image intrinsics
Summary:
This also removes the need for atomic pseudo instructions, since
we select the correct encoding directly in SITargetLowering::lowerImage
for dimension-aware image intrinsics.
Mesa uses dimension-aware image intrinsics since
commit a9a7993441.
Change-Id: I7473d20009476a4ed6d919cae4e6dca9ff42e77a
Reviewers: arsenm, rampitec, mareko, tpr, b-sumner
Subscribers: kzhuravl, wdng, yaxunl, dstuttard, t-tye, llvm-commits
Differential Revision: https://reviews.llvm.org/D48167
llvm-svn: 335231
Diffstat (limited to 'llvm/lib/Target/AMDGPU/SIISelLowering.cpp')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 303 |
1 files changed, 0 insertions, 303 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp index e17cef855d9..77fa76d1cdf 100644 --- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp @@ -3519,163 +3519,6 @@ SDValue SITargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const { return SDValue(); } -static unsigned getImageOpcode(unsigned IID) { - switch (IID) { - case Intrinsic::amdgcn_image_load: - return AMDGPUISD::IMAGE_LOAD; - case Intrinsic::amdgcn_image_load_mip: - return AMDGPUISD::IMAGE_LOAD_MIP; - - // Basic sample. - case Intrinsic::amdgcn_image_sample: - return AMDGPUISD::IMAGE_SAMPLE; - case Intrinsic::amdgcn_image_sample_cl: - return AMDGPUISD::IMAGE_SAMPLE_CL; - case Intrinsic::amdgcn_image_sample_d: - return AMDGPUISD::IMAGE_SAMPLE_D; - case Intrinsic::amdgcn_image_sample_d_cl: - return AMDGPUISD::IMAGE_SAMPLE_D_CL; - case Intrinsic::amdgcn_image_sample_l: - return AMDGPUISD::IMAGE_SAMPLE_L; - case Intrinsic::amdgcn_image_sample_b: - return AMDGPUISD::IMAGE_SAMPLE_B; - case Intrinsic::amdgcn_image_sample_b_cl: - return AMDGPUISD::IMAGE_SAMPLE_B_CL; - case Intrinsic::amdgcn_image_sample_lz: - return AMDGPUISD::IMAGE_SAMPLE_LZ; - case Intrinsic::amdgcn_image_sample_cd: - return AMDGPUISD::IMAGE_SAMPLE_CD; - case Intrinsic::amdgcn_image_sample_cd_cl: - return AMDGPUISD::IMAGE_SAMPLE_CD_CL; - - // Sample with comparison. - case Intrinsic::amdgcn_image_sample_c: - return AMDGPUISD::IMAGE_SAMPLE_C; - case Intrinsic::amdgcn_image_sample_c_cl: - return AMDGPUISD::IMAGE_SAMPLE_C_CL; - case Intrinsic::amdgcn_image_sample_c_d: - return AMDGPUISD::IMAGE_SAMPLE_C_D; - case Intrinsic::amdgcn_image_sample_c_d_cl: - return AMDGPUISD::IMAGE_SAMPLE_C_D_CL; - case Intrinsic::amdgcn_image_sample_c_l: - return AMDGPUISD::IMAGE_SAMPLE_C_L; - case Intrinsic::amdgcn_image_sample_c_b: - return AMDGPUISD::IMAGE_SAMPLE_C_B; - case Intrinsic::amdgcn_image_sample_c_b_cl: - return AMDGPUISD::IMAGE_SAMPLE_C_B_CL; - case Intrinsic::amdgcn_image_sample_c_lz: - return AMDGPUISD::IMAGE_SAMPLE_C_LZ; - case Intrinsic::amdgcn_image_sample_c_cd: - return AMDGPUISD::IMAGE_SAMPLE_C_CD; - case Intrinsic::amdgcn_image_sample_c_cd_cl: - return AMDGPUISD::IMAGE_SAMPLE_C_CD_CL; - - // Sample with offsets. - case Intrinsic::amdgcn_image_sample_o: - return AMDGPUISD::IMAGE_SAMPLE_O; - case Intrinsic::amdgcn_image_sample_cl_o: - return AMDGPUISD::IMAGE_SAMPLE_CL_O; - case Intrinsic::amdgcn_image_sample_d_o: - return AMDGPUISD::IMAGE_SAMPLE_D_O; - case Intrinsic::amdgcn_image_sample_d_cl_o: - return AMDGPUISD::IMAGE_SAMPLE_D_CL_O; - case Intrinsic::amdgcn_image_sample_l_o: - return AMDGPUISD::IMAGE_SAMPLE_L_O; - case Intrinsic::amdgcn_image_sample_b_o: - return AMDGPUISD::IMAGE_SAMPLE_B_O; - case Intrinsic::amdgcn_image_sample_b_cl_o: - return AMDGPUISD::IMAGE_SAMPLE_B_CL_O; - case Intrinsic::amdgcn_image_sample_lz_o: - return AMDGPUISD::IMAGE_SAMPLE_LZ_O; - case Intrinsic::amdgcn_image_sample_cd_o: - return AMDGPUISD::IMAGE_SAMPLE_CD_O; - case Intrinsic::amdgcn_image_sample_cd_cl_o: - return AMDGPUISD::IMAGE_SAMPLE_CD_CL_O; - - // Sample with comparison and offsets. - case Intrinsic::amdgcn_image_sample_c_o: - return AMDGPUISD::IMAGE_SAMPLE_C_O; - case Intrinsic::amdgcn_image_sample_c_cl_o: - return AMDGPUISD::IMAGE_SAMPLE_C_CL_O; - case Intrinsic::amdgcn_image_sample_c_d_o: - return AMDGPUISD::IMAGE_SAMPLE_C_D_O; - case Intrinsic::amdgcn_image_sample_c_d_cl_o: - return AMDGPUISD::IMAGE_SAMPLE_C_D_CL_O; - case Intrinsic::amdgcn_image_sample_c_l_o: - return AMDGPUISD::IMAGE_SAMPLE_C_L_O; - case Intrinsic::amdgcn_image_sample_c_b_o: - return AMDGPUISD::IMAGE_SAMPLE_C_B_O; - case Intrinsic::amdgcn_image_sample_c_b_cl_o: - return AMDGPUISD::IMAGE_SAMPLE_C_B_CL_O; - case Intrinsic::amdgcn_image_sample_c_lz_o: - return AMDGPUISD::IMAGE_SAMPLE_C_LZ_O; - case Intrinsic::amdgcn_image_sample_c_cd_o: - return AMDGPUISD::IMAGE_SAMPLE_C_CD_O; - case Intrinsic::amdgcn_image_sample_c_cd_cl_o: - return AMDGPUISD::IMAGE_SAMPLE_C_CD_CL_O; - - // Basic gather4. - case Intrinsic::amdgcn_image_gather4: - return AMDGPUISD::IMAGE_GATHER4; - case Intrinsic::amdgcn_image_gather4_cl: - return AMDGPUISD::IMAGE_GATHER4_CL; - case Intrinsic::amdgcn_image_gather4_l: - return AMDGPUISD::IMAGE_GATHER4_L; - case Intrinsic::amdgcn_image_gather4_b: - return AMDGPUISD::IMAGE_GATHER4_B; - case Intrinsic::amdgcn_image_gather4_b_cl: - return AMDGPUISD::IMAGE_GATHER4_B_CL; - case Intrinsic::amdgcn_image_gather4_lz: - return AMDGPUISD::IMAGE_GATHER4_LZ; - - // Gather4 with comparison. - case Intrinsic::amdgcn_image_gather4_c: - return AMDGPUISD::IMAGE_GATHER4_C; - case Intrinsic::amdgcn_image_gather4_c_cl: - return AMDGPUISD::IMAGE_GATHER4_C_CL; - case Intrinsic::amdgcn_image_gather4_c_l: - return AMDGPUISD::IMAGE_GATHER4_C_L; - case Intrinsic::amdgcn_image_gather4_c_b: - return AMDGPUISD::IMAGE_GATHER4_C_B; - case Intrinsic::amdgcn_image_gather4_c_b_cl: - return AMDGPUISD::IMAGE_GATHER4_C_B_CL; - case Intrinsic::amdgcn_image_gather4_c_lz: - return AMDGPUISD::IMAGE_GATHER4_C_LZ; - - // Gather4 with offsets. - case Intrinsic::amdgcn_image_gather4_o: - return AMDGPUISD::IMAGE_GATHER4_O; - case Intrinsic::amdgcn_image_gather4_cl_o: - return AMDGPUISD::IMAGE_GATHER4_CL_O; - case Intrinsic::amdgcn_image_gather4_l_o: - return AMDGPUISD::IMAGE_GATHER4_L_O; - case Intrinsic::amdgcn_image_gather4_b_o: - return AMDGPUISD::IMAGE_GATHER4_B_O; - case Intrinsic::amdgcn_image_gather4_b_cl_o: - return AMDGPUISD::IMAGE_GATHER4_B_CL_O; - case Intrinsic::amdgcn_image_gather4_lz_o: - return AMDGPUISD::IMAGE_GATHER4_LZ_O; - - // Gather4 with comparison and offsets. - case Intrinsic::amdgcn_image_gather4_c_o: - return AMDGPUISD::IMAGE_GATHER4_C_O; - case Intrinsic::amdgcn_image_gather4_c_cl_o: - return AMDGPUISD::IMAGE_GATHER4_C_CL_O; - case Intrinsic::amdgcn_image_gather4_c_l_o: - return AMDGPUISD::IMAGE_GATHER4_C_L_O; - case Intrinsic::amdgcn_image_gather4_c_b_o: - return AMDGPUISD::IMAGE_GATHER4_C_B_O; - case Intrinsic::amdgcn_image_gather4_c_b_cl_o: - return AMDGPUISD::IMAGE_GATHER4_C_B_CL_O; - case Intrinsic::amdgcn_image_gather4_c_lz_o: - return AMDGPUISD::IMAGE_GATHER4_C_LZ_O; - - default: - break; - } - return 0; -} - static SDValue adjustLoadValueTypeImpl(SDValue Result, EVT LoadVT, const SDLoc &DL, SelectionDAG &DAG, bool Unpacked) { @@ -5081,16 +4924,6 @@ SDValue SITargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, return SDValue(DAG.getMachineNode(AMDGPU::WWM, DL, Src.getValueType(), Src), 0); } - case Intrinsic::amdgcn_image_getlod: - case Intrinsic::amdgcn_image_getresinfo: { - unsigned Idx = (IntrinsicID == Intrinsic::amdgcn_image_getresinfo) ? 3 : 4; - - // Replace dmask with everything disabled with undef. - const ConstantSDNode *DMask = dyn_cast<ConstantSDNode>(Op.getOperand(Idx)); - if (!DMask || DMask->isNullValue()) - return DAG.getUNDEF(Op.getValueType()); - return SDValue(); - } default: if (const AMDGPU::ImageDimIntrinsicInfo *ImageDimIntr = AMDGPU::getImageDimIntrinsicInfo(IntrinsicID)) @@ -5269,113 +5102,6 @@ SDValue SITargetLowering::LowerINTRINSIC_W_CHAIN(SDValue Op, Op->getVTList(), Ops, VT, M->getMemOperand()); } - case Intrinsic::amdgcn_image_load: - case Intrinsic::amdgcn_image_load_mip: { - EVT VT = Op.getValueType(); - if (Subtarget->hasUnpackedD16VMem() && - VT.isVector() && VT.getScalarSizeInBits() == 16) { - return adjustLoadValueType(getImageOpcode(IntrID), cast<MemSDNode>(Op), - DAG); - } - - return SDValue(); - } - - // Basic sample. - case Intrinsic::amdgcn_image_sample: - case Intrinsic::amdgcn_image_sample_cl: - case Intrinsic::amdgcn_image_sample_d: - case Intrinsic::amdgcn_image_sample_d_cl: - case Intrinsic::amdgcn_image_sample_l: - case Intrinsic::amdgcn_image_sample_b: - case Intrinsic::amdgcn_image_sample_b_cl: - case Intrinsic::amdgcn_image_sample_lz: - case Intrinsic::amdgcn_image_sample_cd: - case Intrinsic::amdgcn_image_sample_cd_cl: - - // Sample with comparison. - case Intrinsic::amdgcn_image_sample_c: - case Intrinsic::amdgcn_image_sample_c_cl: - case Intrinsic::amdgcn_image_sample_c_d: - case Intrinsic::amdgcn_image_sample_c_d_cl: - case Intrinsic::amdgcn_image_sample_c_l: - case Intrinsic::amdgcn_image_sample_c_b: - case Intrinsic::amdgcn_image_sample_c_b_cl: - case Intrinsic::amdgcn_image_sample_c_lz: - case Intrinsic::amdgcn_image_sample_c_cd: - case Intrinsic::amdgcn_image_sample_c_cd_cl: - - // Sample with offsets. - case Intrinsic::amdgcn_image_sample_o: - case Intrinsic::amdgcn_image_sample_cl_o: - case Intrinsic::amdgcn_image_sample_d_o: - case Intrinsic::amdgcn_image_sample_d_cl_o: - case Intrinsic::amdgcn_image_sample_l_o: - case Intrinsic::amdgcn_image_sample_b_o: - case Intrinsic::amdgcn_image_sample_b_cl_o: - case Intrinsic::amdgcn_image_sample_lz_o: - case Intrinsic::amdgcn_image_sample_cd_o: - case Intrinsic::amdgcn_image_sample_cd_cl_o: - - // Sample with comparison and offsets. - case Intrinsic::amdgcn_image_sample_c_o: - case Intrinsic::amdgcn_image_sample_c_cl_o: - case Intrinsic::amdgcn_image_sample_c_d_o: - case Intrinsic::amdgcn_image_sample_c_d_cl_o: - case Intrinsic::amdgcn_image_sample_c_l_o: - case Intrinsic::amdgcn_image_sample_c_b_o: - case Intrinsic::amdgcn_image_sample_c_b_cl_o: - case Intrinsic::amdgcn_image_sample_c_lz_o: - case Intrinsic::amdgcn_image_sample_c_cd_o: - case Intrinsic::amdgcn_image_sample_c_cd_cl_o: - - // Basic gather4 - case Intrinsic::amdgcn_image_gather4: - case Intrinsic::amdgcn_image_gather4_cl: - case Intrinsic::amdgcn_image_gather4_l: - case Intrinsic::amdgcn_image_gather4_b: - case Intrinsic::amdgcn_image_gather4_b_cl: - case Intrinsic::amdgcn_image_gather4_lz: - - // Gather4 with comparison - case Intrinsic::amdgcn_image_gather4_c: - case Intrinsic::amdgcn_image_gather4_c_cl: - case Intrinsic::amdgcn_image_gather4_c_l: - case Intrinsic::amdgcn_image_gather4_c_b: - case Intrinsic::amdgcn_image_gather4_c_b_cl: - case Intrinsic::amdgcn_image_gather4_c_lz: - - // Gather4 with offsets - case Intrinsic::amdgcn_image_gather4_o: - case Intrinsic::amdgcn_image_gather4_cl_o: - case Intrinsic::amdgcn_image_gather4_l_o: - case Intrinsic::amdgcn_image_gather4_b_o: - case Intrinsic::amdgcn_image_gather4_b_cl_o: - case Intrinsic::amdgcn_image_gather4_lz_o: - - // Gather4 with comparison and offsets - case Intrinsic::amdgcn_image_gather4_c_o: - case Intrinsic::amdgcn_image_gather4_c_cl_o: - case Intrinsic::amdgcn_image_gather4_c_l_o: - case Intrinsic::amdgcn_image_gather4_c_b_o: - case Intrinsic::amdgcn_image_gather4_c_b_cl_o: - case Intrinsic::amdgcn_image_gather4_c_lz_o: { - // Replace dmask with everything disabled with undef. - const ConstantSDNode *DMask = dyn_cast<ConstantSDNode>(Op.getOperand(5)); - if (!DMask || DMask->isNullValue()) { - SDValue Undef = DAG.getUNDEF(Op.getValueType()); - return DAG.getMergeValues({ Undef, Op.getOperand(0) }, SDLoc(Op)); - } - - if (Subtarget->hasUnpackedD16VMem() && - Op.getValueType().isVector() && - Op.getValueType().getScalarSizeInBits() == 16) { - return adjustLoadValueType(getImageOpcode(IntrID), cast<MemSDNode>(Op), - DAG); - } - - return SDValue(); - } default: if (const AMDGPU::ImageDimIntrinsicInfo *ImageDimIntr = AMDGPU::getImageDimIntrinsicInfo(IntrID)) @@ -5599,35 +5325,6 @@ SDValue SITargetLowering::LowerINTRINSIC_VOID(SDValue Op, return DAG.getMemIntrinsicNode(Opc, DL, Op->getVTList(), Ops, M->getMemoryVT(), M->getMemOperand()); } - case Intrinsic::amdgcn_image_store: - case Intrinsic::amdgcn_image_store_mip: { - SDValue VData = Op.getOperand(2); - EVT VT = VData.getValueType(); - if (Subtarget->hasUnpackedD16VMem() && - VT.isVector() && VT.getScalarSizeInBits() == 16) { - SDValue Chain = Op.getOperand(0); - - VData = handleD16VData(VData, DAG); - SDValue Ops[] = { - Chain, // Chain - VData, // vdata - Op.getOperand(3), // vaddr - Op.getOperand(4), // rsrc - Op.getOperand(5), // dmask - Op.getOperand(6), // glc - Op.getOperand(7), // slc - Op.getOperand(8), // lwe - Op.getOperand(9) // da - }; - unsigned Opc = (IntrinsicID == Intrinsic::amdgcn_image_store) ? - AMDGPUISD::IMAGE_STORE : AMDGPUISD::IMAGE_STORE_MIP; - MemSDNode *M = cast<MemSDNode>(Op); - return DAG.getMemIntrinsicNode(Opc, DL, Op->getVTList(), Ops, - M->getMemoryVT(), M->getMemOperand()); - } - - return SDValue(); - } default: { if (const AMDGPU::ImageDimIntrinsicInfo *ImageDimIntr = AMDGPU::getImageDimIntrinsicInfo(IntrinsicID)) |

