Skip to content

Commit 75e6bf7

Browse files
committed
AMDGPU: Fix attributor not handling all trap intrinsics
1 parent 2e39533 commit 75e6bf7

File tree

5 files changed

+83
-0
lines changed

5 files changed

+83
-0
lines changed

llvm/lib/Target/AMDGPU/AMDGPUAttributor.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ intrinsicToAttrMask(Intrinsic::ID ID, bool &NonKernelOnly, bool &NeedsImplicit,
110110
return CodeObjectVersion >= AMDGPU::AMDHSA_COV5 ? IMPLICIT_ARG_PTR
111111
: QUEUE_PTR;
112112
case Intrinsic::trap:
113+
case Intrinsic::debugtrap:
114+
case Intrinsic::ubsantrap:
113115
if (SupportsGetDoorBellID) // GetDoorbellID support implemented since V4.
114116
return CodeObjectVersion >= AMDGPU::AMDHSA_COV4 ? NOT_IMPLICIT_INPUT
115117
: QUEUE_PTR;

llvm/test/CodeGen/AMDGPU/abi-attribute-hints-undefined-behavior.ll

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,12 @@ define void @debugtrap_requires_queue() #0 {
383383
unreachable
384384
}
385385

386+
; FIXME: Broken in globalisel
387+
; define void @ubsantrap_requires_queue() #0 {
388+
; call void @llvm.ubsantrap(i8 0)
389+
; unreachable
390+
; }
391+
386392
declare i32 @llvm.amdgcn.workitem.id.x()
387393
declare i32 @llvm.amdgcn.workitem.id.y()
388394
declare i32 @llvm.amdgcn.workitem.id.z()

llvm/test/CodeGen/AMDGPU/hsa-metadata-queue-ptr-v4.ll

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@
2121
; PRE-GFX9: .amdhsa_user_sgpr_queue_ptr 1
2222
; GFX9: .amdhsa_user_sgpr_queue_ptr 0
2323

24+
; CHECK: debugtrap_requires_queue_ptr
25+
; PRE-GFX9: .amdhsa_user_sgpr_queue_ptr 1
26+
; GFX9: .amdhsa_user_sgpr_queue_ptr 0
27+
28+
; CHECK: ubsantrap_requires_queue_ptr
29+
; PRE-GFX9: .amdhsa_user_sgpr_queue_ptr 1
30+
; GFX9: .amdhsa_user_sgpr_queue_ptr 0
31+
2432
; CHECK: amdgcn_queue_ptr_requires_queue_ptr
2533
; CHECK: .amdhsa_user_sgpr_queue_ptr 1
2634

@@ -71,6 +79,28 @@ define amdgpu_kernel void @trap_requires_queue_ptr() {
7179
unreachable
7280
}
7381

82+
; CHECK: - .args:
83+
84+
; CHECK-NOT: hidden_shared_base
85+
; CHECK-NOT: hidden_private_base
86+
; CHECK-NOT: hidden_queue_ptr
87+
; CHECK-LABEL: .name: debugtrap_requires_queue_ptr
88+
define amdgpu_kernel void @debugtrap_requires_queue_ptr() {
89+
call void @llvm.debugtrap()
90+
unreachable
91+
}
92+
93+
; CHECK: - .args:
94+
95+
; CHECK-NOT: hidden_shared_base
96+
; CHECK-NOT: hidden_private_base
97+
; CHECK-NOT: hidden_queue_ptr
98+
; CHECK-LABEL: .name: ubsantrap_requires_queue_ptr
99+
define amdgpu_kernel void @ubsantrap_requires_queue_ptr() {
100+
call void @llvm.ubsantrap(i8 0)
101+
unreachable
102+
}
103+
74104
; CHECK: - .args:
75105
; CHECK-NOT: hidden_queue_ptr
76106
; CHECK-NOT: hidden_shared_base
@@ -96,6 +126,7 @@ declare i1 @llvm.amdgcn.is.shared(ptr)
96126
declare i1 @llvm.amdgcn.is.private(ptr)
97127
declare void @llvm.trap()
98128
declare void @llvm.debugtrap()
129+
declare void @llvm.ubsantrap(i8 immarg)
99130

