1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mtriple=amdgcn-amd-amdhsa -mattr=-promote-alloca -verify-machineinstrs < %s | FileCheck -check-prefix=HSA %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; HSA-LABEL: {{^}}use_group_to_flat_addrspacecast: 4*9880d681SAndroid Build Coastguard Worker; HSA: enable_sgpr_private_segment_buffer = 1 5*9880d681SAndroid Build Coastguard Worker; HSA: enable_sgpr_dispatch_ptr = 0 6*9880d681SAndroid Build Coastguard Worker; HSA: enable_sgpr_queue_ptr = 1 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; HSA-DAG: s_load_dword [[PTR:s[0-9]+]], s[6:7], 0x0{{$}} 9*9880d681SAndroid Build Coastguard Worker; HSA-DAG: s_load_dword [[APERTURE:s[0-9]+]], s[4:5], 0x10{{$}} 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 [[VAPERTURE:v[0-9]+]], [[APERTURE]] 12*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 [[VPTR:v[0-9]+]], [[PTR]] 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_cmp_ne_i32_e64 vcc, -1, [[PTR]] 15*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_cndmask_b32_e32 v[[HI:[0-9]+]], 0, [[VAPERTURE]] 16*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_cndmask_b32_e32 v[[LO:[0-9]+]], 0, [[VPTR]] 17*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 7 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker; HSA: flat_store_dword v{{\[}}[[LO]]:[[HI]]{{\]}}, [[K]] 20*9880d681SAndroid Build Coastguard Workerdefine void @use_group_to_flat_addrspacecast(i32 addrspace(3)* %ptr) #0 { 21*9880d681SAndroid Build Coastguard Worker %stof = addrspacecast i32 addrspace(3)* %ptr to i32 addrspace(4)* 22*9880d681SAndroid Build Coastguard Worker store volatile i32 7, i32 addrspace(4)* %stof 23*9880d681SAndroid Build Coastguard Worker ret void 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker; HSA-LABEL: {{^}}use_private_to_flat_addrspacecast: 27*9880d681SAndroid Build Coastguard Worker; HSA: enable_sgpr_private_segment_buffer = 1 28*9880d681SAndroid Build Coastguard Worker; HSA: enable_sgpr_dispatch_ptr = 0 29*9880d681SAndroid Build Coastguard Worker; HSA: enable_sgpr_queue_ptr = 1 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker; HSA-DAG: s_load_dword [[PTR:s[0-9]+]], s[6:7], 0x0{{$}} 32*9880d681SAndroid Build Coastguard Worker; HSA-DAG: s_load_dword [[APERTURE:s[0-9]+]], s[4:5], 0x11{{$}} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 [[VAPERTURE:v[0-9]+]], [[APERTURE]] 35*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 [[VPTR:v[0-9]+]], [[PTR]] 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_cmp_ne_i32_e64 vcc, -1, [[PTR]] 38*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_cndmask_b32_e32 v[[HI:[0-9]+]], 0, [[VAPERTURE]] 39*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_cndmask_b32_e32 v[[LO:[0-9]+]], 0, [[VPTR]] 40*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 7 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker; HSA: flat_store_dword v{{\[}}[[LO]]:[[HI]]{{\]}}, [[K]] 43*9880d681SAndroid Build Coastguard Workerdefine void @use_private_to_flat_addrspacecast(i32* %ptr) #0 { 44*9880d681SAndroid Build Coastguard Worker %stof = addrspacecast i32* %ptr to i32 addrspace(4)* 45*9880d681SAndroid Build Coastguard Worker store volatile i32 7, i32 addrspace(4)* %stof 46*9880d681SAndroid Build Coastguard Worker ret void 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker; no-op 50*9880d681SAndroid Build Coastguard Worker; HSA-LABEL: {{^}}use_global_to_flat_addrspacecast: 51*9880d681SAndroid Build Coastguard Worker; HSA: enable_sgpr_queue_ptr = 0 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker; HSA: s_load_dwordx2 s{{\[}}[[PTRLO:[0-9]+]]:[[PTRHI:[0-9]+]]{{\]}} 54*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[VPTRLO:[0-9]+]], s[[PTRLO]] 55*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[VPTRHI:[0-9]+]], s[[PTRHI]] 56*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 7 57*9880d681SAndroid Build Coastguard Worker; HSA: flat_store_dword v{{\[}}[[VPTRLO]]:[[VPTRHI]]{{\]}}, [[K]] 58*9880d681SAndroid Build Coastguard Workerdefine void @use_global_to_flat_addrspacecast(i32 addrspace(1)* %ptr) #0 { 59*9880d681SAndroid Build Coastguard Worker %stof = addrspacecast i32 addrspace(1)* %ptr to i32 addrspace(4)* 60*9880d681SAndroid Build Coastguard Worker store volatile i32 7, i32 addrspace(4)* %stof 61*9880d681SAndroid Build Coastguard Worker ret void 62*9880d681SAndroid Build Coastguard Worker} 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker; no-op 65*9880d681SAndroid Build Coastguard Worker; HSA-LABEl: {{^}}use_constant_to_flat_addrspacecast: 66*9880d681SAndroid Build Coastguard Worker; HSA: s_load_dwordx2 s{{\[}}[[PTRLO:[0-9]+]]:[[PTRHI:[0-9]+]]{{\]}} 67*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[VPTRLO:[0-9]+]], s[[PTRLO]] 68*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[VPTRHI:[0-9]+]], s[[PTRHI]] 69*9880d681SAndroid Build Coastguard Worker; HSA: flat_load_dword v{{[0-9]+}}, v{{\[}}[[VPTRLO]]:[[VPTRHI]]{{\]}} 70*9880d681SAndroid Build Coastguard Workerdefine void @use_constant_to_flat_addrspacecast(i32 addrspace(2)* %ptr) #0 { 71*9880d681SAndroid Build Coastguard Worker %stof = addrspacecast i32 addrspace(2)* %ptr to i32 addrspace(4)* 72*9880d681SAndroid Build Coastguard Worker %ld = load volatile i32, i32 addrspace(4)* %stof 73*9880d681SAndroid Build Coastguard Worker ret void 74*9880d681SAndroid Build Coastguard Worker} 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Worker; HSA-LABEL: {{^}}use_flat_to_group_addrspacecast: 77*9880d681SAndroid Build Coastguard Worker; HSA: enable_sgpr_private_segment_buffer = 1 78*9880d681SAndroid Build Coastguard Worker; HSA: enable_sgpr_dispatch_ptr = 0 79*9880d681SAndroid Build Coastguard Worker; HSA: enable_sgpr_queue_ptr = 0 80*9880d681SAndroid Build Coastguard Worker 81*9880d681SAndroid Build Coastguard Worker; HSA: s_load_dwordx2 s{{\[}}[[PTR_LO:[0-9]+]]:[[PTR_HI:[0-9]+]]{{\]}} 82*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_cmp_ne_i64_e64 vcc, 0, s{{\[}}[[PTR_LO]]:[[PTR_HI]]{{\]}} 83*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[VPTR_LO:[0-9]+]], s[[PTR_LO]] 84*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_cndmask_b32_e32 [[CASTPTR:v[0-9]+]], -1, v[[VPTR_LO]] 85*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[K:[0-9]+]], 0{{$}} 86*9880d681SAndroid Build Coastguard Worker; HSA: ds_write_b32 [[CASTPTR]], v[[K]] 87*9880d681SAndroid Build Coastguard Workerdefine void @use_flat_to_group_addrspacecast(i32 addrspace(4)* %ptr) #0 { 88*9880d681SAndroid Build Coastguard Worker %ftos = addrspacecast i32 addrspace(4)* %ptr to i32 addrspace(3)* 89*9880d681SAndroid Build Coastguard Worker store volatile i32 0, i32 addrspace(3)* %ftos 90*9880d681SAndroid Build Coastguard Worker ret void 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Worker; HSA-LABEL: {{^}}use_flat_to_private_addrspacecast: 94*9880d681SAndroid Build Coastguard Worker; HSA: enable_sgpr_private_segment_buffer = 1 95*9880d681SAndroid Build Coastguard Worker; HSA: enable_sgpr_dispatch_ptr = 0 96*9880d681SAndroid Build Coastguard Worker; HSA: enable_sgpr_queue_ptr = 0 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Worker; HSA: s_load_dwordx2 s{{\[}}[[PTR_LO:[0-9]+]]:[[PTR_HI:[0-9]+]]{{\]}} 99*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_cmp_ne_i64_e64 vcc, 0, s{{\[}}[[PTR_LO]]:[[PTR_HI]]{{\]}} 100*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[VPTR_LO:[0-9]+]], s[[PTR_LO]] 101*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_cndmask_b32_e32 [[CASTPTR:v[0-9]+]], -1, v[[VPTR_LO]] 102*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[K:[0-9]+]], 0{{$}} 103*9880d681SAndroid Build Coastguard Worker; HSA: buffer_store_dword v[[K]], [[CASTPTR]], s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}} offen{{$}} 104*9880d681SAndroid Build Coastguard Workerdefine void @use_flat_to_private_addrspacecast(i32 addrspace(4)* %ptr) #0 { 105*9880d681SAndroid Build Coastguard Worker %ftos = addrspacecast i32 addrspace(4)* %ptr to i32* 106*9880d681SAndroid Build Coastguard Worker store volatile i32 0, i32* %ftos 107*9880d681SAndroid Build Coastguard Worker ret void 108*9880d681SAndroid Build Coastguard Worker} 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Worker; HSA-LABEL: {{^}}use_flat_to_global_addrspacecast: 111*9880d681SAndroid Build Coastguard Worker; HSA: enable_sgpr_queue_ptr = 0 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Worker; HSA: s_load_dwordx2 s{{\[}}[[PTRLO:[0-9]+]]:[[PTRHI:[0-9]+]]{{\]}}, s[4:5], 0x0 114*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[VPTRLO:[0-9]+]], s[[PTRLO]] 115*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[VPTRHI:[0-9]+]], s[[PTRHI]] 116*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 0 117*9880d681SAndroid Build Coastguard Worker; HSA: flat_store_dword v{{\[}}[[VPTRLO]]:[[VPTRHI]]{{\]}}, [[K]] 118*9880d681SAndroid Build Coastguard Workerdefine void @use_flat_to_global_addrspacecast(i32 addrspace(4)* %ptr) #0 { 119*9880d681SAndroid Build Coastguard Worker %ftos = addrspacecast i32 addrspace(4)* %ptr to i32 addrspace(1)* 120*9880d681SAndroid Build Coastguard Worker store volatile i32 0, i32 addrspace(1)* %ftos 121*9880d681SAndroid Build Coastguard Worker ret void 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Worker; HSA-LABEL: {{^}}use_flat_to_constant_addrspacecast: 125*9880d681SAndroid Build Coastguard Worker; HSA: enable_sgpr_queue_ptr = 0 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker; HSA: s_load_dwordx2 s{{\[}}[[PTRLO:[0-9]+]]:[[PTRHI:[0-9]+]]{{\]}}, s[4:5], 0x0 128*9880d681SAndroid Build Coastguard Worker; HSA: s_load_dword s{{[0-9]+}}, s{{\[}}[[PTRLO]]:[[PTRHI]]{{\]}}, 0x0 129*9880d681SAndroid Build Coastguard Workerdefine void @use_flat_to_constant_addrspacecast(i32 addrspace(4)* %ptr) #0 { 130*9880d681SAndroid Build Coastguard Worker %ftos = addrspacecast i32 addrspace(4)* %ptr to i32 addrspace(2)* 131*9880d681SAndroid Build Coastguard Worker load volatile i32, i32 addrspace(2)* %ftos 132*9880d681SAndroid Build Coastguard Worker ret void 133*9880d681SAndroid Build Coastguard Worker} 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Worker; HSA-LABEL: {{^}}cast_0_group_to_flat_addrspacecast: 136*9880d681SAndroid Build Coastguard Worker; HSA: s_load_dword [[APERTURE:s[0-9]+]], s[4:5], 0x10 137*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], [[APERTURE]] 138*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}} 139*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[K:[0-9]+]], 7{{$}} 140*9880d681SAndroid Build Coastguard Worker; HSA: flat_store_dword v{{\[}}[[LO]]:[[HI]]{{\]}}, v[[K]] 141*9880d681SAndroid Build Coastguard Workerdefine void @cast_0_group_to_flat_addrspacecast() #0 { 142*9880d681SAndroid Build Coastguard Worker %cast = addrspacecast i32 addrspace(3)* null to i32 addrspace(4)* 143*9880d681SAndroid Build Coastguard Worker store i32 7, i32 addrspace(4)* %cast 144*9880d681SAndroid Build Coastguard Worker ret void 145*9880d681SAndroid Build Coastguard Worker} 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Worker; HSA-LABEL: {{^}}cast_0_flat_to_group_addrspacecast: 148*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 [[PTR:v[0-9]+]], -1{{$}} 149*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 7{{$}} 150*9880d681SAndroid Build Coastguard Worker; HSA: ds_write_b32 [[PTR]], [[K]] 151*9880d681SAndroid Build Coastguard Workerdefine void @cast_0_flat_to_group_addrspacecast() #0 { 152*9880d681SAndroid Build Coastguard Worker %cast = addrspacecast i32 addrspace(4)* null to i32 addrspace(3)* 153*9880d681SAndroid Build Coastguard Worker store i32 7, i32 addrspace(3)* %cast 154*9880d681SAndroid Build Coastguard Worker ret void 155*9880d681SAndroid Build Coastguard Worker} 156*9880d681SAndroid Build Coastguard Worker 157*9880d681SAndroid Build Coastguard Worker; HSA-LABEL: {{^}}cast_neg1_group_to_flat_addrspacecast: 158*9880d681SAndroid Build Coastguard Worker; HSA: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}} 159*9880d681SAndroid Build Coastguard Worker; HSA: v_mov_b32_e32 v[[K:[0-9]+]], 7{{$}} 160*9880d681SAndroid Build Coastguard Worker; HSA: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}} 161*9880d681SAndroid Build Coastguard Worker; HSA: flat_store_dword v{{\[}}[[LO]]:[[HI]]{{\]}}, v[[K]] 162*9880d681SAndroid Build Coastguard Workerdefine void @cast_neg1_group_to_flat_addrspacecast() #0 { 163*9880d681SAndroid Build Coastguard Worker %cast = addrspacecast i32 addrspace(3)* inttoptr (i32 -1 to i32 addrspace(3)*) to i32 addrspace(4)* 164*9880d681SAndroid Build Coastguard Worker store i32 7, i32 addrspace(4)* %cast 165*9880d681SAndroid Build Coastguard Worker ret void 166*9880d681SAndroid Build Coastguard Worker} 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Worker; HSA-LABEL: {{^}}cast_neg1_flat_to_group_addrspacecast: 169*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 [[PTR:v[0-9]+]], -1{{$}} 170*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 7{{$}} 171*9880d681SAndroid Build Coastguard Worker; HSA: ds_write_b32 [[PTR]], [[K]] 172*9880d681SAndroid Build Coastguard Workerdefine void @cast_neg1_flat_to_group_addrspacecast() #0 { 173*9880d681SAndroid Build Coastguard Worker %cast = addrspacecast i32 addrspace(4)* inttoptr (i64 -1 to i32 addrspace(4)*) to i32 addrspace(3)* 174*9880d681SAndroid Build Coastguard Worker store i32 7, i32 addrspace(3)* %cast 175*9880d681SAndroid Build Coastguard Worker ret void 176*9880d681SAndroid Build Coastguard Worker} 177*9880d681SAndroid Build Coastguard Worker 178*9880d681SAndroid Build Coastguard Worker; HSA-LABEL: {{^}}cast_0_private_to_flat_addrspacecast: 179*9880d681SAndroid Build Coastguard Worker; HSA: s_load_dword [[APERTURE:s[0-9]+]], s[4:5], 0x11 180*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], [[APERTURE]] 181*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}} 182*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 v[[K:[0-9]+]], 7{{$}} 183*9880d681SAndroid Build Coastguard Worker; HSA: flat_store_dword v{{\[}}[[LO]]:[[HI]]{{\]}}, v[[K]] 184*9880d681SAndroid Build Coastguard Workerdefine void @cast_0_private_to_flat_addrspacecast() #0 { 185*9880d681SAndroid Build Coastguard Worker %cast = addrspacecast i32* null to i32 addrspace(4)* 186*9880d681SAndroid Build Coastguard Worker store i32 7, i32 addrspace(4)* %cast 187*9880d681SAndroid Build Coastguard Worker ret void 188*9880d681SAndroid Build Coastguard Worker} 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Worker; HSA-LABEL: {{^}}cast_0_flat_to_private_addrspacecast: 191*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 [[PTR:v[0-9]+]], -1{{$}} 192*9880d681SAndroid Build Coastguard Worker; HSA-DAG: v_mov_b32_e32 [[K:v[0-9]+]], 7{{$}} 193*9880d681SAndroid Build Coastguard Worker; HSA: buffer_store_dword [[K]], [[PTR]], s{{\[[0-9]+:[0-9]+\]}}, s{{[0-9]+}} offen 194*9880d681SAndroid Build Coastguard Workerdefine void @cast_0_flat_to_private_addrspacecast() #0 { 195*9880d681SAndroid Build Coastguard Worker %cast = addrspacecast i32 addrspace(4)* null to i32 addrspace(0)* 196*9880d681SAndroid Build Coastguard Worker store i32 7, i32* %cast 197*9880d681SAndroid Build Coastguard Worker ret void 198*9880d681SAndroid Build Coastguard Worker} 199*9880d681SAndroid Build Coastguard Worker 200*9880d681SAndroid Build Coastguard Worker; Disable optimizations in case there are optimizations added that 201*9880d681SAndroid Build Coastguard Worker; specialize away generic pointer accesses. 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Worker; HSA-LABEL: {{^}}branch_use_flat_i32: 204*9880d681SAndroid Build Coastguard Worker; HSA: flat_store_dword {{v\[[0-9]+:[0-9]+\]}}, {{v[0-9]+}} 205*9880d681SAndroid Build Coastguard Worker; HSA: s_endpgm 206*9880d681SAndroid Build Coastguard Workerdefine void @branch_use_flat_i32(i32 addrspace(1)* noalias %out, i32 addrspace(1)* %gptr, i32 addrspace(3)* %lptr, i32 %x, i32 %c) #0 { 207*9880d681SAndroid Build Coastguard Workerentry: 208*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i32 %c, 0 209*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %local, label %global 210*9880d681SAndroid Build Coastguard Worker 211*9880d681SAndroid Build Coastguard Workerlocal: 212*9880d681SAndroid Build Coastguard Worker %flat_local = addrspacecast i32 addrspace(3)* %lptr to i32 addrspace(4)* 213*9880d681SAndroid Build Coastguard Worker br label %end 214*9880d681SAndroid Build Coastguard Worker 215*9880d681SAndroid Build Coastguard Workerglobal: 216*9880d681SAndroid Build Coastguard Worker %flat_global = addrspacecast i32 addrspace(1)* %gptr to i32 addrspace(4)* 217*9880d681SAndroid Build Coastguard Worker br label %end 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Workerend: 220*9880d681SAndroid Build Coastguard Worker %fptr = phi i32 addrspace(4)* [ %flat_local, %local ], [ %flat_global, %global ] 221*9880d681SAndroid Build Coastguard Worker store i32 %x, i32 addrspace(4)* %fptr, align 4 222*9880d681SAndroid Build Coastguard Worker; %val = load i32, i32 addrspace(4)* %fptr, align 4 223*9880d681SAndroid Build Coastguard Worker; store i32 %val, i32 addrspace(1)* %out, align 4 224*9880d681SAndroid Build Coastguard Worker ret void 225*9880d681SAndroid Build Coastguard Worker} 226*9880d681SAndroid Build Coastguard Worker 227*9880d681SAndroid Build Coastguard Worker; Check for prologue initializing special SGPRs pointing to scratch. 228*9880d681SAndroid Build Coastguard Worker; HSA-LABEL: {{^}}store_flat_scratch: 229*9880d681SAndroid Build Coastguard Worker; HSA-DAG: s_mov_b32 flat_scratch_lo, s9 230*9880d681SAndroid Build Coastguard Worker; HSA-DAG: s_add_u32 [[ADD:s[0-9]+]], s8, s11 231*9880d681SAndroid Build Coastguard Worker; HSA: s_lshr_b32 flat_scratch_hi, [[ADD]], 8 232*9880d681SAndroid Build Coastguard Worker; HSA: flat_store_dword 233*9880d681SAndroid Build Coastguard Worker; HSA: s_barrier 234*9880d681SAndroid Build Coastguard Worker; HSA: flat_load_dword 235*9880d681SAndroid Build Coastguard Workerdefine void @store_flat_scratch(i32 addrspace(1)* noalias %out, i32) #0 { 236*9880d681SAndroid Build Coastguard Worker %alloca = alloca i32, i32 9, align 4 237*9880d681SAndroid Build Coastguard Worker %x = call i32 @llvm.amdgcn.workitem.id.x() #2 238*9880d681SAndroid Build Coastguard Worker %pptr = getelementptr i32, i32* %alloca, i32 %x 239*9880d681SAndroid Build Coastguard Worker %fptr = addrspacecast i32* %pptr to i32 addrspace(4)* 240*9880d681SAndroid Build Coastguard Worker store i32 %x, i32 addrspace(4)* %fptr 241*9880d681SAndroid Build Coastguard Worker ; Dummy call 242*9880d681SAndroid Build Coastguard Worker call void @llvm.amdgcn.s.barrier() #1 243*9880d681SAndroid Build Coastguard Worker %reload = load i32, i32 addrspace(4)* %fptr, align 4 244*9880d681SAndroid Build Coastguard Worker store i32 %reload, i32 addrspace(1)* %out, align 4 245*9880d681SAndroid Build Coastguard Worker ret void 246*9880d681SAndroid Build Coastguard Worker} 247*9880d681SAndroid Build Coastguard Worker 248*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.amdgcn.s.barrier() #1 249*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.amdgcn.workitem.id.x() #2 250*9880d681SAndroid Build Coastguard Worker 251*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind } 252*9880d681SAndroid Build Coastguard Workerattributes #1 = { nounwind convergent } 253*9880d681SAndroid Build Coastguard Workerattributes #2 = { nounwind readnone } 254