Jan Vesely | 3047950 | 2014-07-31 22:11:03 +0000 | [diff] [blame] | 1 | ; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s |
| 2 | ; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 3 | |
Jan Vesely | 3047950 | 2014-07-31 22:11:03 +0000 | [diff] [blame] | 4 | |
Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 5 | ; FUNC-LABEL: {{^}}ngroups_x: |
Jan Vesely | 3047950 | 2014-07-31 22:11:03 +0000 | [diff] [blame] | 6 | ; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]] |
| 7 | ; EG: MOV [[VAL]], KC0[0].X |
| 8 | |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 9 | ; SI: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0 |
| 10 | ; SI: v_mov_b32_e32 [[VVAL:v[0-9]+]], [[VAL]] |
| 11 | ; SI: buffer_store_dword [[VVAL]] |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 12 | define void @ngroups_x (i32 addrspace(1)* %out) { |
| 13 | entry: |
| 14 | %0 = call i32 @llvm.r600.read.ngroups.x() #0 |
| 15 | store i32 %0, i32 addrspace(1)* %out |
| 16 | ret void |
| 17 | } |
| 18 | |
Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 19 | ; FUNC-LABEL: {{^}}ngroups_y: |
Jan Vesely | 3047950 | 2014-07-31 22:11:03 +0000 | [diff] [blame] | 20 | ; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]] |
| 21 | ; EG: MOV [[VAL]], KC0[0].Y |
| 22 | |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 23 | ; SI: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0x1 |
| 24 | ; SI: v_mov_b32_e32 [[VVAL:v[0-9]+]], [[VAL]] |
| 25 | ; SI: buffer_store_dword [[VVAL]] |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 26 | define void @ngroups_y (i32 addrspace(1)* %out) { |
| 27 | entry: |
| 28 | %0 = call i32 @llvm.r600.read.ngroups.y() #0 |
| 29 | store i32 %0, i32 addrspace(1)* %out |
| 30 | ret void |
| 31 | } |
| 32 | |
Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 33 | ; FUNC-LABEL: {{^}}ngroups_z: |
Jan Vesely | 3047950 | 2014-07-31 22:11:03 +0000 | [diff] [blame] | 34 | ; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]] |
| 35 | ; EG: MOV [[VAL]], KC0[0].Z |
| 36 | |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 37 | ; SI: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0x2 |
| 38 | ; SI: v_mov_b32_e32 [[VVAL:v[0-9]+]], [[VAL]] |
| 39 | ; SI: buffer_store_dword [[VVAL]] |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 40 | define void @ngroups_z (i32 addrspace(1)* %out) { |
| 41 | entry: |
| 42 | %0 = call i32 @llvm.r600.read.ngroups.z() #0 |
| 43 | store i32 %0, i32 addrspace(1)* %out |
| 44 | ret void |
| 45 | } |
| 46 | |
Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 47 | ; FUNC-LABEL: {{^}}global_size_x: |
Jan Vesely | 3047950 | 2014-07-31 22:11:03 +0000 | [diff] [blame] | 48 | ; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]] |
| 49 | ; EG: MOV [[VAL]], KC0[0].W |
| 50 | |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 51 | ; SI: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0x3 |
| 52 | ; SI: v_mov_b32_e32 [[VVAL:v[0-9]+]], [[VAL]] |
| 53 | ; SI: buffer_store_dword [[VVAL]] |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 54 | define void @global_size_x (i32 addrspace(1)* %out) { |
| 55 | entry: |
| 56 | %0 = call i32 @llvm.r600.read.global.size.x() #0 |
| 57 | store i32 %0, i32 addrspace(1)* %out |
| 58 | ret void |
| 59 | } |
| 60 | |
Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 61 | ; FUNC-LABEL: {{^}}global_size_y: |
Jan Vesely | 3047950 | 2014-07-31 22:11:03 +0000 | [diff] [blame] | 62 | ; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]] |
| 63 | ; EG: MOV [[VAL]], KC0[1].X |
| 64 | |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 65 | ; SI: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0x4 |
| 66 | ; SI: v_mov_b32_e32 [[VVAL:v[0-9]+]], [[VAL]] |
| 67 | ; SI: buffer_store_dword [[VVAL]] |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 68 | define void @global_size_y (i32 addrspace(1)* %out) { |
| 69 | entry: |
| 70 | %0 = call i32 @llvm.r600.read.global.size.y() #0 |
| 71 | store i32 %0, i32 addrspace(1)* %out |
| 72 | ret void |
| 73 | } |
| 74 | |
Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 75 | ; FUNC-LABEL: {{^}}global_size_z: |
Jan Vesely | 3047950 | 2014-07-31 22:11:03 +0000 | [diff] [blame] | 76 | ; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]] |
| 77 | ; EG: MOV [[VAL]], KC0[1].Y |
| 78 | |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 79 | ; SI: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0x5 |
| 80 | ; SI: v_mov_b32_e32 [[VVAL:v[0-9]+]], [[VAL]] |
| 81 | ; SI: buffer_store_dword [[VVAL]] |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 82 | define void @global_size_z (i32 addrspace(1)* %out) { |
| 83 | entry: |
| 84 | %0 = call i32 @llvm.r600.read.global.size.z() #0 |
| 85 | store i32 %0, i32 addrspace(1)* %out |
| 86 | ret void |
| 87 | } |
| 88 | |
Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 89 | ; FUNC-LABEL: {{^}}local_size_x: |
Jan Vesely | 3047950 | 2014-07-31 22:11:03 +0000 | [diff] [blame] | 90 | ; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]] |
| 91 | ; EG: MOV [[VAL]], KC0[1].Z |
| 92 | |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 93 | ; SI: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0x6 |
| 94 | ; SI: v_mov_b32_e32 [[VVAL:v[0-9]+]], [[VAL]] |
| 95 | ; SI: buffer_store_dword [[VVAL]] |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 96 | define void @local_size_x (i32 addrspace(1)* %out) { |
| 97 | entry: |
| 98 | %0 = call i32 @llvm.r600.read.local.size.x() #0 |
| 99 | store i32 %0, i32 addrspace(1)* %out |
| 100 | ret void |
| 101 | } |
| 102 | |
Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 103 | ; FUNC-LABEL: {{^}}local_size_y: |
Jan Vesely | 3047950 | 2014-07-31 22:11:03 +0000 | [diff] [blame] | 104 | ; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]] |
| 105 | ; EG: MOV [[VAL]], KC0[1].W |
| 106 | |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 107 | ; SI: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0x7 |
| 108 | ; SI: v_mov_b32_e32 [[VVAL:v[0-9]+]], [[VAL]] |
| 109 | ; SI: buffer_store_dword [[VVAL]] |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 110 | define void @local_size_y (i32 addrspace(1)* %out) { |
| 111 | entry: |
| 112 | %0 = call i32 @llvm.r600.read.local.size.y() #0 |
| 113 | store i32 %0, i32 addrspace(1)* %out |
| 114 | ret void |
| 115 | } |
| 116 | |
Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 117 | ; FUNC-LABEL: {{^}}local_size_z: |
Jan Vesely | 3047950 | 2014-07-31 22:11:03 +0000 | [diff] [blame] | 118 | ; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]] |
| 119 | ; EG: MOV [[VAL]], KC0[2].X |
| 120 | |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 121 | ; SI: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0x8 |
| 122 | ; SI: v_mov_b32_e32 [[VVAL:v[0-9]+]], [[VAL]] |
| 123 | ; SI: buffer_store_dword [[VVAL]] |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 124 | define void @local_size_z (i32 addrspace(1)* %out) { |
| 125 | entry: |
| 126 | %0 = call i32 @llvm.r600.read.local.size.z() #0 |
| 127 | store i32 %0, i32 addrspace(1)* %out |
| 128 | ret void |
| 129 | } |
| 130 | |
Jan Vesely | e5121f3 | 2014-10-14 20:05:26 +0000 | [diff] [blame] | 131 | ; FUNC-LABEL: {{^}}get_work_dim: |
| 132 | ; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]] |
| 133 | ; EG: MOV [[VAL]], KC0[2].Z |
| 134 | |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 135 | ; SI: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0xb |
| 136 | ; SI: v_mov_b32_e32 [[VVAL:v[0-9]+]], [[VAL]] |
| 137 | ; SI: buffer_store_dword [[VVAL]] |
Jan Vesely | e5121f3 | 2014-10-14 20:05:26 +0000 | [diff] [blame] | 138 | define void @get_work_dim (i32 addrspace(1)* %out) { |
| 139 | entry: |
| 140 | %0 = call i32 @llvm.AMDGPU.read.workdim() #0 |
| 141 | store i32 %0, i32 addrspace(1)* %out |
| 142 | ret void |
| 143 | } |
| 144 | |
Tom Stellard | b02094e | 2014-07-21 15:45:01 +0000 | [diff] [blame] | 145 | ; The tgid values are stored in sgprs offset by the number of user sgprs. |
| 146 | ; Currently we always use exactly 2 user sgprs for the pointer to the |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 147 | ; kernel arguments, but this may change in the future. |
| 148 | |
Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 149 | ; FUNC-LABEL: {{^}}tgid_x: |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 150 | ; SI: v_mov_b32_e32 [[VVAL:v[0-9]+]], s4 |
| 151 | ; SI: buffer_store_dword [[VVAL]] |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 152 | define void @tgid_x (i32 addrspace(1)* %out) { |
| 153 | entry: |
| 154 | %0 = call i32 @llvm.r600.read.tgid.x() #0 |
| 155 | store i32 %0, i32 addrspace(1)* %out |
| 156 | ret void |
| 157 | } |
| 158 | |
Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 159 | ; FUNC-LABEL: {{^}}tgid_y: |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 160 | ; SI: v_mov_b32_e32 [[VVAL:v[0-9]+]], s5 |
| 161 | ; SI: buffer_store_dword [[VVAL]] |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 162 | define void @tgid_y (i32 addrspace(1)* %out) { |
| 163 | entry: |
| 164 | %0 = call i32 @llvm.r600.read.tgid.y() #0 |
| 165 | store i32 %0, i32 addrspace(1)* %out |
| 166 | ret void |
| 167 | } |
| 168 | |
Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 169 | ; FUNC-LABEL: {{^}}tgid_z: |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 170 | ; SI: v_mov_b32_e32 [[VVAL:v[0-9]+]], s6 |
| 171 | ; SI: buffer_store_dword [[VVAL]] |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 172 | define void @tgid_z (i32 addrspace(1)* %out) { |
| 173 | entry: |
| 174 | %0 = call i32 @llvm.r600.read.tgid.z() #0 |
| 175 | store i32 %0, i32 addrspace(1)* %out |
| 176 | ret void |
| 177 | } |
| 178 | |
Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 179 | ; FUNC-LABEL: {{^}}tidig_x: |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 180 | ; SI: buffer_store_dword v0 |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 181 | define void @tidig_x (i32 addrspace(1)* %out) { |
| 182 | entry: |
| 183 | %0 = call i32 @llvm.r600.read.tidig.x() #0 |
| 184 | store i32 %0, i32 addrspace(1)* %out |
| 185 | ret void |
| 186 | } |
| 187 | |
Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 188 | ; FUNC-LABEL: {{^}}tidig_y: |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 189 | ; SI: buffer_store_dword v1 |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 190 | define void @tidig_y (i32 addrspace(1)* %out) { |
| 191 | entry: |
| 192 | %0 = call i32 @llvm.r600.read.tidig.y() #0 |
| 193 | store i32 %0, i32 addrspace(1)* %out |
| 194 | ret void |
| 195 | } |
| 196 | |
Tom Stellard | 79243d9 | 2014-10-01 17:15:17 +0000 | [diff] [blame] | 197 | ; FUNC-LABEL: {{^}}tidig_z: |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame^] | 198 | ; SI: buffer_store_dword v2 |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 199 | define void @tidig_z (i32 addrspace(1)* %out) { |
| 200 | entry: |
| 201 | %0 = call i32 @llvm.r600.read.tidig.z() #0 |
| 202 | store i32 %0, i32 addrspace(1)* %out |
| 203 | ret void |
| 204 | } |
| 205 | |
| 206 | declare i32 @llvm.r600.read.ngroups.x() #0 |
| 207 | declare i32 @llvm.r600.read.ngroups.y() #0 |
| 208 | declare i32 @llvm.r600.read.ngroups.z() #0 |
| 209 | |
| 210 | declare i32 @llvm.r600.read.global.size.x() #0 |
| 211 | declare i32 @llvm.r600.read.global.size.y() #0 |
| 212 | declare i32 @llvm.r600.read.global.size.z() #0 |
| 213 | |
| 214 | declare i32 @llvm.r600.read.local.size.x() #0 |
| 215 | declare i32 @llvm.r600.read.local.size.y() #0 |
| 216 | declare i32 @llvm.r600.read.local.size.z() #0 |
| 217 | |
| 218 | declare i32 @llvm.r600.read.tgid.x() #0 |
| 219 | declare i32 @llvm.r600.read.tgid.y() #0 |
| 220 | declare i32 @llvm.r600.read.tgid.z() #0 |
| 221 | |
| 222 | declare i32 @llvm.r600.read.tidig.x() #0 |
| 223 | declare i32 @llvm.r600.read.tidig.y() #0 |
| 224 | declare i32 @llvm.r600.read.tidig.z() #0 |
| 225 | |
Jan Vesely | e5121f3 | 2014-10-14 20:05:26 +0000 | [diff] [blame] | 226 | declare i32 @llvm.AMDGPU.read.workdim() #0 |
| 227 | |
Tom Stellard | 94593ee | 2013-06-03 17:40:18 +0000 | [diff] [blame] | 228 | attributes #0 = { readnone } |