Skip to content

Commit ae162ef

Browse files
committed
[AMDGPU] Add s_setprio_inc_wg gfx1250 instruction
1 parent ac33cc8 commit ae162ef

File tree

12 files changed

+100
-2
lines changed

12 files changed

+100
-2
lines changed

clang/include/clang/Basic/BuiltinsAMDGPU.def

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,5 +636,11 @@ TARGET_BUILTIN(__builtin_amdgcn_bitop3_b16, "ssssIUi", "nc", "bitop3-insts")
636636
TARGET_BUILTIN(__builtin_amdgcn_cvt_sr_bf16_f32, "V2yV2yfUiIb", "nc", "f32-to-f16bf16-cvt-sr-insts")
637637
TARGET_BUILTIN(__builtin_amdgcn_cvt_sr_f16_f32, "V2hV2hfUiIb", "nc", "f32-to-f16bf16-cvt-sr-insts")
638638

639+
//===----------------------------------------------------------------------===//
640+
// GFX1250+ only builtins.
641+
//===----------------------------------------------------------------------===//
642+
643+
TARGET_BUILTIN(__builtin_amdgcn_s_setprio_inc_wg, "vIs", "n", "setprio-inc-wg-inst")
644+
639645
#undef BUILTIN
640646
#undef TARGET_BUILTIN
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// REQUIRES: amdgpu-registered-target
2+
3+
// RUN: %clang_cc1 -cl-std=CL2.0 -triple amdgcn-unknown-unknown -target-cpu gfx1250 -verify -emit-llvm -o - %s
4+
5+
void test_setprio_inc_wg(short a) {
6+
__builtin_amdgcn_s_setprio_inc_wg(a); // expected-error {{'__builtin_amdgcn_s_setprio_inc_wg' must be a constant integer}}
7+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
2+
// RUN: %clang_cc1 -cl-std=CL2.0 -O0 -triple amdgcn-unknown-unknown -target-cpu gfx1250 -emit-llvm -o - %s | FileCheck %s
3+
// REQUIRES: amdgpu-registered-target
4+
5+
// CHECK-LABEL: @test_setprio_inc_wg(
6+
// CHECK-NEXT: entry:
7+
// CHECK-NEXT: call void @llvm.amdgcn.s.setprio.inc.wg(i16 10)
8+
// CHECK-NEXT: ret void
9+
//
10+
void test_setprio_inc_wg() {
11+
__builtin_amdgcn_s_setprio_inc_wg(10);
12+
}

llvm/include/llvm/IR/IntrinsicsAMDGPU.td

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2054,6 +2054,11 @@ def int_amdgcn_s_setprio :
20542054
DefaultAttrsIntrinsic<[], [llvm_i16_ty], [ImmArg<ArgIndex<0>>, IntrNoMem,
20552055
IntrHasSideEffects]>;
20562056

2057+
def int_amdgcn_s_setprio_inc_wg :
2058+
ClangBuiltin<"__builtin_amdgcn_s_setprio_inc_wg">,
2059+
DefaultAttrsIntrinsic<[], [llvm_i16_ty], [ImmArg<ArgIndex<0>>, IntrNoMem,
2060+
IntrHasSideEffects]>;
2061+
20572062
def int_amdgcn_s_ttracedata :
20582063
ClangBuiltin<"__builtin_amdgcn_s_ttracedata">,
20592064
DefaultAttrsIntrinsic<[], [llvm_i32_ty],

llvm/lib/Target/AMDGPU/AMDGPU.td

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,6 +1118,12 @@ def FeatureWaitXcnt : SubtargetFeature<"wait-xcnt",
11181118
"Has s_wait_xcnt instruction"
11191119
>;
11201120

1121+
def FeatureSetPrioIncWgInst : SubtargetFeature<"setprio-inc-wg-inst",
1122+
"HasSetPrioIncWgInst",
1123+
"true",
1124+
"Has s_setprio_inc_wg instruction."
1125+
>;
1126+
11211127
//===------------------------------------------------------------===//
11221128
// Subtarget Features (options and debugging)
11231129
//===------------------------------------------------------------===//
@@ -1940,6 +1946,7 @@ def FeatureISAVersion12_50 : FeatureSet<
19401946
FeatureMemoryAtomicFAddF32DenormalSupport,
19411947
FeatureKernargPreload,
19421948
FeatureLshlAddU64Inst,
1949+
FeatureSetPrioIncWgInst,
19431950
]>;
19441951

19451952
def FeatureISAVersion12_Generic: FeatureSet<
@@ -2662,6 +2669,9 @@ def HasAshrPkInsts : Predicate<"Subtarget->hasAshrPkInsts()">,
26622669
def HasLshlAddU64Inst : Predicate<"Subtarget->hasLshlAddU64Inst()">,
26632670
AssemblerPredicate<(all_of FeatureLshlAddU64Inst)>;
26642671

