
This avoids the need to have special handling at every use site. Unfortunately this means we unnecessarily emit AssertZext in the DAG (where we already directly understand the range of the intrinsic), andt we regress in undefined cases as we don't fold out asserts on undef.
32 lines
1.3 KiB
LLVM
32 lines
1.3 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
|
|
; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx942 -o - %s | FileCheck -check-prefixes=CHECK,SDAG %s
|
|
; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx942 -o - %s | FileCheck -check-prefixes=CHECK,GISEL %s
|
|
|
|
declare i32 @llvm.amdgcn.workitem.id.x()
|
|
declare i32 @llvm.amdgcn.workitem.id.y()
|
|
declare i32 @llvm.amdgcn.workitem.id.z()
|
|
|
|
; FIXME: It's not worth adding AssertZext to the intrinsic calls, and
|
|
; we don't fold out assertzext undef ->undef
|
|
define amdgpu_ps void @undefined_workitems(ptr addrspace(1) %p, ptr addrspace(1) %q, ptr addrspace(1) %r) {
|
|
; SDAG-LABEL: undefined_workitems:
|
|
; SDAG: ; %bb.0:
|
|
; SDAG-NEXT: global_store_dword v[0:1], v0, off
|
|
; SDAG-NEXT: global_store_dword v[2:3], v0, off
|
|
; SDAG-NEXT: global_store_dword v[4:5], v0, off
|
|
; SDAG-NEXT: s_endpgm
|
|
;
|
|
; GISEL-LABEL: undefined_workitems:
|
|
; GISEL: ; %bb.0:
|
|
; GISEL-NEXT: s_endpgm
|
|
%id.x = call i32 @llvm.amdgcn.workitem.id.x()
|
|
store i32 %id.x, ptr addrspace(1) %p
|
|
%id.y = call i32 @llvm.amdgcn.workitem.id.y()
|
|
store i32 %id.y, ptr addrspace(1) %q
|
|
%id.z = call i32 @llvm.amdgcn.workitem.id.z()
|
|
store i32 %id.z, ptr addrspace(1) %r
|
|
ret void
|
|
}
|
|
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
|
|
; CHECK: {{.*}}
|