1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=GCN -check-prefix=SI-NOHSA -check-prefix=GCN-NOHSA %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=VI -check-prefix=VI-NOHSA -check-prefix=GCN -check-prefix=GCN-NOHSA %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}read_workdim: 5*9880d681SAndroid Build Coastguard Worker; SI-NOHSA: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0xb 6*9880d681SAndroid Build Coastguard Worker; VI-NOHSA: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0x2c 7*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_mov_b32_e32 [[VVAL:v[0-9]+]], [[VAL]] 8*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dword [[VVAL]] 9*9880d681SAndroid Build Coastguard Workerdefine void @read_workdim(i32 addrspace(1)* %out) { 10*9880d681SAndroid Build Coastguard Workerentry: 11*9880d681SAndroid Build Coastguard Worker %0 = call i32 @llvm.amdgcn.read.workdim() #0 12*9880d681SAndroid Build Coastguard Worker store i32 %0, i32 addrspace(1)* %out 13*9880d681SAndroid Build Coastguard Worker ret void 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}read_workdim_known_bits: 17*9880d681SAndroid Build Coastguard Worker; SI: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0xb 18*9880d681SAndroid Build Coastguard Worker; VI: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0x2c 19*9880d681SAndroid Build Coastguard Worker; GCN-NOT: 0xff 20*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[VVAL:v[0-9]+]], [[VAL]] 21*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[VVAL]] 22*9880d681SAndroid Build Coastguard Workerdefine void @read_workdim_known_bits(i32 addrspace(1)* %out) { 23*9880d681SAndroid Build Coastguard Workerentry: 24*9880d681SAndroid Build Coastguard Worker %dim = call i32 @llvm.amdgcn.read.workdim() #0 25*9880d681SAndroid Build Coastguard Worker %shl = shl i32 %dim, 24 26*9880d681SAndroid Build Coastguard Worker %shr = lshr i32 %shl, 24 27*9880d681SAndroid Build Coastguard Worker store i32 %shr, i32 addrspace(1)* %out 28*9880d681SAndroid Build Coastguard Worker ret void 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}legacy_read_workdim: 32*9880d681SAndroid Build Coastguard Worker; SI-NOHSA: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0xb 33*9880d681SAndroid Build Coastguard Worker; VI-NOHSA: s_load_dword [[VAL:s[0-9]+]], s[0:1], 0x2c 34*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_mov_b32_e32 [[VVAL:v[0-9]+]], [[VAL]] 35*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dword [[VVAL]] 36*9880d681SAndroid Build Coastguard Workerdefine void @legacy_read_workdim(i32 addrspace(1)* %out) { 37*9880d681SAndroid Build Coastguard Workerentry: 38*9880d681SAndroid Build Coastguard Worker %dim = call i32 @llvm.AMDGPU.read.workdim() #0 39*9880d681SAndroid Build Coastguard Worker store i32 %dim, i32 addrspace(1)* %out 40*9880d681SAndroid Build Coastguard Worker ret void 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.amdgcn.read.workdim() #0 44*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.AMDGPU.read.workdim() #0 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind readnone } 47