2672+
def HasSetPrioIncWgInst : Predicate<"Subtarget->hasSetPrioIncWgInst()">,
2673+
AssemblerPredicate<(all_of FeatureSetPrioIncWgInst)>;
2674+
26652675
// Include AMDGPU TD files
26662676
include "SISchedule.td"
26672677
include "GCNProcessors.td"

llvm/lib/Target/AMDGPU/GCNSubtarget.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo,
262262
bool HasMinimum3Maximum3PKF16 = false;
263263
bool HasLshlAddU64Inst = false;
264264
bool HasPointSampleAccel = false;
265+
bool HasSetPrioIncWgInst = false;
265266

266267
bool RequiresCOV6 = false;
267268
bool UseBlockVGPROpsForCSR = false;
@@ -1465,6 +1466,11 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo,
14651466
/// values.
14661467
bool hasSignedScratchOffsets() const { return getGeneration() >= GFX12; }
14671468

1469+
bool hasGFX1250Insts() const { return GFX1250Insts; }
1470+
1471+
// \returns true if target has S_SETPRIO_INC_WG instruction.
1472+
bool hasSetPrioIncWgInst() const { return HasSetPrioIncWgInst; }
1473+
14681474
// \returns true if S_GETPC_B64 zero-extends the result from 48 bits instead
14691475
// of sign-extending.
14701476
bool hasGetPCZeroExtension() const { return GFX12Insts; }

llvm/lib/Target/AMDGPU/SIInstrInfo.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9575,7 +9575,8 @@ static unsigned subtargetEncodingFamily(const GCNSubtarget &ST) {
95759575
case AMDGPUSubtarget::GFX11:
95769576
return SIEncodingFamily::GFX11;
95779577
case AMDGPUSubtarget::GFX12:
9578-
return SIEncodingFamily::GFX12;
9578+
return ST.hasGFX1250Insts() ? SIEncodingFamily::GFX1250
9579+
: SIEncodingFamily::GFX12;
95799580
}
95809581
llvm_unreachable("Unknown subtarget generation!");
95819582
}
@@ -9669,6 +9670,9 @@ int SIInstrInfo::pseudoToMCOpcode(int Opcode) const {
96699670

96709671
int MCOp = AMDGPU::getMCOpcode(Opcode, Gen);
96719672

9673+
if (MCOp == (uint16_t)-1 && ST.hasGFX1250Insts())
9674+
MCOp = AMDGPU::getMCOpcode(Opcode, SIEncodingFamily::GFX12);
9675+
96729676
// -1 means that Opcode is already a native instruction.
96739677
if (MCOp == -1)
96749678
return Opcode;

llvm/lib/Target/AMDGPU/SIInstrInfo.td

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3069,7 +3069,8 @@ def getMCOpcodeGen : InstrMapping {
30693069
[!cast<string>(SIEncodingFamily.GFX90A)],
30703070
[!cast<string>(SIEncodingFamily.GFX940)],
30713071
[!cast<string>(SIEncodingFamily.GFX11)],
3072-
[!cast<string>(SIEncodingFamily.GFX12)]];
3072+
[!cast<string>(SIEncodingFamily.GFX12)],
3073+
[!cast<string>(SIEncodingFamily.GFX1250)]];
30733074
}
30743075

30753076
// Get equivalent SOPK instruction.

llvm/lib/Target/AMDGPU/SOPInstructions.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1632,6 +1632,11 @@ def S_SETPRIO : SOPP_Pseudo <"s_setprio", (ins i16imm:$simm16), "$simm16",
16321632
[(int_amdgcn_s_setprio timm:$simm16)]> {
16331633
}
16341634

