1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=SI -check-prefix=FUNC %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=VI -check-prefix=FUNC %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_offset: 5*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_add v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}} 6*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_offset(i32 addrspace(1)* %out, i32 %in) { 7*9880d681SAndroid Build Coastguard Workerentry: 8*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 9*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst 10*9880d681SAndroid Build Coastguard Worker ret void 11*9880d681SAndroid Build Coastguard Worker} 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_soffset: 14*9880d681SAndroid Build Coastguard Worker; GCN: s_mov_b32 [[SREG:s[0-9]+]], 0x8ca0 15*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_add v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], [[SREG]]{{$}} 16*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_soffset(i32 addrspace(1)* %out, i32 %in) { 17*9880d681SAndroid Build Coastguard Workerentry: 18*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 9000 19*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst 20*9880d681SAndroid Build Coastguard Worker ret void 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_huge_offset: 24*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mov_b32_e32 v[[PTRLO:[0-9]+]], 0xdeac 25*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mov_b32_e32 v[[PTRHI:[0-9]+]], 0xabcd 26*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_add v{{[0-9]+}}, v{{\[}}[[PTRLO]]:[[PTRHI]]{{\]}}, s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}} 27*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_add 28*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_huge_offset(i32 addrspace(1)* %out, i32 %in) { 29*9880d681SAndroid Build Coastguard Workerentry: 30*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 47224239175595 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst 33*9880d681SAndroid Build Coastguard Worker ret void 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_ret_offset: 37*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_add [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}} 38*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 39*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 40*9880d681SAndroid Build Coastguard Workerentry: 41*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 42*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst 43*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 44*9880d681SAndroid Build Coastguard Worker ret void 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_addr64_offset: 48*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_add v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}} 49*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 50*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) { 51*9880d681SAndroid Build Coastguard Workerentry: 52*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 53*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 54*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst 55*9880d681SAndroid Build Coastguard Worker ret void 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_ret_addr64_offset: 59*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}} 60*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 61*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 62*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 63*9880d681SAndroid Build Coastguard Workerentry: 64*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 65*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 66*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst 67*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 68*9880d681SAndroid Build Coastguard Worker ret void 69*9880d681SAndroid Build Coastguard Worker} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32: 72*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_add v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}} 73*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32(i32 addrspace(1)* %out, i32 %in) { 74*9880d681SAndroid Build Coastguard Workerentry: 75*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile add i32 addrspace(1)* %out, i32 %in seq_cst 76*9880d681SAndroid Build Coastguard Worker ret void 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_ret: 80*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_add [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc 81*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 82*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 83*9880d681SAndroid Build Coastguard Workerentry: 84*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile add i32 addrspace(1)* %out, i32 %in seq_cst 85*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 86*9880d681SAndroid Build Coastguard Worker ret void 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_addr64: 90*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_add v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}} 91*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 92*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) { 93*9880d681SAndroid Build Coastguard Workerentry: 94*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 95*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile add i32 addrspace(1)* %ptr, i32 %in seq_cst 96*9880d681SAndroid Build Coastguard Worker ret void 97*9880d681SAndroid Build Coastguard Worker} 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_ret_addr64: 100*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}} 101*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 102*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 103*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 104*9880d681SAndroid Build Coastguard Workerentry: 105*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 106*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile add i32 addrspace(1)* %ptr, i32 %in seq_cst 107*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 108*9880d681SAndroid Build Coastguard Worker ret void 109*9880d681SAndroid Build Coastguard Worker} 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32_offset: 112*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_and v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}} 113*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32_offset(i32 addrspace(1)* %out, i32 %in) { 114*9880d681SAndroid Build Coastguard Workerentry: 115*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 116*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst 117*9880d681SAndroid Build Coastguard Worker ret void 118*9880d681SAndroid Build Coastguard Worker} 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32_ret_offset: 121*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_and [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}} 122*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 123*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 124*9880d681SAndroid Build Coastguard Workerentry: 125*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 126*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst 127*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 128*9880d681SAndroid Build Coastguard Worker ret void 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32_addr64_offset: 132*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_and v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}} 133*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 134*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) { 135*9880d681SAndroid Build Coastguard Workerentry: 136*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 137*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 138*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst 139*9880d681SAndroid Build Coastguard Worker ret void 140*9880d681SAndroid Build Coastguard Worker} 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32_ret_addr64_offset: 143*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_and [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}} 144*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_and [[RET:v[0-9]]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 145*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 146*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 147*9880d681SAndroid Build Coastguard Workerentry: 148*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 149*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 150*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst 151*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 152*9880d681SAndroid Build Coastguard Worker ret void 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32: 156*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_and v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}} 157*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32(i32 addrspace(1)* %out, i32 %in) { 158*9880d681SAndroid Build Coastguard Workerentry: 159*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile and i32 addrspace(1)* %out, i32 %in seq_cst 160*9880d681SAndroid Build Coastguard Worker ret void 161*9880d681SAndroid Build Coastguard Worker} 162*9880d681SAndroid Build Coastguard Worker 163*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32_ret: 164*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_and [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc 165*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 166*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 167*9880d681SAndroid Build Coastguard Workerentry: 168*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile and i32 addrspace(1)* %out, i32 %in seq_cst 169*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 170*9880d681SAndroid Build Coastguard Worker ret void 171*9880d681SAndroid Build Coastguard Worker} 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32_addr64: 174*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_and v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}} 175*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 176*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) { 177*9880d681SAndroid Build Coastguard Workerentry: 178*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 179*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile and i32 addrspace(1)* %ptr, i32 %in seq_cst 180*9880d681SAndroid Build Coastguard Worker ret void 181*9880d681SAndroid Build Coastguard Worker} 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32_ret_addr64: 184*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_and [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}} 185*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_and [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 186*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 187*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 188*9880d681SAndroid Build Coastguard Workerentry: 189*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 190*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile and i32 addrspace(1)* %ptr, i32 %in seq_cst 191*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 192*9880d681SAndroid Build Coastguard Worker ret void 193*9880d681SAndroid Build Coastguard Worker} 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32_offset: 196*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_sub v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}} 197*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32_offset(i32 addrspace(1)* %out, i32 %in) { 198*9880d681SAndroid Build Coastguard Workerentry: 199*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 200*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst 201*9880d681SAndroid Build Coastguard Worker ret void 202*9880d681SAndroid Build Coastguard Worker} 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32_ret_offset: 205*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_sub [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}} 206*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 207*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 208*9880d681SAndroid Build Coastguard Workerentry: 209*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 210*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst 211*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 212*9880d681SAndroid Build Coastguard Worker ret void 213*9880d681SAndroid Build Coastguard Worker} 214*9880d681SAndroid Build Coastguard Worker 215*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32_addr64_offset: 216*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_sub v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}} 217*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 218*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) { 219*9880d681SAndroid Build Coastguard Workerentry: 220*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 221*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 222*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst 223*9880d681SAndroid Build Coastguard Worker ret void 224*9880d681SAndroid Build Coastguard Worker} 225*9880d681SAndroid Build Coastguard Worker 226*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32_ret_addr64_offset: 227*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}} 228*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 229*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 230*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 231*9880d681SAndroid Build Coastguard Workerentry: 232*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 233*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 234*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst 235*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 236*9880d681SAndroid Build Coastguard Worker ret void 237*9880d681SAndroid Build Coastguard Worker} 238*9880d681SAndroid Build Coastguard Worker 239*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32: 240*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_sub v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}} 241*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32(i32 addrspace(1)* %out, i32 %in) { 242*9880d681SAndroid Build Coastguard Workerentry: 243*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile sub i32 addrspace(1)* %out, i32 %in seq_cst 244*9880d681SAndroid Build Coastguard Worker ret void 245*9880d681SAndroid Build Coastguard Worker} 246*9880d681SAndroid Build Coastguard Worker 247*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32_ret: 248*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_sub [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc 249*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 250*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 251*9880d681SAndroid Build Coastguard Workerentry: 252*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile sub i32 addrspace(1)* %out, i32 %in seq_cst 253*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 254*9880d681SAndroid Build Coastguard Worker ret void 255*9880d681SAndroid Build Coastguard Worker} 256*9880d681SAndroid Build Coastguard Worker 257*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32_addr64: 258*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_sub v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}} 259*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 260*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) { 261*9880d681SAndroid Build Coastguard Workerentry: 262*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 263*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile sub i32 addrspace(1)* %ptr, i32 %in seq_cst 264*9880d681SAndroid Build Coastguard Worker ret void 265*9880d681SAndroid Build Coastguard Worker} 266*9880d681SAndroid Build Coastguard Worker 267*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32_ret_addr64: 268*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}} 269*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 270*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 271*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 272*9880d681SAndroid Build Coastguard Workerentry: 273*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 274*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile sub i32 addrspace(1)* %ptr, i32 %in seq_cst 275*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 276*9880d681SAndroid Build Coastguard Worker ret void 277*9880d681SAndroid Build Coastguard Worker} 278*9880d681SAndroid Build Coastguard Worker 279*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32_offset: 280*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}} 281*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32_offset(i32 addrspace(1)* %out, i32 %in) { 282*9880d681SAndroid Build Coastguard Workerentry: 283*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 284*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst 285*9880d681SAndroid Build Coastguard Worker ret void 286*9880d681SAndroid Build Coastguard Worker} 287*9880d681SAndroid Build Coastguard Worker 288*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32_ret_offset: 289*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}} 290*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 291*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 292*9880d681SAndroid Build Coastguard Workerentry: 293*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 294*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst 295*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 296*9880d681SAndroid Build Coastguard Worker ret void 297*9880d681SAndroid Build Coastguard Worker} 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32_addr64_offset: 300*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smax v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}} 301*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 302*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) { 303*9880d681SAndroid Build Coastguard Workerentry: 304*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 305*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 306*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst 307*9880d681SAndroid Build Coastguard Worker ret void 308*9880d681SAndroid Build Coastguard Worker} 309*9880d681SAndroid Build Coastguard Worker 310*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32_ret_addr64_offset: 311*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}} 312*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 313*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 314*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 315*9880d681SAndroid Build Coastguard Workerentry: 316*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 317*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 318*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst 319*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 320*9880d681SAndroid Build Coastguard Worker ret void 321*9880d681SAndroid Build Coastguard Worker} 322*9880d681SAndroid Build Coastguard Worker 323*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32: 324*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}} 325*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32(i32 addrspace(1)* %out, i32 %in) { 326*9880d681SAndroid Build Coastguard Workerentry: 327*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile max i32 addrspace(1)* %out, i32 %in seq_cst 328*9880d681SAndroid Build Coastguard Worker ret void 329*9880d681SAndroid Build Coastguard Worker} 330*9880d681SAndroid Build Coastguard Worker 331*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32_ret: 332*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc 333*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 334*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 335*9880d681SAndroid Build Coastguard Workerentry: 336*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile max i32 addrspace(1)* %out, i32 %in seq_cst 337*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 338*9880d681SAndroid Build Coastguard Worker ret void 339*9880d681SAndroid Build Coastguard Worker} 340*9880d681SAndroid Build Coastguard Worker 341*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32_addr64: 342*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smax v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}} 343*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 344*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) { 345*9880d681SAndroid Build Coastguard Workerentry: 346*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 347*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile max i32 addrspace(1)* %ptr, i32 %in seq_cst 348*9880d681SAndroid Build Coastguard Worker ret void 349*9880d681SAndroid Build Coastguard Worker} 350*9880d681SAndroid Build Coastguard Worker 351*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32_ret_addr64: 352*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}} 353*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 354*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 355*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 356*9880d681SAndroid Build Coastguard Workerentry: 357*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 358*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile max i32 addrspace(1)* %ptr, i32 %in seq_cst 359*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 360*9880d681SAndroid Build Coastguard Worker ret void 361*9880d681SAndroid Build Coastguard Worker} 362*9880d681SAndroid Build Coastguard Worker 363*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32_offset: 364*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_umax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}} 365*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32_offset(i32 addrspace(1)* %out, i32 %in) { 366*9880d681SAndroid Build Coastguard Workerentry: 367*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 368*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst 369*9880d681SAndroid Build Coastguard Worker ret void 370*9880d681SAndroid Build Coastguard Worker} 371*9880d681SAndroid Build Coastguard Worker 372*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32_ret_offset: 373*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_umax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}} 374*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 375*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 376*9880d681SAndroid Build Coastguard Workerentry: 377*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 378*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst 379*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 380*9880d681SAndroid Build Coastguard Worker ret void 381*9880d681SAndroid Build Coastguard Worker} 382*9880d681SAndroid Build Coastguard Worker 383*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32_addr64_offset: 384*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umax v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}} 385*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 386*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) { 387*9880d681SAndroid Build Coastguard Workerentry: 388*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 389*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 390*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst 391*9880d681SAndroid Build Coastguard Worker ret void 392*9880d681SAndroid Build Coastguard Worker} 393*9880d681SAndroid Build Coastguard Worker 394*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32_ret_addr64_offset: 395*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}} 396*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 397*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 398*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 399*9880d681SAndroid Build Coastguard Workerentry: 400*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 401*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 402*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst 403*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 404*9880d681SAndroid Build Coastguard Worker ret void 405*9880d681SAndroid Build Coastguard Worker} 406*9880d681SAndroid Build Coastguard Worker 407*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32: 408*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_umax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}} 409*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32(i32 addrspace(1)* %out, i32 %in) { 410*9880d681SAndroid Build Coastguard Workerentry: 411*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umax i32 addrspace(1)* %out, i32 %in seq_cst 412*9880d681SAndroid Build Coastguard Worker ret void 413*9880d681SAndroid Build Coastguard Worker} 414*9880d681SAndroid Build Coastguard Worker 415*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32_ret: 416*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_umax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc 417*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 418*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 419*9880d681SAndroid Build Coastguard Workerentry: 420*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umax i32 addrspace(1)* %out, i32 %in seq_cst 421*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 422*9880d681SAndroid Build Coastguard Worker ret void 423*9880d681SAndroid Build Coastguard Worker} 424*9880d681SAndroid Build Coastguard Worker 425*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32_addr64: 426*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umax v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}} 427*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 428*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) { 429*9880d681SAndroid Build Coastguard Workerentry: 430*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 431*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umax i32 addrspace(1)* %ptr, i32 %in seq_cst 432*9880d681SAndroid Build Coastguard Worker ret void 433*9880d681SAndroid Build Coastguard Worker} 434*9880d681SAndroid Build Coastguard Worker 435*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32_ret_addr64: 436*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}} 437*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 438*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 439*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 440*9880d681SAndroid Build Coastguard Workerentry: 441*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 442*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umax i32 addrspace(1)* %ptr, i32 %in seq_cst 443*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 444*9880d681SAndroid Build Coastguard Worker ret void 445*9880d681SAndroid Build Coastguard Worker} 446*9880d681SAndroid Build Coastguard Worker 447*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32_offset: 448*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}} 449*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32_offset(i32 addrspace(1)* %out, i32 %in) { 450*9880d681SAndroid Build Coastguard Workerentry: 451*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 452*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst 453*9880d681SAndroid Build Coastguard Worker ret void 454*9880d681SAndroid Build Coastguard Worker} 455*9880d681SAndroid Build Coastguard Worker 456*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32_ret_offset: 457*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}} 458*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 459*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 460*9880d681SAndroid Build Coastguard Workerentry: 461*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 462*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst 463*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 464*9880d681SAndroid Build Coastguard Worker ret void 465*9880d681SAndroid Build Coastguard Worker} 466*9880d681SAndroid Build Coastguard Worker 467*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32_addr64_offset: 468*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smin v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}} 469*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 470*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) { 471*9880d681SAndroid Build Coastguard Workerentry: 472*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 473*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 474*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst 475*9880d681SAndroid Build Coastguard Worker ret void 476*9880d681SAndroid Build Coastguard Worker} 477*9880d681SAndroid Build Coastguard Worker 478*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32_ret_addr64_offset: 479*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}} 480*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 481*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 482*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 483*9880d681SAndroid Build Coastguard Workerentry: 484*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 485*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 486*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst 487*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 488*9880d681SAndroid Build Coastguard Worker ret void 489*9880d681SAndroid Build Coastguard Worker} 490*9880d681SAndroid Build Coastguard Worker 491*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32: 492*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}} 493*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32(i32 addrspace(1)* %out, i32 %in) { 494*9880d681SAndroid Build Coastguard Workerentry: 495*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile min i32 addrspace(1)* %out, i32 %in seq_cst 496*9880d681SAndroid Build Coastguard Worker ret void 497*9880d681SAndroid Build Coastguard Worker} 498*9880d681SAndroid Build Coastguard Worker 499*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32_ret: 500*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc 501*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 502*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 503*9880d681SAndroid Build Coastguard Workerentry: 504*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile min i32 addrspace(1)* %out, i32 %in seq_cst 505*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 506*9880d681SAndroid Build Coastguard Worker ret void 507*9880d681SAndroid Build Coastguard Worker} 508*9880d681SAndroid Build Coastguard Worker 509*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32_addr64: 510*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smin v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}} 511*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 512*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) { 513*9880d681SAndroid Build Coastguard Workerentry: 514*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 515*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile min i32 addrspace(1)* %ptr, i32 %in seq_cst 516*9880d681SAndroid Build Coastguard Worker ret void 517*9880d681SAndroid Build Coastguard Worker} 518*9880d681SAndroid Build Coastguard Worker 519*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32_ret_addr64: 520*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}} 521*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 522*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 523*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 524*9880d681SAndroid Build Coastguard Workerentry: 525*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 526*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile min i32 addrspace(1)* %ptr, i32 %in seq_cst 527*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 528*9880d681SAndroid Build Coastguard Worker ret void 529*9880d681SAndroid Build Coastguard Worker} 530*9880d681SAndroid Build Coastguard Worker 531*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32_offset: 532*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_umin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}} 533*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32_offset(i32 addrspace(1)* %out, i32 %in) { 534*9880d681SAndroid Build Coastguard Workerentry: 535*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 536*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst 537*9880d681SAndroid Build Coastguard Worker ret void 538*9880d681SAndroid Build Coastguard Worker} 539*9880d681SAndroid Build Coastguard Worker 540*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32_ret_offset: 541*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_umin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}} 542*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 543*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 544*9880d681SAndroid Build Coastguard Workerentry: 545*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 546*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst 547*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 548*9880d681SAndroid Build Coastguard Worker ret void 549*9880d681SAndroid Build Coastguard Worker} 550*9880d681SAndroid Build Coastguard Worker 551*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32_addr64_offset: 552*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umin v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}} 553*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 554*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) { 555*9880d681SAndroid Build Coastguard Workerentry: 556*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 557*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 558*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst 559*9880d681SAndroid Build Coastguard Worker ret void 560*9880d681SAndroid Build Coastguard Worker} 561*9880d681SAndroid Build Coastguard Worker 562*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32_ret_addr64_offset: 563*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}} 564*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 565*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 566*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 567*9880d681SAndroid Build Coastguard Workerentry: 568*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 569*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 570*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst 571*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 572*9880d681SAndroid Build Coastguard Worker ret void 573*9880d681SAndroid Build Coastguard Worker} 574*9880d681SAndroid Build Coastguard Worker 575*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32: 576*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_umin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}} 577*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32(i32 addrspace(1)* %out, i32 %in) { 578*9880d681SAndroid Build Coastguard Workerentry: 579*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umin i32 addrspace(1)* %out, i32 %in seq_cst 580*9880d681SAndroid Build Coastguard Worker ret void 581*9880d681SAndroid Build Coastguard Worker} 582*9880d681SAndroid Build Coastguard Worker 583*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32_ret: 584*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc 585*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 586*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 587*9880d681SAndroid Build Coastguard Workerentry: 588*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umin i32 addrspace(1)* %out, i32 %in seq_cst 589*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 590*9880d681SAndroid Build Coastguard Worker ret void 591*9880d681SAndroid Build Coastguard Worker} 592*9880d681SAndroid Build Coastguard Worker 593*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32_addr64: 594*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umin v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}} 595*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 596*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) { 597*9880d681SAndroid Build Coastguard Workerentry: 598*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 599*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umin i32 addrspace(1)* %ptr, i32 %in seq_cst 600*9880d681SAndroid Build Coastguard Worker ret void 601*9880d681SAndroid Build Coastguard Worker} 602*9880d681SAndroid Build Coastguard Worker 603*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32_ret_addr64: 604*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}} 605*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 606*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 607*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 608*9880d681SAndroid Build Coastguard Workerentry: 609*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 610*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile umin i32 addrspace(1)* %ptr, i32 %in seq_cst 611*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 612*9880d681SAndroid Build Coastguard Worker ret void 613*9880d681SAndroid Build Coastguard Worker} 614*9880d681SAndroid Build Coastguard Worker 615*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32_offset: 616*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_or v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}} 617*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32_offset(i32 addrspace(1)* %out, i32 %in) { 618*9880d681SAndroid Build Coastguard Workerentry: 619*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 620*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst 621*9880d681SAndroid Build Coastguard Worker ret void 622*9880d681SAndroid Build Coastguard Worker} 623*9880d681SAndroid Build Coastguard Worker 624*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32_ret_offset: 625*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_or [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}} 626*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 627*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 628*9880d681SAndroid Build Coastguard Workerentry: 629*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 630*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst 631*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 632*9880d681SAndroid Build Coastguard Worker ret void 633*9880d681SAndroid Build Coastguard Worker} 634*9880d681SAndroid Build Coastguard Worker 635*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32_addr64_offset: 636*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_or v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}} 637*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 638*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) { 639*9880d681SAndroid Build Coastguard Workerentry: 640*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 641*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 642*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst 643*9880d681SAndroid Build Coastguard Worker ret void 644*9880d681SAndroid Build Coastguard Worker} 645*9880d681SAndroid Build Coastguard Worker 646*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32_ret_addr64_offset: 647*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}} 648*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 649*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 650*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 651*9880d681SAndroid Build Coastguard Workerentry: 652*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 653*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 654*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst 655*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 656*9880d681SAndroid Build Coastguard Worker ret void 657*9880d681SAndroid Build Coastguard Worker} 658*9880d681SAndroid Build Coastguard Worker 659*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32: 660*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_or v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}} 661*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32(i32 addrspace(1)* %out, i32 %in) { 662*9880d681SAndroid Build Coastguard Workerentry: 663*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile or i32 addrspace(1)* %out, i32 %in seq_cst 664*9880d681SAndroid Build Coastguard Worker ret void 665*9880d681SAndroid Build Coastguard Worker} 666*9880d681SAndroid Build Coastguard Worker 667*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32_ret: 668*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_or [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc 669*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 670*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 671*9880d681SAndroid Build Coastguard Workerentry: 672*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile or i32 addrspace(1)* %out, i32 %in seq_cst 673*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 674*9880d681SAndroid Build Coastguard Worker ret void 675*9880d681SAndroid Build Coastguard Worker} 676*9880d681SAndroid Build Coastguard Worker 677*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32_addr64: 678*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_or v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}} 679*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 680*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) { 681*9880d681SAndroid Build Coastguard Workerentry: 682*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 683*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile or i32 addrspace(1)* %ptr, i32 %in seq_cst 684*9880d681SAndroid Build Coastguard Worker ret void 685*9880d681SAndroid Build Coastguard Worker} 686*9880d681SAndroid Build Coastguard Worker 687*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32_ret_addr64: 688*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}} 689*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 690*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 691*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 692*9880d681SAndroid Build Coastguard Workerentry: 693*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 694*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile or i32 addrspace(1)* %ptr, i32 %in seq_cst 695*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 696*9880d681SAndroid Build Coastguard Worker ret void 697*9880d681SAndroid Build Coastguard Worker} 698*9880d681SAndroid Build Coastguard Worker 699*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32_offset: 700*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_swap v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}} 701*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32_offset(i32 addrspace(1)* %out, i32 %in) { 702*9880d681SAndroid Build Coastguard Workerentry: 703*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 704*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst 705*9880d681SAndroid Build Coastguard Worker ret void 706*9880d681SAndroid Build Coastguard Worker} 707*9880d681SAndroid Build Coastguard Worker 708*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32_ret_offset: 709*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_swap [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}} 710*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 711*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 712*9880d681SAndroid Build Coastguard Workerentry: 713*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 714*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst 715*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 716*9880d681SAndroid Build Coastguard Worker ret void 717*9880d681SAndroid Build Coastguard Worker} 718*9880d681SAndroid Build Coastguard Worker 719*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32_addr64_offset: 720*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_swap v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}} 721*9880d681SAndroid Build Coastguard Worker 722*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}{{$}} 723*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) { 724*9880d681SAndroid Build Coastguard Workerentry: 725*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 726*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 727*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst 728*9880d681SAndroid Build Coastguard Worker ret void 729*9880d681SAndroid Build Coastguard Worker} 730*9880d681SAndroid Build Coastguard Worker 731*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32_ret_addr64_offset: 732*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}} 733*9880d681SAndroid Build Coastguard Worker 734*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 735*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 736*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 737*9880d681SAndroid Build Coastguard Workerentry: 738*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 739*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 740*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst 741*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 742*9880d681SAndroid Build Coastguard Worker ret void 743*9880d681SAndroid Build Coastguard Worker} 744*9880d681SAndroid Build Coastguard Worker 745*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32: 746*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_swap v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}} 747*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32(i32 addrspace(1)* %out, i32 %in) { 748*9880d681SAndroid Build Coastguard Workerentry: 749*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xchg i32 addrspace(1)* %out, i32 %in seq_cst 750*9880d681SAndroid Build Coastguard Worker ret void 751*9880d681SAndroid Build Coastguard Worker} 752*9880d681SAndroid Build Coastguard Worker 753*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32_ret: 754*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_swap [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc 755*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 756*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 757*9880d681SAndroid Build Coastguard Workerentry: 758*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xchg i32 addrspace(1)* %out, i32 %in seq_cst 759*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 760*9880d681SAndroid Build Coastguard Worker ret void 761*9880d681SAndroid Build Coastguard Worker} 762*9880d681SAndroid Build Coastguard Worker 763*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32_addr64: 764*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_swap v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}} 765*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 766*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) { 767*9880d681SAndroid Build Coastguard Workerentry: 768*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 769*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xchg i32 addrspace(1)* %ptr, i32 %in seq_cst 770*9880d681SAndroid Build Coastguard Worker ret void 771*9880d681SAndroid Build Coastguard Worker} 772*9880d681SAndroid Build Coastguard Worker 773*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32_ret_addr64: 774*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}} 775*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 776*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 777*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 778*9880d681SAndroid Build Coastguard Workerentry: 779*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 780*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xchg i32 addrspace(1)* %ptr, i32 %in seq_cst 781*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 782*9880d681SAndroid Build Coastguard Worker ret void 783*9880d681SAndroid Build Coastguard Worker} 784*9880d681SAndroid Build Coastguard Worker 785*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_offset: 786*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_cmpswap v[{{[0-9]+}}:{{[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}} 787*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32_offset(i32 addrspace(1)* %out, i32 %in, i32 %old) { 788*9880d681SAndroid Build Coastguard Workerentry: 789*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 790*9880d681SAndroid Build Coastguard Worker %val = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst 791*9880d681SAndroid Build Coastguard Worker ret void 792*9880d681SAndroid Build Coastguard Worker} 793*9880d681SAndroid Build Coastguard Worker 794*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_ret_offset: 795*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_cmpswap v{{\[}}[[RET:[0-9]+]]{{:[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}} 796*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword v[[RET]] 797*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i32 %old) { 798*9880d681SAndroid Build Coastguard Workerentry: 799*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 800*9880d681SAndroid Build Coastguard Worker %val = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst 801*9880d681SAndroid Build Coastguard Worker %extract0 = extractvalue { i32, i1 } %val, 0 802*9880d681SAndroid Build Coastguard Worker store i32 %extract0, i32 addrspace(1)* %out2 803*9880d681SAndroid Build Coastguard Worker ret void 804*9880d681SAndroid Build Coastguard Worker} 805*9880d681SAndroid Build Coastguard Worker 806*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_addr64_offset: 807*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}} 808*9880d681SAndroid Build Coastguard Worker 809*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}} 810*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index, i32 %old) { 811*9880d681SAndroid Build Coastguard Workerentry: 812*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 813*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 814*9880d681SAndroid Build Coastguard Worker %val = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst 815*9880d681SAndroid Build Coastguard Worker ret void 816*9880d681SAndroid Build Coastguard Worker} 817*9880d681SAndroid Build Coastguard Worker 818*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_ret_addr64_offset: 819*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_cmpswap v{{\[}}[[RET:[0-9]+]]:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}} 820*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}} 821*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword v[[RET]] 822*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index, i32 %old) { 823*9880d681SAndroid Build Coastguard Workerentry: 824*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 825*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 826*9880d681SAndroid Build Coastguard Worker %val = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst 827*9880d681SAndroid Build Coastguard Worker %extract0 = extractvalue { i32, i1 } %val, 0 828*9880d681SAndroid Build Coastguard Worker store i32 %extract0, i32 addrspace(1)* %out2 829*9880d681SAndroid Build Coastguard Worker ret void 830*9880d681SAndroid Build Coastguard Worker} 831*9880d681SAndroid Build Coastguard Worker 832*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32: 833*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}} 834*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32(i32 addrspace(1)* %out, i32 %in, i32 %old) { 835*9880d681SAndroid Build Coastguard Workerentry: 836*9880d681SAndroid Build Coastguard Worker %val = cmpxchg volatile i32 addrspace(1)* %out, i32 %old, i32 %in seq_cst seq_cst 837*9880d681SAndroid Build Coastguard Worker ret void 838*9880d681SAndroid Build Coastguard Worker} 839*9880d681SAndroid Build Coastguard Worker 840*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_ret: 841*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_cmpswap v{{\[}}[[RET:[0-9]+]]:{{[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc 842*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword v[[RET]] 843*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i32 %old) { 844*9880d681SAndroid Build Coastguard Workerentry: 845*9880d681SAndroid Build Coastguard Worker %val = cmpxchg volatile i32 addrspace(1)* %out, i32 %old, i32 %in seq_cst seq_cst 846*9880d681SAndroid Build Coastguard Worker %extract0 = extractvalue { i32, i1 } %val, 0 847*9880d681SAndroid Build Coastguard Worker store i32 %extract0, i32 addrspace(1)* %out2 848*9880d681SAndroid Build Coastguard Worker ret void 849*9880d681SAndroid Build Coastguard Worker} 850*9880d681SAndroid Build Coastguard Worker 851*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_addr64: 852*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}} 853*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}]{{$}} 854*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index, i32 %old) { 855*9880d681SAndroid Build Coastguard Workerentry: 856*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 857*9880d681SAndroid Build Coastguard Worker %val = cmpxchg volatile i32 addrspace(1)* %ptr, i32 %old, i32 %in seq_cst seq_cst 858*9880d681SAndroid Build Coastguard Worker ret void 859*9880d681SAndroid Build Coastguard Worker} 860*9880d681SAndroid Build Coastguard Worker 861*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_ret_addr64: 862*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_cmpswap v{{\[}}[[RET:[0-9]+]]:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}} 863*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}} 864*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword v[[RET]] 865*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index, i32 %old) { 866*9880d681SAndroid Build Coastguard Workerentry: 867*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 868*9880d681SAndroid Build Coastguard Worker %val = cmpxchg volatile i32 addrspace(1)* %ptr, i32 %old, i32 %in seq_cst seq_cst 869*9880d681SAndroid Build Coastguard Worker %extract0 = extractvalue { i32, i1 } %val, 0 870*9880d681SAndroid Build Coastguard Worker store i32 %extract0, i32 addrspace(1)* %out2 871*9880d681SAndroid Build Coastguard Worker ret void 872*9880d681SAndroid Build Coastguard Worker} 873*9880d681SAndroid Build Coastguard Worker 874*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32_offset: 875*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_xor v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}} 876*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32_offset(i32 addrspace(1)* %out, i32 %in) { 877*9880d681SAndroid Build Coastguard Workerentry: 878*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 879*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst 880*9880d681SAndroid Build Coastguard Worker ret void 881*9880d681SAndroid Build Coastguard Worker} 882*9880d681SAndroid Build Coastguard Worker 883*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32_ret_offset: 884*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_xor [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}} 885*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 886*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 887*9880d681SAndroid Build Coastguard Workerentry: 888*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 889*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst 890*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 891*9880d681SAndroid Build Coastguard Worker ret void 892*9880d681SAndroid Build Coastguard Worker} 893*9880d681SAndroid Build Coastguard Worker 894*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32_addr64_offset: 895*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_xor v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}} 896*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 897*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) { 898*9880d681SAndroid Build Coastguard Workerentry: 899*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 900*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 901*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst 902*9880d681SAndroid Build Coastguard Worker ret void 903*9880d681SAndroid Build Coastguard Worker} 904*9880d681SAndroid Build Coastguard Worker 905*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32_ret_addr64_offset: 906*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}} 907*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 908*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 909*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 910*9880d681SAndroid Build Coastguard Workerentry: 911*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 912*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 913*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst 914*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 915*9880d681SAndroid Build Coastguard Worker ret void 916*9880d681SAndroid Build Coastguard Worker} 917*9880d681SAndroid Build Coastguard Worker 918*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32: 919*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_xor v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}} 920*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32(i32 addrspace(1)* %out, i32 %in) { 921*9880d681SAndroid Build Coastguard Workerentry: 922*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xor i32 addrspace(1)* %out, i32 %in seq_cst 923*9880d681SAndroid Build Coastguard Worker ret void 924*9880d681SAndroid Build Coastguard Worker} 925*9880d681SAndroid Build Coastguard Worker 926*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32_ret: 927*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_xor [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc 928*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 929*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) { 930*9880d681SAndroid Build Coastguard Workerentry: 931*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xor i32 addrspace(1)* %out, i32 %in seq_cst 932*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 933*9880d681SAndroid Build Coastguard Worker ret void 934*9880d681SAndroid Build Coastguard Worker} 935*9880d681SAndroid Build Coastguard Worker 936*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32_addr64: 937*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_xor v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}} 938*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}} 939*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) { 940*9880d681SAndroid Build Coastguard Workerentry: 941*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 942*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xor i32 addrspace(1)* %ptr, i32 %in seq_cst 943*9880d681SAndroid Build Coastguard Worker ret void 944*9880d681SAndroid Build Coastguard Worker} 945*9880d681SAndroid Build Coastguard Worker 946*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32_ret_addr64: 947*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}} 948*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}} 949*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 950*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) { 951*9880d681SAndroid Build Coastguard Workerentry: 952*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 953*9880d681SAndroid Build Coastguard Worker %val = atomicrmw volatile xor i32 addrspace(1)* %ptr, i32 %in seq_cst 954*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out2 955*9880d681SAndroid Build Coastguard Worker ret void 956*9880d681SAndroid Build Coastguard Worker} 957*9880d681SAndroid Build Coastguard Worker 958*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_load_i32_offset: 959*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dword [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}} 960*9880d681SAndroid Build Coastguard Worker; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] glc{{$}} 961*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 962*9880d681SAndroid Build Coastguard Workerdefine void @atomic_load_i32_offset(i32 addrspace(1)* %in, i32 addrspace(1)* %out) { 963*9880d681SAndroid Build Coastguard Workerentry: 964*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %in, i64 4 965*9880d681SAndroid Build Coastguard Worker %val = load atomic i32, i32 addrspace(1)* %gep seq_cst, align 4 966*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out 967*9880d681SAndroid Build Coastguard Worker ret void 968*9880d681SAndroid Build Coastguard Worker} 969*9880d681SAndroid Build Coastguard Worker 970*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_load_i32: 971*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dword [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc 972*9880d681SAndroid Build Coastguard Worker; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] glc 973*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 974*9880d681SAndroid Build Coastguard Workerdefine void @atomic_load_i32(i32 addrspace(1)* %in, i32 addrspace(1)* %out) { 975*9880d681SAndroid Build Coastguard Workerentry: 976*9880d681SAndroid Build Coastguard Worker %val = load atomic i32, i32 addrspace(1)* %in seq_cst, align 4 977*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out 978*9880d681SAndroid Build Coastguard Worker ret void 979*9880d681SAndroid Build Coastguard Worker} 980*9880d681SAndroid Build Coastguard Worker 981*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_load_i32_addr64_offset: 982*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}} 983*9880d681SAndroid Build Coastguard Worker; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] glc{{$}} 984*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 985*9880d681SAndroid Build Coastguard Workerdefine void @atomic_load_i32_addr64_offset(i32 addrspace(1)* %in, i32 addrspace(1)* %out, i64 %index) { 986*9880d681SAndroid Build Coastguard Workerentry: 987*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %in, i64 %index 988*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 989*9880d681SAndroid Build Coastguard Worker %val = load atomic i32, i32 addrspace(1)* %gep seq_cst, align 4 990*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out 991*9880d681SAndroid Build Coastguard Worker ret void 992*9880d681SAndroid Build Coastguard Worker} 993*9880d681SAndroid Build Coastguard Worker 994*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_load_i32_addr64: 995*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}} 996*9880d681SAndroid Build Coastguard Worker; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] glc{{$}} 997*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]] 998*9880d681SAndroid Build Coastguard Workerdefine void @atomic_load_i32_addr64(i32 addrspace(1)* %in, i32 addrspace(1)* %out, i64 %index) { 999*9880d681SAndroid Build Coastguard Workerentry: 1000*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %in, i64 %index 1001*9880d681SAndroid Build Coastguard Worker %val = load atomic i32, i32 addrspace(1)* %ptr seq_cst, align 4 1002*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out 1003*9880d681SAndroid Build Coastguard Worker ret void 1004*9880d681SAndroid Build Coastguard Worker} 1005*9880d681SAndroid Build Coastguard Worker 1006*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_store_i32_offset: 1007*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword {{v[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}} 1008*9880d681SAndroid Build Coastguard Worker; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}} 1009*9880d681SAndroid Build Coastguard Workerdefine void @atomic_store_i32_offset(i32 %in, i32 addrspace(1)* %out) { 1010*9880d681SAndroid Build Coastguard Workerentry: 1011*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4 1012*9880d681SAndroid Build Coastguard Worker store atomic i32 %in, i32 addrspace(1)* %gep seq_cst, align 4 1013*9880d681SAndroid Build Coastguard Worker ret void 1014*9880d681SAndroid Build Coastguard Worker} 1015*9880d681SAndroid Build Coastguard Worker 1016*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_store_i32: 1017*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword {{v[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc{{$}} 1018*9880d681SAndroid Build Coastguard Worker; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}} 1019*9880d681SAndroid Build Coastguard Workerdefine void @atomic_store_i32(i32 %in, i32 addrspace(1)* %out) { 1020*9880d681SAndroid Build Coastguard Workerentry: 1021*9880d681SAndroid Build Coastguard Worker store atomic i32 %in, i32 addrspace(1)* %out seq_cst, align 4 1022*9880d681SAndroid Build Coastguard Worker ret void 1023*9880d681SAndroid Build Coastguard Worker} 1024*9880d681SAndroid Build Coastguard Worker 1025*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_store_i32_addr64_offset: 1026*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword {{v[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}} 1027*9880d681SAndroid Build Coastguard Worker; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}} 1028*9880d681SAndroid Build Coastguard Workerdefine void @atomic_store_i32_addr64_offset(i32 %in, i32 addrspace(1)* %out, i64 %index) { 1029*9880d681SAndroid Build Coastguard Workerentry: 1030*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 1031*9880d681SAndroid Build Coastguard Worker %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4 1032*9880d681SAndroid Build Coastguard Worker store atomic i32 %in, i32 addrspace(1)* %gep seq_cst, align 4 1033*9880d681SAndroid Build Coastguard Worker ret void 1034*9880d681SAndroid Build Coastguard Worker} 1035*9880d681SAndroid Build Coastguard Worker 1036*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_store_i32_addr64: 1037*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword {{v[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}} 1038*9880d681SAndroid Build Coastguard Worker; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}} 1039*9880d681SAndroid Build Coastguard Workerdefine void @atomic_store_i32_addr64(i32 %in, i32 addrspace(1)* %out, i64 %index) { 1040*9880d681SAndroid Build Coastguard Workerentry: 1041*9880d681SAndroid Build Coastguard Worker %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index 1042*9880d681SAndroid Build Coastguard Worker store atomic i32 %in, i32 addrspace(1)* %ptr seq_cst, align 4 1043*9880d681SAndroid Build Coastguard Worker ret void 1044*9880d681SAndroid Build Coastguard Worker} 1045