| ; RUN: not llc -global-isel=0 -mtriple=amdgpu9.00 -filetype=null %s 2>&1 | FileCheck %s | |
| ; RUN: not llc -global-isel -mtriple=amdgpu9.00 -filetype=null %s 2>&1 | FileCheck %s | |
| ; RUN: not llc -global-isel=0 -mtriple=amdgpu9.0a -filetype=null %s 2>&1 | FileCheck -check-prefix=GFX90A %s | |
| ; RUN: not llc -global-isel -mtriple=amdgpu9.0a -filetype=null %s 2>&1 | FileCheck -check-prefix=GFX90A %s | |
| ; An i8 buffer.load.format / buffer.store.format has no corresponding real | |
| ; instruction (no byte-granularity format access exists in hardware), so both | |
| ; SelectionDAG and GlobalISel must refuse to lower it. | |
| ; CHECK: error: {{.*}}unsupported sub-dword format buffer load | |
| ; GFX90A: error: {{.*}}unsupported sub-dword format buffer load | |
| define amdgpu_ps float @load_i8(ptr addrspace(8) inreg %rsrc) { | |
| %data = call i8 @llvm.amdgcn.struct.ptr.buffer.load.format.i8(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0, i32 0) | |
| %zext = zext i8 %data to i32 | |
| %fdata = bitcast i32 %zext to float | |
| ret float %fdata | |
| } | |
| ; CHECK: error: {{.*}}unsupported sub-dword format buffer store | |
| ; GFX90A: error: {{.*}}unsupported sub-dword format buffer store | |
| define amdgpu_ps void @store_i8(ptr addrspace(8) inreg %rsrc, i8 %data, i32 %index) { | |
| call void @llvm.amdgcn.struct.ptr.buffer.store.format.i8(i8 %data, ptr addrspace(8) %rsrc, i32 %index, i32 0, i32 0, i32 0) | |
| ret void | |
| } | |
| ; D16 buffer.load.format with TFE has no hardware encoding on gfx90a. | |
| ; CHECK-NOT: error: {{.*}}TFE D16 format buffer load | |
| ; GFX90A: error: {{.*}}TFE D16 format buffer load is not supported on this GPU | |
| define amdgpu_kernel void @load_v3i16_tfe(ptr addrspace(8) inreg %rsrc, ptr addrspace(1) %out, ptr addrspace(1) %status) { | |
| %r = call {<3 x i16>, i32} @llvm.amdgcn.struct.ptr.buffer.load.format.sl_v3i16i32s(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0, i32 0) | |
| %data = extractvalue {<3 x i16>, i32} %r, 0 | |
| %st = extractvalue {<3 x i16>, i32} %r, 1 | |
| store <3 x i16> %data, ptr addrspace(1) %out | |
| store i32 %st, ptr addrspace(1) %status | |
| ret void | |
| } | |
| ; GFX90A: error: {{.*}}TFE D16 format buffer load is not supported on this GPU | |
| define amdgpu_kernel void @load_f16_tfe(ptr addrspace(8) inreg %rsrc, ptr addrspace(1) %out, ptr addrspace(1) %status) { | |
| %r = call {half, i32} @llvm.amdgcn.struct.ptr.buffer.load.format.sl_f16i32s(ptr addrspace(8) %rsrc, i32 0, i32 0, i32 0, i32 0) | |
| %data = extractvalue {half, i32} %r, 0 | |
| %st = extractvalue {half, i32} %r, 1 | |
| store half %data, ptr addrspace(1) %out | |
| store i32 %st, ptr addrspace(1) %status | |
| ret void | |
| } |