blob: 536e33313b6e82c0117e6ad90a4e6867e44940ef [file] [edit]
; 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
}