1 ; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
3 ; FUNC-LABEL: {{^}}tgid_x:
4 ; EG: MEM_RAT_CACHELESS STORE_RAW T1.X
5 define amdgpu_kernel void @tgid_x(i32 addrspace(1)* %out) {
7 %0 = call i32 @llvm.r600.read.tgid.x() #0
8 store i32 %0, i32 addrspace(1)* %out
12 ; FUNC-LABEL: {{^}}tgid_y:
13 ; EG: MEM_RAT_CACHELESS STORE_RAW T1.Y
14 define amdgpu_kernel void @tgid_y(i32 addrspace(1)* %out) {
16 %0 = call i32 @llvm.r600.read.tgid.y() #0
17 store i32 %0, i32 addrspace(1)* %out
21 ; FUNC-LABEL: {{^}}tgid_z:
22 ; EG: MEM_RAT_CACHELESS STORE_RAW T1.Z
23 define amdgpu_kernel void @tgid_z(i32 addrspace(1)* %out) {
25 %0 = call i32 @llvm.r600.read.tgid.z() #0
26 store i32 %0, i32 addrspace(1)* %out
30 ; FUNC-LABEL: {{^}}tidig_x:
31 ; EG: MEM_RAT_CACHELESS STORE_RAW T0.X
32 define amdgpu_kernel void @tidig_x(i32 addrspace(1)* %out) {
34 %0 = call i32 @llvm.r600.read.tidig.x() #0
35 store i32 %0, i32 addrspace(1)* %out
39 ; FUNC-LABEL: {{^}}tidig_y:
40 ; EG: MEM_RAT_CACHELESS STORE_RAW T0.Y
41 define amdgpu_kernel void @tidig_y(i32 addrspace(1)* %out) {
43 %0 = call i32 @llvm.r600.read.tidig.y() #0
44 store i32 %0, i32 addrspace(1)* %out
48 ; FUNC-LABEL: {{^}}tidig_z:
49 ; EG: MEM_RAT_CACHELESS STORE_RAW T0.Z
50 define amdgpu_kernel void @tidig_z(i32 addrspace(1)* %out) {
52 %0 = call i32 @llvm.r600.read.tidig.z() #0
53 store i32 %0, i32 addrspace(1)* %out
57 ; FUNC-LABEL: {{^}}test_implicit:
58 ; 36 prepended implicit bytes + 4(out pointer) + 4*4 = 56
59 ; EG: VTX_READ_32 {{T[0-9]+\.[XYZW]}}, {{T[0-9]+\.[XYZW]}}, 56
60 define amdgpu_kernel void @test_implicit(i32 addrspace(1)* %out) #1 {
61 %implicitarg.ptr = call noalias i8 addrspace(7)* @llvm.r600.implicitarg.ptr()
62 %header.ptr = bitcast i8 addrspace(7)* %implicitarg.ptr to i32 addrspace(7)*
63 %gep = getelementptr i32, i32 addrspace(7)* %header.ptr, i32 4
64 %value = load i32, i32 addrspace(7)* %gep
65 store i32 %value, i32 addrspace(1)* %out
69 ; FUNC-LABEL: {{^}}test_implicit_dyn:
70 ; 36 prepended implicit bytes + 8(out pointer + in) = 44
71 ; EG: VTX_READ_32 {{T[0-9]+\.[XYZW]}}, {{T[0-9]+\.[XYZW]}}, 44
72 define amdgpu_kernel void @test_implicit_dyn(i32 addrspace(1)* %out, i32 %in) #1 {
73 %implicitarg.ptr = call noalias i8 addrspace(7)* @llvm.r600.implicitarg.ptr()
74 %header.ptr = bitcast i8 addrspace(7)* %implicitarg.ptr to i32 addrspace(7)*
75 %gep = getelementptr i32, i32 addrspace(7)* %header.ptr, i32 %in
76 %value = load i32, i32 addrspace(7)* %gep
77 store i32 %value, i32 addrspace(1)* %out
81 declare i8 addrspace(7)* @llvm.r600.implicitarg.ptr() #0
83 declare i32 @llvm.r600.read.tgid.x() #0
84 declare i32 @llvm.r600.read.tgid.y() #0
85 declare i32 @llvm.r600.read.tgid.z() #0
87 declare i32 @llvm.r600.read.tidig.x() #0
88 declare i32 @llvm.r600.read.tidig.y() #0
89 declare i32 @llvm.r600.read.tidig.z() #0
91 attributes #0 = { readnone }