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