[AMDGPU] Mark AGPR tuple implicit in the first instr of AGPR spills. (#115285)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / llvm.amdgcn.raw.buffer.load.lds.ll
blobffd055e973ed068f4c8cf70e7bfbb544e0d28ab5
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN
3 ; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN
5 declare void @llvm.amdgcn.raw.buffer.load.lds(<4 x i32> %rsrc, ptr addrspace(3) nocapture, i32 %size, i32 %voffset, i32 %soffset, i32 %offset, i32 %aux)
7 define amdgpu_ps float @buffer_load_lds_dword(<4 x i32> inreg %rsrc, ptr addrspace(3) inreg %lds) {
8 ; GCN-LABEL: buffer_load_lds_dword:
9 ; GCN:       ; %bb.0: ; %main_body
10 ; GCN-NEXT:    s_mov_b32 m0, s4
11 ; GCN-NEXT:    s_nop 0
12 ; GCN-NEXT:    buffer_load_dword off, s[0:3], 0 lds
13 ; GCN-NEXT:    buffer_load_dword off, s[0:3], 0 offset:4 glc lds
14 ; GCN-NEXT:    buffer_load_dword off, s[0:3], 0 offset:8 slc lds
15 ; GCN-NEXT:    v_mov_b32_e32 v0, s4
16 ; GCN-NEXT:    s_waitcnt vmcnt(0)
17 ; GCN-NEXT:    ds_read_b32 v0, v0
18 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
19 ; GCN-NEXT:    ; return to shader part epilog
20 main_body:
21   call void @llvm.amdgcn.raw.buffer.load.lds(<4 x i32> %rsrc, ptr addrspace(3) %lds, i32 4, i32 0, i32 0, i32 0, i32 0)
22   call void @llvm.amdgcn.raw.buffer.load.lds(<4 x i32> %rsrc, ptr addrspace(3) %lds, i32 4, i32 0, i32 0, i32 4, i32 1)
23   call void @llvm.amdgcn.raw.buffer.load.lds(<4 x i32> %rsrc, ptr addrspace(3) %lds, i32 4, i32 0, i32 0, i32 8, i32 2)
24   %res = load float, ptr addrspace(3) %lds
25   ret float %res
28 define amdgpu_ps void @buffer_load_lds_dword_imm_voffset(<4 x i32> inreg %rsrc, ptr addrspace(3) inreg %lds) {
29 ; GCN-LABEL: buffer_load_lds_dword_imm_voffset:
30 ; GCN:       ; %bb.0: ; %main_body
31 ; GCN-NEXT:    v_mov_b32_e32 v0, 0x800
32 ; GCN-NEXT:    s_mov_b32 m0, s4
33 ; GCN-NEXT:    s_nop 0
34 ; GCN-NEXT:    buffer_load_dword v0, s[0:3], 0 offen lds
35 ; GCN-NEXT:    s_endpgm
36 main_body:
37   call void @llvm.amdgcn.raw.buffer.load.lds(<4 x i32> %rsrc, ptr addrspace(3) %lds, i32 4, i32 2048, i32 0, i32 0, i32 0)
38   ret void
41 define amdgpu_ps void @buffer_load_lds_dword_v_offset(<4 x i32> inreg %rsrc, ptr addrspace(3) inreg %lds, i32 %voffset) {
42 ; GCN-LABEL: buffer_load_lds_dword_v_offset:
43 ; GCN:       ; %bb.0: ; %main_body
44 ; GCN-NEXT:    s_mov_b32 m0, s4
45 ; GCN-NEXT:    s_nop 0
46 ; GCN-NEXT:    buffer_load_dword v0, s[0:3], 0 offen lds
47 ; GCN-NEXT:    s_endpgm
48 main_body:
49   call void @llvm.amdgcn.raw.buffer.load.lds(<4 x i32> %rsrc, ptr addrspace(3) %lds, i32 4, i32 %voffset, i32 0, i32 0, i32 0)
50   ret void
53 define amdgpu_ps void @buffer_load_lds_dword_s_offset(<4 x i32> inreg %rsrc, ptr addrspace(3) inreg %lds, i32 inreg %soffset) {
54 ; GCN-LABEL: buffer_load_lds_dword_s_offset:
55 ; GCN:       ; %bb.0: ; %main_body
56 ; GCN-NEXT:    s_mov_b32 m0, s4
57 ; GCN-NEXT:    s_nop 0
58 ; GCN-NEXT:    buffer_load_dword off, s[0:3], s5 lds
59 ; GCN-NEXT:    s_endpgm
60 main_body:
61   call void @llvm.amdgcn.raw.buffer.load.lds(<4 x i32> %rsrc, ptr addrspace(3) %lds, i32 4, i32 0, i32 %soffset, i32 0, i32 0)
62   ret void
65 define amdgpu_ps void @buffer_load_lds_dword_vs_offset(<4 x i32> inreg %rsrc, ptr addrspace(3) inreg %lds, i32 %voffset, i32 inreg %soffset) {
66 ; GCN-LABEL: buffer_load_lds_dword_vs_offset:
67 ; GCN:       ; %bb.0: ; %main_body
68 ; GCN-NEXT:    s_mov_b32 m0, s4
69 ; GCN-NEXT:    s_nop 0
70 ; GCN-NEXT:    buffer_load_dword v0, s[0:3], s5 offen lds
71 ; GCN-NEXT:    s_endpgm
72 main_body:
73   call void @llvm.amdgcn.raw.buffer.load.lds(<4 x i32> %rsrc, ptr addrspace(3) %lds, i32 4, i32 %voffset, i32 %soffset, i32 0, i32 0)
74   ret void
77 define amdgpu_ps void @buffer_load_lds_dword_vs_imm_offset(<4 x i32> inreg %rsrc, ptr addrspace(3) inreg %lds, i32 %voffset, i32 inreg %soffset) {
78 ; GCN-LABEL: buffer_load_lds_dword_vs_imm_offset:
79 ; GCN:       ; %bb.0: ; %main_body
80 ; GCN-NEXT:    s_mov_b32 m0, s4
81 ; GCN-NEXT:    s_nop 0
82 ; GCN-NEXT:    buffer_load_dword v0, s[0:3], s5 offen offset:2048 lds
83 ; GCN-NEXT:    s_endpgm
84 main_body:
85   call void @llvm.amdgcn.raw.buffer.load.lds(<4 x i32> %rsrc, ptr addrspace(3) %lds, i32 4, i32 %voffset, i32 %soffset, i32 2048, i32 0)
86   ret void
89 define amdgpu_ps void @buffer_load_lds_ushort(<4 x i32> inreg %rsrc, ptr addrspace(3) inreg %lds) {
90 ; GCN-LABEL: buffer_load_lds_ushort:
91 ; GCN:       ; %bb.0: ; %main_body
92 ; GCN-NEXT:    v_mov_b32_e32 v0, 0x800
93 ; GCN-NEXT:    s_mov_b32 m0, s4
94 ; GCN-NEXT:    s_nop 0
95 ; GCN-NEXT:    buffer_load_ushort v0, s[0:3], 0 offen lds
96 ; GCN-NEXT:    s_endpgm
97 main_body:
98   call void @llvm.amdgcn.raw.buffer.load.lds(<4 x i32> %rsrc, ptr addrspace(3) %lds, i32 2, i32 2048, i32 0, i32 0, i32 0)
99   ret void
102 define amdgpu_ps void @buffer_load_lds_ubyte(<4 x i32> inreg %rsrc, ptr addrspace(3) inreg %lds) {
103 ; GCN-LABEL: buffer_load_lds_ubyte:
104 ; GCN:       ; %bb.0: ; %main_body
105 ; GCN-NEXT:    s_mov_b32 m0, s4
106 ; GCN-NEXT:    s_nop 0
107 ; GCN-NEXT:    buffer_load_ubyte off, s[0:3], 0 offset:2048 lds
108 ; GCN-NEXT:    s_endpgm
109 main_body:
110   call void @llvm.amdgcn.raw.buffer.load.lds(<4 x i32> %rsrc, ptr addrspace(3) %lds, i32 1, i32 0, i32 0, i32 2048, i32 0)
111   ret void