100131
!llvm.module.flags = !{!0}
101132
!0 = !{i32 1, !"amdhsa_code_object_version", i32 400}

llvm/test/CodeGen/AMDGPU/hsa-metadata-queue-ptr-v5.ll

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,26 @@ define amdgpu_kernel void @trap_requires_queue_ptr() {
6060
unreachable
6161
}
6262

63+
; CHECK: - .args:
64+
65+
; PRE-GFX9: hidden_queue_ptr
66+
; GFX9-NOT: hidden_queue_ptr
67+
; CHECK-LABEL: .name: debugtrap_requires_queue_ptr
68+
define amdgpu_kernel void @debugtrap_requires_queue_ptr() {
69+
call void @llvm.debugtrap()
70+
unreachable
71+
}
72+
73+
; CHECK: - .args:
74+
75+
; PRE-GFX9: hidden_queue_ptr
76+
; GFX9-NOT: hidden_queue_ptr
77+
; CHECK-LABEL: .name: ubsantrap_requires_queue_ptr
78+
define amdgpu_kernel void @ubsantrap_requires_queue_ptr() {
79+
call void @llvm.ubsantrap(i8 0)
80+
unreachable
81+
}
82+
6383
; CHECK: - .args:
6484
; CHECK: hidden_queue_ptr
6585
; CHECK-LABEL: .name: amdgcn_queue_ptr_requires_queue_ptr
@@ -84,6 +104,7 @@ declare i1 @llvm.amdgcn.is.shared(ptr)
84104
declare i1 @llvm.amdgcn.is.private(ptr)
85105
declare void @llvm.trap()
86106
declare void @llvm.debugtrap()
107+
declare void @llvm.ubsantrap(i8 immarg)
87108

88109
!llvm.module.flags = !{!0}
89110
!0 = !{i32 1, !"amdhsa_code_object_version", i32 500}

llvm/test/CodeGen/AMDGPU/implicit-kernarg-backend-usage.ll

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,29 @@ define amdgpu_kernel void @llvm_debugtrap() {
260260
unreachable
261261
}
262262

263+
define amdgpu_kernel void @llvm_ubsantrap() {
264+
; GFX8V4-LABEL: llvm_ubsantrap:
265+
; GFX8V4: ; %bb.0:
266+
; GFX8V4-NEXT: s_mov_b64 s[0:1], s[6:7]
267+
; GFX8V4-NEXT: s_trap 2
268+
;
269+
; GFX8V5-LABEL: llvm_ubsantrap:
270+
; GFX8V5: ; %bb.0:
271+
; GFX8V5-NEXT: s_load_dwordx2 s[0:1], s[8:9], 0xc8
272+
; GFX8V5-NEXT: s_waitcnt lgkmcnt(0)
273+
; GFX8V5-NEXT: s_trap 2
274+
;
275+
; GFX9V4-LABEL: llvm_ubsantrap:
276+
; GFX9V4: ; %bb.0:
277+
; GFX9V4-NEXT: s_trap 2
278+
;
279+
; GFX9V5-LABEL: llvm_ubsantrap:
280+
; GFX9V5: ; %bb.0:
281+
; GFX9V5-NEXT: s_trap 2
282+
call void @llvm.ubsantrap(i8 0)
283+
unreachable
284+
}
285+
263286
define amdgpu_kernel void @llvm_amdgcn_queue_ptr(ptr addrspace(1) %ptr) {
264287
; GFX8V4-LABEL: llvm_amdgcn_queue_ptr:
265288
; GFX8V4: ; %bb.0:

0 commit comments

Comments
 (0)