1635+
def S_SETPRIO_INC_WG : SOPP_Pseudo <"s_setprio_inc_wg", (ins i16imm:$simm16), "$simm16",
1636+
[(int_amdgcn_s_setprio_inc_wg timm:$simm16)]> {
1637+
let SubtargetPredicate = HasSetPrioIncWgInst;
1638+
}
1639+
16351640
let Uses = [EXEC, M0] in {
16361641
def S_SENDMSG : SOPP_Pseudo <"s_sendmsg" , (ins SendMsg:$simm16), "$simm16",
16371642
[(int_amdgcn_s_sendmsg (i32 timm:$simm16), M0)]> {
@@ -2594,6 +2599,7 @@ defm S_WAIT_STORECNT_DSCNT : SOPP_Real_32_gfx12<0x049>;
25942599
//===----------------------------------------------------------------------===//
25952600
// SOPP - GFX1250 only.
25962601
//===----------------------------------------------------------------------===//
2602+
defm S_SETPRIO_INC_WG : SOPP_Real_32_gfx12<0x03e>;
25972603
defm S_WAIT_XCNT : SOPP_Real_32_gfx12<0x045>;
25982604

25992605
//===----------------------------------------------------------------------===//
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -march=amdgcn -mcpu=gfx1250 -show-mc-encoding -verify-machineinstrs < %s | FileCheck -check-prefix=GFX1250 %s
3+
; RUN: llc -global-isel -march=amdgcn -mcpu=gfx1250 -show-mc-encoding -verify-machineinstrs < %s | FileCheck -check-prefix=GFX1250 %s
4+
5+
declare void @llvm.amdgcn.s.setprio.inc.wg(i16) #0
6+
7+
define void @test_llvm.amdgcn.s.setprio.inc.wg() #0 {
8+
; GFX1250-LABEL: test_llvm.amdgcn.s.setprio.inc.wg:
9+
; GFX1250: ; %bb.0:
10+
; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0 ; encoding: [0x00,0x00,0xc8,0xbf]
11+
; GFX1250-NEXT: s_wait_kmcnt 0x0 ; encoding: [0x00,0x00,0xc7,0xbf]
12+
; GFX1250-NEXT: s_setprio_inc_wg 0 ; encoding: [0x00,0x00,0xbe,0xbf]
13+
; GFX1250-NEXT: s_setprio_inc_wg 1 ; encoding: [0x01,0x00,0xbe,0xbf]
14+
; GFX1250-NEXT: s_setprio_inc_wg 2 ; encoding: [0x02,0x00,0xbe,0xbf]
15+
; GFX1250-NEXT: s_setprio_inc_wg 3 ; encoding: [0x03,0x00,0xbe,0xbf]
16+
; GFX1250-NEXT: s_setprio_inc_wg 10 ; encoding: [0x0a,0x00,0xbe,0xbf]
17+
; GFX1250-NEXT: s_setprio_inc_wg -1 ; encoding: [0xff,0xff,0xbe,0xbf]
18+
; GFX1250-NEXT: s_setprio_inc_wg 0 ; encoding: [0x00,0x00,0xbe,0xbf]
19+
; GFX1250-NEXT: s_setprio_inc_wg 1 ; encoding: [0x01,0x00,0xbe,0xbf]
20+
; GFX1250-NEXT: s_setprio_inc_wg -1 ; encoding: [0xff,0xff,0xbe,0xbf]
21+
; GFX1250-NEXT: s_set_pc_i64 s[30:31] ; encoding: [0x1e,0x48,0x80,0xbe]
22+
call void @llvm.amdgcn.s.setprio.inc.wg(i16 0)
23+
call void @llvm.amdgcn.s.setprio.inc.wg(i16 1)
24+
call void @llvm.amdgcn.s.setprio.inc.wg(i16 2)
25+
call void @llvm.amdgcn.s.setprio.inc.wg(i16 3)
26+
call void @llvm.amdgcn.s.setprio.inc.wg(i16 10)
27+
call void @llvm.amdgcn.s.setprio.inc.wg(i16 65535)
28+
call void @llvm.amdgcn.s.setprio.inc.wg(i16 65536)
29+
call void @llvm.amdgcn.s.setprio.inc.wg(i16 65537)
30+
call void @llvm.amdgcn.s.setprio.inc.wg(i16 -1)
31+
ret void
32+
}
33+
34+
attributes #0 = { nounwind }

llvm/test/MC/AMDGPU/gfx1250_asm_sopp.s

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,7 @@ s_wait_xcnt 0x7
1212
s_wait_xcnt 0xf
1313
// GFX1250: [0x0f,0x00,0xc5,0xbf]
1414
// GFX12-ERR: :[[@LINE-2]]:{{[0-9]+}}: error: instruction not supported on this GPU
15+
16+
s_setprio_inc_wg 100
17+
// GFX1250: [0x64,0x00,0xbe,0xbf]
18+
// GFX12-ERR: :[[@LINE-2]]:{{[0-9]+}}: error: instruction not supported on this GPU

llvm/test/MC/Disassembler/AMDGPU/gfx1250_dasm_sopp.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,6 @@
88

99
# GFX1250: s_wait_xcnt 0xf ; encoding: [0x0f,0x00,0xc5,0xbf]
1010
0x0f,0x00,0xc5,0xbf
11+
12+
# GFX1250: s_setprio_inc_wg 0x64 ; encoding: [0x64,0x00,0xbe,0xbf]
13+
0x64,0x00,0xbe,0xbf

0 commit comments

Comments
 (0)