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