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 5 define void @tgid_x(i32 addrspace(1)* %out) { 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 14 define void @tgid_y(i32 addrspace(1)* %out) { 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 23 define void @tgid_z(i32 addrspace(1)* %out) { 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 32 define void @tidig_x(i32 addrspace(1)* %out) { 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 41 define void @tidig_y(i32 addrspace(1)* %out) { 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 50 define void @tidig_z(i32 addrspace(1)* %out) { 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 60 define 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 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 72 define 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 78 ret void 79 } 80 81 82 83 ; DEPRECATED but R600 only 84 85 ; FUNC-LABEL: {{^}}workdim: 86 ; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]] 87 ; EG: MOV {{\*? *}}[[VAL]], KC0[2].Z 88 define void @workdim (i32 addrspace(1)* %out) { 89 entry: 90 %0 = call i32 @llvm.r600.read.workdim() #0 91 store i32 %0, i32 addrspace(1)* %out 92 ret void 93 } 94 95 declare i32 @llvm.r600.read.workdim() #0 96 97 declare i8 addrspace(7)* @llvm.r600.implicitarg.ptr() #0 98 99 declare i32 @llvm.r600.read.tgid.x() #0 100 declare i32 @llvm.r600.read.tgid.y() #0 101 declare i32 @llvm.r600.read.tgid.z() #0 102 103 declare i32 @llvm.r600.read.tidig.x() #0 104 declare i32 @llvm.r600.read.tidig.y() #0 105 declare i32 @llvm.r600.read.tidig.z() #0 106 107 attributes #0 = { readnone } 108