Skip to content

Commit 8c03239

Browse files
authored
[AMDGPU] New intrinsic void llvm.amdgcn.s.nop(i16) (#65757)
This allows front ends to insert s_nops - this is most often when a delay less than s_sleep 1 is required.
1 parent ffb8434 commit 8c03239

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

llvm/include/llvm/IR/IntrinsicsAMDGPU.td

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1677,6 +1677,11 @@ def int_amdgcn_s_sleep :
16771677
IntrHasSideEffects]> {
16781678
}
16791679

1680+
def int_amdgcn_s_nop :
1681+
DefaultAttrsIntrinsic<[], [llvm_i16_ty], [ImmArg<ArgIndex<0>>, IntrNoMem,
1682+
IntrHasSideEffects]> {
1683+
}
1684+
16801685
def int_amdgcn_s_incperflevel :
16811686
ClangBuiltin<"__builtin_amdgcn_s_incperflevel">,
16821687
DefaultAttrsIntrinsic<[], [llvm_i32_ty], [ImmArg<ArgIndex<0>>, IntrNoMem,

llvm/lib/Target/AMDGPU/SOPInstructions.td

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1161,7 +1161,8 @@ multiclass SOPP_With_Relaxation <string opName, dag ins,
11611161
def _pad_s_nop : SOPP_Pseudo <opName # "_pad_s_nop", ins, asmOps, pattern, " ", opName>;
11621162
}
11631163

1164-
def S_NOP : SOPP_Pseudo<"s_nop" , (ins i16imm:$simm16), "$simm16"> {
1164+
def S_NOP : SOPP_Pseudo<"s_nop" , (ins i16imm:$simm16), "$simm16",
1165+
[(int_amdgcn_s_nop timm:$simm16)]> {
11651166
let hasSideEffects = 1;
11661167
}
11671168

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
3+
; RUN: llc -global-isel -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
4+
5+
define amdgpu_kernel void @test_s_nop() {
6+
; GCN-LABEL: test_s_nop:
7+
; GCN: ; %bb.0:
8+
; GCN-NEXT: s_nop 0
9+
; GCN-NEXT: s_nop 1
10+
; GCN-NEXT: s_nop 2
11+
; GCN-NEXT: s_nop 3
12+
; GCN-NEXT: s_nop 4
13+
; GCN-NEXT: s_nop 5
14+
; GCN-NEXT: s_nop 6
15+
; GCN-NEXT: s_nop 7
16+
; GCN-NEXT: s_nop 63
17+
; GCN-NEXT: s_endpgm
18+
call void @llvm.amdgcn.s.nop(i16 0)
19+
call void @llvm.amdgcn.s.nop(i16 1)
20+
call void @llvm.amdgcn.s.nop(i16 2)
21+
call void @llvm.amdgcn.s.nop(i16 3)
22+
call void @llvm.amdgcn.s.nop(i16 4)
23+
call void @llvm.amdgcn.s.nop(i16 5)
24+
call void @llvm.amdgcn.s.nop(i16 6)
25+
call void @llvm.amdgcn.s.nop(i16 7)
26+
call void @llvm.amdgcn.s.nop(i16 63)
27+
ret void
28+
}
29+
30+
declare void @llvm.amdgcn.s.nop(i16)

0 commit comments

Comments
 (0)