1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=arm64 -mtriple=arm64-linux-gnu -verify-machineinstrs -mcpu=cyclone | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker@var = global i128 0 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine i128 @val_compare_and_swap(i128* %p, i128 %oldval, i128 %newval) { 6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: val_compare_and_swap: 7*9880d681SAndroid Build Coastguard Worker; CHECK: [[LABEL:.?LBB[0-9]+_[0-9]+]]: 8*9880d681SAndroid Build Coastguard Worker; CHECK: ldaxp [[RESULTLO:x[0-9]+]], [[RESULTHI:x[0-9]+]], [x[[ADDR:[0-9]+]]] 9*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: eor [[MISMATCH_LO:x[0-9]+]], [[RESULTLO]], x2 10*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: eor [[MISMATCH_HI:x[0-9]+]], [[RESULTHI]], x3 11*9880d681SAndroid Build Coastguard Worker; CHECK: orr [[MISMATCH:x[0-9]+]], [[MISMATCH_LO]], [[MISMATCH_HI]] 12*9880d681SAndroid Build Coastguard Worker; CHECK: cbnz [[MISMATCH]], [[DONE:.LBB[0-9]+_[0-9]+]] 13*9880d681SAndroid Build Coastguard Worker; CHECK: stxp [[SCRATCH_RES:w[0-9]+]], x4, x5, [x[[ADDR]]] 14*9880d681SAndroid Build Coastguard Worker; CHECK: cbnz [[SCRATCH_RES]], [[LABEL]] 15*9880d681SAndroid Build Coastguard Worker; CHECK: [[DONE]]: 16*9880d681SAndroid Build Coastguard Worker %pair = cmpxchg i128* %p, i128 %oldval, i128 %newval acquire acquire 17*9880d681SAndroid Build Coastguard Worker %val = extractvalue { i128, i1 } %pair, 0 18*9880d681SAndroid Build Coastguard Worker ret i128 %val 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdefine void @fetch_and_nand(i128* %p, i128 %bits) { 22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fetch_and_nand: 23*9880d681SAndroid Build Coastguard Worker; CHECK: [[LABEL:.?LBB[0-9]+_[0-9]+]]: 24*9880d681SAndroid Build Coastguard Worker; CHECK: ldxp [[DEST_REGLO:x[0-9]+]], [[DEST_REGHI:x[0-9]+]], [x0] 25*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: and [[TMP_REGLO:x[0-9]+]], [[DEST_REGLO]], x2 26*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: and [[TMP_REGHI:x[0-9]+]], [[DEST_REGHI]], x3 27*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: mvn [[SCRATCH_REGLO:x[0-9]+]], [[TMP_REGLO]] 28*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: mvn [[SCRATCH_REGHI:x[0-9]+]], [[TMP_REGHI]] 29*9880d681SAndroid Build Coastguard Worker; CHECK: stlxp [[SCRATCH_RES:w[0-9]+]], [[SCRATCH_REGLO]], [[SCRATCH_REGHI]], [x0] 30*9880d681SAndroid Build Coastguard Worker; CHECK: cbnz [[SCRATCH_RES]], [[LABEL]] 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: stp [[DEST_REGLO]], [[DEST_REGHI]] 33*9880d681SAndroid Build Coastguard Worker %val = atomicrmw nand i128* %p, i128 %bits release 34*9880d681SAndroid Build Coastguard Worker store i128 %val, i128* @var, align 16 35*9880d681SAndroid Build Coastguard Worker ret void 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdefine void @fetch_and_or(i128* %p, i128 %bits) { 39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fetch_and_or: 40*9880d681SAndroid Build Coastguard Worker; CHECK: [[LABEL:.?LBB[0-9]+_[0-9]+]]: 41*9880d681SAndroid Build Coastguard Worker; CHECK: ldaxp [[DEST_REGLO:x[0-9]+]], [[DEST_REGHI:x[0-9]+]], [x0] 42*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: orr [[SCRATCH_REGLO:x[0-9]+]], [[DEST_REGLO]], x2 43*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: orr [[SCRATCH_REGHI:x[0-9]+]], [[DEST_REGHI]], x3 44*9880d681SAndroid Build Coastguard Worker; CHECK: stlxp [[SCRATCH_RES:w[0-9]+]], [[SCRATCH_REGLO]], [[SCRATCH_REGHI]], [x0] 45*9880d681SAndroid Build Coastguard Worker; CHECK: cbnz [[SCRATCH_RES]], [[LABEL]] 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: stp [[DEST_REGLO]], [[DEST_REGHI]] 48*9880d681SAndroid Build Coastguard Worker %val = atomicrmw or i128* %p, i128 %bits seq_cst 49*9880d681SAndroid Build Coastguard Worker store i128 %val, i128* @var, align 16 50*9880d681SAndroid Build Coastguard Worker ret void 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerdefine void @fetch_and_add(i128* %p, i128 %bits) { 54*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fetch_and_add: 55*9880d681SAndroid Build Coastguard Worker; CHECK: [[LABEL:.?LBB[0-9]+_[0-9]+]]: 56*9880d681SAndroid Build Coastguard Worker; CHECK: ldaxp [[DEST_REGLO:x[0-9]+]], [[DEST_REGHI:x[0-9]+]], [x0] 57*9880d681SAndroid Build Coastguard Worker; CHECK: adds [[SCRATCH_REGLO:x[0-9]+]], [[DEST_REGLO]], x2 58*9880d681SAndroid Build Coastguard Worker; CHECK: adcs [[SCRATCH_REGHI:x[0-9]+]], [[DEST_REGHI]], x3 59*9880d681SAndroid Build Coastguard Worker; CHECK: stlxp [[SCRATCH_RES:w[0-9]+]], [[SCRATCH_REGLO]], [[SCRATCH_REGHI]], [x0] 60*9880d681SAndroid Build Coastguard Worker; CHECK: cbnz [[SCRATCH_RES]], [[LABEL]] 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: stp [[DEST_REGLO]], [[DEST_REGHI]] 63*9880d681SAndroid Build Coastguard Worker %val = atomicrmw add i128* %p, i128 %bits seq_cst 64*9880d681SAndroid Build Coastguard Worker store i128 %val, i128* @var, align 16 65*9880d681SAndroid Build Coastguard Worker ret void 66*9880d681SAndroid Build Coastguard Worker} 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Workerdefine void @fetch_and_sub(i128* %p, i128 %bits) { 69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fetch_and_sub: 70*9880d681SAndroid Build Coastguard Worker; CHECK: [[LABEL:.?LBB[0-9]+_[0-9]+]]: 71*9880d681SAndroid Build Coastguard Worker; CHECK: ldaxp [[DEST_REGLO:x[0-9]+]], [[DEST_REGHI:x[0-9]+]], [x0] 72*9880d681SAndroid Build Coastguard Worker; CHECK: subs [[SCRATCH_REGLO:x[0-9]+]], [[DEST_REGLO]], x2 73*9880d681SAndroid Build Coastguard Worker; CHECK: sbcs [[SCRATCH_REGHI:x[0-9]+]], [[DEST_REGHI]], x3 74*9880d681SAndroid Build Coastguard Worker; CHECK: stlxp [[SCRATCH_RES:w[0-9]+]], [[SCRATCH_REGLO]], [[SCRATCH_REGHI]], [x0] 75*9880d681SAndroid Build Coastguard Worker; CHECK: cbnz [[SCRATCH_RES]], [[LABEL]] 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: stp [[DEST_REGLO]], [[DEST_REGHI]] 78*9880d681SAndroid Build Coastguard Worker %val = atomicrmw sub i128* %p, i128 %bits seq_cst 79*9880d681SAndroid Build Coastguard Worker store i128 %val, i128* @var, align 16 80*9880d681SAndroid Build Coastguard Worker ret void 81*9880d681SAndroid Build Coastguard Worker} 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Workerdefine void @fetch_and_min(i128* %p, i128 %bits) { 84*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fetch_and_min: 85*9880d681SAndroid Build Coastguard Worker; CHECK: [[LABEL:.?LBB[0-9]+_[0-9]+]]: 86*9880d681SAndroid Build Coastguard Worker; CHECK: ldaxp [[DEST_REGLO:x[0-9]+]], [[DEST_REGHI:x[0-9]+]], [x0] 87*9880d681SAndroid Build Coastguard Worker; CHECK: cmp [[DEST_REGLO]], x2 88*9880d681SAndroid Build Coastguard Worker; CHECK: cset [[LOCMP:w[0-9]+]], ls 89*9880d681SAndroid Build Coastguard Worker; CHECK: cmp [[DEST_REGHI:x[0-9]+]], x3 90*9880d681SAndroid Build Coastguard Worker; CHECK: cset [[HICMP:w[0-9]+]], le 91*9880d681SAndroid Build Coastguard Worker; CHECK: csel [[CMP:w[0-9]+]], [[LOCMP]], [[HICMP]], eq 92*9880d681SAndroid Build Coastguard Worker; CHECK: cmp [[CMP]], #0 93*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: csel [[SCRATCH_REGHI:x[0-9]+]], [[DEST_REGHI]], x3, ne 94*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: csel [[SCRATCH_REGLO:x[0-9]+]], [[DEST_REGLO]], x2, ne 95*9880d681SAndroid Build Coastguard Worker; CHECK: stlxp [[SCRATCH_RES:w[0-9]+]], [[SCRATCH_REGLO]], [[SCRATCH_REGHI]], [x0] 96*9880d681SAndroid Build Coastguard Worker; CHECK: cbnz [[SCRATCH_RES]], [[LABEL]] 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: stp [[DEST_REGLO]], [[DEST_REGHI]] 99*9880d681SAndroid Build Coastguard Worker %val = atomicrmw min i128* %p, i128 %bits seq_cst 100*9880d681SAndroid Build Coastguard Worker store i128 %val, i128* @var, align 16 101*9880d681SAndroid Build Coastguard Worker ret void 102*9880d681SAndroid Build Coastguard Worker} 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Workerdefine void @fetch_and_max(i128* %p, i128 %bits) { 105*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fetch_and_max: 106*9880d681SAndroid Build Coastguard Worker; CHECK: [[LABEL:.?LBB[0-9]+_[0-9]+]]: 107*9880d681SAndroid Build Coastguard Worker; CHECK: ldaxp [[DEST_REGLO:x[0-9]+]], [[DEST_REGHI:x[0-9]+]], [x0] 108*9880d681SAndroid Build Coastguard Worker; CHECK: cmp [[DEST_REGLO]], x2 109*9880d681SAndroid Build Coastguard Worker; CHECK: cset [[LOCMP:w[0-9]+]], hi 110*9880d681SAndroid Build Coastguard Worker; CHECK: cmp [[DEST_REGHI:x[0-9]+]], x3 111*9880d681SAndroid Build Coastguard Worker; CHECK: cset [[HICMP:w[0-9]+]], gt 112*9880d681SAndroid Build Coastguard Worker; CHECK: csel [[CMP:w[0-9]+]], [[LOCMP]], [[HICMP]], eq 113*9880d681SAndroid Build Coastguard Worker; CHECK: cmp [[CMP]], #0 114*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: csel [[SCRATCH_REGHI:x[0-9]+]], [[DEST_REGHI]], x3, ne 115*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: csel [[SCRATCH_REGLO:x[0-9]+]], [[DEST_REGLO]], x2, ne 116*9880d681SAndroid Build Coastguard Worker; CHECK: stlxp [[SCRATCH_RES:w[0-9]+]], [[SCRATCH_REGLO]], [[SCRATCH_REGHI]], [x0] 117*9880d681SAndroid Build Coastguard Worker; CHECK: cbnz [[SCRATCH_RES]], [[LABEL]] 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: stp [[DEST_REGLO]], [[DEST_REGHI]] 120*9880d681SAndroid Build Coastguard Worker %val = atomicrmw max i128* %p, i128 %bits seq_cst 121*9880d681SAndroid Build Coastguard Worker store i128 %val, i128* @var, align 16 122*9880d681SAndroid Build Coastguard Worker ret void 123*9880d681SAndroid Build Coastguard Worker} 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Workerdefine void @fetch_and_umin(i128* %p, i128 %bits) { 126*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fetch_and_umin: 127*9880d681SAndroid Build Coastguard Worker; CHECK: [[LABEL:.?LBB[0-9]+_[0-9]+]]: 128*9880d681SAndroid Build Coastguard Worker; CHECK: ldaxp [[DEST_REGLO:x[0-9]+]], [[DEST_REGHI:x[0-9]+]], [x0] 129*9880d681SAndroid Build Coastguard Worker; CHECK: cmp [[DEST_REGLO]], x2 130*9880d681SAndroid Build Coastguard Worker; CHECK: cset [[LOCMP:w[0-9]+]], ls 131*9880d681SAndroid Build Coastguard Worker; CHECK: cmp [[DEST_REGHI:x[0-9]+]], x3 132*9880d681SAndroid Build Coastguard Worker; CHECK: cset [[HICMP:w[0-9]+]], ls 133*9880d681SAndroid Build Coastguard Worker; CHECK: csel [[CMP:w[0-9]+]], [[LOCMP]], [[HICMP]], eq 134*9880d681SAndroid Build Coastguard Worker; CHECK: cmp [[CMP]], #0 135*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: csel [[SCRATCH_REGHI:x[0-9]+]], [[DEST_REGHI]], x3, ne 136*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: csel [[SCRATCH_REGLO:x[0-9]+]], [[DEST_REGLO]], x2, ne 137*9880d681SAndroid Build Coastguard Worker; CHECK: stlxp [[SCRATCH_RES:w[0-9]+]], [[SCRATCH_REGLO]], [[SCRATCH_REGHI]], [x0] 138*9880d681SAndroid Build Coastguard Worker; CHECK: cbnz [[SCRATCH_RES]], [[LABEL]] 139*9880d681SAndroid Build Coastguard Worker 140*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: stp [[DEST_REGLO]], [[DEST_REGHI]] 141*9880d681SAndroid Build Coastguard Worker %val = atomicrmw umin i128* %p, i128 %bits seq_cst 142*9880d681SAndroid Build Coastguard Worker store i128 %val, i128* @var, align 16 143*9880d681SAndroid Build Coastguard Worker ret void 144*9880d681SAndroid Build Coastguard Worker} 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Workerdefine void @fetch_and_umax(i128* %p, i128 %bits) { 147*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fetch_and_umax: 148*9880d681SAndroid Build Coastguard Worker; CHECK: [[LABEL:.?LBB[0-9]+_[0-9]+]]: 149*9880d681SAndroid Build Coastguard Worker; CHECK: ldaxp [[DEST_REGLO:x[0-9]+]], [[DEST_REGHI:x[0-9]+]], [x0] 150*9880d681SAndroid Build Coastguard Worker; CHECK: cmp [[DEST_REGLO]], x2 151*9880d681SAndroid Build Coastguard Worker; CHECK: cset [[LOCMP:w[0-9]+]], hi 152*9880d681SAndroid Build Coastguard Worker; CHECK: cmp [[DEST_REGHI:x[0-9]+]], x3 153*9880d681SAndroid Build Coastguard Worker; CHECK: cset [[HICMP:w[0-9]+]], hi 154*9880d681SAndroid Build Coastguard Worker; CHECK: csel [[CMP:w[0-9]+]], [[LOCMP]], [[HICMP]], eq 155*9880d681SAndroid Build Coastguard Worker; CHECK: cmp [[CMP]], #0 156*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: csel [[SCRATCH_REGHI:x[0-9]+]], [[DEST_REGHI]], x3, ne 157*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: csel [[SCRATCH_REGLO:x[0-9]+]], [[DEST_REGLO]], x2, ne 158*9880d681SAndroid Build Coastguard Worker; CHECK: stlxp [[SCRATCH_RES:w[0-9]+]], [[SCRATCH_REGLO]], [[SCRATCH_REGHI]], [x0] 159*9880d681SAndroid Build Coastguard Worker; CHECK: cbnz [[SCRATCH_RES]], [[LABEL]] 160*9880d681SAndroid Build Coastguard Worker 161*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: stp [[DEST_REGLO]], [[DEST_REGHI]] 162*9880d681SAndroid Build Coastguard Worker %val = atomicrmw umax i128* %p, i128 %bits seq_cst 163*9880d681SAndroid Build Coastguard Worker store i128 %val, i128* @var, align 16 164*9880d681SAndroid Build Coastguard Worker ret void 165*9880d681SAndroid Build Coastguard Worker} 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Workerdefine i128 @atomic_load_seq_cst(i128* %p) { 168*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: atomic_load_seq_cst: 169*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: dmb 170*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldaxp 171*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: dmb 172*9880d681SAndroid Build Coastguard Worker %r = load atomic i128, i128* %p seq_cst, align 16 173*9880d681SAndroid Build Coastguard Worker ret i128 %r 174*9880d681SAndroid Build Coastguard Worker} 175*9880d681SAndroid Build Coastguard Worker 176*9880d681SAndroid Build Coastguard Workerdefine i128 @atomic_load_relaxed(i64, i64, i128* %p) { 177*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: atomic_load_relaxed: 178*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: dmb 179*9880d681SAndroid Build Coastguard Worker; CHECK: [[LABEL:.?LBB[0-9]+_[0-9]+]]: 180*9880d681SAndroid Build Coastguard Worker; CHECK: ldxp [[LO:x[0-9]+]], [[HI:x[0-9]+]], [x2] 181*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stxp [[SUCCESS:w[0-9]+]], [[LO]], [[HI]], [x2] 182*9880d681SAndroid Build Coastguard Worker; CHECK: cbnz [[SUCCESS]], [[LABEL]] 183*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: dmb 184*9880d681SAndroid Build Coastguard Worker %r = load atomic i128, i128* %p monotonic, align 16 185*9880d681SAndroid Build Coastguard Worker ret i128 %r 186*9880d681SAndroid Build Coastguard Worker} 187*9880d681SAndroid Build Coastguard Worker 188*9880d681SAndroid Build Coastguard Worker 189*9880d681SAndroid Build Coastguard Workerdefine void @atomic_store_seq_cst(i128 %in, i128* %p) { 190*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: atomic_store_seq_cst: 191*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: dmb 192*9880d681SAndroid Build Coastguard Worker; CHECK: [[LABEL:.?LBB[0-9]+_[0-9]+]]: 193*9880d681SAndroid Build Coastguard Worker; CHECK: ldaxp xzr, [[IGNORED:x[0-9]+]], [x2] 194*9880d681SAndroid Build Coastguard Worker; CHECK: stlxp [[SUCCESS:w[0-9]+]], x0, x1, [x2] 195*9880d681SAndroid Build Coastguard Worker; CHECK: cbnz [[SUCCESS]], [[LABEL]] 196*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: dmb 197*9880d681SAndroid Build Coastguard Worker store atomic i128 %in, i128* %p seq_cst, align 16 198*9880d681SAndroid Build Coastguard Worker ret void 199*9880d681SAndroid Build Coastguard Worker} 200*9880d681SAndroid Build Coastguard Worker 201*9880d681SAndroid Build Coastguard Workerdefine void @atomic_store_release(i128 %in, i128* %p) { 202*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: atomic_store_release: 203*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: dmb 204*9880d681SAndroid Build Coastguard Worker; CHECK: [[LABEL:.?LBB[0-9]+_[0-9]+]]: 205*9880d681SAndroid Build Coastguard Worker; CHECK: ldxp xzr, [[IGNORED:x[0-9]+]], [x2] 206*9880d681SAndroid Build Coastguard Worker; CHECK: stlxp [[SUCCESS:w[0-9]+]], x0, x1, [x2] 207*9880d681SAndroid Build Coastguard Worker; CHECK: cbnz [[SUCCESS]], [[LABEL]] 208*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: dmb 209*9880d681SAndroid Build Coastguard Worker store atomic i128 %in, i128* %p release, align 16 210*9880d681SAndroid Build Coastguard Worker ret void 211*9880d681SAndroid Build Coastguard Worker} 212*9880d681SAndroid Build Coastguard Worker 213*9880d681SAndroid Build Coastguard Workerdefine void @atomic_store_relaxed(i128 %in, i128* %p) { 214*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: atomic_store_relaxed: 215*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: dmb 216*9880d681SAndroid Build Coastguard Worker; CHECK: [[LABEL:.?LBB[0-9]+_[0-9]+]]: 217*9880d681SAndroid Build Coastguard Worker; CHECK: ldxp xzr, [[IGNORED:x[0-9]+]], [x2] 218*9880d681SAndroid Build Coastguard Worker; CHECK: stxp [[SUCCESS:w[0-9]+]], x0, x1, [x2] 219*9880d681SAndroid Build Coastguard Worker; CHECK: cbnz [[SUCCESS]], [[LABEL]] 220*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: dmb 221*9880d681SAndroid Build Coastguard Worker store atomic i128 %in, i128* %p unordered, align 16 222*9880d681SAndroid Build Coastguard Worker ret void 223*9880d681SAndroid Build Coastguard Worker} 224