summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorNicolai Haehnle <nhaehnle@gmail.com>2018-06-21 13:37:45 +0000
committerNicolai Haehnle <nhaehnle@gmail.com>2018-06-21 13:37:45 +0000
commitdb6911a6f9592fa394c0e0a1c0cf268a696e018f (patch)
tree3ec101f3343c0b9944d9f6384f37f95e000274bb /llvm/lib
parentb29ee701229ba46c160e365234c214c2d59b7702 (diff)
downloadbcm5719-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.cpp76
-rw-r--r--llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h84
-rw-r--r--llvm/lib/Target/AMDGPU/AMDGPUSearchableTables.td14
-rw-r--r--llvm/lib/Target/AMDGPU/MIMGInstructions.td391
-rw-r--r--llvm/lib/Target/AMDGPU/SIISelLowering.cpp303
-rw-r--r--llvm/lib/Target/AMDGPU/SIInstrInfo.td128
-rw-r--r--llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp52
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);
OpenPOWER on IntegriCloud