https://github.com/jayfoad updated https://github.com/llvm/llvm-project/pull/67536
>From e0571e8b4712e39678218f02d7f5d68755bc85f9 Mon Sep 17 00:00:00 2001 From: Jay Foad <jay.f...@amd.com> Date: Wed, 27 Sep 2023 11:01:17 +0100 Subject: [PATCH] [AMDGPU] Add GFX11.5 s_singleuse_vdst instruction --- llvm/lib/Target/AMDGPU/AMDGPU.td | 13 ++++++++++++- llvm/lib/Target/AMDGPU/GCNSubtarget.h | 3 +++ llvm/lib/Target/AMDGPU/SOPInstructions.td | 11 +++++++++++ llvm/test/MC/AMDGPU/gfx1150_asm_sopp.s | 10 ++++++++++ llvm/test/MC/AMDGPU/gfx11_unsupported.s | 3 +++ llvm/test/MC/Disassembler/AMDGPU/decode-err.txt | 4 ++++ .../MC/Disassembler/AMDGPU/gfx1150_dasm_sopp.txt | 10 ++++++++++ 7 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 llvm/test/MC/AMDGPU/gfx1150_asm_sopp.s create mode 100644 llvm/test/MC/Disassembler/AMDGPU/gfx1150_dasm_sopp.txt diff --git a/llvm/lib/Target/AMDGPU/AMDGPU.td b/llvm/lib/Target/AMDGPU/AMDGPU.td index d5356d1be3d758a..cdf7ca15b4c5fbc 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPU.td +++ b/llvm/lib/Target/AMDGPU/AMDGPU.td @@ -791,6 +791,12 @@ def FeatureSALUFloatInsts : SubtargetFeature<"salu-float", "Has SALU floating point instructions" >; +def FeatureVGPRSingleUseHintInsts : SubtargetFeature<"vgpr-singleuse-hint", + "HasVGPRSingleUseHintInsts", + "true", + "Has single-use VGPR hint instructions" +>; + //===------------------------------------------------------------===// // Subtarget Features (options and debugging) //===------------------------------------------------------------===// @@ -1383,11 +1389,13 @@ def FeatureISAVersion11_0_3 : FeatureSet< def FeatureISAVersion11_5_0 : FeatureSet< !listconcat(FeatureISAVersion11_Common.Features, - [FeatureSALUFloatInsts])>; + [FeatureSALUFloatInsts, + FeatureVGPRSingleUseHintInsts])>; def FeatureISAVersion11_5_1 : FeatureSet< !listconcat(FeatureISAVersion11_Common.Features, [FeatureSALUFloatInsts, + FeatureVGPRSingleUseHintInsts, FeatureGFX11FullVGPRs])>; //===----------------------------------------------------------------------===// @@ -1901,6 +1909,9 @@ def HasNotMADIntraFwdBug : Predicate<"!Subtarget->hasMADIntraFwdBug()">; def HasSALUFloatInsts : Predicate<"Subtarget->hasSALUFloatInsts()">, AssemblerPredicate<(all_of FeatureSALUFloatInsts)>; +def HasVGPRSingleUseHintInsts : Predicate<"Subtarget->hasVGPRSingleUseHintInsts()">, + AssemblerPredicate<(all_of FeatureVGPRSingleUseHintInsts)>; + def HasGDS : Predicate<"Subtarget->hasGDS()">; def HasGWS : Predicate<"Subtarget->hasGWS()">; diff --git a/llvm/lib/Target/AMDGPU/GCNSubtarget.h b/llvm/lib/Target/AMDGPU/GCNSubtarget.h index f60938d830fcc43..1a6479cc8baa587 100644 --- a/llvm/lib/Target/AMDGPU/GCNSubtarget.h +++ b/llvm/lib/Target/AMDGPU/GCNSubtarget.h @@ -193,6 +193,7 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo, bool HasPackedTID = false; bool ScalarizeGlobal = false; bool HasSALUFloatInsts = false; + bool HasVGPRSingleUseHintInsts = false; bool HasVcmpxPermlaneHazard = false; bool HasVMEMtoScalarWriteHazard = false; @@ -1142,6 +1143,8 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo, bool hasSALUFloatInsts() const { return HasSALUFloatInsts; } + bool hasVGPRSingleUseHintInsts() const { return HasVGPRSingleUseHintInsts; } + /// Return the maximum number of waves per SIMD for kernels using \p SGPRs /// SGPRs unsigned getOccupancyWithNumSGPRs(unsigned SGPRs) const; diff --git a/llvm/lib/Target/AMDGPU/SOPInstructions.td b/llvm/lib/Target/AMDGPU/SOPInstructions.td index 90b89e9ed4055ae..f3309049e7a7fd9 100644 --- a/llvm/lib/Target/AMDGPU/SOPInstructions.td +++ b/llvm/lib/Target/AMDGPU/SOPInstructions.td @@ -1558,6 +1558,11 @@ let SubtargetPredicate = isGFX11Plus in { "$simm16">; } // End SubtargetPredicate = isGFX11Plus +let SubtargetPredicate = HasVGPRSingleUseHintInsts in { + def S_SINGLEUSE_VDST : + SOPP_Pseudo<"s_singleuse_vdst", (ins s16imm:$simm16), "$simm16">; +} // End SubtargetPredicate = HasVGPRSingeUseHintInsts + //===----------------------------------------------------------------------===// // SOP1 Patterns //===----------------------------------------------------------------------===// @@ -2267,6 +2272,12 @@ defm S_TTRACEDATA_IMM : SOPP_Real_32_gfx11<0x03b>; defm S_ICACHE_INV : SOPP_Real_32_gfx11<0x03c>; defm S_BARRIER : SOPP_Real_32_gfx11<0x03d>; +//===----------------------------------------------------------------------===// +// SOPP - GFX1150 +//===----------------------------------------------------------------------===// + +defm S_SINGLEUSE_VDST : SOPP_Real_32_gfx11<0x013>; + //===----------------------------------------------------------------------===// // SOPP - GFX6, GFX7, GFX8, GFX9, GFX10 //===----------------------------------------------------------------------===// diff --git a/llvm/test/MC/AMDGPU/gfx1150_asm_sopp.s b/llvm/test/MC/AMDGPU/gfx1150_asm_sopp.s new file mode 100644 index 000000000000000..463e9cade7f9c0c --- /dev/null +++ b/llvm/test/MC/AMDGPU/gfx1150_asm_sopp.s @@ -0,0 +1,10 @@ +// RUN: llvm-mc -arch=amdgcn -mcpu=gfx1150 -show-encoding %s | FileCheck --check-prefixes=GFX1150 %s + +s_singleuse_vdst 0x0000 +// GFX1150: encoding: [0x00,0x00,0x93,0xbf] + +s_singleuse_vdst 0xffff +// GFX1150: encoding: [0xff,0xff,0x93,0xbf] + +s_singleuse_vdst 0x1234 +// GFX1150: encoding: [0x34,0x12,0x93,0xbf] diff --git a/llvm/test/MC/AMDGPU/gfx11_unsupported.s b/llvm/test/MC/AMDGPU/gfx11_unsupported.s index 5e9714be224edcf..3b1b7e47b2143cb 100644 --- a/llvm/test/MC/AMDGPU/gfx11_unsupported.s +++ b/llvm/test/MC/AMDGPU/gfx11_unsupported.s @@ -1980,3 +1980,6 @@ s_cmp_neq_f16 s1, s2 s_cmp_nlt_f16 s1, s2 // CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction not supported on this GPU + +s_singleuse_vdst 0x1234 +// CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction not supported on this GPU diff --git a/llvm/test/MC/Disassembler/AMDGPU/decode-err.txt b/llvm/test/MC/Disassembler/AMDGPU/decode-err.txt index 8da7e5ac2d88b38..bf2c55ef2e77b2b 100644 --- a/llvm/test/MC/Disassembler/AMDGPU/decode-err.txt +++ b/llvm/test/MC/Disassembler/AMDGPU/decode-err.txt @@ -5,6 +5,10 @@ # GCN: warning: invalid instruction encoding 0xdf,0x00,0x00,0x02 +# this is s_singleuse_vdst 0x1234, which is only valid on gfx1150 +# GFX11: warning: invalid instruction encoding +0x34,0x12,0x93,0xbf + # this is buffer_atomic_csub_u32 v5, off, s[8:11], s3 offset:4095. Invalid without glc # GFX11: warning: invalid instruction encoding 0xff,0x0f,0xdc,0xe0,0x00,0x05,0x02,0x03 diff --git a/llvm/test/MC/Disassembler/AMDGPU/gfx1150_dasm_sopp.txt b/llvm/test/MC/Disassembler/AMDGPU/gfx1150_dasm_sopp.txt new file mode 100644 index 000000000000000..ddeb70a55969796 --- /dev/null +++ b/llvm/test/MC/Disassembler/AMDGPU/gfx1150_dasm_sopp.txt @@ -0,0 +1,10 @@ +# RUN: llvm-mc -arch=amdgcn -mcpu=gfx1150 -disassemble -show-encoding < %s | FileCheck -check-prefixes=GFX1150 %s + +# GFX1150: s_singleuse_vdst 0x0 ; encoding: [0x00,0x00,0x93,0xbf] +0x00,0x00,0x93,0xbf + +# GFX1150: s_singleuse_vdst 0xffff ; encoding: [0xff,0xff,0x93,0xbf] +0xff,0xff,0x93,0xbf + +# GFX1150: s_singleuse_vdst 0x1234 ; encoding: [0x34,0x12,0x93,0xbf] +0x34,0x12,0x93,0xbf _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits