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 | |
| 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')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp | 76 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h | 84 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td | 14 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/MIMGInstructions.td | 391 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 303 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SIInstrInfo.td | 128 | ||||
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp | 52 |
7 files changed, 2 insertions, 1046 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp index 8685de871de..a8c5ce256aa 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp @@ -4130,82 +4130,6 @@ const char* AMDGPUTargetLowering::getTargetNodeName(unsigned Opcode) const { NODE_NAME_CASE(BUFFER_ATOMIC_OR) NODE_NAME_CASE(BUFFER_ATOMIC_XOR) NODE_NAME_CASE(BUFFER_ATOMIC_CMPSWAP) - NODE_NAME_CASE(IMAGE_LOAD) - NODE_NAME_CASE(IMAGE_LOAD_MIP) - NODE_NAME_CASE(IMAGE_STORE) - NODE_NAME_CASE(IMAGE_STORE_MIP) - // Basic sample. - NODE_NAME_CASE(IMAGE_SAMPLE) - NODE_NAME_CASE(IMAGE_SAMPLE_CL) - NODE_NAME_CASE(IMAGE_SAMPLE_D) - NODE_NAME_CASE(IMAGE_SAMPLE_D_CL) - NODE_NAME_CASE(IMAGE_SAMPLE_L) - NODE_NAME_CASE(IMAGE_SAMPLE_B) - NODE_NAME_CASE(IMAGE_SAMPLE_B_CL) - NODE_NAME_CASE(IMAGE_SAMPLE_LZ) - NODE_NAME_CASE(IMAGE_SAMPLE_CD) - NODE_NAME_CASE(IMAGE_SAMPLE_CD_CL) - // Sample with comparison. - NODE_NAME_CASE(IMAGE_SAMPLE_C) - NODE_NAME_CASE(IMAGE_SAMPLE_C_CL) - NODE_NAME_CASE(IMAGE_SAMPLE_C_D) - NODE_NAME_CASE(IMAGE_SAMPLE_C_D_CL) - NODE_NAME_CASE(IMAGE_SAMPLE_C_L) - NODE_NAME_CASE(IMAGE_SAMPLE_C_B) - NODE_NAME_CASE(IMAGE_SAMPLE_C_B_CL) - NODE_NAME_CASE(IMAGE_SAMPLE_C_LZ) - NODE_NAME_CASE(IMAGE_SAMPLE_C_CD) - NODE_NAME_CASE(IMAGE_SAMPLE_C_CD_CL) - // Sample with offsets. - NODE_NAME_CASE(IMAGE_SAMPLE_O) - NODE_NAME_CASE(IMAGE_SAMPLE_CL_O) - NODE_NAME_CASE(IMAGE_SAMPLE_D_O) - NODE_NAME_CASE(IMAGE_SAMPLE_D_CL_O) - NODE_NAME_CASE(IMAGE_SAMPLE_L_O) - NODE_NAME_CASE(IMAGE_SAMPLE_B_O) - NODE_NAME_CASE(IMAGE_SAMPLE_B_CL_O) - NODE_NAME_CASE(IMAGE_SAMPLE_LZ_O) - NODE_NAME_CASE(IMAGE_SAMPLE_CD_O) - NODE_NAME_CASE(IMAGE_SAMPLE_CD_CL_O) - // Sample with comparison and offsets. - NODE_NAME_CASE(IMAGE_SAMPLE_C_O) - NODE_NAME_CASE(IMAGE_SAMPLE_C_CL_O) - NODE_NAME_CASE(IMAGE_SAMPLE_C_D_O) - NODE_NAME_CASE(IMAGE_SAMPLE_C_D_CL_O) - NODE_NAME_CASE(IMAGE_SAMPLE_C_L_O) - NODE_NAME_CASE(IMAGE_SAMPLE_C_B_O) - NODE_NAME_CASE(IMAGE_SAMPLE_C_B_CL_O) - NODE_NAME_CASE(IMAGE_SAMPLE_C_LZ_O) - NODE_NAME_CASE(IMAGE_SAMPLE_C_CD_O) - NODE_NAME_CASE(IMAGE_SAMPLE_C_CD_CL_O) - // Basic gather4. - NODE_NAME_CASE(IMAGE_GATHER4) - NODE_NAME_CASE(IMAGE_GATHER4_CL) - NODE_NAME_CASE(IMAGE_GATHER4_L) - NODE_NAME_CASE(IMAGE_GATHER4_B) - NODE_NAME_CASE(IMAGE_GATHER4_B_CL) - NODE_NAME_CASE(IMAGE_GATHER4_LZ) - // Gather4 with comparison. - NODE_NAME_CASE(IMAGE_GATHER4_C) - NODE_NAME_CASE(IMAGE_GATHER4_C_CL) - NODE_NAME_CASE(IMAGE_GATHER4_C_L) - NODE_NAME_CASE(IMAGE_GATHER4_C_B) - NODE_NAME_CASE(IMAGE_GATHER4_C_B_CL) - NODE_NAME_CASE(IMAGE_GATHER4_C_LZ) - // Gather4 with offsets. - NODE_NAME_CASE(IMAGE_GATHER4_O) - NODE_NAME_CASE(IMAGE_GATHER4_CL_O) - NODE_NAME_CASE(IMAGE_GATHER4_L_O) - NODE_NAME_CASE(IMAGE_GATHER4_B_O) - NODE_NAME_CASE(IMAGE_GATHER4_B_CL_O) - NODE_NAME_CASE(IMAGE_GATHER4_LZ_O) - // Gather4 with comparison and offsets. - NODE_NAME_CASE(IMAGE_GATHER4_C_O) - NODE_NAME_CASE(IMAGE_GATHER4_C_CL_O) - NODE_NAME_CASE(IMAGE_GATHER4_C_L_O) - NODE_NAME_CASE(IMAGE_GATHER4_C_B_O) - NODE_NAME_CASE(IMAGE_GATHER4_C_B_CL_O) - NODE_NAME_CASE(IMAGE_GATHER4_C_LZ_O) case AMDGPUISD::LAST_AMDGPU_ISD_NUMBER: break; } diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h index a34c963db8e..a484bb6839e 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h @@ -486,90 +486,6 @@ enum NodeType : unsigned { BUFFER_ATOMIC_OR, BUFFER_ATOMIC_XOR, BUFFER_ATOMIC_CMPSWAP, - IMAGE_LOAD, - IMAGE_LOAD_MIP, - IMAGE_STORE, - IMAGE_STORE_MIP, - - // Basic sample. - IMAGE_SAMPLE, - IMAGE_SAMPLE_CL, - IMAGE_SAMPLE_D, - IMAGE_SAMPLE_D_CL, - IMAGE_SAMPLE_L, - IMAGE_SAMPLE_B, - IMAGE_SAMPLE_B_CL, - IMAGE_SAMPLE_LZ, - IMAGE_SAMPLE_CD, - IMAGE_SAMPLE_CD_CL, - - // Sample with comparison. - IMAGE_SAMPLE_C, - IMAGE_SAMPLE_C_CL, - IMAGE_SAMPLE_C_D, - IMAGE_SAMPLE_C_D_CL, - IMAGE_SAMPLE_C_L, - IMAGE_SAMPLE_C_B, - IMAGE_SAMPLE_C_B_CL, - IMAGE_SAMPLE_C_LZ, - IMAGE_SAMPLE_C_CD, - IMAGE_SAMPLE_C_CD_CL, - - // Sample with offsets. - IMAGE_SAMPLE_O, - IMAGE_SAMPLE_CL_O, - IMAGE_SAMPLE_D_O, - IMAGE_SAMPLE_D_CL_O, - IMAGE_SAMPLE_L_O, - IMAGE_SAMPLE_B_O, - IMAGE_SAMPLE_B_CL_O, - IMAGE_SAMPLE_LZ_O, - IMAGE_SAMPLE_CD_O, - IMAGE_SAMPLE_CD_CL_O, - - // Sample with comparison and offsets. - IMAGE_SAMPLE_C_O, - IMAGE_SAMPLE_C_CL_O, - IMAGE_SAMPLE_C_D_O, - IMAGE_SAMPLE_C_D_CL_O, - IMAGE_SAMPLE_C_L_O, - IMAGE_SAMPLE_C_B_O, - IMAGE_SAMPLE_C_B_CL_O, - IMAGE_SAMPLE_C_LZ_O, - IMAGE_SAMPLE_C_CD_O, - IMAGE_SAMPLE_C_CD_CL_O, - - // Basic gather4. - IMAGE_GATHER4, - IMAGE_GATHER4_CL, - IMAGE_GATHER4_L, - IMAGE_GATHER4_B, - IMAGE_GATHER4_B_CL, - IMAGE_GATHER4_LZ, - - // Gather4 with comparison. - IMAGE_GATHER4_C, - IMAGE_GATHER4_C_CL, - IMAGE_GATHER4_C_L, - IMAGE_GATHER4_C_B, - IMAGE_GATHER4_C_B_CL, - IMAGE_GATHER4_C_LZ, - - // Gather4 with offsets. - IMAGE_GATHER4_O, - IMAGE_GATHER4_CL_O, - IMAGE_GATHER4_L_O, - IMAGE_GATHER4_B_O, - IMAGE_GATHER4_B_CL_O, - IMAGE_GATHER4_LZ_O, - - // Gather4 with comparison and offsets. - IMAGE_GATHER4_C_O, - IMAGE_GATHER4_C_CL_O, - IMAGE_GATHER4_C_L_O, - IMAGE_GATHER4_C_B_O, - IMAGE_GATHER4_C_B_CL_O, - IMAGE_GATHER4_C_LZ_O, LAST_AMDGPU_ISD_NUMBER }; diff --git a/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td b/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td index e62b684badf..9dbd7751b4d 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td +++ b/llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td @@ -26,7 +26,6 @@ def RsrcIntrinsics : GenericTable { } foreach intr = !listconcat(AMDGPUBufferIntrinsics, - AMDGPUImageIntrinsics, AMDGPUImageDimIntrinsics, AMDGPUImageDimAtomicIntrinsics) in { def : RsrcIntrinsic<!cast<AMDGPURsrcIntrinsic>(intr)>; @@ -60,19 +59,6 @@ def : SourceOfDivergence<int_amdgcn_atomic_dec>; def : SourceOfDivergence<int_amdgcn_ds_fadd>; def : SourceOfDivergence<int_amdgcn_ds_fmin>; def : SourceOfDivergence<int_amdgcn_ds_fmax>; -def : SourceOfDivergence<int_amdgcn_image_atomic_swap>; -def : SourceOfDivergence<int_amdgcn_image_atomic_add>; -def : SourceOfDivergence<int_amdgcn_image_atomic_sub>; -def : SourceOfDivergence<int_amdgcn_image_atomic_smin>; -def : SourceOfDivergence<int_amdgcn_image_atomic_umin>; -def : SourceOfDivergence<int_amdgcn_image_atomic_smax>; -def : SourceOfDivergence<int_amdgcn_image_atomic_umax>; -def : SourceOfDivergence<int_amdgcn_image_atomic_and>; -def : SourceOfDivergence<int_amdgcn_image_atomic_or>; -def : SourceOfDivergence<int_amdgcn_image_atomic_xor>; -def : SourceOfDivergence<int_amdgcn_image_atomic_inc>; -def : SourceOfDivergence<int_amdgcn_image_atomic_dec>; -def : SourceOfDivergence<int_amdgcn_image_atomic_cmpswap>; def : SourceOfDivergence<int_amdgcn_buffer_atomic_swap>; def : SourceOfDivergence<int_amdgcn_buffer_atomic_add>; def : SourceOfDivergence<int_amdgcn_buffer_atomic_sub>; diff --git a/llvm/lib/Target/AMDGPU/MIMGInstructions.td b/llvm/lib/Target/AMDGPU/MIMGInstructions.td index 3410dc3ff20..579298755ac 100644 --- a/llvm/lib/Target/AMDGPU/MIMGInstructions.td +++ b/llvm/lib/Target/AMDGPU/MIMGInstructions.td @@ -10,12 +10,10 @@ // MIMG-specific encoding families to distinguish between semantically // equivalent machine instructions with different encoding. // -// - MIMGEncPseudo: pseudo instruction, only used for atomics // - MIMGEncGfx6: encoding introduced with gfx6 (obsoleted for atomics in gfx8) // - MIMGEncGfx8: encoding introduced with gfx8 for atomics class MIMGEncoding; -def MIMGEncPseudo : MIMGEncoding; def MIMGEncGfx6 : MIMGEncoding; def MIMGEncGfx8 : MIMGEncoding; @@ -244,12 +242,7 @@ class MIMG_Atomic_Helper <string asm, RegisterClass data_rc, multiclass MIMG_Atomic_Helper_m <mimg op, string asm, RegisterClass data_rc, RegisterClass addr_rc, bit enableDasm = 0> { - let isPseudo = 1, isCodeGenOnly = 1, MIMGEncoding = MIMGEncPseudo in { - def "" : MIMG_Atomic_Helper<asm, data_rc, addr_rc>, - SIMCInstr<NAME, SIEncodingFamily.NONE>; - } - - let ssamp = 0, d16 = 0, isCodeGenOnly = 0 in { + let ssamp = 0, d16 = 0 in { def _si : MIMG_Atomic_Helper<asm, data_rc, addr_rc, "SICI", enableDasm>, SIMCInstr<NAME, SIEncodingFamily.SI>, MIMGe<op.SI> { @@ -507,385 +500,3 @@ foreach intr = !listconcat(AMDGPUImageDimIntrinsics, AMDGPUImageDimAtomicIntrinsics) in { def : ImageDimIntrinsicInfo<intr>; } - -/********** ======================= **********/ -/********** Image sampling patterns **********/ -/********** ======================= **********/ - -// ImageSample for amdgcn -// TODO: -// 1. Handle v4i32 rsrc type (Register Class for the instruction to be SReg_128). -// 2. Add A16 support when we pass address of half type. -multiclass ImageSamplePattern<SDPatternOperator name, MIMG opcode, - ValueType dt, ValueType vt, bit d16> { - def : GCNPat< - (dt (name vt:$addr, v8i32:$rsrc, v4i32:$sampler, i32:$dmask, i1:$unorm, i1:$glc, - i1:$slc, i1:$lwe, i1:$da)), - !con((opcode $addr, $rsrc, $sampler, (as_i32imm $dmask), (as_i1imm $unorm), - (as_i1imm $glc), (as_i1imm $slc), 0, 0, (as_i1imm $lwe), - (as_i1imm $da)), - !if(opcode.BaseOpcode.HasD16, (opcode d16), (opcode))) - >; -} - -multiclass ImageSampleDataPatterns<SDPatternOperator name, string opcode, - ValueType dt, bit d16> { - defm : ImageSamplePattern<name, !cast<MIMG>(opcode # _V1), dt, f32, d16>; - defm : ImageSamplePattern<name, !cast<MIMG>(opcode # _V2), dt, v2f32, d16>; - defm : ImageSamplePattern<name, !cast<MIMG>(opcode # _V4), dt, v4f32, d16>; - defm : ImageSamplePattern<name, !cast<MIMG>(opcode # _V8), dt, v8f32, d16>; - defm : ImageSamplePattern<name, !cast<MIMG>(opcode # _V16), dt, v16f32, d16>; -} - -// ImageSample patterns. -multiclass ImageSamplePatterns<SDPatternOperator name, string opcode> { - defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V1), f32, 0>; - defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V2), v2f32, 0>; - defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V4), v4f32, 0>; - - let SubtargetPredicate = HasUnpackedD16VMem in { - defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V1), f16, 1>; - } // End HasUnpackedD16VMem. - - let SubtargetPredicate = HasPackedD16VMem in { - defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V1), f16, 1>; - defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V1), v2f16, 1>; - defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V2), v4f16, 1>; - } // End HasPackedD16VMem. -} - -// ImageSample alternative patterns for illegal vector half Types. -multiclass ImageSampleAltPatterns<SDPatternOperator name, string opcode> { - let SubtargetPredicate = HasUnpackedD16VMem in { - defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V2), v2i32, 1>; - defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V4), v4i32, 1>; - } // End HasUnpackedD16VMem. -} - -// ImageGather4 patterns. -multiclass ImageGather4Patterns<SDPatternOperator name, string opcode> { - defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V4), v4f32, 0>; - - let SubtargetPredicate = HasPackedD16VMem in { - defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V2), v4f16, 1>; - } // End HasPackedD16VMem. -} - -// ImageGather4 alternative patterns for illegal vector half Types. -multiclass ImageGather4AltPatterns<SDPatternOperator name, string opcode> { - let SubtargetPredicate = HasUnpackedD16VMem in { - defm : ImageSampleDataPatterns<name, !cast<string>(opcode # _V4), v4i32, 1>; - } // End HasUnpackedD16VMem. -} - -// ImageLoad for amdgcn. -multiclass ImageLoadPattern<SDPatternOperator name, MIMG opcode, - ValueType dt, ValueType vt, bit d16> { - def : GCNPat < - (dt (name vt:$addr, v8i32:$rsrc, i32:$dmask, i1:$glc, i1:$slc, i1:$lwe, - i1:$da)), - !con((opcode $addr, $rsrc, (as_i32imm $dmask), 1, (as_i1imm $glc), - (as_i1imm $slc), 0, 0, (as_i1imm $lwe), (as_i1imm $da)), - !if(opcode.BaseOpcode.HasD16, (opcode d16), (opcode))) - >; -} - -multiclass ImageLoadDataPatterns<SDPatternOperator name, string opcode, - ValueType dt, bit d16> { - defm : ImageLoadPattern<name, !cast<MIMG>(opcode # _V1), dt, i32, d16>; - defm : ImageLoadPattern<name, !cast<MIMG>(opcode # _V2), dt, v2i32, d16>; - defm : ImageLoadPattern<name, !cast<MIMG>(opcode # _V4), dt, v4i32, d16>; -} - -// ImageLoad patterns. -// TODO: support v3f32. -multiclass ImageLoadPatterns<SDPatternOperator name, string opcode> { - defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V1), f32, 0>; - defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V2), v2f32, 0>; - defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V4), v4f32, 0>; - - let SubtargetPredicate = HasUnpackedD16VMem in { - defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V1), f16, 1>; - } // End HasUnpackedD16VMem. - - let SubtargetPredicate = HasPackedD16VMem in { - defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V1), f16, 1>; - defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V1), v2f16, 1>; - defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V2), v4f16, 1>; - } // End HasPackedD16VMem. -} - -// ImageLoad alternative patterns for illegal vector half Types. -multiclass ImageLoadAltPatterns<SDPatternOperator name, string opcode> { - let SubtargetPredicate = HasUnpackedD16VMem in { - defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V2), v2i32, 1>; - defm : ImageLoadDataPatterns<name, !cast<string>(opcode # _V4), v4i32, 1>; - } // End HasUnPackedD16VMem. -} - -// ImageStore for amdgcn. -multiclass ImageStorePattern<SDPatternOperator name, MIMG opcode, - ValueType dt, ValueType vt, bit d16> { - def : GCNPat < - (name dt:$data, vt:$addr, v8i32:$rsrc, i32:$dmask, i1:$glc, i1:$slc, - i1:$lwe, i1:$da), - !con((opcode $data, $addr, $rsrc, (as_i32imm $dmask), 1, (as_i1imm $glc), - (as_i1imm $slc), 0, 0, (as_i1imm $lwe), (as_i1imm $da)), - !if(opcode.BaseOpcode.HasD16, (opcode d16), (opcode))) - >; -} - -multiclass ImageStoreDataPatterns<SDPatternOperator name, string opcode, - ValueType dt, bit d16> { - defm : ImageStorePattern<name, !cast<MIMG>(opcode # _V1), dt, i32, d16>; - defm : ImageStorePattern<name, !cast<MIMG>(opcode # _V2), dt, v2i32, d16>; - defm : ImageStorePattern<name, !cast<MIMG>(opcode # _V4), dt, v4i32, d16>; -} - -// ImageStore patterns. -// TODO: support v3f32. -multiclass ImageStorePatterns<SDPatternOperator name, string opcode> { - defm : ImageStoreDataPatterns<name, !cast<string>(opcode # _V1), f32, 0>; - defm : ImageStoreDataPatterns<name, !cast<string>(opcode # _V2), v2f32, 0>; - defm : ImageStoreDataPatterns<name, !cast<string>(opcode # _V4), v4f32, 0>; - - let SubtargetPredicate = HasUnpackedD16VMem in { - defm : ImageStoreDataPatterns<name, !cast<string>(opcode # _V1), f16, 1>; - } // End HasUnpackedD16VMem. - - let SubtargetPredicate = HasPackedD16VMem in { - defm : ImageStoreDataPatterns<name, !cast<string>(opcode # _V1), f16, 1>; - defm : ImageStoreDataPatterns<name, !cast<string>(opcode # _V1), v2f16, 1>; - defm : ImageStoreDataPatterns<name, !cast<string>(opcode # _V2), v4f16, 1>; - } // End HasPackedD16VMem. -} - -// ImageStore alternative patterns. -multiclass ImageStoreAltPatterns<SDPatternOperator name, string opcode> { - let SubtargetPredicate = HasUnpackedD16VMem in { - defm : ImageStoreDataPatterns<name, !cast<string>(opcode # _V2), v2i32, 1>; - defm : ImageStoreDataPatterns<name, !cast<string>(opcode # _V4), v4i32, 1>; - } // End HasUnpackedD16VMem. - - let SubtargetPredicate = HasPackedD16VMem in { - defm : ImageStoreDataPatterns<name, !cast<string>(opcode # _V1), i32, 1>; - defm : ImageStoreDataPatterns<name, !cast<string>(opcode # _V2), v2i32, 1>; - } // End HasPackedD16VMem. -} - -// ImageAtomic for amdgcn. -class ImageAtomicPattern<SDPatternOperator name, MIMG opcode, ValueType vt> : GCNPat < - (name i32:$vdata, vt:$addr, v8i32:$rsrc, imm:$r128, imm:$da, imm:$slc), - (opcode $vdata, $addr, $rsrc, 1, 1, 1, (as_i1imm $slc), (as_i1imm $r128), 0, 0, (as_i1imm $da)) ->; - -// ImageAtomic patterns. -multiclass ImageAtomicPatterns<SDPatternOperator name, string opcode> { - def : ImageAtomicPattern<name, !cast<MIMG>(opcode # _V1_V1), i32>; - def : ImageAtomicPattern<name, !cast<MIMG>(opcode # _V1_V2), v2i32>; - def : ImageAtomicPattern<name, !cast<MIMG>(opcode # _V1_V4), v4i32>; -} - -// ImageAtomicCmpSwap for amdgcn. -class ImageAtomicCmpSwapPattern<MIMG opcode, ValueType vt> : GCNPat < - (int_amdgcn_image_atomic_cmpswap i32:$vsrc, i32:$vcmp, vt:$addr, v8i32:$rsrc, - imm:$r128, imm:$da, imm:$slc), - (EXTRACT_SUBREG - (opcode (REG_SEQUENCE VReg_64, $vsrc, sub0, $vcmp, sub1), - $addr, $rsrc, 3, 1, 1, (as_i1imm $slc), (as_i1imm $r128), 0, 0, (as_i1imm $da)), - sub0) ->; - -// ======= amdgcn Image Intrinsics ============== - -// Image load. -defm : ImageLoadPatterns<int_amdgcn_image_load, "IMAGE_LOAD">; -defm : ImageLoadPatterns<int_amdgcn_image_load_mip, "IMAGE_LOAD_MIP">; -defm : ImageLoadPatterns<int_amdgcn_image_getresinfo, "IMAGE_GET_RESINFO">; -defm : ImageLoadAltPatterns<SIImage_load, "IMAGE_LOAD">; -defm : ImageLoadAltPatterns<SIImage_load_mip, "IMAGE_LOAD_MIP">; - -// Image store. -defm : ImageStorePatterns<int_amdgcn_image_store, "IMAGE_STORE">; -defm : ImageStorePatterns<int_amdgcn_image_store_mip, "IMAGE_STORE_MIP">; -defm : ImageStoreAltPatterns<SIImage_store, "IMAGE_STORE">; -defm : ImageStoreAltPatterns<SIImage_store_mip, "IMAGE_STORE_MIP">; - -// Basic sample. -defm : ImageSamplePatterns<int_amdgcn_image_sample, "IMAGE_SAMPLE">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_cl, "IMAGE_SAMPLE_CL">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_d, "IMAGE_SAMPLE_D">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_d_cl, "IMAGE_SAMPLE_D_CL">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_l, "IMAGE_SAMPLE_L">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_b, "IMAGE_SAMPLE_B">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_b_cl, "IMAGE_SAMPLE_B_CL">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_lz, "IMAGE_SAMPLE_LZ">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_cd, "IMAGE_SAMPLE_CD">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_cd_cl, "IMAGE_SAMPLE_CD_CL">; - -// Sample with comparison. -defm : ImageSamplePatterns<int_amdgcn_image_sample_c, "IMAGE_SAMPLE_C">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_cl, "IMAGE_SAMPLE_C_CL">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_d, "IMAGE_SAMPLE_C_D">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_d_cl, "IMAGE_SAMPLE_C_D_CL">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_l, "IMAGE_SAMPLE_C_L">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_b, "IMAGE_SAMPLE_C_B">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_b_cl, "IMAGE_SAMPLE_C_B_CL">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_lz, "IMAGE_SAMPLE_C_LZ">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_cd, "IMAGE_SAMPLE_C_CD">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_cd_cl, "IMAGE_SAMPLE_C_CD_CL">; - -// Sample with offsets. -defm : ImageSamplePatterns<int_amdgcn_image_sample_o, "IMAGE_SAMPLE_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_cl_o, "IMAGE_SAMPLE_CL_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_d_o, "IMAGE_SAMPLE_D_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_d_cl_o, "IMAGE_SAMPLE_D_CL_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_l_o, "IMAGE_SAMPLE_L_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_b_o, "IMAGE_SAMPLE_B_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_b_cl_o, "IMAGE_SAMPLE_B_CL_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_lz_o, "IMAGE_SAMPLE_LZ_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_cd_o, "IMAGE_SAMPLE_CD_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_cd_cl_o, "IMAGE_SAMPLE_CD_CL_O">; - -// Sample with comparison and offsets. -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_o, "IMAGE_SAMPLE_C_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_cl_o, "IMAGE_SAMPLE_C_CL_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_d_o, "IMAGE_SAMPLE_C_D_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_d_cl_o, "IMAGE_SAMPLE_C_D_CL_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_l_o, "IMAGE_SAMPLE_C_L_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_b_o, "IMAGE_SAMPLE_C_B_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_b_cl_o, "IMAGE_SAMPLE_C_B_CL_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_lz_o, "IMAGE_SAMPLE_C_LZ_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_cd_o, "IMAGE_SAMPLE_C_CD_O">; -defm : ImageSamplePatterns<int_amdgcn_image_sample_c_cd_cl_o, "IMAGE_SAMPLE_C_CD_CL_O">; - -// Basic gather4. -defm : ImageGather4Patterns<int_amdgcn_image_gather4, "IMAGE_GATHER4">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_cl, "IMAGE_GATHER4_CL">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_l, "IMAGE_GATHER4_L">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_b, "IMAGE_GATHER4_B">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_b_cl, "IMAGE_GATHER4_B_CL">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_lz, "IMAGE_GATHER4_LZ">; - -// Gather4 with comparison. -defm : ImageGather4Patterns<int_amdgcn_image_gather4_c, "IMAGE_GATHER4_C">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_c_cl, "IMAGE_GATHER4_C_CL">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_c_l, "IMAGE_GATHER4_C_L">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_c_b, "IMAGE_GATHER4_C_B">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_c_b_cl, "IMAGE_GATHER4_C_B_CL">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_c_lz, "IMAGE_GATHER4_C_LZ">; - -// Gather4 with offsets. -defm : ImageGather4Patterns<int_amdgcn_image_gather4_o, "IMAGE_GATHER4_O">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_cl_o, "IMAGE_GATHER4_CL_O">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_l_o, "IMAGE_GATHER4_L_O">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_b_o, "IMAGE_GATHER4_B_O">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_b_cl_o, "IMAGE_GATHER4_B_CL_O">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_lz_o, "IMAGE_GATHER4_LZ_O">; - -// Gather4 with comparison and offsets. -defm : ImageGather4Patterns<int_amdgcn_image_gather4_c_o, "IMAGE_GATHER4_C_O">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_c_cl_o, "IMAGE_GATHER4_C_CL_O">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_c_l_o, "IMAGE_GATHER4_C_L_O">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_c_b_o, "IMAGE_GATHER4_C_B_O">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_c_b_cl_o, "IMAGE_GATHER4_C_B_CL_O">; -defm : ImageGather4Patterns<int_amdgcn_image_gather4_c_lz_o, "IMAGE_GATHER4_C_LZ_O">; - -// Basic sample alternative. -defm : ImageSampleAltPatterns<SIImage_sample, "IMAGE_SAMPLE">; -defm : ImageSampleAltPatterns<SIImage_sample_cl, "IMAGE_SAMPLE_CL">; -defm : ImageSampleAltPatterns<SIImage_sample_d, "IMAGE_SAMPLE_D">; -defm : ImageSampleAltPatterns<SIImage_sample_d_cl, "IMAGE_SAMPLE_D_CL">; -defm : ImageSampleAltPatterns<SIImage_sample_l, "IMAGE_SAMPLE_L">; -defm : ImageSampleAltPatterns<SIImage_sample_b, "IMAGE_SAMPLE_B">; -defm : ImageSampleAltPatterns<SIImage_sample_b_cl, "IMAGE_SAMPLE_B_CL">; -defm : ImageSampleAltPatterns<SIImage_sample_lz, "IMAGE_SAMPLE_LZ">; -defm : ImageSampleAltPatterns<SIImage_sample_cd, "IMAGE_SAMPLE_CD">; -defm : ImageSampleAltPatterns<SIImage_sample_cd_cl, "IMAGE_SAMPLE_CD_CL">; - -// Sample with comparison alternative. -defm : ImageSampleAltPatterns<SIImage_sample_c, "IMAGE_SAMPLE_C">; -defm : ImageSampleAltPatterns<SIImage_sample_c_cl, "IMAGE_SAMPLE_C_CL">; -defm : ImageSampleAltPatterns<SIImage_sample_c_d, "IMAGE_SAMPLE_C_D">; -defm : ImageSampleAltPatterns<SIImage_sample_c_d_cl, "IMAGE_SAMPLE_C_D_CL">; -defm : ImageSampleAltPatterns<SIImage_sample_c_l, "IMAGE_SAMPLE_C_L">; -defm : ImageSampleAltPatterns<SIImage_sample_c_b, "IMAGE_SAMPLE_C_B">; -defm : ImageSampleAltPatterns<SIImage_sample_c_b_cl, "IMAGE_SAMPLE_C_B_CL">; -defm : ImageSampleAltPatterns<SIImage_sample_c_lz, "IMAGE_SAMPLE_C_LZ">; -defm : ImageSampleAltPatterns<SIImage_sample_c_cd, "IMAGE_SAMPLE_C_CD">; -defm : ImageSampleAltPatterns<SIImage_sample_c_cd_cl, "IMAGE_SAMPLE_C_CD_CL">; - -// Sample with offsets alternative. -defm : ImageSampleAltPatterns<SIImage_sample_o, "IMAGE_SAMPLE_O">; -defm : ImageSampleAltPatterns<SIImage_sample_cl_o, "IMAGE_SAMPLE_CL_O">; -defm : ImageSampleAltPatterns<SIImage_sample_d_o, "IMAGE_SAMPLE_D_O">; -defm : ImageSampleAltPatterns<SIImage_sample_d_cl_o, "IMAGE_SAMPLE_D_CL_O">; -defm : ImageSampleAltPatterns<SIImage_sample_l_o, "IMAGE_SAMPLE_L_O">; -defm : ImageSampleAltPatterns<SIImage_sample_b_o, "IMAGE_SAMPLE_B_O">; -defm : ImageSampleAltPatterns<SIImage_sample_b_cl_o, "IMAGE_SAMPLE_B_CL_O">; -defm : ImageSampleAltPatterns<SIImage_sample_lz_o, "IMAGE_SAMPLE_LZ_O">; -defm : ImageSampleAltPatterns<SIImage_sample_cd_o, "IMAGE_SAMPLE_CD_O">; -defm : ImageSampleAltPatterns<SIImage_sample_cd_cl_o, "IMAGE_SAMPLE_CD_CL_O">; - -// Sample with comparison and offsets alternative. -defm : ImageSampleAltPatterns<SIImage_sample_c_o, "IMAGE_SAMPLE_C_O">; -defm : ImageSampleAltPatterns<SIImage_sample_c_cl_o, "IMAGE_SAMPLE_C_CL_O">; -defm : ImageSampleAltPatterns<SIImage_sample_c_d_o, "IMAGE_SAMPLE_C_D_O">; -defm : ImageSampleAltPatterns<SIImage_sample_c_d_cl_o, "IMAGE_SAMPLE_C_D_CL_O">; -defm : ImageSampleAltPatterns<SIImage_sample_c_l_o, "IMAGE_SAMPLE_C_L_O">; -defm : ImageSampleAltPatterns<SIImage_sample_c_b_o, "IMAGE_SAMPLE_C_B_O">; -defm : ImageSampleAltPatterns<SIImage_sample_c_b_cl_o, "IMAGE_SAMPLE_C_B_CL_O">; -defm : ImageSampleAltPatterns<SIImage_sample_c_lz_o, "IMAGE_SAMPLE_C_LZ_O">; -defm : ImageSampleAltPatterns<SIImage_sample_c_cd_o, "IMAGE_SAMPLE_C_CD_O">; -defm : ImageSampleAltPatterns<SIImage_sample_c_cd_cl_o, "IMAGE_SAMPLE_C_CD_CL_O">; - -// Basic gather4 alternative. -defm : ImageGather4AltPatterns<SIImage_gather4, "IMAGE_GATHER4">; -defm : ImageGather4AltPatterns<SIImage_gather4_cl, "IMAGE_GATHER4_CL">; -defm : ImageGather4AltPatterns<SIImage_gather4_l, "IMAGE_GATHER4_L">; -defm : ImageGather4AltPatterns<SIImage_gather4_b, "IMAGE_GATHER4_B">; -defm : ImageGather4AltPatterns<SIImage_gather4_b_cl, "IMAGE_GATHER4_B_CL">; -defm : ImageGather4AltPatterns<SIImage_gather4_lz, "IMAGE_GATHER4_LZ">; - -// Gather4 with comparison alternative. -defm : ImageGather4AltPatterns<SIImage_gather4_c, "IMAGE_GATHER4_C">; -defm : ImageGather4AltPatterns<SIImage_gather4_c_cl, "IMAGE_GATHER4_C_CL">; -defm : ImageGather4AltPatterns<SIImage_gather4_c_l, "IMAGE_GATHER4_C_L">; -defm : ImageGather4AltPatterns<SIImage_gather4_c_b, "IMAGE_GATHER4_C_B">; -defm : ImageGather4AltPatterns<SIImage_gather4_c_b_cl, "IMAGE_GATHER4_C_B_CL">; -defm : ImageGather4AltPatterns<SIImage_gather4_c_lz, "IMAGE_GATHER4_C_LZ">; - -// Gather4 with offsets alternative. -defm : ImageGather4AltPatterns<SIImage_gather4_o, "IMAGE_GATHER4_O">; -defm : ImageGather4AltPatterns<SIImage_gather4_cl_o, "IMAGE_GATHER4_CL_O">; -defm : ImageGather4AltPatterns<SIImage_gather4_l_o, "IMAGE_GATHER4_L_O">; -defm : ImageGather4AltPatterns<SIImage_gather4_b_o, "IMAGE_GATHER4_B_O">; -defm : ImageGather4AltPatterns<SIImage_gather4_b_cl_o, "IMAGE_GATHER4_B_CL_O">; -defm : ImageGather4AltPatterns<SIImage_gather4_lz_o, "IMAGE_GATHER4_LZ_O">; - -// Gather4 with comparison and offsets alternative. -defm : ImageGather4AltPatterns<SIImage_gather4_c_o, "IMAGE_GATHER4_C_O">; -defm : ImageGather4AltPatterns<SIImage_gather4_c_cl_o, "IMAGE_GATHER4_C_CL_O">; -defm : ImageGather4AltPatterns<SIImage_gather4_c_l_o, "IMAGE_GATHER4_C_L_O">; -defm : ImageGather4AltPatterns<SIImage_gather4_c_b_o, "IMAGE_GATHER4_C_B_O">; -defm : ImageGather4AltPatterns<SIImage_gather4_c_b_cl_o, "IMAGE_GATHER4_C_B_CL_O">; -defm : ImageGather4AltPatterns<SIImage_gather4_c_lz_o, "IMAGE_GATHER4_C_LZ_O">; - -defm : ImageSamplePatterns<int_amdgcn_image_getlod, "IMAGE_GET_LOD">; - -// Image atomics -defm : ImageAtomicPatterns<int_amdgcn_image_atomic_swap, "IMAGE_ATOMIC_SWAP">; -def : ImageAtomicCmpSwapPattern<IMAGE_ATOMIC_CMPSWAP_V1_V1, i32>; -def : ImageAtomicCmpSwapPattern<IMAGE_ATOMIC_CMPSWAP_V1_V2, v2i32>; -def : ImageAtomicCmpSwapPattern<IMAGE_ATOMIC_CMPSWAP_V1_V4, v4i32>; -defm : ImageAtomicPatterns<int_amdgcn_image_atomic_add, "IMAGE_ATOMIC_ADD">; -defm : ImageAtomicPatterns<int_amdgcn_image_atomic_sub, "IMAGE_ATOMIC_SUB">; -defm : ImageAtomicPatterns<int_amdgcn_image_atomic_smin, "IMAGE_ATOMIC_SMIN">; -defm : ImageAtomicPatterns<int_amdgcn_image_atomic_umin, "IMAGE_ATOMIC_UMIN">; -defm : ImageAtomicPatterns<int_amdgcn_image_atomic_smax, "IMAGE_ATOMIC_SMAX">; -defm : ImageAtomicPatterns<int_amdgcn_image_atomic_umax, "IMAGE_ATOMIC_UMAX">; -defm : ImageAtomicPatterns<int_amdgcn_image_atomic_and, "IMAGE_ATOMIC_AND">; -defm : ImageAtomicPatterns<int_amdgcn_image_atomic_or, "IMAGE_ATOMIC_OR">; -defm : ImageAtomicPatterns<int_amdgcn_image_atomic_xor, "IMAGE_ATOMIC_XOR">; -defm : ImageAtomicPatterns<int_amdgcn_image_atomic_inc, "IMAGE_ATOMIC_INC">; -defm : ImageAtomicPatterns<int_amdgcn_image_atomic_dec, "IMAGE_ATOMIC_DEC">; 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)) diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.td b/llvm/lib/Target/AMDGPU/SIInstrInfo.td index fb865a19532..d8ed8eb0849 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.td +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.td @@ -172,134 +172,6 @@ def SIbuffer_atomic_cmpswap : SDNode <"AMDGPUISD::BUFFER_ATOMIC_CMPSWAP", [SDNPMemOperand, SDNPHasChain, SDNPMayLoad, SDNPMayStore] >; -def SDTImage_load : SDTypeProfile<1, 7, - [ - SDTCisInt<1>, // vaddr - SDTCisInt<2>, // rsrc - SDTCisVT<3, i32>, // dmask - SDTCisVT<4, i1>, // glc - SDTCisVT<5, i1>, // slc - SDTCisVT<6, i1>, // lwe - SDTCisVT<7, i1> // da - ]>; -def SIImage_load : SDNode<"AMDGPUISD::IMAGE_LOAD", SDTImage_load, - [SDNPMayLoad, SDNPMemOperand, SDNPHasChain]>; -def SIImage_load_mip : SDNode<"AMDGPUISD::IMAGE_LOAD_MIP", SDTImage_load, - [SDNPMayLoad, SDNPMemOperand, SDNPHasChain]>; - -def SDTImage_store : SDTypeProfile<0, 8, - [ - SDTCisInt<1>, // vaddr - SDTCisInt<2>, // rsrc - SDTCisVT<3, i32>, // dmask - SDTCisVT<4, i1>, // glc - SDTCisVT<5, i1>, // slc - SDTCisVT<6, i1>, // lwe - SDTCisVT<7, i1> // da - ]>; -def SIImage_store : SDNode <"AMDGPUISD::IMAGE_STORE", - SDTImage_store, - [SDNPMayStore, SDNPMemOperand, SDNPHasChain]>; -def SIImage_store_mip : SDNode <"AMDGPUISD::IMAGE_STORE_MIP", - SDTImage_store, - [SDNPMayStore, SDNPMemOperand, SDNPHasChain]>; - -class SDTImage_sample<string opcode> : SDNode <opcode, - SDTypeProfile<1, 9, - [ - SDTCisFP<1>, // vaddr - SDTCisInt<2>, // rsrc - SDTCisVT<3, v4i32>, // sampler - SDTCisVT<4, i32>, // dmask - SDTCisVT<5, i1>, // unorm - SDTCisVT<6, i1>, // glc - SDTCisVT<7, i1>, // slc - SDTCisVT<8, i1>, // lwe - SDTCisVT<9, i1> // da - ]>, - [SDNPMayLoad, SDNPMemOperand, SDNPHasChain] ->; - -// Basic sample. -def SIImage_sample : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE">; -def SIImage_sample_cl : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_CL">; -def SIImage_sample_d : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_D">; -def SIImage_sample_d_cl : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_D_CL">; -def SIImage_sample_l : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_L">; -def SIImage_sample_b : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_B">; -def SIImage_sample_b_cl : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_B_CL">; -def SIImage_sample_lz : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_LZ">; -def SIImage_sample_cd : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_CD">; -def SIImage_sample_cd_cl : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_CD_CL">; - -// Sample with comparison. -def SIImage_sample_c : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C">; -def SIImage_sample_c_cl : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_CL">; -def SIImage_sample_c_d : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_D">; -def SIImage_sample_c_d_cl : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_D_CL">; -def SIImage_sample_c_l : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_L">; -def SIImage_sample_c_b : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_B">; -def SIImage_sample_c_b_cl : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_B_CL">; -def SIImage_sample_c_lz : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_LZ">; -def SIImage_sample_c_cd : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_CD">; -def SIImage_sample_c_cd_cl : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_CD_CL">; - -// Sample with offsets. -def SIImage_sample_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_O">; -def SIImage_sample_cl_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_CL_O">; -def SIImage_sample_d_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_D_O">; -def SIImage_sample_d_cl_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_D_CL_O">; -def SIImage_sample_l_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_L_O">; -def SIImage_sample_b_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_B_O">; -def SIImage_sample_b_cl_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_B_CL_O">; -def SIImage_sample_lz_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_LZ_O">; -def SIImage_sample_cd_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_CD_O">; -def SIImage_sample_cd_cl_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_CD_CL_O">; - -// Sample with comparison and offsets. -def SIImage_sample_c_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_O">; -def SIImage_sample_c_cl_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_CL_O">; -def SIImage_sample_c_d_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_D_O">; -def SIImage_sample_c_d_cl_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_D_CL_O">; -def SIImage_sample_c_l_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_L_O">; -def SIImage_sample_c_b_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_B_O">; -def SIImage_sample_c_b_cl_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_B_CL_O">; -def SIImage_sample_c_lz_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_LZ_O">; -def SIImage_sample_c_cd_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_CD_O">; -def SIImage_sample_c_cd_cl_o : SDTImage_sample<"AMDGPUISD::IMAGE_SAMPLE_C_CD_CL_O">; - -// Basic gather4. -def SIImage_gather4 : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4">; -def SIImage_gather4_cl : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_CL">; -def SIImage_gather4_l : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_L">; -def SIImage_gather4_b : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_B">; -def SIImage_gather4_b_cl : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_B_CL">; -def SIImage_gather4_lz : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_LZ">; - -// Gather4 with comparison. -def SIImage_gather4_c : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_C">; -def SIImage_gather4_c_cl : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_C_CL">; -def SIImage_gather4_c_l : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_C_L">; -def SIImage_gather4_c_b : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_C_B">; -def SIImage_gather4_c_b_cl : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_C_B_CL">; -def SIImage_gather4_c_lz : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_C_LZ">; - -// Gather4 with offsets. -def SIImage_gather4_o : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_O">; -def SIImage_gather4_cl_o : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_CL_O">; -def SIImage_gather4_l_o : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_L_O">; -def SIImage_gather4_b_o : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_B_O">; -def SIImage_gather4_b_cl_o : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_B_CL_O">; -def SIImage_gather4_lz_o : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_LZ_O">; - -// Gather4 with comparison and offsets. -def SIImage_gather4_c_o : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_C_O">; -def SIImage_gather4_c_cl_o : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_C_CL_O">; -def SIImage_gather4_c_l_o : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_C_L_O">; -def SIImage_gather4_c_b_o : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_C_B_O">; -def SIImage_gather4_c_b_cl_o : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_C_B_CL_O">; -def SIImage_gather4_c_lz_o : SDTImage_sample<"AMDGPUISD::IMAGE_GATHER4_C_LZ_O">; - def SIpc_add_rel_offset : SDNode<"AMDGPUISD::PC_ADD_REL_OFFSET", SDTypeProfile<1, 2, [SDTCisVT<0, iPTR>, SDTCisSameAs<0,1>, SDTCisSameAs<0,2>]> >; diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp index 133561b30b4..bef2532da97 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp @@ -1650,57 +1650,7 @@ Value *InstCombiner::SimplifyDemandedVectorElts(Value *V, APInt DemandedElts, break; case Intrinsic::amdgcn_buffer_load: case Intrinsic::amdgcn_buffer_load_format: - 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: - - 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: - - 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: - - 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: - - case Intrinsic::amdgcn_image_getlod: { - auto IID = II->getIntrinsicID(); - bool IsBuffer = IID == Intrinsic::amdgcn_buffer_load || - IID == Intrinsic::amdgcn_buffer_load_format; - return simplifyAMDGCNMemoryIntrinsicDemanded(II, DemandedElts, - IsBuffer ? -1 : 3); - } + return simplifyAMDGCNMemoryIntrinsicDemanded(II, DemandedElts); default: { if (getAMDGPUImageDMaskIntrinsic(II->getIntrinsicID())) return simplifyAMDGCNMemoryIntrinsicDemanded(II, DemandedElts, 0); |

