blob: 9eee9a6effc92cb3ea7b7cf3a9869ff0867ebe9d [file] [log] [blame]
Jan Vesely2fa28c32016-07-10 21:20:29 +00001; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
2
3; FUNC-LABEL: {{^}}tgid_x:
4; EG: MEM_RAT_CACHELESS STORE_RAW T1.X
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00005define amdgpu_kernel void @tgid_x(i32 addrspace(1)* %out) {
Jan Vesely2fa28c32016-07-10 21:20:29 +00006entry:
7 %0 = call i32 @llvm.r600.read.tgid.x() #0
8 store i32 %0, i32 addrspace(1)* %out
9 ret void
10}
11
12; FUNC-LABEL: {{^}}tgid_y:
13; EG: MEM_RAT_CACHELESS STORE_RAW T1.Y
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000014define amdgpu_kernel void @tgid_y(i32 addrspace(1)* %out) {
Jan Vesely2fa28c32016-07-10 21:20:29 +000015entry:
16 %0 = call i32 @llvm.r600.read.tgid.y() #0
17 store i32 %0, i32 addrspace(1)* %out
18 ret void
19}
20
21; FUNC-LABEL: {{^}}tgid_z:
22; EG: MEM_RAT_CACHELESS STORE_RAW T1.Z
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000023define amdgpu_kernel void @tgid_z(i32 addrspace(1)* %out) {
Jan Vesely2fa28c32016-07-10 21:20:29 +000024entry:
25 %0 = call i32 @llvm.r600.read.tgid.z() #0
26 store i32 %0, i32 addrspace(1)* %out
27 ret void
28}
29
30; FUNC-LABEL: {{^}}tidig_x:
31; EG: MEM_RAT_CACHELESS STORE_RAW T0.X
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000032define amdgpu_kernel void @tidig_x(i32 addrspace(1)* %out) {
Jan Vesely2fa28c32016-07-10 21:20:29 +000033entry:
34 %0 = call i32 @llvm.r600.read.tidig.x() #0
35 store i32 %0, i32 addrspace(1)* %out
36 ret void
37}
38
39; FUNC-LABEL: {{^}}tidig_y:
40; EG: MEM_RAT_CACHELESS STORE_RAW T0.Y
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000041define amdgpu_kernel void @tidig_y(i32 addrspace(1)* %out) {
Jan Vesely2fa28c32016-07-10 21:20:29 +000042entry:
43 %0 = call i32 @llvm.r600.read.tidig.y() #0
44 store i32 %0, i32 addrspace(1)* %out
45 ret void
46}
47
48; FUNC-LABEL: {{^}}tidig_z:
49; EG: MEM_RAT_CACHELESS STORE_RAW T0.Z
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000050define amdgpu_kernel void @tidig_z(i32 addrspace(1)* %out) {
Jan Vesely2fa28c32016-07-10 21:20:29 +000051entry:
52 %0 = call i32 @llvm.r600.read.tidig.z() #0
53 store i32 %0, i32 addrspace(1)* %out
54 ret void
55}
56
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
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000060define amdgpu_kernel void @test_implicit(i32 addrspace(1)* %out) #1 {
Jan Vesely2fa28c32016-07-10 21:20:29 +000061 %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
66 ret void
67}
68
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
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000072define amdgpu_kernel void @test_implicit_dyn(i32 addrspace(1)* %out, i32 %in) #1 {
Jan Vesely2fa28c32016-07-10 21:20:29 +000073 %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
78 ret void
79}
80
Jan Vesely2fa28c32016-07-10 21:20:29 +000081declare i8 addrspace(7)* @llvm.r600.implicitarg.ptr() #0
82
83declare i32 @llvm.r600.read.tgid.x() #0
84declare i32 @llvm.r600.read.tgid.y() #0
85declare i32 @llvm.r600.read.tgid.z() #0
86
87declare i32 @llvm.r600.read.tidig.x() #0
88declare i32 @llvm.r600.read.tidig.y() #0
89declare i32 @llvm.r600.read.tidig.z() #0
90
91attributes #0 = { readnone }