Jan Vesely | 2fa28c3 | 2016-07-10 21:20:29 +0000 | [diff] [blame] | 1 | ; 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 Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 5 | define amdgpu_kernel void @tgid_x(i32 addrspace(1)* %out) { |
Jan Vesely | 2fa28c3 | 2016-07-10 21:20:29 +0000 | [diff] [blame] | 6 | entry: |
| 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 Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 14 | define amdgpu_kernel void @tgid_y(i32 addrspace(1)* %out) { |
Jan Vesely | 2fa28c3 | 2016-07-10 21:20:29 +0000 | [diff] [blame] | 15 | entry: |
| 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 Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 23 | define amdgpu_kernel void @tgid_z(i32 addrspace(1)* %out) { |
Jan Vesely | 2fa28c3 | 2016-07-10 21:20:29 +0000 | [diff] [blame] | 24 | entry: |
| 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 Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 32 | define amdgpu_kernel void @tidig_x(i32 addrspace(1)* %out) { |
Jan Vesely | 2fa28c3 | 2016-07-10 21:20:29 +0000 | [diff] [blame] | 33 | entry: |
| 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 Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 41 | define amdgpu_kernel void @tidig_y(i32 addrspace(1)* %out) { |
Jan Vesely | 2fa28c3 | 2016-07-10 21:20:29 +0000 | [diff] [blame] | 42 | entry: |
| 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 Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 50 | define amdgpu_kernel void @tidig_z(i32 addrspace(1)* %out) { |
Jan Vesely | 2fa28c3 | 2016-07-10 21:20:29 +0000 | [diff] [blame] | 51 | entry: |
| 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 Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 60 | define amdgpu_kernel void @test_implicit(i32 addrspace(1)* %out) #1 { |
Jan Vesely | 2fa28c3 | 2016-07-10 21:20:29 +0000 | [diff] [blame] | 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 |
| 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 Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 72 | define amdgpu_kernel void @test_implicit_dyn(i32 addrspace(1)* %out, i32 %in) #1 { |
Jan Vesely | 2fa28c3 | 2016-07-10 21:20:29 +0000 | [diff] [blame] | 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 |
| 78 | ret void |
| 79 | } |
| 80 | |
Jan Vesely | 2fa28c3 | 2016-07-10 21:20:29 +0000 | [diff] [blame] | 81 | declare i8 addrspace(7)* @llvm.r600.implicitarg.ptr() #0 |
| 82 | |
| 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 |
| 86 | |
| 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 |
| 90 | |
| 91 | attributes #0 = { readnone } |