1*9880d681SAndroid Build Coastguard Worker; RUN: llvm-dis < %s.bc| FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: verify-uselistorder < %s.bc 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; memOperations.3.2.ll.bc was generated by passing this file to llvm-as-3.2. 5*9880d681SAndroid Build Coastguard Worker; The test checks that LLVM does not misread memory related instructions of 6*9880d681SAndroid Build Coastguard Worker; older bitcode files. 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdefine void @alloca(){ 9*9880d681SAndroid Build Coastguard Workerentry: 10*9880d681SAndroid Build Coastguard Worker; CHECK: %res1 = alloca i8 11*9880d681SAndroid Build Coastguard Worker %res1 = alloca i8 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res2 = alloca i8, i32 2 14*9880d681SAndroid Build Coastguard Worker %res2 = alloca i8, i32 2 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res3 = alloca i8, i32 2, align 4 17*9880d681SAndroid Build Coastguard Worker %res3 = alloca i8, i32 2, align 4 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res4 = alloca i8, align 4 20*9880d681SAndroid Build Coastguard Worker %res4 = alloca i8, align 4 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker ret void 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine void @load(){ 26*9880d681SAndroid Build Coastguard Workerentry: 27*9880d681SAndroid Build Coastguard Worker %ptr1 = alloca i8 28*9880d681SAndroid Build Coastguard Worker store i8 2, i8* %ptr1 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; CHECK: %res1 = load i8, i8* %ptr1 31*9880d681SAndroid Build Coastguard Worker %res1 = load i8, i8* %ptr1 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res2 = load volatile i8, i8* %ptr1 34*9880d681SAndroid Build Coastguard Worker %res2 = load volatile i8, i8* %ptr1 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res3 = load i8, i8* %ptr1, align 1 37*9880d681SAndroid Build Coastguard Worker %res3 = load i8, i8* %ptr1, align 1 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res4 = load volatile i8, i8* %ptr1, align 1 40*9880d681SAndroid Build Coastguard Worker %res4 = load volatile i8, i8* %ptr1, align 1 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res5 = load i8, i8* %ptr1, !nontemporal !0 43*9880d681SAndroid Build Coastguard Worker %res5 = load i8, i8* %ptr1, !nontemporal !0 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res6 = load volatile i8, i8* %ptr1, !nontemporal !0 46*9880d681SAndroid Build Coastguard Worker %res6 = load volatile i8, i8* %ptr1, !nontemporal !0 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res7 = load i8, i8* %ptr1, align 1, !nontemporal !0 49*9880d681SAndroid Build Coastguard Worker %res7 = load i8, i8* %ptr1, align 1, !nontemporal !0 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res8 = load volatile i8, i8* %ptr1, align 1, !nontemporal !0 52*9880d681SAndroid Build Coastguard Worker %res8 = load volatile i8, i8* %ptr1, align 1, !nontemporal !0 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res9 = load i8, i8* %ptr1, !invariant.load !1 55*9880d681SAndroid Build Coastguard Worker %res9 = load i8, i8* %ptr1, !invariant.load !1 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res10 = load volatile i8, i8* %ptr1, !invariant.load !1 58*9880d681SAndroid Build Coastguard Worker %res10 = load volatile i8, i8* %ptr1, !invariant.load !1 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res11 = load i8, i8* %ptr1, align 1, !invariant.load !1 61*9880d681SAndroid Build Coastguard Worker %res11 = load i8, i8* %ptr1, align 1, !invariant.load !1 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res12 = load volatile i8, i8* %ptr1, align 1, !invariant.load !1 64*9880d681SAndroid Build Coastguard Worker %res12 = load volatile i8, i8* %ptr1, align 1, !invariant.load !1 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res13 = load i8, i8* %ptr1, {{[(!nontemporal !0, !invariant.load !1) | (!invariant.load !1, !nontemporal !0)]}} 67*9880d681SAndroid Build Coastguard Worker %res13 = load i8, i8* %ptr1, !nontemporal !0, !invariant.load !1 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res14 = load volatile i8, i8* %ptr1, {{[(!nontemporal !0, !invariant.load !1) | (!invariant.load !1, !nontemporal !0)]}} 70*9880d681SAndroid Build Coastguard Worker %res14 = load volatile i8, i8* %ptr1, !nontemporal !0, !invariant.load !1 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res15 = load i8, i8* %ptr1, align 1, {{[(!nontemporal !0, !invariant.load !1) | (!invariant.load !1, !nontemporal !0)]}} 73*9880d681SAndroid Build Coastguard Worker %res15 = load i8, i8* %ptr1, align 1, !nontemporal !0, !invariant.load !1 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res16 = load volatile i8, i8* %ptr1, align 1, {{[(!nontemporal !0, !invariant.load !1) | (!invariant.load !1, !nontemporal !0)]}} 76*9880d681SAndroid Build Coastguard Worker %res16 = load volatile i8, i8* %ptr1, align 1, !nontemporal !0, !invariant.load !1 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker ret void 79*9880d681SAndroid Build Coastguard Worker} 80*9880d681SAndroid Build Coastguard Worker 81*9880d681SAndroid Build Coastguard Workerdefine void @loadAtomic(){ 82*9880d681SAndroid Build Coastguard Workerentry: 83*9880d681SAndroid Build Coastguard Worker %ptr1 = alloca i8 84*9880d681SAndroid Build Coastguard Worker store i8 2, i8* %ptr1 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Worker; CHECK: %res1 = load atomic i8, i8* %ptr1 unordered, align 1 87*9880d681SAndroid Build Coastguard Worker %res1 = load atomic i8, i8* %ptr1 unordered, align 1 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res2 = load atomic i8, i8* %ptr1 monotonic, align 1 90*9880d681SAndroid Build Coastguard Worker %res2 = load atomic i8, i8* %ptr1 monotonic, align 1 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res3 = load atomic i8, i8* %ptr1 acquire, align 1 93*9880d681SAndroid Build Coastguard Worker %res3 = load atomic i8, i8* %ptr1 acquire, align 1 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res4 = load atomic i8, i8* %ptr1 seq_cst, align 1 96*9880d681SAndroid Build Coastguard Worker %res4 = load atomic i8, i8* %ptr1 seq_cst, align 1 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res5 = load atomic volatile i8, i8* %ptr1 unordered, align 1 99*9880d681SAndroid Build Coastguard Worker %res5 = load atomic volatile i8, i8* %ptr1 unordered, align 1 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res6 = load atomic volatile i8, i8* %ptr1 monotonic, align 1 102*9880d681SAndroid Build Coastguard Worker %res6 = load atomic volatile i8, i8* %ptr1 monotonic, align 1 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res7 = load atomic volatile i8, i8* %ptr1 acquire, align 1 105*9880d681SAndroid Build Coastguard Worker %res7 = load atomic volatile i8, i8* %ptr1 acquire, align 1 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res8 = load atomic volatile i8, i8* %ptr1 seq_cst, align 1 108*9880d681SAndroid Build Coastguard Worker %res8 = load atomic volatile i8, i8* %ptr1 seq_cst, align 1 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res9 = load atomic i8, i8* %ptr1 singlethread unordered, align 1 111*9880d681SAndroid Build Coastguard Worker %res9 = load atomic i8, i8* %ptr1 singlethread unordered, align 1 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res10 = load atomic i8, i8* %ptr1 singlethread monotonic, align 1 114*9880d681SAndroid Build Coastguard Worker %res10 = load atomic i8, i8* %ptr1 singlethread monotonic, align 1 115*9880d681SAndroid Build Coastguard Worker 116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res11 = load atomic i8, i8* %ptr1 singlethread acquire, align 1 117*9880d681SAndroid Build Coastguard Worker %res11 = load atomic i8, i8* %ptr1 singlethread acquire, align 1 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res12 = load atomic i8, i8* %ptr1 singlethread seq_cst, align 1 120*9880d681SAndroid Build Coastguard Worker %res12 = load atomic i8, i8* %ptr1 singlethread seq_cst, align 1 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res13 = load atomic volatile i8, i8* %ptr1 singlethread unordered, align 1 123*9880d681SAndroid Build Coastguard Worker %res13 = load atomic volatile i8, i8* %ptr1 singlethread unordered, align 1 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res14 = load atomic volatile i8, i8* %ptr1 singlethread monotonic, align 1 126*9880d681SAndroid Build Coastguard Worker %res14 = load atomic volatile i8, i8* %ptr1 singlethread monotonic, align 1 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res15 = load atomic volatile i8, i8* %ptr1 singlethread acquire, align 1 129*9880d681SAndroid Build Coastguard Worker %res15 = load atomic volatile i8, i8* %ptr1 singlethread acquire, align 1 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res16 = load atomic volatile i8, i8* %ptr1 singlethread seq_cst, align 1 132*9880d681SAndroid Build Coastguard Worker %res16 = load atomic volatile i8, i8* %ptr1 singlethread seq_cst, align 1 133*9880d681SAndroid Build Coastguard Worker 134*9880d681SAndroid Build Coastguard Worker ret void 135*9880d681SAndroid Build Coastguard Worker} 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Workerdefine void @store(){ 138*9880d681SAndroid Build Coastguard Workerentry: 139*9880d681SAndroid Build Coastguard Worker %ptr1 = alloca i8 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Worker; CHECK: store i8 2, i8* %ptr1 142*9880d681SAndroid Build Coastguard Worker store i8 2, i8* %ptr1 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store volatile i8 2, i8* %ptr1 145*9880d681SAndroid Build Coastguard Worker store volatile i8 2, i8* %ptr1 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store i8 2, i8* %ptr1, align 1 148*9880d681SAndroid Build Coastguard Worker store i8 2, i8* %ptr1, align 1 149*9880d681SAndroid Build Coastguard Worker 150*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store volatile i8 2, i8* %ptr1, align 1 151*9880d681SAndroid Build Coastguard Worker store volatile i8 2, i8* %ptr1, align 1 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store i8 2, i8* %ptr1, !nontemporal !0 154*9880d681SAndroid Build Coastguard Worker store i8 2, i8* %ptr1, !nontemporal !0 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store volatile i8 2, i8* %ptr1, !nontemporal !0 157*9880d681SAndroid Build Coastguard Worker store volatile i8 2, i8* %ptr1, !nontemporal !0 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store i8 2, i8* %ptr1, align 1, !nontemporal !0 160*9880d681SAndroid Build Coastguard Worker store i8 2, i8* %ptr1, align 1, !nontemporal !0 161*9880d681SAndroid Build Coastguard Worker 162*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store volatile i8 2, i8* %ptr1, align 1, !nontemporal !0 163*9880d681SAndroid Build Coastguard Worker store volatile i8 2, i8* %ptr1, align 1, !nontemporal !0 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Worker ret void 166*9880d681SAndroid Build Coastguard Worker} 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Workerdefine void @storeAtomic(){ 169*9880d681SAndroid Build Coastguard Workerentry: 170*9880d681SAndroid Build Coastguard Worker %ptr1 = alloca i8 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Worker; CHECK: store atomic i8 2, i8* %ptr1 unordered, align 1 173*9880d681SAndroid Build Coastguard Worker store atomic i8 2, i8* %ptr1 unordered, align 1 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store atomic i8 2, i8* %ptr1 monotonic, align 1 176*9880d681SAndroid Build Coastguard Worker store atomic i8 2, i8* %ptr1 monotonic, align 1 177*9880d681SAndroid Build Coastguard Worker 178*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store atomic i8 2, i8* %ptr1 release, align 1 179*9880d681SAndroid Build Coastguard Worker store atomic i8 2, i8* %ptr1 release, align 1 180*9880d681SAndroid Build Coastguard Worker 181*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store atomic i8 2, i8* %ptr1 seq_cst, align 1 182*9880d681SAndroid Build Coastguard Worker store atomic i8 2, i8* %ptr1 seq_cst, align 1 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store atomic volatile i8 2, i8* %ptr1 unordered, align 1 185*9880d681SAndroid Build Coastguard Worker store atomic volatile i8 2, i8* %ptr1 unordered, align 1 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store atomic volatile i8 2, i8* %ptr1 monotonic, align 1 188*9880d681SAndroid Build Coastguard Worker store atomic volatile i8 2, i8* %ptr1 monotonic, align 1 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store atomic volatile i8 2, i8* %ptr1 release, align 1 191*9880d681SAndroid Build Coastguard Worker store atomic volatile i8 2, i8* %ptr1 release, align 1 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store atomic volatile i8 2, i8* %ptr1 seq_cst, align 1 194*9880d681SAndroid Build Coastguard Worker store atomic volatile i8 2, i8* %ptr1 seq_cst, align 1 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store atomic i8 2, i8* %ptr1 singlethread unordered, align 1 197*9880d681SAndroid Build Coastguard Worker store atomic i8 2, i8* %ptr1 singlethread unordered, align 1 198*9880d681SAndroid Build Coastguard Worker 199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store atomic i8 2, i8* %ptr1 singlethread monotonic, align 1 200*9880d681SAndroid Build Coastguard Worker store atomic i8 2, i8* %ptr1 singlethread monotonic, align 1 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store atomic i8 2, i8* %ptr1 singlethread release, align 1 203*9880d681SAndroid Build Coastguard Worker store atomic i8 2, i8* %ptr1 singlethread release, align 1 204*9880d681SAndroid Build Coastguard Worker 205*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store atomic i8 2, i8* %ptr1 singlethread seq_cst, align 1 206*9880d681SAndroid Build Coastguard Worker store atomic i8 2, i8* %ptr1 singlethread seq_cst, align 1 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store atomic volatile i8 2, i8* %ptr1 singlethread unordered, align 1 209*9880d681SAndroid Build Coastguard Worker store atomic volatile i8 2, i8* %ptr1 singlethread unordered, align 1 210*9880d681SAndroid Build Coastguard Worker 211*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store atomic volatile i8 2, i8* %ptr1 singlethread monotonic, align 1 212*9880d681SAndroid Build Coastguard Worker store atomic volatile i8 2, i8* %ptr1 singlethread monotonic, align 1 213*9880d681SAndroid Build Coastguard Worker 214*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store atomic volatile i8 2, i8* %ptr1 singlethread release, align 1 215*9880d681SAndroid Build Coastguard Worker store atomic volatile i8 2, i8* %ptr1 singlethread release, align 1 216*9880d681SAndroid Build Coastguard Worker 217*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store atomic volatile i8 2, i8* %ptr1 singlethread seq_cst, align 1 218*9880d681SAndroid Build Coastguard Worker store atomic volatile i8 2, i8* %ptr1 singlethread seq_cst, align 1 219*9880d681SAndroid Build Coastguard Worker 220*9880d681SAndroid Build Coastguard Worker ret void 221*9880d681SAndroid Build Coastguard Worker} 222*9880d681SAndroid Build Coastguard Worker 223*9880d681SAndroid Build Coastguard Workerdefine void @cmpxchg(i32* %ptr,i32 %cmp,i32 %new){ 224*9880d681SAndroid Build Coastguard Workerentry: 225*9880d681SAndroid Build Coastguard Worker ;cmpxchg [volatile] <ty>* <pointer>, <ty> <cmp>, <ty> <new> [singlethread] <ordering> 226*9880d681SAndroid Build Coastguard Worker 227*9880d681SAndroid Build Coastguard Worker; CHECK: [[TMP:%[a-z0-9]+]] = cmpxchg i32* %ptr, i32 %cmp, i32 %new monotonic monotonic 228*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res1 = extractvalue { i32, i1 } [[TMP]], 0 229*9880d681SAndroid Build Coastguard Worker %res1 = cmpxchg i32* %ptr, i32 %cmp, i32 %new monotonic monotonic 230*9880d681SAndroid Build Coastguard Worker 231*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new monotonic monotonic 232*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res2 = extractvalue { i32, i1 } [[TMP]], 0 233*9880d681SAndroid Build Coastguard Worker %res2 = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new monotonic monotonic 234*9880d681SAndroid Build Coastguard Worker 235*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg i32* %ptr, i32 %cmp, i32 %new singlethread monotonic monotonic 236*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res3 = extractvalue { i32, i1 } [[TMP]], 0 237*9880d681SAndroid Build Coastguard Worker %res3 = cmpxchg i32* %ptr, i32 %cmp, i32 %new singlethread monotonic monotonic 238*9880d681SAndroid Build Coastguard Worker 239*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new singlethread monotonic monotonic 240*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res4 = extractvalue { i32, i1 } [[TMP]], 0 241*9880d681SAndroid Build Coastguard Worker %res4 = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new singlethread monotonic monotonic 242*9880d681SAndroid Build Coastguard Worker 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg i32* %ptr, i32 %cmp, i32 %new acquire acquire 245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res5 = extractvalue { i32, i1 } [[TMP]], 0 246*9880d681SAndroid Build Coastguard Worker %res5 = cmpxchg i32* %ptr, i32 %cmp, i32 %new acquire acquire 247*9880d681SAndroid Build Coastguard Worker 248*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new acquire acquire 249*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res6 = extractvalue { i32, i1 } [[TMP]], 0 250*9880d681SAndroid Build Coastguard Worker %res6 = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new acquire acquire 251*9880d681SAndroid Build Coastguard Worker 252*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg i32* %ptr, i32 %cmp, i32 %new singlethread acquire acquire 253*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res7 = extractvalue { i32, i1 } [[TMP]], 0 254*9880d681SAndroid Build Coastguard Worker %res7 = cmpxchg i32* %ptr, i32 %cmp, i32 %new singlethread acquire acquire 255*9880d681SAndroid Build Coastguard Worker 256*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new singlethread acquire acquire 257*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res8 = extractvalue { i32, i1 } [[TMP]], 0 258*9880d681SAndroid Build Coastguard Worker %res8 = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new singlethread acquire acquire 259*9880d681SAndroid Build Coastguard Worker 260*9880d681SAndroid Build Coastguard Worker 261*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg i32* %ptr, i32 %cmp, i32 %new release monotonic 262*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res9 = extractvalue { i32, i1 } [[TMP]], 0 263*9880d681SAndroid Build Coastguard Worker %res9 = cmpxchg i32* %ptr, i32 %cmp, i32 %new release monotonic 264*9880d681SAndroid Build Coastguard Worker 265*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new release monotonic 266*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res10 = extractvalue { i32, i1 } [[TMP]], 0 267*9880d681SAndroid Build Coastguard Worker %res10 = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new release monotonic 268*9880d681SAndroid Build Coastguard Worker 269*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg i32* %ptr, i32 %cmp, i32 %new singlethread release monotonic 270*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res11 = extractvalue { i32, i1 } [[TMP]], 0 271*9880d681SAndroid Build Coastguard Worker %res11 = cmpxchg i32* %ptr, i32 %cmp, i32 %new singlethread release monotonic 272*9880d681SAndroid Build Coastguard Worker 273*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new singlethread release monotonic 274*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res12 = extractvalue { i32, i1 } [[TMP]], 0 275*9880d681SAndroid Build Coastguard Worker %res12 = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new singlethread release monotonic 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Worker 278*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg i32* %ptr, i32 %cmp, i32 %new acq_rel acquire 279*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res13 = extractvalue { i32, i1 } [[TMP]], 0 280*9880d681SAndroid Build Coastguard Worker %res13 = cmpxchg i32* %ptr, i32 %cmp, i32 %new acq_rel acquire 281*9880d681SAndroid Build Coastguard Worker 282*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new acq_rel acquire 283*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res14 = extractvalue { i32, i1 } [[TMP]], 0 284*9880d681SAndroid Build Coastguard Worker %res14 = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new acq_rel acquire 285*9880d681SAndroid Build Coastguard Worker 286*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg i32* %ptr, i32 %cmp, i32 %new singlethread acq_rel acquire 287*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res15 = extractvalue { i32, i1 } [[TMP]], 0 288*9880d681SAndroid Build Coastguard Worker %res15 = cmpxchg i32* %ptr, i32 %cmp, i32 %new singlethread acq_rel acquire 289*9880d681SAndroid Build Coastguard Worker 290*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new singlethread acq_rel acquire 291*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res16 = extractvalue { i32, i1 } [[TMP]], 0 292*9880d681SAndroid Build Coastguard Worker %res16 = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new singlethread acq_rel acquire 293*9880d681SAndroid Build Coastguard Worker 294*9880d681SAndroid Build Coastguard Worker 295*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg i32* %ptr, i32 %cmp, i32 %new seq_cst seq_cst 296*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res17 = extractvalue { i32, i1 } [[TMP]], 0 297*9880d681SAndroid Build Coastguard Worker %res17 = cmpxchg i32* %ptr, i32 %cmp, i32 %new seq_cst seq_cst 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new seq_cst seq_cst 300*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res18 = extractvalue { i32, i1 } [[TMP]], 0 301*9880d681SAndroid Build Coastguard Worker %res18 = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new seq_cst seq_cst 302*9880d681SAndroid Build Coastguard Worker 303*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg i32* %ptr, i32 %cmp, i32 %new singlethread seq_cst seq_cst 304*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res19 = extractvalue { i32, i1 } [[TMP]], 0 305*9880d681SAndroid Build Coastguard Worker %res19 = cmpxchg i32* %ptr, i32 %cmp, i32 %new singlethread seq_cst seq_cst 306*9880d681SAndroid Build Coastguard Worker 307*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%[a-z0-9]+]] = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new singlethread seq_cst seq_cst 308*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res20 = extractvalue { i32, i1 } [[TMP]], 0 309*9880d681SAndroid Build Coastguard Worker %res20 = cmpxchg volatile i32* %ptr, i32 %cmp, i32 %new singlethread seq_cst seq_cst 310*9880d681SAndroid Build Coastguard Worker 311*9880d681SAndroid Build Coastguard Worker ret void 312*9880d681SAndroid Build Coastguard Worker} 313*9880d681SAndroid Build Coastguard Worker 314*9880d681SAndroid Build Coastguard Workerdefine void @getelementptr({i8, i8}, {i8, i8}* %s, <4 x i8*> %ptrs, <4 x i64> %offsets ){ 315*9880d681SAndroid Build Coastguard Workerentry: 316*9880d681SAndroid Build Coastguard Worker; CHECK: %res1 = getelementptr { i8, i8 }, { i8, i8 }* %s, i32 1, i32 1 317*9880d681SAndroid Build Coastguard Worker %res1 = getelementptr {i8, i8}, {i8, i8}* %s, i32 1, i32 1 318*9880d681SAndroid Build Coastguard Worker 319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res2 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %s, i32 1, i32 1 320*9880d681SAndroid Build Coastguard Worker %res2 = getelementptr inbounds {i8, i8}, {i8, i8}* %s, i32 1, i32 1 321*9880d681SAndroid Build Coastguard Worker 322*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %res3 = getelementptr i8, <4 x i8*> %ptrs, <4 x i64> %offsets 323*9880d681SAndroid Build Coastguard Worker %res3 = getelementptr i8, <4 x i8*> %ptrs, <4 x i64> %offsets 324*9880d681SAndroid Build Coastguard Worker 325*9880d681SAndroid Build Coastguard Worker ret void 326*9880d681SAndroid Build Coastguard Worker} 327*9880d681SAndroid Build Coastguard Worker 328*9880d681SAndroid Build Coastguard Worker!0 = metadata !{ i32 1 } 329*9880d681SAndroid Build Coastguard Worker!1 = metadata !{} 330