Skip to content

Commit 35ec58d

Browse files
committed
[AMDGPU] gfx940 removes all image instructions
Differential Revision: https://reviews.llvm.org/D120763
1 parent 2e2e64d commit 35ec58d

File tree

5 files changed

+111
-4
lines changed

5 files changed

+111
-4
lines changed

llvm/lib/Target/AMDGPU/AMDGPU.td

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,12 @@ def FeatureNSAEncoding : SubtargetFeature<"nsa-encoding",
470470
"Support NSA encoding for image instructions"
471471
>;
472472

473+
def FeatureImageInsts : SubtargetFeature<"image-insts",
474+
"HasImageInsts",
475+
"true",
476+
"Support image instructions"
477+
>;
478+
473479
def FeatureExtendedImageInsts : SubtargetFeature<"extended-image-insts",
474480
"HasExtendedImageInsts",
475481
"true",
@@ -774,7 +780,7 @@ def FeatureSouthernIslands : GCNSubtargetFeatureGeneration<"SOUTHERN_ISLANDS",
774780
[FeatureFP64, FeatureLocalMemorySize32768, FeatureMIMG_R128,
775781
FeatureWavefrontSize64, FeatureSMemTimeInst, FeatureMadMacF32Insts,
776782
FeatureDsSrc2Insts, FeatureLDSBankCount32, FeatureMovrel,
777-
FeatureTrigReducedRange, FeatureExtendedImageInsts
783+
FeatureTrigReducedRange, FeatureExtendedImageInsts, FeatureImageInsts
778784
]
779785
>;
780786

@@ -784,7 +790,8 @@ def FeatureSeaIslands : GCNSubtargetFeatureGeneration<"SEA_ISLANDS",
784790
FeatureWavefrontSize64, FeatureFlatAddressSpace,
785791
FeatureCIInsts, FeatureMovrel, FeatureTrigReducedRange,
786792
FeatureGFX7GFX8GFX9Insts, FeatureSMemTimeInst, FeatureMadMacF32Insts,
787-
FeatureDsSrc2Insts, FeatureExtendedImageInsts, FeatureUnalignedBufferAccess
793+
FeatureDsSrc2Insts, FeatureExtendedImageInsts, FeatureUnalignedBufferAccess,
794+
FeatureImageInsts
788795
]
789796
>;
790797

@@ -799,7 +806,7 @@ def FeatureVolcanicIslands : GCNSubtargetFeatureGeneration<"VOLCANIC_ISLANDS",
799806
FeatureIntClamp, FeatureTrigReducedRange, FeatureGFX8Insts,
800807
FeatureGFX7GFX8GFX9Insts, FeatureSMemTimeInst, FeatureMadMacF32Insts,
801808
FeatureDsSrc2Insts, FeatureExtendedImageInsts, FeatureFastDenormalF32,
802-
FeatureUnalignedBufferAccess
809+
FeatureUnalignedBufferAccess, FeatureImageInsts
803810
]
804811
>;
805812

@@ -836,7 +843,7 @@ def FeatureGFX10 : GCNSubtargetFeatureGeneration<"GFX10",
836843
FeatureVOP3Literal, FeatureDPP8, FeatureExtendedImageInsts,
837844
FeatureNoDataDepHazard, FeaturePkFmacF16Inst,
838845
FeatureGFX10A16, FeatureSMemTimeInst, FeatureFastDenormalF32, FeatureG16,
839-
FeatureUnalignedBufferAccess, FeatureUnalignedDSAccess
846+
FeatureUnalignedBufferAccess, FeatureUnalignedDSAccess, FeatureImageInsts
840847
]
841848
>;
842849

@@ -922,6 +929,7 @@ def FeatureISAVersion9_0_0 : FeatureSet<
922929
FeatureLDSBankCount32,
923930
FeatureDsSrc2Insts,
924931
FeatureExtendedImageInsts,
932+
FeatureImageInsts,
925933
FeatureMadMacF32Insts,
926934
FeatureImageGather4D16Bug]>;
927935

@@ -931,6 +939,7 @@ def FeatureISAVersion9_0_2 : FeatureSet<
931939
FeatureLDSBankCount32,
932940
FeatureDsSrc2Insts,
933941
FeatureExtendedImageInsts,
942+
FeatureImageInsts,
934943
FeatureMadMacF32Insts,
935944
FeatureImageGather4D16Bug]>;
936945

