1faa2c678SKrzysztof Drewniak; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9e9907f1SFangrui Song; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,SDAG 3*9e9907f1SFangrui Song; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GISEL 4faa2c678SKrzysztof Drewniak 5faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.struct.ptr.buffer.load.lds(ptr addrspace(8) %rsrc, ptr addrspace(3) nocapture, i32 %size, i32 %vindex, i32 %voffset, i32 %soffset, i32 %offset, i32 %aux) 6faa2c678SKrzysztof Drewniak 7faa2c678SKrzysztof Drewniakdefine amdgpu_ps float @buffer_load_lds_dword(ptr addrspace(8) inreg %rsrc, ptr addrspace(3) inreg %lds) { 8faa2c678SKrzysztof Drewniak; SDAG-LABEL: buffer_load_lds_dword: 9faa2c678SKrzysztof Drewniak; SDAG: ; %bb.0: ; %main_body 10faa2c678SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v0, 8 11faa2c678SKrzysztof Drewniak; SDAG-NEXT: s_mov_b32 m0, s4 12faa2c678SKrzysztof Drewniak; SDAG-NEXT: s_nop 0 13faa2c678SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, s[0:3], 0 idxen lds 14faa2c678SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, s[0:3], 0 idxen offset:4 glc lds 15faa2c678SKrzysztof Drewniak; SDAG-NEXT: buffer_load_dword v0, s[0:3], 0 idxen offset:8 slc lds 16faa2c678SKrzysztof Drewniak; SDAG-NEXT: v_mov_b32_e32 v0, s4 17faa2c678SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt vmcnt(0) 18faa2c678SKrzysztof Drewniak; SDAG-NEXT: ds_read_b32 v0, v0 19faa2c678SKrzysztof Drewniak; SDAG-NEXT: s_waitcnt lgkmcnt(0) 20faa2c678SKrzysztof Drewniak; SDAG-NEXT: ; return to shader part epilog 21faa2c678SKrzysztof Drewniak; 22faa2c678SKrzysztof Drewniak; GISEL-LABEL: buffer_load_lds_dword: 23faa2c678SKrzysztof Drewniak; GISEL: ; %bb.0: ; %main_body 24faa2c678SKrzysztof Drewniak; GISEL-NEXT: s_mov_b32 m0, s4 25faa2c678SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v0, 8 26faa2c678SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, s[0:3], 0 idxen lds 27faa2c678SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, s[0:3], 0 idxen offset:4 glc lds 28faa2c678SKrzysztof Drewniak; GISEL-NEXT: buffer_load_dword v0, s[0:3], 0 idxen offset:8 slc lds 29faa2c678SKrzysztof Drewniak; GISEL-NEXT: v_mov_b32_e32 v0, s4 30faa2c678SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt vmcnt(0) 31faa2c678SKrzysztof Drewniak; GISEL-NEXT: ds_read_b32 v0, v0 32faa2c678SKrzysztof Drewniak; GISEL-NEXT: s_waitcnt lgkmcnt(0) 33faa2c678SKrzysztof Drewniak; GISEL-NEXT: ; return to shader part epilog 34faa2c678SKrzysztof Drewniakmain_body: 35faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.struct.ptr.buffer.load.lds(ptr addrspace(8) %rsrc, ptr addrspace(3) %lds, i32 4, i32 8, i32 0, i32 0, i32 0, i32 0) 36faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.struct.ptr.buffer.load.lds(ptr addrspace(8) %rsrc, ptr addrspace(3) %lds, i32 4, i32 8, i32 0, i32 0, i32 4, i32 1) 37faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.struct.ptr.buffer.load.lds(ptr addrspace(8) %rsrc, ptr addrspace(3) %lds, i32 4, i32 8, i32 0, i32 0, i32 8, i32 2) 38faa2c678SKrzysztof Drewniak %res = load float, ptr addrspace(3) %lds 39faa2c678SKrzysztof Drewniak ret float %res 40faa2c678SKrzysztof Drewniak} 41faa2c678SKrzysztof Drewniak 42faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @buffer_load_lds_dword_imm_offset(ptr addrspace(8) inreg %rsrc, ptr addrspace(3) inreg %lds, i32 %vindex) { 43faa2c678SKrzysztof Drewniak; GCN-LABEL: buffer_load_lds_dword_imm_offset: 44faa2c678SKrzysztof Drewniak; GCN: ; %bb.0: ; %main_body 45faa2c678SKrzysztof Drewniak; GCN-NEXT: s_mov_b32 m0, s4 46faa2c678SKrzysztof Drewniak; GCN-NEXT: s_nop 0 47faa2c678SKrzysztof Drewniak; GCN-NEXT: buffer_load_dword v0, s[0:3], 0 idxen offset:2048 lds 48faa2c678SKrzysztof Drewniak; GCN-NEXT: s_endpgm 49faa2c678SKrzysztof Drewniakmain_body: 50faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.struct.ptr.buffer.load.lds(ptr addrspace(8) %rsrc, ptr addrspace(3) %lds, i32 4, i32 %vindex, i32 0, i32 0, i32 2048, i32 0) 51faa2c678SKrzysztof Drewniak ret void 52faa2c678SKrzysztof Drewniak} 53faa2c678SKrzysztof Drewniak 54faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @buffer_load_lds_dword_v_offset(ptr addrspace(8) inreg %rsrc, ptr addrspace(3) inreg %lds, i32 %vindex, i32 %voffset) { 55faa2c678SKrzysztof Drewniak; GCN-LABEL: buffer_load_lds_dword_v_offset: 56faa2c678SKrzysztof Drewniak; GCN: ; %bb.0: ; %main_body 57faa2c678SKrzysztof Drewniak; GCN-NEXT: s_mov_b32 m0, s4 58faa2c678SKrzysztof Drewniak; GCN-NEXT: s_nop 0 59faa2c678SKrzysztof Drewniak; GCN-NEXT: buffer_load_dword v[0:1], s[0:3], 0 idxen offen lds 60faa2c678SKrzysztof Drewniak; GCN-NEXT: s_endpgm 61faa2c678SKrzysztof Drewniakmain_body: 62faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.struct.ptr.buffer.load.lds(ptr addrspace(8) %rsrc, ptr addrspace(3) %lds, i32 4, i32 %vindex, i32 %voffset, i32 0, i32 0, i32 0) 63faa2c678SKrzysztof Drewniak ret void 64faa2c678SKrzysztof Drewniak} 65faa2c678SKrzysztof Drewniak 66faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @buffer_load_lds_dword_s_offset(ptr addrspace(8) inreg %rsrc, ptr addrspace(3) inreg %lds, i32 %vindex, i32 inreg %soffset) { 67faa2c678SKrzysztof Drewniak; GCN-LABEL: buffer_load_lds_dword_s_offset: 68faa2c678SKrzysztof Drewniak; GCN: ; %bb.0: ; %main_body 69faa2c678SKrzysztof Drewniak; GCN-NEXT: s_mov_b32 m0, s4 70faa2c678SKrzysztof Drewniak; GCN-NEXT: s_nop 0 71faa2c678SKrzysztof Drewniak; GCN-NEXT: buffer_load_dword v0, s[0:3], s5 idxen lds 72faa2c678SKrzysztof Drewniak; GCN-NEXT: s_endpgm 73faa2c678SKrzysztof Drewniakmain_body: 74faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.struct.ptr.buffer.load.lds(ptr addrspace(8) %rsrc, ptr addrspace(3) %lds, i32 4, i32 %vindex, i32 0, i32 %soffset, i32 0, i32 0) 75faa2c678SKrzysztof Drewniak ret void 76faa2c678SKrzysztof Drewniak} 77faa2c678SKrzysztof Drewniak 78faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @buffer_load_lds_dword_vs_offset(ptr addrspace(8) inreg %rsrc, ptr addrspace(3) inreg %lds, i32 %vindex, i32 %voffset, i32 inreg %soffset) { 79faa2c678SKrzysztof Drewniak; GCN-LABEL: buffer_load_lds_dword_vs_offset: 80faa2c678SKrzysztof Drewniak; GCN: ; %bb.0: ; %main_body 81faa2c678SKrzysztof Drewniak; GCN-NEXT: s_mov_b32 m0, s4 82faa2c678SKrzysztof Drewniak; GCN-NEXT: s_nop 0 83faa2c678SKrzysztof Drewniak; GCN-NEXT: buffer_load_dword v[0:1], s[0:3], s5 idxen offen lds 84faa2c678SKrzysztof Drewniak; GCN-NEXT: s_endpgm 85faa2c678SKrzysztof Drewniakmain_body: 86faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.struct.ptr.buffer.load.lds(ptr addrspace(8) %rsrc, ptr addrspace(3) %lds, i32 4, i32 %vindex, i32 %voffset, i32 %soffset, i32 0, i32 0) 87faa2c678SKrzysztof Drewniak ret void 88faa2c678SKrzysztof Drewniak} 89faa2c678SKrzysztof Drewniak 90faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @buffer_load_lds_dword_vs_imm_offset(ptr addrspace(8) inreg %rsrc, ptr addrspace(3) inreg %lds, i32 %vindex, i32 %voffset, i32 inreg %soffset) { 91faa2c678SKrzysztof Drewniak; GCN-LABEL: buffer_load_lds_dword_vs_imm_offset: 92faa2c678SKrzysztof Drewniak; GCN: ; %bb.0: ; %main_body 93faa2c678SKrzysztof Drewniak; GCN-NEXT: s_mov_b32 m0, s4 94faa2c678SKrzysztof Drewniak; GCN-NEXT: s_nop 0 95faa2c678SKrzysztof Drewniak; GCN-NEXT: buffer_load_dword v[0:1], s[0:3], s5 idxen offen offset:2048 lds 96faa2c678SKrzysztof Drewniak; GCN-NEXT: s_endpgm 97faa2c678SKrzysztof Drewniakmain_body: 98faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.struct.ptr.buffer.load.lds(ptr addrspace(8) %rsrc, ptr addrspace(3) %lds, i32 4, i32 %vindex, i32 %voffset, i32 %soffset, i32 2048, i32 0) 99faa2c678SKrzysztof Drewniak ret void 100faa2c678SKrzysztof Drewniak} 101faa2c678SKrzysztof Drewniak 102faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @buffer_load_lds_ushort(ptr addrspace(8) inreg %rsrc, ptr addrspace(3) inreg %lds, i32 %vindex) { 103faa2c678SKrzysztof Drewniak; GCN-LABEL: buffer_load_lds_ushort: 104faa2c678SKrzysztof Drewniak; GCN: ; %bb.0: ; %main_body 105faa2c678SKrzysztof Drewniak; GCN-NEXT: v_mov_b32_e32 v1, 0x800 106faa2c678SKrzysztof Drewniak; GCN-NEXT: s_mov_b32 m0, s4 107faa2c678SKrzysztof Drewniak; GCN-NEXT: s_nop 0 108faa2c678SKrzysztof Drewniak; GCN-NEXT: buffer_load_ushort v[0:1], s[0:3], 0 idxen offen lds 109faa2c678SKrzysztof Drewniak; GCN-NEXT: s_endpgm 110faa2c678SKrzysztof Drewniakmain_body: 111faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.struct.ptr.buffer.load.lds(ptr addrspace(8) %rsrc, ptr addrspace(3) %lds, i32 2, i32 %vindex, i32 2048, i32 0, i32 0, i32 0) 112faa2c678SKrzysztof Drewniak ret void 113faa2c678SKrzysztof Drewniak} 114faa2c678SKrzysztof Drewniak 115faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @buffer_load_lds_ubyte(ptr addrspace(8) inreg %rsrc, ptr addrspace(3) inreg %lds, i32 %vindex) { 116faa2c678SKrzysztof Drewniak; GCN-LABEL: buffer_load_lds_ubyte: 117faa2c678SKrzysztof Drewniak; GCN: ; %bb.0: ; %main_body 118faa2c678SKrzysztof Drewniak; GCN-NEXT: s_mov_b32 m0, s4 119faa2c678SKrzysztof Drewniak; GCN-NEXT: s_nop 0 120faa2c678SKrzysztof Drewniak; GCN-NEXT: buffer_load_ubyte v0, s[0:3], 0 idxen offset:2048 lds 121faa2c678SKrzysztof Drewniak; GCN-NEXT: s_endpgm 122faa2c678SKrzysztof Drewniakmain_body: 123faa2c678SKrzysztof Drewniak call void @llvm.amdgcn.struct.ptr.buffer.load.lds(ptr addrspace(8) %rsrc, ptr addrspace(3) %lds, i32 1, i32 %vindex, i32 0, i32 0, i32 2048, i32 0) 124faa2c678SKrzysztof Drewniak ret void 125faa2c678SKrzysztof Drewniak} 126