blob: a7adc2ae996e27b919139fae9859ad101d3eacaa [file] [log] [blame]
Stefan Maksimovicdc66ae72018-02-09 13:55:25 +00001; RUN: llc -march=r600 -mcpu=redwood -verify-machineinstrs < %s | \
2; RUN: FileCheck -check-prefix=EG -check-prefix=FUNC %s
Jan Vesely2fa28c32016-07-10 21:20:29 +00003
4; FUNC-LABEL: {{^}}tgid_x:
5; EG: MEM_RAT_CACHELESS STORE_RAW T1.X
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00006define amdgpu_kernel void @tgid_x(i32 addrspace(1)* %out) {
Jan Vesely2fa28c32016-07-10 21:20:29 +00007entry:
8 %0 = call i32 @llvm.r600.read.tgid.x() #0
9 store i32 %0, i32 addrspace(1)* %out
10 ret void
11}
12
13; FUNC-LABEL: {{^}}tgid_y:
Stefan Maksimovicdc66ae72018-02-09 13:55:25 +000014; EG: MEM_RAT_CACHELESS STORE_RAW [[REG:T[0-9]+]].X
15; EG: MOV [[REG]].X, T1.Y
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000016define amdgpu_kernel void @tgid_y(i32 addrspace(1)* %out) {
Jan Vesely2fa28c32016-07-10 21:20:29 +000017entry:
18 %0 = call i32 @llvm.r600.read.tgid.y() #0
19 store i32 %0, i32 addrspace(1)* %out
20 ret void
21}
22
23; FUNC-LABEL: {{^}}tgid_z:
Stefan Maksimovicdc66ae72018-02-09 13:55:25 +000024; EG: MEM_RAT_CACHELESS STORE_RAW [[REG:T[0-9]+]].X
25; EG: MOV [[REG]].X, T1.Z
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000026define amdgpu_kernel void @tgid_z(i32 addrspace(1)* %out) {
Jan Vesely2fa28c32016-07-10 21:20:29 +000027entry:
28 %0 = call i32 @llvm.r600.read.tgid.z() #0
29 store i32 %0, i32 addrspace(1)* %out
30 ret void
31}
32
33; FUNC-LABEL: {{^}}tidig_x:
34; EG: MEM_RAT_CACHELESS STORE_RAW T0.X
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000035define amdgpu_kernel void @tidig_x(i32 addrspace(1)* %out) {
Jan Vesely2fa28c32016-07-10 21:20:29 +000036entry:
37 %0 = call i32 @llvm.r600.read.tidig.x() #0
38 store i32 %0, i32 addrspace(1)* %out
39 ret void
40}
41
42; FUNC-LABEL: {{^}}tidig_y:
Stefan Maksimovicdc66ae72018-02-09 13:55:25 +000043; EG: MEM_RAT_CACHELESS STORE_RAW [[REG:T[0-9]+]].X
44; EG: MOV [[REG]].X, T0.Y
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000045define amdgpu_kernel void @tidig_y(i32 addrspace(1)* %out) {
Jan Vesely2fa28c32016-07-10 21:20:29 +000046entry:
47 %0 = call i32 @llvm.r600.read.tidig.y() #0
48 store i32 %0, i32 addrspace(1)* %out
49 ret void
50}
51
52; FUNC-LABEL: {{^}}tidig_z:
Stefan Maksimovicdc66ae72018-02-09 13:55:25 +000053; EG: MEM_RAT_CACHELESS STORE_RAW [[REG:T[0-9]+]].X
54; EG: MOV [[REG]].X, T0.Z
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000055define amdgpu_kernel void @tidig_z(i32 addrspace(1)* %out) {
Jan Vesely2fa28c32016-07-10 21:20:29 +000056entry:
57 %0 = call i32 @llvm.r600.read.tidig.z() #0
58 store i32 %0, i32 addrspace(1)* %out
59 ret void
60}
61
62; FUNC-LABEL: {{^}}test_implicit:
63; 36 prepended implicit bytes + 4(out pointer) + 4*4 = 56
64; EG: VTX_READ_32 {{T[0-9]+\.[XYZW]}}, {{T[0-9]+\.[XYZW]}}, 56
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000065define amdgpu_kernel void @test_implicit(i32 addrspace(1)* %out) #1 {
Jan Vesely2fa28c32016-07-10 21:20:29 +000066 %implicitarg.ptr = call noalias i8 addrspace(7)* @llvm.r600.implicitarg.ptr()
67 %header.ptr = bitcast i8 addrspace(7)* %implicitarg.ptr to i32 addrspace(7)*
68 %gep = getelementptr i32, i32 addrspace(7)* %header.ptr, i32 4
69 %value = load i32, i32 addrspace(7)* %gep
70 store i32 %value, i32 addrspace(1)* %out
71 ret void
72}
73
74; FUNC-LABEL: {{^}}test_implicit_dyn:
75; 36 prepended implicit bytes + 8(out pointer + in) = 44
76; EG: VTX_READ_32 {{T[0-9]+\.[XYZW]}}, {{T[0-9]+\.[XYZW]}}, 44
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000077define amdgpu_kernel void @test_implicit_dyn(i32 addrspace(1)* %out, i32 %in) #1 {
Jan Vesely2fa28c32016-07-10 21:20:29 +000078 %implicitarg.ptr = call noalias i8 addrspace(7)* @llvm.r600.implicitarg.ptr()
79 %header.ptr = bitcast i8 addrspace(7)* %implicitarg.ptr to i32 addrspace(7)*
80 %gep = getelementptr i32, i32 addrspace(7)* %header.ptr, i32 %in
81 %value = load i32, i32 addrspace(7)* %gep
82 store i32 %value, i32 addrspace(1)* %out
83 ret void
84}
85
Jan Vesely2fa28c32016-07-10 21:20:29 +000086declare i8 addrspace(7)* @llvm.r600.implicitarg.ptr() #0
87
88declare i32 @llvm.r600.read.tgid.x() #0
89declare i32 @llvm.r600.read.tgid.y() #0
90declare i32 @llvm.r600.read.tgid.z() #0
91
92declare i32 @llvm.r600.read.tidig.x() #0
93declare i32 @llvm.r600.read.tidig.y() #0
94declare i32 @llvm.r600.read.tidig.z() #0
95
96attributes #0 = { readnone }