@@ -939,6 +948,7 @@ def FeatureISAVersion9_0_4 : FeatureSet<
939948
FeatureLDSBankCount32,
940949
FeatureDsSrc2Insts,
941950
FeatureExtendedImageInsts,
951+
FeatureImageInsts,
942952
FeatureMadMacF32Insts,
943953
FeatureFmaMixInsts,
944954
FeatureImageGather4D16Bug]>;
@@ -950,6 +960,7 @@ def FeatureISAVersion9_0_6 : FeatureSet<
950960
FeatureLDSBankCount32,
951961
FeatureDsSrc2Insts,
952962
FeatureExtendedImageInsts,
963+
FeatureImageInsts,
953964
FeatureMadMacF32Insts,
954965
FeatureDLInsts,
955966
FeatureDot1Insts,
@@ -965,6 +976,7 @@ def FeatureISAVersion9_0_8 : FeatureSet<
965976
FeatureLDSBankCount32,
966977
FeatureDsSrc2Insts,
967978
FeatureExtendedImageInsts,
979+
FeatureImageInsts,
968980
FeatureMadMacF32Insts,
969981
FeatureDLInsts,
970982
FeatureDot1Insts,
@@ -987,6 +999,7 @@ def FeatureISAVersion9_0_9 : FeatureSet<
987999
FeatureLDSBankCount32,
9881000
FeatureDsSrc2Insts,
9891001
FeatureExtendedImageInsts,
1002+
FeatureImageInsts,
9901003
FeatureMadMacF32Insts,
9911004
FeatureImageGather4D16Bug]>;
9921005

@@ -1008,6 +1021,7 @@ def FeatureISAVersion9_0_A : FeatureSet<
10081021
FeatureMAIInsts,
10091022
FeaturePkFmacF16Inst,
10101023
FeatureAtomicFaddInsts,
1024+
FeatureImageInsts,
10111025
FeatureMadMacF32Insts,
10121026
FeatureSupportsSRAMECC,
10131027
FeaturePackedTID,
@@ -1019,6 +1033,7 @@ def FeatureISAVersion9_0_C : FeatureSet<
10191033
FeatureLDSBankCount32,
10201034
FeatureDsSrc2Insts,
10211035
FeatureExtendedImageInsts,
1036+
FeatureImageInsts,
10221037
FeatureMadMacF32Insts,
10231038
FeatureImageGather4D16Bug]>;
10241039

@@ -1433,6 +1448,9 @@ def HasFmaakFmamkF32Insts :
14331448
Predicate<"Subtarget->hasFmaakFmamkF32Insts()">,
14341449
AssemblerPredicate<(any_of FeatureGFX10Insts)>;
14351450

1451+
def HasImageInsts : Predicate<"Subtarget->hasImageInsts()">,
1452+
AssemblerPredicate<(all_of FeatureImageInsts)>;
1453+
14361454
def HasExtendedImageInsts : Predicate<"Subtarget->hasExtendedImageInsts()">,
14371455
AssemblerPredicate<(all_of FeatureExtendedImageInsts)>;
14381456

llvm/lib/Target/AMDGPU/AMDGPUSubtarget.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ GCNSubtarget::GCNSubtarget(const Triple &TT, StringRef GPU, StringRef FS,
239239
HasDPP8(false),
240240
Has64BitDPP(false),
241241
HasPackedFP32Ops(false),
242+
HasImageInsts(false),
242243
HasExtendedImageInsts(false),
243244
HasR128A16(false),
244245
HasGFX10A16(false),

llvm/lib/Target/AMDGPU/GCNSubtarget.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo,
124124
bool HasDPP8;
125125
bool Has64BitDPP;
126126
bool HasPackedFP32Ops;
127+
bool HasImageInsts;
127128
bool HasExtendedImageInsts;
128129
bool HasR128A16;
129130
bool HasGFX10A16;
@@ -838,6 +839,10 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo,
838839
return getGeneration() >= GFX10;
839840
}
840841

842+
bool hasImageInsts() const {
843+
return HasImageInsts;
844+
}
845+
841846
bool hasExtendedImageInsts() const {
842847
return HasExtendedImageInsts;
843848
}

