1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -march=x86-64 -mcpu=corei7 -verify-machineinstrs | FileCheck %s --check-prefix X64 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -march=x86 -mcpu=corei7 -verify-machineinstrs | FileCheck %s --check-prefix X32 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker@sc8 = external global i8 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine void @atomic_fetch_add8() nounwind { 7*9880d681SAndroid Build Coastguard Worker; X64-LABEL: atomic_fetch_add8: 8*9880d681SAndroid Build Coastguard Worker; X32-LABEL: atomic_fetch_add8: 9*9880d681SAndroid Build Coastguard Workerentry: 10*9880d681SAndroid Build Coastguard Worker; 32-bit 11*9880d681SAndroid Build Coastguard Worker %t1 = atomicrmw add i8* @sc8, i8 1 acquire 12*9880d681SAndroid Build Coastguard Worker; X64: lock 13*9880d681SAndroid Build Coastguard Worker; X64: incb 14*9880d681SAndroid Build Coastguard Worker; X32: lock 15*9880d681SAndroid Build Coastguard Worker; X32: incb 16*9880d681SAndroid Build Coastguard Worker %t2 = atomicrmw add i8* @sc8, i8 3 acquire 17*9880d681SAndroid Build Coastguard Worker; X64: lock 18*9880d681SAndroid Build Coastguard Worker; X64: addb $3 19*9880d681SAndroid Build Coastguard Worker; X32: lock 20*9880d681SAndroid Build Coastguard Worker; X32: addb $3 21*9880d681SAndroid Build Coastguard Worker %t3 = atomicrmw add i8* @sc8, i8 5 acquire 22*9880d681SAndroid Build Coastguard Worker; X64: lock 23*9880d681SAndroid Build Coastguard Worker; X64: xaddb 24*9880d681SAndroid Build Coastguard Worker; X32: lock 25*9880d681SAndroid Build Coastguard Worker; X32: xaddb 26*9880d681SAndroid Build Coastguard Worker %t4 = atomicrmw add i8* @sc8, i8 %t3 acquire 27*9880d681SAndroid Build Coastguard Worker; X64: lock 28*9880d681SAndroid Build Coastguard Worker; X64: addb 29*9880d681SAndroid Build Coastguard Worker; X32: lock 30*9880d681SAndroid Build Coastguard Worker; X32: addb 31*9880d681SAndroid Build Coastguard Worker ret void 32*9880d681SAndroid Build Coastguard Worker; X64: ret 33*9880d681SAndroid Build Coastguard Worker; X32: ret 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerdefine void @atomic_fetch_sub8() nounwind { 37*9880d681SAndroid Build Coastguard Worker; X64-LABEL: atomic_fetch_sub8: 38*9880d681SAndroid Build Coastguard Worker; X32-LABEL: atomic_fetch_sub8: 39*9880d681SAndroid Build Coastguard Worker %t1 = atomicrmw sub i8* @sc8, i8 1 acquire 40*9880d681SAndroid Build Coastguard Worker; X64: lock 41*9880d681SAndroid Build Coastguard Worker; X64: decb 42*9880d681SAndroid Build Coastguard Worker; X32: lock 43*9880d681SAndroid Build Coastguard Worker; X32: decb 44*9880d681SAndroid Build Coastguard Worker %t2 = atomicrmw sub i8* @sc8, i8 3 acquire 45*9880d681SAndroid Build Coastguard Worker; X64: lock 46*9880d681SAndroid Build Coastguard Worker; X64: subb $3 47*9880d681SAndroid Build Coastguard Worker; X32: lock 48*9880d681SAndroid Build Coastguard Worker; X32: subb $3 49*9880d681SAndroid Build Coastguard Worker %t3 = atomicrmw sub i8* @sc8, i8 5 acquire 50*9880d681SAndroid Build Coastguard Worker; X64: lock 51*9880d681SAndroid Build Coastguard Worker; X64: xaddb 52*9880d681SAndroid Build Coastguard Worker; X32: lock 53*9880d681SAndroid Build Coastguard Worker; X32: xaddb 54*9880d681SAndroid Build Coastguard Worker %t4 = atomicrmw sub i8* @sc8, i8 %t3 acquire 55*9880d681SAndroid Build Coastguard Worker; X64: lock 56*9880d681SAndroid Build Coastguard Worker; X64: subb 57*9880d681SAndroid Build Coastguard Worker; X32: lock 58*9880d681SAndroid Build Coastguard Worker; X32: subb 59*9880d681SAndroid Build Coastguard Worker ret void 60*9880d681SAndroid Build Coastguard Worker; X64: ret 61*9880d681SAndroid Build Coastguard Worker; X32: ret 62*9880d681SAndroid Build Coastguard Worker} 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerdefine void @atomic_fetch_and8() nounwind { 65*9880d681SAndroid Build Coastguard Worker; X64-LABEL: atomic_fetch_and8: 66*9880d681SAndroid Build Coastguard Worker; X32-LABEL: atomic_fetch_and8: 67*9880d681SAndroid Build Coastguard Worker %t1 = atomicrmw and i8* @sc8, i8 3 acquire 68*9880d681SAndroid Build Coastguard Worker; X64: lock 69*9880d681SAndroid Build Coastguard Worker; X64: andb $3 70*9880d681SAndroid Build Coastguard Worker; X32: lock 71*9880d681SAndroid Build Coastguard Worker; X32: andb $3 72*9880d681SAndroid Build Coastguard Worker %t2 = atomicrmw and i8* @sc8, i8 5 acquire 73*9880d681SAndroid Build Coastguard Worker; X64: andb 74*9880d681SAndroid Build Coastguard Worker; X64: lock 75*9880d681SAndroid Build Coastguard Worker; X64: cmpxchgb 76*9880d681SAndroid Build Coastguard Worker; X32: andb 77*9880d681SAndroid Build Coastguard Worker; X32: lock 78*9880d681SAndroid Build Coastguard Worker; X32: cmpxchgb 79*9880d681SAndroid Build Coastguard Worker %t3 = atomicrmw and i8* @sc8, i8 %t2 acquire 80*9880d681SAndroid Build Coastguard Worker; X64: lock 81*9880d681SAndroid Build Coastguard Worker; X64: andb 82*9880d681SAndroid Build Coastguard Worker; X32: lock 83*9880d681SAndroid Build Coastguard Worker; X32: andb 84*9880d681SAndroid Build Coastguard Worker ret void 85*9880d681SAndroid Build Coastguard Worker; X64: ret 86*9880d681SAndroid Build Coastguard Worker; X32: ret 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Workerdefine void @atomic_fetch_or8() nounwind { 90*9880d681SAndroid Build Coastguard Worker; X64-LABEL: atomic_fetch_or8: 91*9880d681SAndroid Build Coastguard Worker; X32-LABEL: atomic_fetch_or8: 92*9880d681SAndroid Build Coastguard Worker %t1 = atomicrmw or i8* @sc8, i8 3 acquire 93*9880d681SAndroid Build Coastguard Worker; X64: lock 94*9880d681SAndroid Build Coastguard Worker; X64: orb $3 95*9880d681SAndroid Build Coastguard Worker; X32: lock 96*9880d681SAndroid Build Coastguard Worker; X32: orb $3 97*9880d681SAndroid Build Coastguard Worker %t2 = atomicrmw or i8* @sc8, i8 5 acquire 98*9880d681SAndroid Build Coastguard Worker; X64: orb 99*9880d681SAndroid Build Coastguard Worker; X64: lock 100*9880d681SAndroid Build Coastguard Worker; X64: cmpxchgb 101*9880d681SAndroid Build Coastguard Worker; X32: orb 102*9880d681SAndroid Build Coastguard Worker; X32: lock 103*9880d681SAndroid Build Coastguard Worker; X32: cmpxchgb 104*9880d681SAndroid Build Coastguard Worker %t3 = atomicrmw or i8* @sc8, i8 %t2 acquire 105*9880d681SAndroid Build Coastguard Worker; X64: lock 106*9880d681SAndroid Build Coastguard Worker; X64: orb 107*9880d681SAndroid Build Coastguard Worker; X32: lock 108*9880d681SAndroid Build Coastguard Worker; X32: orb 109*9880d681SAndroid Build Coastguard Worker ret void 110*9880d681SAndroid Build Coastguard Worker; X64: ret 111*9880d681SAndroid Build Coastguard Worker; X32: ret 112*9880d681SAndroid Build Coastguard Worker} 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Workerdefine void @atomic_fetch_xor8() nounwind { 115*9880d681SAndroid Build Coastguard Worker; X64-LABEL: atomic_fetch_xor8: 116*9880d681SAndroid Build Coastguard Worker; X32-LABEL: atomic_fetch_xor8: 117*9880d681SAndroid Build Coastguard Worker %t1 = atomicrmw xor i8* @sc8, i8 3 acquire 118*9880d681SAndroid Build Coastguard Worker; X64: lock 119*9880d681SAndroid Build Coastguard Worker; X64: xorb $3 120*9880d681SAndroid Build Coastguard Worker; X32: lock 121*9880d681SAndroid Build Coastguard Worker; X32: xorb $3 122*9880d681SAndroid Build Coastguard Worker %t2 = atomicrmw xor i8* @sc8, i8 5 acquire 123*9880d681SAndroid Build Coastguard Worker; X64: xorb 124*9880d681SAndroid Build Coastguard Worker; X64: lock 125*9880d681SAndroid Build Coastguard Worker; X64: cmpxchgb 126*9880d681SAndroid Build Coastguard Worker; X32: xorb 127*9880d681SAndroid Build Coastguard Worker; X32: lock 128*9880d681SAndroid Build Coastguard Worker; X32: cmpxchgb 129*9880d681SAndroid Build Coastguard Worker %t3 = atomicrmw xor i8* @sc8, i8 %t2 acquire 130*9880d681SAndroid Build Coastguard Worker; X64: lock 131*9880d681SAndroid Build Coastguard Worker; X64: xorb 132*9880d681SAndroid Build Coastguard Worker; X32: lock 133*9880d681SAndroid Build Coastguard Worker; X32: xorb 134*9880d681SAndroid Build Coastguard Worker ret void 135*9880d681SAndroid Build Coastguard Worker; X64: ret 136*9880d681SAndroid Build Coastguard Worker; X32: ret 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerdefine void @atomic_fetch_nand8(i8 %x) nounwind { 140*9880d681SAndroid Build Coastguard Worker; X64-LABEL: atomic_fetch_nand8: 141*9880d681SAndroid Build Coastguard Worker; X32-LABEL: atomic_fetch_nand8: 142*9880d681SAndroid Build Coastguard Worker %t1 = atomicrmw nand i8* @sc8, i8 %x acquire 143*9880d681SAndroid Build Coastguard Worker; X64: andb 144*9880d681SAndroid Build Coastguard Worker; X64: notb 145*9880d681SAndroid Build Coastguard Worker; X64: lock 146*9880d681SAndroid Build Coastguard Worker; X64: cmpxchgb 147*9880d681SAndroid Build Coastguard Worker; X32: andb 148*9880d681SAndroid Build Coastguard Worker; X32: notb 149*9880d681SAndroid Build Coastguard Worker; X32: lock 150*9880d681SAndroid Build Coastguard Worker; X32: cmpxchgb 151*9880d681SAndroid Build Coastguard Worker ret void 152*9880d681SAndroid Build Coastguard Worker; X64: ret 153*9880d681SAndroid Build Coastguard Worker; X32: ret 154*9880d681SAndroid Build Coastguard Worker} 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Workerdefine void @atomic_fetch_max8(i8 %x) nounwind { 157*9880d681SAndroid Build Coastguard Worker; X64-LABEL: atomic_fetch_max8: 158*9880d681SAndroid Build Coastguard Worker; X32-LABEL: atomic_fetch_max8: 159*9880d681SAndroid Build Coastguard Worker %t1 = atomicrmw max i8* @sc8, i8 %x acquire 160*9880d681SAndroid Build Coastguard Worker; X64: movb 161*9880d681SAndroid Build Coastguard Worker; X64: movb 162*9880d681SAndroid Build Coastguard Worker; X64: subb 163*9880d681SAndroid Build Coastguard Worker; X64: lock 164*9880d681SAndroid Build Coastguard Worker; X64: cmpxchgb 165*9880d681SAndroid Build Coastguard Worker 166*9880d681SAndroid Build Coastguard Worker; X32: movb 167*9880d681SAndroid Build Coastguard Worker; X32: movb 168*9880d681SAndroid Build Coastguard Worker; X32: subb 169*9880d681SAndroid Build Coastguard Worker; X32: lock 170*9880d681SAndroid Build Coastguard Worker; X32: cmpxchgb 171*9880d681SAndroid Build Coastguard Worker ret void 172*9880d681SAndroid Build Coastguard Worker; X64: ret 173*9880d681SAndroid Build Coastguard Worker; X32: ret 174*9880d681SAndroid Build Coastguard Worker} 175*9880d681SAndroid Build Coastguard Worker 176*9880d681SAndroid Build Coastguard Workerdefine void @atomic_fetch_min8(i8 %x) nounwind { 177*9880d681SAndroid Build Coastguard Worker; X64-LABEL: atomic_fetch_min8: 178*9880d681SAndroid Build Coastguard Worker; X32-LABEL: atomic_fetch_min8: 179*9880d681SAndroid Build Coastguard Worker %t1 = atomicrmw min i8* @sc8, i8 %x acquire 180*9880d681SAndroid Build Coastguard Worker; X64: movb 181*9880d681SAndroid Build Coastguard Worker; X64: movb 182*9880d681SAndroid Build Coastguard Worker; X64: subb 183*9880d681SAndroid Build Coastguard Worker; X64: lock 184*9880d681SAndroid Build Coastguard Worker; X64: cmpxchgb 185*9880d681SAndroid Build Coastguard Worker 186*9880d681SAndroid Build Coastguard Worker; X32: movb 187*9880d681SAndroid Build Coastguard Worker; X32: movb 188*9880d681SAndroid Build Coastguard Worker; X32: subb 189*9880d681SAndroid Build Coastguard Worker; X32: lock 190*9880d681SAndroid Build Coastguard Worker; X32: cmpxchgb 191*9880d681SAndroid Build Coastguard Worker ret void 192*9880d681SAndroid Build Coastguard Worker; X64: ret 193*9880d681SAndroid Build Coastguard Worker; X32: ret 194*9880d681SAndroid Build Coastguard Worker} 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Workerdefine void @atomic_fetch_umax8(i8 %x) nounwind { 197*9880d681SAndroid Build Coastguard Worker; X64-LABEL: atomic_fetch_umax8: 198*9880d681SAndroid Build Coastguard Worker; X32-LABEL: atomic_fetch_umax8: 199*9880d681SAndroid Build Coastguard Worker %t1 = atomicrmw umax i8* @sc8, i8 %x acquire 200*9880d681SAndroid Build Coastguard Worker; X64: movb 201*9880d681SAndroid Build Coastguard Worker; X64: movb 202*9880d681SAndroid Build Coastguard Worker; X64: subb 203*9880d681SAndroid Build Coastguard Worker; X64: lock 204*9880d681SAndroid Build Coastguard Worker; X64: cmpxchgb 205*9880d681SAndroid Build Coastguard Worker 206*9880d681SAndroid Build Coastguard Worker; X32: movb 207*9880d681SAndroid Build Coastguard Worker; X32: movb 208*9880d681SAndroid Build Coastguard Worker; X32: subb 209*9880d681SAndroid Build Coastguard Worker; X32: lock 210*9880d681SAndroid Build Coastguard Worker; X32: cmpxchgb 211*9880d681SAndroid Build Coastguard Worker ret void 212*9880d681SAndroid Build Coastguard Worker; X64: ret 213*9880d681SAndroid Build Coastguard Worker; X32: ret 214*9880d681SAndroid Build Coastguard Worker} 215*9880d681SAndroid Build Coastguard Worker 216*9880d681SAndroid Build Coastguard Workerdefine void @atomic_fetch_umin8(i8 %x) nounwind { 217*9880d681SAndroid Build Coastguard Worker; X64-LABEL: atomic_fetch_umin8: 218*9880d681SAndroid Build Coastguard Worker; X32-LABEL: atomic_fetch_umin8: 219*9880d681SAndroid Build Coastguard Worker %t1 = atomicrmw umin i8* @sc8, i8 %x acquire 220*9880d681SAndroid Build Coastguard Worker; X64: movb 221*9880d681SAndroid Build Coastguard Worker; X64: movb 222*9880d681SAndroid Build Coastguard Worker; X64: subb 223*9880d681SAndroid Build Coastguard Worker; X64: lock 224*9880d681SAndroid Build Coastguard Worker; X64: cmpxchgb 225*9880d681SAndroid Build Coastguard Worker 226*9880d681SAndroid Build Coastguard Worker; X32: movb 227*9880d681SAndroid Build Coastguard Worker; X32: movb 228*9880d681SAndroid Build Coastguard Worker; X32: subb 229*9880d681SAndroid Build Coastguard Worker; X32: lock 230*9880d681SAndroid Build Coastguard Worker; X32: cmpxchgb 231*9880d681SAndroid Build Coastguard Worker ret void 232*9880d681SAndroid Build Coastguard Worker; X64: ret 233*9880d681SAndroid Build Coastguard Worker; X32: ret 234*9880d681SAndroid Build Coastguard Worker} 235*9880d681SAndroid Build Coastguard Worker 236*9880d681SAndroid Build Coastguard Workerdefine void @atomic_fetch_cmpxchg8() nounwind { 237*9880d681SAndroid Build Coastguard Worker; X64-LABEL: atomic_fetch_cmpxchg8: 238*9880d681SAndroid Build Coastguard Worker; X32-LABEL: atomic_fetch_cmpxchg8: 239*9880d681SAndroid Build Coastguard Worker %t1 = cmpxchg i8* @sc8, i8 0, i8 1 acquire acquire 240*9880d681SAndroid Build Coastguard Worker; X64: lock 241*9880d681SAndroid Build Coastguard Worker; X64: cmpxchgb 242*9880d681SAndroid Build Coastguard Worker; X32: lock 243*9880d681SAndroid Build Coastguard Worker; X32: cmpxchgb 244*9880d681SAndroid Build Coastguard Worker ret void 245*9880d681SAndroid Build Coastguard Worker; X64: ret 246*9880d681SAndroid Build Coastguard Worker; X32: ret 247*9880d681SAndroid Build Coastguard Worker} 248*9880d681SAndroid Build Coastguard Worker 249*9880d681SAndroid Build Coastguard Workerdefine void @atomic_fetch_store8(i8 %x) nounwind { 250*9880d681SAndroid Build Coastguard Worker; X64-LABEL: atomic_fetch_store8: 251*9880d681SAndroid Build Coastguard Worker; X32-LABEL: atomic_fetch_store8: 252*9880d681SAndroid Build Coastguard Worker store atomic i8 %x, i8* @sc8 release, align 4 253*9880d681SAndroid Build Coastguard Worker; X64-NOT: lock 254*9880d681SAndroid Build Coastguard Worker; X64: movb 255*9880d681SAndroid Build Coastguard Worker; X32-NOT: lock 256*9880d681SAndroid Build Coastguard Worker; X32: movb 257*9880d681SAndroid Build Coastguard Worker ret void 258*9880d681SAndroid Build Coastguard Worker; X64: ret 259*9880d681SAndroid Build Coastguard Worker; X32: ret 260*9880d681SAndroid Build Coastguard Worker} 261*9880d681SAndroid Build Coastguard Worker 262*9880d681SAndroid Build Coastguard Workerdefine void @atomic_fetch_swap8(i8 %x) nounwind { 263*9880d681SAndroid Build Coastguard Worker; X64-LABEL: atomic_fetch_swap8: 264*9880d681SAndroid Build Coastguard Worker; X32-LABEL: atomic_fetch_swap8: 265*9880d681SAndroid Build Coastguard Worker %t1 = atomicrmw xchg i8* @sc8, i8 %x acquire 266*9880d681SAndroid Build Coastguard Worker; X64-NOT: lock 267*9880d681SAndroid Build Coastguard Worker; X64: xchgb 268*9880d681SAndroid Build Coastguard Worker; X32-NOT: lock 269*9880d681SAndroid Build Coastguard Worker; X32: xchgb 270*9880d681SAndroid Build Coastguard Worker ret void 271*9880d681SAndroid Build Coastguard Worker; X64: ret 272*9880d681SAndroid Build Coastguard Worker; X32: ret 273*9880d681SAndroid Build Coastguard Worker} 274