1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=fiji < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker@private = private addrspace(1) global [256 x i32] zeroinitializer 4*9880d681SAndroid Build Coastguard Worker@internal = internal addrspace(1) global [256 x i32] zeroinitializer 5*9880d681SAndroid Build Coastguard Worker@available_externally = available_externally addrspace(1) global [256 x i32] zeroinitializer 6*9880d681SAndroid Build Coastguard Worker@linkonce = linkonce addrspace(1) global [256 x i32] zeroinitializer 7*9880d681SAndroid Build Coastguard Worker@weak= weak addrspace(1) global [256 x i32] zeroinitializer 8*9880d681SAndroid Build Coastguard Worker@common = common addrspace(1) global [256 x i32] zeroinitializer 9*9880d681SAndroid Build Coastguard Worker@extern_weak = extern_weak addrspace(1) global [256 x i32] 10*9880d681SAndroid Build Coastguard Worker@linkonce_odr = linkonce_odr addrspace(1) global [256 x i32] zeroinitializer 11*9880d681SAndroid Build Coastguard Worker@weak_odr = weak_odr addrspace(1) global [256 x i32] zeroinitializer 12*9880d681SAndroid Build Coastguard Worker@external = external addrspace(1) global [256 x i32] 13*9880d681SAndroid Build Coastguard Worker@external_w_init = addrspace(1) global [256 x i32] zeroinitializer 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: private_test: 16*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}} 17*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[ADDR_LO:[0-9]+]], s[[PC_LO]], private+8 18*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[ADDR_HI:[0-9]+]], s[[PC_HI]], 0 19*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[ADDR_LO]] 20*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[ADDR_HI]] 21*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}} 22*9880d681SAndroid Build Coastguard Workerdefine void @private_test(i32 addrspace(1)* %out) { 23*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @private, i32 0, i32 1 24*9880d681SAndroid Build Coastguard Worker %val = load i32, i32 addrspace(1)* %ptr 25*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out 26*9880d681SAndroid Build Coastguard Worker ret void 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: internal_test: 30*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}} 31*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[ADDR_LO:[0-9]+]], s[[PC_LO]], internal+8 32*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[ADDR_HI:[0-9]+]], s[[PC_HI]], 0 33*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[ADDR_LO]] 34*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[ADDR_HI]] 35*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}} 36*9880d681SAndroid Build Coastguard Workerdefine void @internal_test(i32 addrspace(1)* %out) { 37*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @internal, i32 0, i32 1 38*9880d681SAndroid Build Coastguard Worker %val = load i32, i32 addrspace(1)* %ptr 39*9880d681SAndroid Build Coastguard Worker store i32 %val, 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 Worker; CHECK-LABEL: available_externally_test: 44*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}} 45*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], available_externally@GOTPCREL+4 46*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0 47*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0 48*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4 49*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0 50*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]] 51*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]] 52*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}} 53*9880d681SAndroid Build Coastguard Workerdefine void @available_externally_test(i32 addrspace(1)* %out) { 54*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @available_externally, i32 0, i32 1 55*9880d681SAndroid Build Coastguard Worker %val = load i32, i32 addrspace(1)* %ptr 56*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out 57*9880d681SAndroid Build Coastguard Worker ret void 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: linkonce_test: 61*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}} 62*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], linkonce@GOTPCREL+4 63*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0 64*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0 65*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4 66*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0 67*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]] 68*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]] 69*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}} 70*9880d681SAndroid Build Coastguard Workerdefine void @linkonce_test(i32 addrspace(1)* %out) { 71*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @linkonce, i32 0, i32 1 72*9880d681SAndroid Build Coastguard Worker %val = load i32, i32 addrspace(1)* %ptr 73*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out 74*9880d681SAndroid Build Coastguard Worker ret void 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: weak_test: 78*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}} 79*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], weak@GOTPCREL+4 80*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0 81*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0 82*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4 83*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0 84*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]] 85*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]] 86*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}} 87*9880d681SAndroid Build Coastguard Workerdefine void @weak_test(i32 addrspace(1)* %out) { 88*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @weak, i32 0, i32 1 89*9880d681SAndroid Build Coastguard Worker %val = load i32, i32 addrspace(1)* %ptr 90*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out 91*9880d681SAndroid Build Coastguard Worker ret void 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: common_test: 95*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}} 96*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], common@GOTPCREL+4 97*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0 98*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0 99*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4 100*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0 101*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]] 102*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]] 103*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}} 104*9880d681SAndroid Build Coastguard Workerdefine void @common_test(i32 addrspace(1)* %out) { 105*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @common, i32 0, i32 1 106*9880d681SAndroid Build Coastguard Worker %val = load i32, i32 addrspace(1)* %ptr 107*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out 108*9880d681SAndroid Build Coastguard Worker ret void 109*9880d681SAndroid Build Coastguard Worker} 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: extern_weak_test: 112*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}} 113*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], extern_weak@GOTPCREL+4 114*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0 115*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0 116*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4 117*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0 118*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]] 119*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]] 120*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}} 121*9880d681SAndroid Build Coastguard Workerdefine void @extern_weak_test(i32 addrspace(1)* %out) { 122*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @extern_weak, i32 0, i32 1 123*9880d681SAndroid Build Coastguard Worker %val = load i32, i32 addrspace(1)* %ptr 124*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out 125*9880d681SAndroid Build Coastguard Worker ret void 126*9880d681SAndroid Build Coastguard Worker} 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: linkonce_odr_test: 129*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}} 130*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], linkonce_odr@GOTPCREL+4 131*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0 132*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0 133*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4 134*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0 135*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]] 136*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]] 137*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}} 138*9880d681SAndroid Build Coastguard Workerdefine void @linkonce_odr_test(i32 addrspace(1)* %out) { 139*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @linkonce_odr, i32 0, i32 1 140*9880d681SAndroid Build Coastguard Worker %val = load i32, i32 addrspace(1)* %ptr 141*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out 142*9880d681SAndroid Build Coastguard Worker ret void 143*9880d681SAndroid Build Coastguard Worker} 144*9880d681SAndroid Build Coastguard Worker 145*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: weak_odr_test: 146*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}} 147*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], weak_odr@GOTPCREL+4 148*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0 149*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0 150*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4 151*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0 152*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]] 153*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]] 154*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}} 155*9880d681SAndroid Build Coastguard Workerdefine void @weak_odr_test(i32 addrspace(1)* %out) { 156*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @weak_odr, i32 0, i32 1 157*9880d681SAndroid Build Coastguard Worker %val = load i32, i32 addrspace(1)* %ptr 158*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out 159*9880d681SAndroid Build Coastguard Worker ret void 160*9880d681SAndroid Build Coastguard Worker} 161*9880d681SAndroid Build Coastguard Worker 162*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: external_test: 163*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}} 164*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], external@GOTPCREL+4 165*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0 166*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0 167*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4 168*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0 169*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]] 170*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]] 171*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}} 172*9880d681SAndroid Build Coastguard Workerdefine void @external_test(i32 addrspace(1)* %out) { 173*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @external, i32 0, i32 1 174*9880d681SAndroid Build Coastguard Worker %val = load i32, i32 addrspace(1)* %ptr 175*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out 176*9880d681SAndroid Build Coastguard Worker ret void 177*9880d681SAndroid Build Coastguard Worker} 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: external_w_init_test: 180*9880d681SAndroid Build Coastguard Worker; CHECK: s_getpc_b64 s{{\[}}[[PC_LO:[0-9]+]]:[[PC_HI:[0-9]+]]{{\]}} 181*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GOTADDR_LO:[0-9]+]], s[[PC_LO]], external_w_init@GOTPCREL+4 182*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GOTADDR_HI:[0-9]+]], s[[PC_HI]], 0 183*9880d681SAndroid Build Coastguard Worker; CHECK: s_load_dwordx2 s{{\[}}[[ADDR_LO:[0-9]+]]:[[ADDR_HI:[0-9]+]]{{\]}}, s{{\[}}[[GOTADDR_LO]]:[[GOTADDR_HI]]{{\]}}, 0x0 184*9880d681SAndroid Build Coastguard Worker; CHECK: s_add_u32 s[[GEP_LO:[0-9]+]], s[[ADDR_LO]], 4 185*9880d681SAndroid Build Coastguard Worker; CHECK: s_addc_u32 s[[GEP_HI:[0-9]+]], s[[ADDR_HI]], 0 186*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_LO:[0-9]+]], s[[GEP_LO]] 187*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: v_mov_b32_e32 v[[V_HI:[0-9]+]], s[[GEP_HI]] 188*9880d681SAndroid Build Coastguard Worker; CHECK: flat_load_dword v{{[0-9]+}}, v{{\[}}[[V_LO]]:[[V_HI]]{{\]}} 189*9880d681SAndroid Build Coastguard Workerdefine void @external_w_init_test(i32 addrspace(1)* %out) { 190*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr [256 x i32], [256 x i32] addrspace(1)* @external_w_init, i32 0, i32 1 191*9880d681SAndroid Build Coastguard Worker %val = load i32, i32 addrspace(1)* %ptr 192*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out 193*9880d681SAndroid Build Coastguard Worker ret void 194*9880d681SAndroid Build Coastguard Worker} 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Worker; CHECK: .local private 197*9880d681SAndroid Build Coastguard Worker; CHECK: .local internal 198*9880d681SAndroid Build Coastguard Worker; CHECK: .weak linkonce 199*9880d681SAndroid Build Coastguard Worker; CHECK: .weak weak 200*9880d681SAndroid Build Coastguard Worker; CHECK: .weak linkonce_odr 201*9880d681SAndroid Build Coastguard Worker; CHECK: .weak weak_odr 202*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: external{{$}} 203*9880d681SAndroid Build Coastguard Worker; CHECK: .globl external_w_init 204