xref: /llvm-project/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.sendmsg.rtn.ll (revision 6548b6354d1d990e1c98736f5e7c3de876bedc8e)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck --check-prefixes=GFX11,GFX11-SDAG %s
3; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck --check-prefixes=GFX11,GFX11-GISEL %s
4
5define amdgpu_kernel void @test_get_doorbell(ptr addrspace(1) %out) {
6; GFX11-SDAG-LABEL: test_get_doorbell:
7; GFX11-SDAG:       ; %bb.0:
8; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
9; GFX11-SDAG-NEXT:    s_sendmsg_rtn_b32 s2, sendmsg(MSG_RTN_GET_DOORBELL)
10; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
11; GFX11-SDAG-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2
12; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
13; GFX11-SDAG-NEXT:    s_endpgm
14;
15; GFX11-GISEL-LABEL: test_get_doorbell:
16; GFX11-GISEL:       ; %bb.0:
17; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
18; GFX11-GISEL-NEXT:    s_sendmsg_rtn_b32 s2, sendmsg(MSG_RTN_GET_DOORBELL)
19; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
20; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
21; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
22; GFX11-GISEL-NEXT:    s_endpgm
23  %ret = call i32 @llvm.amdgcn.s.sendmsg.rtn.i32(i32 128)
24  store i32 %ret, ptr addrspace(1) %out
25  ret void
26}
27
28define amdgpu_kernel void @test_get_ddid(ptr addrspace(1) %out) {
29; GFX11-SDAG-LABEL: test_get_ddid:
30; GFX11-SDAG:       ; %bb.0:
31; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
32; GFX11-SDAG-NEXT:    s_sendmsg_rtn_b32 s2, sendmsg(MSG_RTN_GET_DDID)
33; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
34; GFX11-SDAG-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2
35; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
36; GFX11-SDAG-NEXT:    s_endpgm
37;
38; GFX11-GISEL-LABEL: test_get_ddid:
39; GFX11-GISEL:       ; %bb.0:
40; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
41; GFX11-GISEL-NEXT:    s_sendmsg_rtn_b32 s2, sendmsg(MSG_RTN_GET_DDID)
42; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
43; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
44; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
45; GFX11-GISEL-NEXT:    s_endpgm
46  %ret = call i32 @llvm.amdgcn.s.sendmsg.rtn.i32(i32 129)
47  store i32 %ret, ptr addrspace(1) %out
48  ret void
49}
50
51define amdgpu_kernel void @test_get_tma(ptr addrspace(1) %out) {
52; GFX11-LABEL: test_get_tma:
53; GFX11:       ; %bb.0:
54; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
55; GFX11-NEXT:    s_sendmsg_rtn_b64 s[2:3], sendmsg(MSG_RTN_GET_TMA)
56; GFX11-NEXT:    v_mov_b32_e32 v2, 0
57; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
58; GFX11-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
59; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
60; GFX11-NEXT:    s_endpgm
61  %ret = call i64 @llvm.amdgcn.s.sendmsg.rtn.i64(i32 130)
62  store i64 %ret, ptr addrspace(1) %out
63  ret void
64}
65
66define amdgpu_kernel void @test_get_realtime(ptr addrspace(1) %out) {
67; GFX11-LABEL: test_get_realtime:
68; GFX11:       ; %bb.0:
69; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
70; GFX11-NEXT:    s_sendmsg_rtn_b64 s[2:3], sendmsg(MSG_RTN_GET_REALTIME)
71; GFX11-NEXT:    v_mov_b32_e32 v2, 0
72; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
73; GFX11-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
74; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
75; GFX11-NEXT:    s_endpgm
76  %ret = call i64 @llvm.amdgcn.s.sendmsg.rtn.i64(i32 131)
77  store i64 %ret, ptr addrspace(1) %out
78  ret void
79}
80
81define amdgpu_kernel void @test_savewave(ptr addrspace(1) %out) {
82; GFX11-SDAG-LABEL: test_savewave:
83; GFX11-SDAG:       ; %bb.0:
84; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
85; GFX11-SDAG-NEXT:    s_sendmsg_rtn_b32 s2, sendmsg(MSG_RTN_SAVE_WAVE)
86; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
87; GFX11-SDAG-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2
88; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
89; GFX11-SDAG-NEXT:    s_endpgm
90;
91; GFX11-GISEL-LABEL: test_savewave:
92; GFX11-GISEL:       ; %bb.0:
93; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
94; GFX11-GISEL-NEXT:    s_sendmsg_rtn_b32 s2, sendmsg(MSG_RTN_SAVE_WAVE)
95; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
96; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
97; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
98; GFX11-GISEL-NEXT:    s_endpgm
99  %ret = call i32 @llvm.amdgcn.s.sendmsg.rtn.i32(i32 132)
100  store i32 %ret, ptr addrspace(1) %out
101  ret void
102}
103
104define amdgpu_kernel void @test_get_tba(ptr addrspace(1) %out) {
105; GFX11-LABEL: test_get_tba:
106; GFX11:       ; %bb.0:
107; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
108; GFX11-NEXT:    s_sendmsg_rtn_b64 s[2:3], sendmsg(MSG_RTN_GET_TBA)
109; GFX11-NEXT:    v_mov_b32_e32 v2, 0
110; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
111; GFX11-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
112; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
113; GFX11-NEXT:    s_endpgm
114  %ret = call i64 @llvm.amdgcn.s.sendmsg.rtn.i64(i32 133)
115  store i64 %ret, ptr addrspace(1) %out
116  ret void
117}
118
119define amdgpu_kernel void @test_get_0_i32(ptr addrspace(1) %out) {
120; GFX11-SDAG-LABEL: test_get_0_i32:
121; GFX11-SDAG:       ; %bb.0:
122; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
123; GFX11-SDAG-NEXT:    s_sendmsg_rtn_b32 s2, sendmsg(0, 0, 0)
124; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
125; GFX11-SDAG-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2
126; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
127; GFX11-SDAG-NEXT:    s_endpgm
128;
129; GFX11-GISEL-LABEL: test_get_0_i32:
130; GFX11-GISEL:       ; %bb.0:
131; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
132; GFX11-GISEL-NEXT:    s_sendmsg_rtn_b32 s2, sendmsg(0, 0, 0)
133; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
134; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
135; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
136; GFX11-GISEL-NEXT:    s_endpgm
137  %ret = call i32 @llvm.amdgcn.s.sendmsg.rtn.i32(i32 0)
138  store i32 %ret, ptr addrspace(1) %out
139  ret void
140}
141
142define amdgpu_kernel void @test_get_99999_i64(ptr addrspace(1) %out) {
143; GFX11-LABEL: test_get_99999_i64:
144; GFX11:       ; %bb.0:
145; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
146; GFX11-NEXT:    s_sendmsg_rtn_b64 s[2:3], 99999
147; GFX11-NEXT:    v_mov_b32_e32 v2, 0
148; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
149; GFX11-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
150; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
151; GFX11-NEXT:    s_endpgm
152  %ret = call i64 @llvm.amdgcn.s.sendmsg.rtn.i64(i32 99999)
153  store i64 %ret, ptr addrspace(1) %out
154  ret void
155}
156
157declare i32 @llvm.amdgcn.s.sendmsg.rtn.i32(i32)
158declare i64 @llvm.amdgcn.s.sendmsg.rtn.i64(i32)
159