xref: /llvm-project/llvm/test/CodeGen/AMDGPU/inline-asm-reserved-regs.ll (revision c897c13dde3bb413e723317c0579781fb6045a8b)
1; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs -o /dev/null 2>&1 %s | FileCheck -check-prefix=ERR %s
2
3; ERR: warning: inline asm clobber list contains reserved registers: v42
4; ERR: note: Reserved registers on the clobber list may not be preserved across the asm statement, and clobbering them may lead to undefined behaviour.
5define amdgpu_kernel void @clobber_occupancy_limited_vgpr() #0 {
6entry:
7  call void asm sideeffect "; clobber $0", "~{v42}"()
8  ret void
9}
10
11; ERR: warning: inline asm clobber list contains reserved registers: v[42:43]
12; ERR: note: Reserved registers on the clobber list may not be preserved across the asm statement, and clobbering them may lead to undefined behaviour.
13define amdgpu_kernel void @clobber_occupancy_limited_vgpr64() #0 {
14entry:
15  call void asm sideeffect "; clobber $0", "~{v[42:43]}"()
16  ret void
17}
18
19; ERR: warning: inline asm clobber list contains reserved registers: m0
20; ERR: note: Reserved registers on the clobber list may not be preserved across the asm statement, and clobbering them may lead to undefined behaviour.
21define amdgpu_kernel void @clobber_m0() {
22entry:
23  call void asm sideeffect "; clobber $0", "~{m0}"()
24  ret void
25}
26
27; ERR: warning: inline asm clobber list contains reserved registers: exec
28; ERR: note: Reserved registers on the clobber list may not be preserved across the asm statement, and clobbering them may lead to undefined behaviour.
29define amdgpu_kernel void @clobber_exec() {
30entry:
31  call void asm sideeffect "; clobber $0", "~{exec}"()
32  ret void
33}
34
35; ERR: warning: inline asm clobber list contains reserved registers: exec_lo
36; ERR: note: Reserved registers on the clobber list may not be preserved across the asm statement, and clobbering them may lead to undefined behaviour.
37define amdgpu_kernel void @clobber_exec_lo() {
38entry:
39  call void asm sideeffect "; clobber $0", "~{exec_lo}"()
40  ret void
41}
42
43; FIXME: This should warn too
44; ERR-NOT: warning: inline asm clobber list contains reserved registers
45define amdgpu_kernel void @def_exec(ptr addrspace(1) %ptr) {
46entry:
47  %exec = call i64 asm sideeffect "; def $0", "={exec}"()
48  store i64 %exec, ptr addrspace(1) %ptr
49  ret void
50}
51
52attributes #0 = { "amdgpu-waves-per-eu"="10,10" }
53