1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}tgid_x: 4*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW T1.X 5*9880d681SAndroid Build Coastguard Workerdefine void @tgid_x(i32 addrspace(1)* %out) { 6*9880d681SAndroid Build Coastguard Workerentry: 7*9880d681SAndroid Build Coastguard Worker %0 = call i32 @llvm.r600.read.tgid.x() #0 8*9880d681SAndroid Build Coastguard Worker store i32 %0, i32 addrspace(1)* %out 9*9880d681SAndroid Build Coastguard Worker ret void 10*9880d681SAndroid Build Coastguard Worker} 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}tgid_y: 13*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW T1.Y 14*9880d681SAndroid Build Coastguard Workerdefine void @tgid_y(i32 addrspace(1)* %out) { 15*9880d681SAndroid Build Coastguard Workerentry: 16*9880d681SAndroid Build Coastguard Worker %0 = call i32 @llvm.r600.read.tgid.y() #0 17*9880d681SAndroid Build Coastguard Worker store i32 %0, i32 addrspace(1)* %out 18*9880d681SAndroid Build Coastguard Worker ret void 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}tgid_z: 22*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW T1.Z 23*9880d681SAndroid Build Coastguard Workerdefine void @tgid_z(i32 addrspace(1)* %out) { 24*9880d681SAndroid Build Coastguard Workerentry: 25*9880d681SAndroid Build Coastguard Worker %0 = call i32 @llvm.r600.read.tgid.z() #0 26*9880d681SAndroid Build Coastguard Worker store i32 %0, i32 addrspace(1)* %out 27*9880d681SAndroid Build Coastguard Worker ret void 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}tidig_x: 31*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW T0.X 32*9880d681SAndroid Build Coastguard Workerdefine void @tidig_x(i32 addrspace(1)* %out) { 33*9880d681SAndroid Build Coastguard Workerentry: 34*9880d681SAndroid Build Coastguard Worker %0 = call i32 @llvm.r600.read.tidig.x() #0 35*9880d681SAndroid Build Coastguard Worker store i32 %0, i32 addrspace(1)* %out 36*9880d681SAndroid Build Coastguard Worker ret void 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}tidig_y: 40*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW T0.Y 41*9880d681SAndroid Build Coastguard Workerdefine void @tidig_y(i32 addrspace(1)* %out) { 42*9880d681SAndroid Build Coastguard Workerentry: 43*9880d681SAndroid Build Coastguard Worker %0 = call i32 @llvm.r600.read.tidig.y() #0 44*9880d681SAndroid Build Coastguard Worker store i32 %0, i32 addrspace(1)* %out 45*9880d681SAndroid Build Coastguard Worker ret void 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}tidig_z: 49*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW T0.Z 50*9880d681SAndroid Build Coastguard Workerdefine void @tidig_z(i32 addrspace(1)* %out) { 51*9880d681SAndroid Build Coastguard Workerentry: 52*9880d681SAndroid Build Coastguard Worker %0 = call i32 @llvm.r600.read.tidig.z() #0 53*9880d681SAndroid Build Coastguard Worker store i32 %0, i32 addrspace(1)* %out 54*9880d681SAndroid Build Coastguard Worker ret void 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_implicit: 58*9880d681SAndroid Build Coastguard Worker; 36 prepended implicit bytes + 4(out pointer) + 4*4 = 56 59*9880d681SAndroid Build Coastguard Worker; EG: VTX_READ_32 {{T[0-9]+\.[XYZW]}}, {{T[0-9]+\.[XYZW]}}, 56 60*9880d681SAndroid Build Coastguard Workerdefine void @test_implicit(i32 addrspace(1)* %out) #1 { 61*9880d681SAndroid Build Coastguard Worker %implicitarg.ptr = call noalias i8 addrspace(7)* @llvm.r600.implicitarg.ptr() 62*9880d681SAndroid Build Coastguard Worker %header.ptr = bitcast i8 addrspace(7)* %implicitarg.ptr to i32 addrspace(7)* 63*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(7)* %header.ptr, i32 4 64*9880d681SAndroid Build Coastguard Worker %value = load i32, i32 addrspace(7)* %gep 65*9880d681SAndroid Build Coastguard Worker store i32 %value, i32 addrspace(1)* %out 66*9880d681SAndroid Build Coastguard Worker ret void 67*9880d681SAndroid Build Coastguard Worker} 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_implicit_dyn: 70*9880d681SAndroid Build Coastguard Worker; 36 prepended implicit bytes + 8(out pointer + in) = 44 71*9880d681SAndroid Build Coastguard Worker; EG: VTX_READ_32 {{T[0-9]+\.[XYZW]}}, {{T[0-9]+\.[XYZW]}}, 44 72*9880d681SAndroid Build Coastguard Workerdefine void @test_implicit_dyn(i32 addrspace(1)* %out, i32 %in) #1 { 73*9880d681SAndroid Build Coastguard Worker %implicitarg.ptr = call noalias i8 addrspace(7)* @llvm.r600.implicitarg.ptr() 74*9880d681SAndroid Build Coastguard Worker %header.ptr = bitcast i8 addrspace(7)* %implicitarg.ptr to i32 addrspace(7)* 75*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(7)* %header.ptr, i32 %in 76*9880d681SAndroid Build Coastguard Worker %value = load i32, i32 addrspace(7)* %gep 77*9880d681SAndroid Build Coastguard Worker store i32 %value, i32 addrspace(1)* %out 78*9880d681SAndroid Build Coastguard Worker ret void 79*9880d681SAndroid Build Coastguard Worker} 80*9880d681SAndroid Build Coastguard Worker 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker; DEPRECATED but R600 only 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}workdim: 86*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+\.X]] 87*9880d681SAndroid Build Coastguard Worker; EG: MOV {{\*? *}}[[VAL]], KC0[2].Z 88*9880d681SAndroid Build Coastguard Workerdefine void @workdim (i32 addrspace(1)* %out) { 89*9880d681SAndroid Build Coastguard Workerentry: 90*9880d681SAndroid Build Coastguard Worker %0 = call i32 @llvm.r600.read.workdim() #0 91*9880d681SAndroid Build Coastguard Worker store i32 %0, i32 addrspace(1)* %out 92*9880d681SAndroid Build Coastguard Worker ret void 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.workdim() #0 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Workerdeclare i8 addrspace(7)* @llvm.r600.implicitarg.ptr() #0 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tgid.x() #0 100*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tgid.y() #0 101*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tgid.z() #0 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tidig.x() #0 104*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tidig.y() #0 105*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tidig.z() #0 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Workerattributes #0 = { readnone } 108