llvm/lib/Target/AMDGPU/MIMGInstructions.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -964,6 +964,8 @@ multiclass MIMG_IntersectRay<mimgopc op, string opcode, bit Is64, bit A16> {
964964
//===----------------------------------------------------------------------===//
965965
// MIMG Instructions
966966
//===----------------------------------------------------------------------===//
967+
let OtherPredicates = [HasImageInsts] in {
968+
967969
defm IMAGE_LOAD : MIMG_NoSampler <mimgopc<0x00>, "image_load", 1>;
968970
defm IMAGE_LOAD_MIP : MIMG_NoSampler <mimgopc<0x01>, "image_load_mip", 1, 1>;
969971
defm IMAGE_LOAD_PCK : MIMG_NoSampler <mimgopc<0x02>, "image_load_pck", 0>;
@@ -1092,6 +1094,8 @@ defm IMAGE_BVH_INTERSECT_RAY_a16 : MIMG_IntersectRay<mimgopc<0xe6>, "image_bvh
10921094
defm IMAGE_BVH64_INTERSECT_RAY : MIMG_IntersectRay<mimgopc<0xe7>, "image_bvh64_intersect_ray", 1, 0>;
10931095
defm IMAGE_BVH64_INTERSECT_RAY_a16 : MIMG_IntersectRay<mimgopc<0xe7>, "image_bvh64_intersect_ray", 1, 1>;
10941096

1097+
} // End let OtherPredicates = [HasImageInsts]
1098+
10951099
/********** ========================================= **********/
10961100
/********** Table of dimension-aware image intrinsics **********/
10971101
/********** ========================================= **********/

llvm/test/MC/AMDGPU/mimg-err-gfx940.s

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx940 %s 2>&1 | FileCheck %s --check-prefix=NOGFX940 --implicit-check-not=error:
2+
3+
image_load v[4:6], v[238:241], s[28:35] dmask:0x7 unorm
4+
// NOGFX940: error:
5+
6+
image_load_pck v5, v[0:3], s[8:15] dmask:0x1 glc
7+
// NOGFX940: error:
8+
9+
image_load_pck_sgn v5, v[0:3], s[8:15] dmask:0x1 lwe
10+
// NOGFX940: error:
11+
12+
image_load_mip v5, v[0:3], s[8:15]
13+
// NOGFX940: error: instruction not supported on this GPU
14+
15+
image_load_mip_pck v5, v1, s[8:15] dmask:0x1
16+
// NOGFX940: error:
17+
18+
image_load_mip_pck_sgn v[4:5], v[0:3], s[8:15] dmask:0x5
19+
// NOGFX940: error:
20+
21+
image_store v[192:194], v[238:241], s[28:35] dmask:0x7 unorm
22+
// NOGFX940: error:
23+
24+
image_store_pck v1, v[2:5], s[12:19] dmask:0x1 unorm da
25+
// NOGFX940: error:
26+
27+
image_store_mip v1, v[2:5], s[12:19]
28+
// NOGFX940: error: instruction not supported on this GPU
29+
30+
image_store_mip_pck v252, v[2:3], s[12:19] dmask:0x1 a16
31+
// NOGFX940: error:
32+
33+
image_atomic_add v4, v192, s[28:35] dmask:0x1 unorm glc
34+
// NOGFX940: error:
35+
36+
image_atomic_and v4, v192, s[28:35] dmask:0x1 unorm
37+
// NOGFX940: error:
38+
39+
image_atomic_swap v4, v[192:195], s[28:35] dmask:0x1 unorm glc
40+
// NOGFX940: error:
41+
42+
image_atomic_cmpswap v[4:5], v[192:195], s[28:35] dmask:0x3 unorm glc
43+
// NOGFX940: error:
44+
45+
image_atomic_or v4, v192, s[28:35] dmask:0x1 unorm
46+
// NOGFX940: error:
47+
48+
image_atomic_xor v4, v192, s[28:35] dmask:0x1 unorm
49+
// NOGFX940: error:
50+
51+
image_atomic_sub v4, v192, s[28:35] dmask:0x1 unorm
52+
// NOGFX940: error:
53+
54+
image_atomic_smin v4, v192, s[28:35] dmask:0x1 unorm
55+
// NOGFX940: error:
56+
57+
image_atomic_smax v4, v192, s[28:35] dmask:0x1 unorm
58+
// NOGFX940: error:
59+
60+
image_atomic_umin v4, v192, s[28:35] dmask:0x1 unorm
61+
// NOGFX940: error:
62+
63+
image_atomic_umax v4, v192, s[28:35] dmask:0x1 unorm
64+
// NOGFX940: error:
65+
66+
image_atomic_inc v4, v192, s[28:35] dmask:0x1 unorm
67+
// NOGFX940: error:
68+
69+
image_atomic_dec v4, v192, s[28:35] dmask:0x1 unorm
70+
// NOGFX940: error:
71+
72+
image_get_resinfo v5, v1, s[8:15] dmask:0x1
73+
// NOGFX940: error:
74+
75+
image_sample v5, v[0:3], s[8:15], s[12:15] dmask:0x1
76+
// NOGFX940: error:
77+
78+
image_gather4 v[5:8], v[1:4], s[8:15], s[12:15] dmask:0x2
79+
// NOGFX940: error:

0 commit comments

Comments
 (0)