1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mattr=+promote-alloca -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mattr=-promote-alloca -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; Pointer value is stored in a candidate for LDS usage. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}stored_lds_pointer_value: 7*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword v 8*9880d681SAndroid Build Coastguard Workerdefine void @stored_lds_pointer_value(float* addrspace(1)* %ptr) #0 { 9*9880d681SAndroid Build Coastguard Worker %tmp = alloca float 10*9880d681SAndroid Build Coastguard Worker store float 0.0, float *%tmp 11*9880d681SAndroid Build Coastguard Worker store float* %tmp, float* addrspace(1)* %ptr 12*9880d681SAndroid Build Coastguard Worker ret void 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}stored_lds_pointer_value_offset: 16*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword v 17*9880d681SAndroid Build Coastguard Workerdefine void @stored_lds_pointer_value_offset(float* addrspace(1)* %ptr) #0 { 18*9880d681SAndroid Build Coastguard Worker %tmp0 = alloca float 19*9880d681SAndroid Build Coastguard Worker %tmp1 = alloca float 20*9880d681SAndroid Build Coastguard Worker store float 0.0, float *%tmp0 21*9880d681SAndroid Build Coastguard Worker store float 0.0, float *%tmp1 22*9880d681SAndroid Build Coastguard Worker store volatile float* %tmp0, float* addrspace(1)* %ptr 23*9880d681SAndroid Build Coastguard Worker store volatile float* %tmp1, float* addrspace(1)* %ptr 24*9880d681SAndroid Build Coastguard Worker ret void 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}stored_lds_pointer_value_gep: 28*9880d681SAndroid Build Coastguard Worker; GCN-DAG: s_mov_b32 s{{[0-9]+}}, SCRATCH_RSRC_DWORD0 29*9880d681SAndroid Build Coastguard Worker; GCN-DAG: s_mov_b32 s{{[0-9]+}}, SCRATCH_RSRC_DWORD1 30*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword v 31*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword v 32*9880d681SAndroid Build Coastguard Workerdefine void @stored_lds_pointer_value_gep(float* addrspace(1)* %ptr, i32 %idx) #0 { 33*9880d681SAndroid Build Coastguard Workerbb: 34*9880d681SAndroid Build Coastguard Worker %tmp = alloca float, i32 16 35*9880d681SAndroid Build Coastguard Worker store float 0.0, float* %tmp 36*9880d681SAndroid Build Coastguard Worker %tmp2 = getelementptr inbounds float, float* %tmp, i32 %idx 37*9880d681SAndroid Build Coastguard Worker store float* %tmp2, float* addrspace(1)* %ptr 38*9880d681SAndroid Build Coastguard Worker ret void 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; Pointer value is stored in a candidate for vector usage 42*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}stored_vector_pointer_value: 43*9880d681SAndroid Build Coastguard Worker; GCN-DAG: s_mov_b32 s{{[0-9]+}}, SCRATCH_RSRC_DWORD0 44*9880d681SAndroid Build Coastguard Worker; GCN-DAG: s_mov_b32 s{{[0-9]+}}, SCRATCH_RSRC_DWORD1 45*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword 46*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword 47*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword 48*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword 49*9880d681SAndroid Build Coastguard Workerdefine void @stored_vector_pointer_value(i32* addrspace(1)* %out, i32 %index) { 50*9880d681SAndroid Build Coastguard Workerentry: 51*9880d681SAndroid Build Coastguard Worker %tmp0 = alloca [4 x i32] 52*9880d681SAndroid Build Coastguard Worker %x = getelementptr inbounds [4 x i32], [4 x i32]* %tmp0, i32 0, i32 0 53*9880d681SAndroid Build Coastguard Worker %y = getelementptr inbounds [4 x i32], [4 x i32]* %tmp0, i32 0, i32 1 54*9880d681SAndroid Build Coastguard Worker %z = getelementptr inbounds [4 x i32], [4 x i32]* %tmp0, i32 0, i32 2 55*9880d681SAndroid Build Coastguard Worker %w = getelementptr inbounds [4 x i32], [4 x i32]* %tmp0, i32 0, i32 3 56*9880d681SAndroid Build Coastguard Worker store i32 0, i32* %x 57*9880d681SAndroid Build Coastguard Worker store i32 1, i32* %y 58*9880d681SAndroid Build Coastguard Worker store i32 2, i32* %z 59*9880d681SAndroid Build Coastguard Worker store i32 3, i32* %w 60*9880d681SAndroid Build Coastguard Worker %tmp1 = getelementptr inbounds [4 x i32], [4 x i32]* %tmp0, i32 0, i32 %index 61*9880d681SAndroid Build Coastguard Worker store i32* %tmp1, i32* addrspace(1)* %out 62*9880d681SAndroid Build Coastguard Worker ret void 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}stored_fi_to_self: 66*9880d681SAndroid Build Coastguard Worker; GCN-NOT: ds_ 67*9880d681SAndroid Build Coastguard Workerdefine void @stored_fi_to_self() #0 { 68*9880d681SAndroid Build Coastguard Worker %tmp = alloca i32* 69*9880d681SAndroid Build Coastguard Worker store volatile i32* inttoptr (i32 1234 to i32*), i32** %tmp 70*9880d681SAndroid Build Coastguard Worker %bitcast = bitcast i32** %tmp to i32* 71*9880d681SAndroid Build Coastguard Worker store volatile i32* %bitcast, i32** %tmp 72*9880d681SAndroid Build Coastguard Worker ret void 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind } 76