1*9e9907f1SFangrui Song;RUN: llc < %s -mtriple=amdgcn -mcpu=verde -verify-machineinstrs | FileCheck %s 2*9e9907f1SFangrui Song;RUN: llc < %s -mtriple=amdgcn -mcpu=tonga -verify-machineinstrs | FileCheck %s 3faa2c678SKrzysztof Drewniak 4faa2c678SKrzysztof Drewniak;CHECK-LABEL: {{^}}buffer_load: 5faa2c678SKrzysztof Drewniak;CHECK: buffer_load_format_xyzw v[0:3], off, s[0:3], 0 6faa2c678SKrzysztof Drewniak;CHECK: buffer_load_format_xyzw v[4:7], off, s[0:3], 0 glc 7faa2c678SKrzysztof Drewniak;CHECK: buffer_load_format_xyzw v[8:11], off, s[0:3], 0 slc 8faa2c678SKrzysztof Drewniak;CHECK: s_waitcnt 9faa2c678SKrzysztof Drewniakdefine amdgpu_ps {<4 x float>, <4 x float>, <4 x float>} @buffer_load(ptr addrspace(8) inreg) { 10faa2c678SKrzysztof Drewniakmain_body: 11faa2c678SKrzysztof Drewniak %data = call <4 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v4f32(ptr addrspace(8) %0, i32 0, i32 0, i32 0) 12faa2c678SKrzysztof Drewniak %data_glc = call <4 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v4f32(ptr addrspace(8) %0, i32 0, i32 0, i32 1) 13faa2c678SKrzysztof Drewniak %data_slc = call <4 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v4f32(ptr addrspace(8) %0, i32 0, i32 0, i32 2) 14faa2c678SKrzysztof Drewniak %r0 = insertvalue {<4 x float>, <4 x float>, <4 x float>} undef, <4 x float> %data, 0 15faa2c678SKrzysztof Drewniak %r1 = insertvalue {<4 x float>, <4 x float>, <4 x float>} %r0, <4 x float> %data_glc, 1 16faa2c678SKrzysztof Drewniak %r2 = insertvalue {<4 x float>, <4 x float>, <4 x float>} %r1, <4 x float> %data_slc, 2 17faa2c678SKrzysztof Drewniak ret {<4 x float>, <4 x float>, <4 x float>} %r2 18faa2c678SKrzysztof Drewniak} 19faa2c678SKrzysztof Drewniak 20faa2c678SKrzysztof Drewniak;CHECK-LABEL: {{^}}buffer_load_immoffs: 21faa2c678SKrzysztof Drewniak;CHECK: buffer_load_format_xyzw v[0:3], off, s[0:3], 0 offset:42 22faa2c678SKrzysztof Drewniak;CHECK: s_waitcnt 23faa2c678SKrzysztof Drewniakdefine amdgpu_ps <4 x float> @buffer_load_immoffs(ptr addrspace(8) inreg) { 24faa2c678SKrzysztof Drewniakmain_body: 25faa2c678SKrzysztof Drewniak %data = call <4 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v4f32(ptr addrspace(8) %0, i32 42, i32 0, i32 0) 26faa2c678SKrzysztof Drewniak ret <4 x float> %data 27faa2c678SKrzysztof Drewniak} 28faa2c678SKrzysztof Drewniak 29faa2c678SKrzysztof Drewniak;CHECK-LABEL: {{^}}buffer_load_immoffs_large: 30faa2c678SKrzysztof Drewniak;CHECK-DAG: buffer_load_format_xyzw {{v\[[0-9]+:[0-9]+\]}}, off, s[0:3], 60 offset:4092 31faa2c678SKrzysztof Drewniak;CHECK-DAG: s_movk_i32 [[OFS1:s[0-9]+]], 0x7ffc 32faa2c678SKrzysztof Drewniak;CHECK-DAG: buffer_load_format_xyzw {{v\[[0-9]+:[0-9]+\]}}, off, s[0:3], [[OFS1]] offset:4092 33faa2c678SKrzysztof Drewniak;CHECK-DAG: s_mov_b32 [[OFS2:s[0-9]+]], 0x8ffc 34faa2c678SKrzysztof Drewniak;CHECK-DAG: buffer_load_format_xyzw {{v\[[0-9]+:[0-9]+\]}}, off, s[0:3], [[OFS2]] offset:4 35faa2c678SKrzysztof Drewniak;CHECK: s_waitcnt 36faa2c678SKrzysztof Drewniakdefine amdgpu_ps <4 x float> @buffer_load_immoffs_large(ptr addrspace(8) inreg) { 37faa2c678SKrzysztof Drewniakmain_body: 38faa2c678SKrzysztof Drewniak %d.0 = call <4 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v4f32(ptr addrspace(8) %0, i32 4092, i32 60, i32 0) 39faa2c678SKrzysztof Drewniak %d.1 = call <4 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v4f32(ptr addrspace(8) %0, i32 4092, i32 32764, i32 0) 40faa2c678SKrzysztof Drewniak %d.2 = call <4 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v4f32(ptr addrspace(8) %0, i32 4, i32 36860, i32 0) 41faa2c678SKrzysztof Drewniak %d.3 = fadd <4 x float> %d.0, %d.1 42faa2c678SKrzysztof Drewniak %data = fadd <4 x float> %d.2, %d.3 43faa2c678SKrzysztof Drewniak ret <4 x float> %data 44faa2c678SKrzysztof Drewniak} 45faa2c678SKrzysztof Drewniak 46faa2c678SKrzysztof Drewniak;CHECK-LABEL: {{^}}buffer_load_ofs: 47faa2c678SKrzysztof Drewniak;CHECK: buffer_load_format_xyzw v[0:3], v0, s[0:3], 0 offen 48faa2c678SKrzysztof Drewniak;CHECK: s_waitcnt 49faa2c678SKrzysztof Drewniakdefine amdgpu_ps <4 x float> @buffer_load_ofs(ptr addrspace(8) inreg, i32) { 50faa2c678SKrzysztof Drewniakmain_body: 51faa2c678SKrzysztof Drewniak %data = call <4 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v4f32(ptr addrspace(8) %0, i32 %1, i32 0, i32 0) 52faa2c678SKrzysztof Drewniak ret <4 x float> %data 53faa2c678SKrzysztof Drewniak} 54faa2c678SKrzysztof Drewniak 55faa2c678SKrzysztof Drewniak;CHECK-LABEL: {{^}}buffer_load_ofs_imm: 56faa2c678SKrzysztof Drewniak;CHECK: buffer_load_format_xyzw v[0:3], v0, s[0:3], 0 offen offset:60 57faa2c678SKrzysztof Drewniak;CHECK: s_waitcnt 58faa2c678SKrzysztof Drewniakdefine amdgpu_ps <4 x float> @buffer_load_ofs_imm(ptr addrspace(8) inreg, i32) { 59faa2c678SKrzysztof Drewniakmain_body: 60faa2c678SKrzysztof Drewniak %ofs = add i32 %1, 60 61faa2c678SKrzysztof Drewniak %data = call <4 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v4f32(ptr addrspace(8) %0, i32 %ofs, i32 0, i32 0) 62faa2c678SKrzysztof Drewniak ret <4 x float> %data 63faa2c678SKrzysztof Drewniak} 64faa2c678SKrzysztof Drewniak 65faa2c678SKrzysztof Drewniak;CHECK-LABEL: {{^}}buffer_load_x: 66faa2c678SKrzysztof Drewniak;CHECK: buffer_load_format_x v0, off, s[0:3], 0 67faa2c678SKrzysztof Drewniak;CHECK: s_waitcnt 68faa2c678SKrzysztof Drewniakdefine amdgpu_ps float @buffer_load_x(ptr addrspace(8) inreg %rsrc) { 69faa2c678SKrzysztof Drewniakmain_body: 70faa2c678SKrzysztof Drewniak %data = call float @llvm.amdgcn.raw.ptr.buffer.load.format.f32(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0) 71faa2c678SKrzysztof Drewniak ret float %data 72faa2c678SKrzysztof Drewniak} 73faa2c678SKrzysztof Drewniak 74faa2c678SKrzysztof Drewniak;CHECK-LABEL: {{^}}buffer_load_xy: 75faa2c678SKrzysztof Drewniak;CHECK: buffer_load_format_xy v[0:1], off, s[0:3], 0 76faa2c678SKrzysztof Drewniak;CHECK: s_waitcnt 77faa2c678SKrzysztof Drewniakdefine amdgpu_ps <2 x float> @buffer_load_xy(ptr addrspace(8) inreg %rsrc) { 78faa2c678SKrzysztof Drewniakmain_body: 79faa2c678SKrzysztof Drewniak %data = call <2 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v2f32(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0) 80faa2c678SKrzysztof Drewniak ret <2 x float> %data 81faa2c678SKrzysztof Drewniak} 82faa2c678SKrzysztof Drewniak 83faa2c678SKrzysztof Drewniakdeclare float @llvm.amdgcn.raw.ptr.buffer.load.format.f32(ptr addrspace(8), i32, i32, i32) #0 84faa2c678SKrzysztof Drewniakdeclare <2 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v2f32(ptr addrspace(8), i32, i32, i32) #0 85faa2c678SKrzysztof Drewniakdeclare <4 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v4f32(ptr addrspace(8), i32, i32, i32) #0 86faa2c678SKrzysztof Drewniak 87faa2c678SKrzysztof Drewniakattributes #0 = { nounwind readonly } 88