1; RUN: llc < %s -mtriple=ve | FileCheck %s 2 3;;; Test atomic store for all types and all memory order 4;;; 5;;; Note: 6;;; We test i1/i8/i16/i32/i64/i128/u8/u16/u32/u64/u128. 7;;; We test relaxed, release, and seq_cst. 8;;; We test an object, a stack object, and a global variable. 9 10%"struct.std::__1::atomic" = type { %"struct.std::__1::__atomic_base" } 11%"struct.std::__1::__atomic_base" = type { %"struct.std::__1::__cxx_atomic_impl" } 12%"struct.std::__1::__cxx_atomic_impl" = type { %"struct.std::__1::__cxx_atomic_base_impl" } 13%"struct.std::__1::__cxx_atomic_base_impl" = type { i8 } 14%"struct.std::__1::atomic.0" = type { %"struct.std::__1::__atomic_base.1" } 15%"struct.std::__1::__atomic_base.1" = type { %"struct.std::__1::__atomic_base.2" } 16%"struct.std::__1::__atomic_base.2" = type { %"struct.std::__1::__cxx_atomic_impl.3" } 17%"struct.std::__1::__cxx_atomic_impl.3" = type { %"struct.std::__1::__cxx_atomic_base_impl.4" } 18%"struct.std::__1::__cxx_atomic_base_impl.4" = type { i8 } 19%"struct.std::__1::atomic.5" = type { %"struct.std::__1::__atomic_base.6" } 20%"struct.std::__1::__atomic_base.6" = type { %"struct.std::__1::__atomic_base.7" } 21%"struct.std::__1::__atomic_base.7" = type { %"struct.std::__1::__cxx_atomic_impl.8" } 22%"struct.std::__1::__cxx_atomic_impl.8" = type { %"struct.std::__1::__cxx_atomic_base_impl.9" } 23%"struct.std::__1::__cxx_atomic_base_impl.9" = type { i8 } 24%"struct.std::__1::atomic.10" = type { %"struct.std::__1::__atomic_base.11" } 25%"struct.std::__1::__atomic_base.11" = type { %"struct.std::__1::__atomic_base.12" } 26%"struct.std::__1::__atomic_base.12" = type { %"struct.std::__1::__cxx_atomic_impl.13" } 27%"struct.std::__1::__cxx_atomic_impl.13" = type { %"struct.std::__1::__cxx_atomic_base_impl.14" } 28%"struct.std::__1::__cxx_atomic_base_impl.14" = type { i16 } 29%"struct.std::__1::atomic.15" = type { %"struct.std::__1::__atomic_base.16" } 30%"struct.std::__1::__atomic_base.16" = type { %"struct.std::__1::__atomic_base.17" } 31%"struct.std::__1::__atomic_base.17" = type { %"struct.std::__1::__cxx_atomic_impl.18" } 32%"struct.std::__1::__cxx_atomic_impl.18" = type { %"struct.std::__1::__cxx_atomic_base_impl.19" } 33%"struct.std::__1::__cxx_atomic_base_impl.19" = type { i16 } 34%"struct.std::__1::atomic.20" = type { %"struct.std::__1::__atomic_base.21" } 35%"struct.std::__1::__atomic_base.21" = type { %"struct.std::__1::__atomic_base.22" } 36%"struct.std::__1::__atomic_base.22" = type { %"struct.std::__1::__cxx_atomic_impl.23" } 37%"struct.std::__1::__cxx_atomic_impl.23" = type { %"struct.std::__1::__cxx_atomic_base_impl.24" } 38%"struct.std::__1::__cxx_atomic_base_impl.24" = type { i32 } 39%"struct.std::__1::atomic.25" = type { %"struct.std::__1::__atomic_base.26" } 40%"struct.std::__1::__atomic_base.26" = type { %"struct.std::__1::__atomic_base.27" } 41%"struct.std::__1::__atomic_base.27" = type { %"struct.std::__1::__cxx_atomic_impl.28" } 42%"struct.std::__1::__cxx_atomic_impl.28" = type { %"struct.std::__1::__cxx_atomic_base_impl.29" } 43%"struct.std::__1::__cxx_atomic_base_impl.29" = type { i32 } 44%"struct.std::__1::atomic.30" = type { %"struct.std::__1::__atomic_base.31" } 45%"struct.std::__1::__atomic_base.31" = type { %"struct.std::__1::__atomic_base.32" } 46%"struct.std::__1::__atomic_base.32" = type { %"struct.std::__1::__cxx_atomic_impl.33" } 47%"struct.std::__1::__cxx_atomic_impl.33" = type { %"struct.std::__1::__cxx_atomic_base_impl.34" } 48%"struct.std::__1::__cxx_atomic_base_impl.34" = type { i64 } 49%"struct.std::__1::atomic.35" = type { %"struct.std::__1::__atomic_base.36" } 50%"struct.std::__1::__atomic_base.36" = type { %"struct.std::__1::__atomic_base.37" } 51%"struct.std::__1::__atomic_base.37" = type { %"struct.std::__1::__cxx_atomic_impl.38" } 52%"struct.std::__1::__cxx_atomic_impl.38" = type { %"struct.std::__1::__cxx_atomic_base_impl.39" } 53%"struct.std::__1::__cxx_atomic_base_impl.39" = type { i64 } 54%"struct.std::__1::atomic.40" = type { %"struct.std::__1::__atomic_base.41" } 55%"struct.std::__1::__atomic_base.41" = type { %"struct.std::__1::__atomic_base.42" } 56%"struct.std::__1::__atomic_base.42" = type { %"struct.std::__1::__cxx_atomic_impl.43" } 57%"struct.std::__1::__cxx_atomic_impl.43" = type { %"struct.std::__1::__cxx_atomic_base_impl.44" } 58%"struct.std::__1::__cxx_atomic_base_impl.44" = type { i128 } 59%"struct.std::__1::atomic.45" = type { %"struct.std::__1::__atomic_base.46" } 60%"struct.std::__1::__atomic_base.46" = type { %"struct.std::__1::__atomic_base.47" } 61%"struct.std::__1::__atomic_base.47" = type { %"struct.std::__1::__cxx_atomic_impl.48" } 62%"struct.std::__1::__cxx_atomic_impl.48" = type { %"struct.std::__1::__cxx_atomic_base_impl.49" } 63%"struct.std::__1::__cxx_atomic_base_impl.49" = type { i128 } 64 65@gv_i1 = global %"struct.std::__1::atomic" zeroinitializer, align 4 66@gv_i8 = global %"struct.std::__1::atomic.0" zeroinitializer, align 4 67@gv_u8 = global %"struct.std::__1::atomic.5" zeroinitializer, align 4 68@gv_i16 = global %"struct.std::__1::atomic.10" zeroinitializer, align 4 69@gv_u16 = global %"struct.std::__1::atomic.15" zeroinitializer, align 4 70@gv_i32 = global %"struct.std::__1::atomic.20" zeroinitializer, align 4 71@gv_u32 = global %"struct.std::__1::atomic.25" zeroinitializer, align 4 72@gv_i64 = global %"struct.std::__1::atomic.30" zeroinitializer, align 8 73@gv_u64 = global %"struct.std::__1::atomic.35" zeroinitializer, align 8 74@gv_i128 = global %"struct.std::__1::atomic.40" zeroinitializer, align 16 75@gv_u128 = global %"struct.std::__1::atomic.45" zeroinitializer, align 16 76 77; Function Attrs: nofree norecurse nounwind mustprogress 78define void @_Z23atomic_store_relaxed_i1RNSt3__16atomicIbEEb(ptr nocapture nonnull align 1 dereferenceable(1) %0, i1 zeroext %1) { 79; CHECK-LABEL: _Z23atomic_store_relaxed_i1RNSt3__16atomicIbEEb: 80; CHECK: # %bb.0: 81; CHECK-NEXT: st1b %s1, (, %s0) 82; CHECK-NEXT: b.l.t (, %s10) 83 %3 = zext i1 %1 to i8 84 store atomic i8 %3, ptr %0 monotonic, align 1 85 ret void 86} 87 88; Function Attrs: nofree norecurse nounwind mustprogress 89define void @_Z23atomic_store_relaxed_i8RNSt3__16atomicIcEEc(ptr nocapture nonnull align 1 dereferenceable(1) %0, i8 signext %1) { 90; CHECK-LABEL: _Z23atomic_store_relaxed_i8RNSt3__16atomicIcEEc: 91; CHECK: # %bb.0: 92; CHECK-NEXT: st1b %s1, (, %s0) 93; CHECK-NEXT: b.l.t (, %s10) 94 store atomic i8 %1, ptr %0 monotonic, align 1 95 ret void 96} 97 98; Function Attrs: nofree norecurse nounwind mustprogress 99define void @_Z23atomic_store_relaxed_u8RNSt3__16atomicIhEEh(ptr nocapture nonnull align 1 dereferenceable(1) %0, i8 zeroext %1) { 100; CHECK-LABEL: _Z23atomic_store_relaxed_u8RNSt3__16atomicIhEEh: 101; CHECK: # %bb.0: 102; CHECK-NEXT: st1b %s1, (, %s0) 103; CHECK-NEXT: b.l.t (, %s10) 104 store atomic i8 %1, ptr %0 monotonic, align 1 105 ret void 106} 107 108; Function Attrs: nofree norecurse nounwind mustprogress 109define void @_Z24atomic_store_relaxed_i16RNSt3__16atomicIsEEs(ptr nocapture nonnull align 2 dereferenceable(2) %0, i16 signext %1) { 110; CHECK-LABEL: _Z24atomic_store_relaxed_i16RNSt3__16atomicIsEEs: 111; CHECK: # %bb.0: 112; CHECK-NEXT: st2b %s1, (, %s0) 113; CHECK-NEXT: b.l.t (, %s10) 114 store atomic i16 %1, ptr %0 monotonic, align 2 115 ret void 116} 117 118; Function Attrs: nofree norecurse nounwind mustprogress 119define void @_Z24atomic_store_relaxed_u16RNSt3__16atomicItEEt(ptr nocapture nonnull align 2 dereferenceable(2) %0, i16 zeroext %1) { 120; CHECK-LABEL: _Z24atomic_store_relaxed_u16RNSt3__16atomicItEEt: 121; CHECK: # %bb.0: 122; CHECK-NEXT: st2b %s1, (, %s0) 123; CHECK-NEXT: b.l.t (, %s10) 124 store atomic i16 %1, ptr %0 monotonic, align 2 125 ret void 126} 127 128; Function Attrs: nofree norecurse nounwind mustprogress 129define void @_Z24atomic_store_relaxed_i32RNSt3__16atomicIiEEi(ptr nocapture nonnull align 4 dereferenceable(4) %0, i32 signext %1) { 130; CHECK-LABEL: _Z24atomic_store_relaxed_i32RNSt3__16atomicIiEEi: 131; CHECK: # %bb.0: 132; CHECK-NEXT: stl %s1, (, %s0) 133; CHECK-NEXT: b.l.t (, %s10) 134 store atomic i32 %1, ptr %0 monotonic, align 4 135 ret void 136} 137 138; Function Attrs: nofree norecurse nounwind mustprogress 139define void @_Z24atomic_store_relaxed_u32RNSt3__16atomicIjEEj(ptr nocapture nonnull align 4 dereferenceable(4) %0, i32 zeroext %1) { 140; CHECK-LABEL: _Z24atomic_store_relaxed_u32RNSt3__16atomicIjEEj: 141; CHECK: # %bb.0: 142; CHECK-NEXT: stl %s1, (, %s0) 143; CHECK-NEXT: b.l.t (, %s10) 144 store atomic i32 %1, ptr %0 monotonic, align 4 145 ret void 146} 147 148; Function Attrs: nofree norecurse nounwind mustprogress 149define void @_Z24atomic_store_relaxed_i64RNSt3__16atomicIlEEl(ptr nocapture nonnull align 8 dereferenceable(8) %0, i64 %1) { 150; CHECK-LABEL: _Z24atomic_store_relaxed_i64RNSt3__16atomicIlEEl: 151; CHECK: # %bb.0: 152; CHECK-NEXT: st %s1, (, %s0) 153; CHECK-NEXT: b.l.t (, %s10) 154 store atomic i64 %1, ptr %0 monotonic, align 8 155 ret void 156} 157 158; Function Attrs: nofree norecurse nounwind mustprogress 159define void @_Z24atomic_store_relaxed_u64RNSt3__16atomicImEEm(ptr nocapture nonnull align 8 dereferenceable(8) %0, i64 %1) { 160; CHECK-LABEL: _Z24atomic_store_relaxed_u64RNSt3__16atomicImEEm: 161; CHECK: # %bb.0: 162; CHECK-NEXT: st %s1, (, %s0) 163; CHECK-NEXT: b.l.t (, %s10) 164 store atomic i64 %1, ptr %0 monotonic, align 8 165 ret void 166} 167 168; Function Attrs: nofree nounwind mustprogress 169define void @_Z25atomic_store_relaxed_i128RNSt3__16atomicInEEn(ptr nonnull align 16 dereferenceable(16) %0, i128 %1) { 170; CHECK-LABEL: _Z25atomic_store_relaxed_i128RNSt3__16atomicInEEn: 171; CHECK: .LBB{{[0-9]+}}_2: 172; CHECK-NEXT: or %s4, 0, %s0 173; CHECK-NEXT: st %s2, 248(, %s11) 174; CHECK-NEXT: st %s1, 240(, %s11) 175; CHECK-NEXT: lea %s0, __atomic_store@lo 176; CHECK-NEXT: and %s0, %s0, (32)0 177; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0) 178; CHECK-NEXT: lea %s2, 240(, %s11) 179; CHECK-NEXT: or %s0, 16, (0)1 180; CHECK-NEXT: or %s3, 0, (0)1 181; CHECK-NEXT: or %s1, 0, %s4 182; CHECK-NEXT: bsic %s10, (, %s12) 183; CHECK-NEXT: or %s11, 0, %s9 184 %3 = alloca i128, align 16 185 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) 186 store i128 %1, ptr %3, align 16, !tbaa !2 187 call void @__atomic_store(i64 16, ptr nonnull %0, ptr nonnull %3, i32 signext 0) 188 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) 189 ret void 190} 191 192; Function Attrs: nofree nounwind mustprogress 193define void @_Z25atomic_store_relaxed_u128RNSt3__16atomicIoEEo(ptr nonnull align 16 dereferenceable(16) %0, i128 %1) { 194; CHECK-LABEL: _Z25atomic_store_relaxed_u128RNSt3__16atomicIoEEo: 195; CHECK: .LBB{{[0-9]+}}_2: 196; CHECK-NEXT: or %s4, 0, %s0 197; CHECK-NEXT: st %s2, 248(, %s11) 198; CHECK-NEXT: st %s1, 240(, %s11) 199; CHECK-NEXT: lea %s0, __atomic_store@lo 200; CHECK-NEXT: and %s0, %s0, (32)0 201; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0) 202; CHECK-NEXT: lea %s2, 240(, %s11) 203; CHECK-NEXT: or %s0, 16, (0)1 204; CHECK-NEXT: or %s3, 0, (0)1 205; CHECK-NEXT: or %s1, 0, %s4 206; CHECK-NEXT: bsic %s10, (, %s12) 207; CHECK-NEXT: or %s11, 0, %s9 208 %3 = alloca i128, align 16 209 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) 210 store i128 %1, ptr %3, align 16, !tbaa !2 211 call void @__atomic_store(i64 16, ptr nonnull %0, ptr nonnull %3, i32 signext 0) 212 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) 213 ret void 214} 215 216; Function Attrs: nofree norecurse nounwind mustprogress 217define void @_Z23atomic_store_release_i1RNSt3__16atomicIbEEb(ptr nocapture nonnull align 1 dereferenceable(1) %0, i1 zeroext %1) { 218; CHECK-LABEL: _Z23atomic_store_release_i1RNSt3__16atomicIbEEb: 219; CHECK: # %bb.0: 220; CHECK-NEXT: fencem 1 221; CHECK-NEXT: st1b %s1, (, %s0) 222; CHECK-NEXT: b.l.t (, %s10) 223 %3 = zext i1 %1 to i8 224 store atomic i8 %3, ptr %0 release, align 1 225 ret void 226} 227 228; Function Attrs: nofree norecurse nounwind mustprogress 229define void @_Z23atomic_store_release_i8RNSt3__16atomicIcEEc(ptr nocapture nonnull align 1 dereferenceable(1) %0, i8 signext %1) { 230; CHECK-LABEL: _Z23atomic_store_release_i8RNSt3__16atomicIcEEc: 231; CHECK: # %bb.0: 232; CHECK-NEXT: fencem 1 233; CHECK-NEXT: st1b %s1, (, %s0) 234; CHECK-NEXT: b.l.t (, %s10) 235 store atomic i8 %1, ptr %0 release, align 1 236 ret void 237} 238 239; Function Attrs: nofree norecurse nounwind mustprogress 240define void @_Z23atomic_store_release_u8RNSt3__16atomicIhEEh(ptr nocapture nonnull align 1 dereferenceable(1) %0, i8 zeroext %1) { 241; CHECK-LABEL: _Z23atomic_store_release_u8RNSt3__16atomicIhEEh: 242; CHECK: # %bb.0: 243; CHECK-NEXT: fencem 1 244; CHECK-NEXT: st1b %s1, (, %s0) 245; CHECK-NEXT: b.l.t (, %s10) 246 store atomic i8 %1, ptr %0 release, align 1 247 ret void 248} 249 250; Function Attrs: nofree norecurse nounwind mustprogress 251define void @_Z24atomic_store_release_i16RNSt3__16atomicIsEEs(ptr nocapture nonnull align 2 dereferenceable(2) %0, i16 signext %1) { 252; CHECK-LABEL: _Z24atomic_store_release_i16RNSt3__16atomicIsEEs: 253; CHECK: # %bb.0: 254; CHECK-NEXT: fencem 1 255; CHECK-NEXT: st2b %s1, (, %s0) 256; CHECK-NEXT: b.l.t (, %s10) 257 store atomic i16 %1, ptr %0 release, align 2 258 ret void 259} 260 261; Function Attrs: nofree norecurse nounwind mustprogress 262define void @_Z24atomic_store_release_u16RNSt3__16atomicItEEt(ptr nocapture nonnull align 2 dereferenceable(2) %0, i16 zeroext %1) { 263; CHECK-LABEL: _Z24atomic_store_release_u16RNSt3__16atomicItEEt: 264; CHECK: # %bb.0: 265; CHECK-NEXT: fencem 1 266; CHECK-NEXT: st2b %s1, (, %s0) 267; CHECK-NEXT: b.l.t (, %s10) 268 store atomic i16 %1, ptr %0 release, align 2 269 ret void 270} 271 272; Function Attrs: nofree norecurse nounwind mustprogress 273define void @_Z24atomic_store_release_i32RNSt3__16atomicIiEEi(ptr nocapture nonnull align 4 dereferenceable(4) %0, i32 signext %1) { 274; CHECK-LABEL: _Z24atomic_store_release_i32RNSt3__16atomicIiEEi: 275; CHECK: # %bb.0: 276; CHECK-NEXT: fencem 1 277; CHECK-NEXT: stl %s1, (, %s0) 278; CHECK-NEXT: b.l.t (, %s10) 279 store atomic i32 %1, ptr %0 release, align 4 280 ret void 281} 282 283; Function Attrs: nofree norecurse nounwind mustprogress 284define void @_Z24atomic_store_release_u32RNSt3__16atomicIjEEj(ptr nocapture nonnull align 4 dereferenceable(4) %0, i32 zeroext %1) { 285; CHECK-LABEL: _Z24atomic_store_release_u32RNSt3__16atomicIjEEj: 286; CHECK: # %bb.0: 287; CHECK-NEXT: fencem 1 288; CHECK-NEXT: stl %s1, (, %s0) 289; CHECK-NEXT: b.l.t (, %s10) 290 store atomic i32 %1, ptr %0 release, align 4 291 ret void 292} 293 294; Function Attrs: nofree norecurse nounwind mustprogress 295define void @_Z24atomic_store_release_i64RNSt3__16atomicIlEEl(ptr nocapture nonnull align 8 dereferenceable(8) %0, i64 %1) { 296; CHECK-LABEL: _Z24atomic_store_release_i64RNSt3__16atomicIlEEl: 297; CHECK: # %bb.0: 298; CHECK-NEXT: fencem 1 299; CHECK-NEXT: st %s1, (, %s0) 300; CHECK-NEXT: b.l.t (, %s10) 301 store atomic i64 %1, ptr %0 release, align 8 302 ret void 303} 304 305; Function Attrs: nofree norecurse nounwind mustprogress 306define void @_Z24atomic_store_release_u64RNSt3__16atomicImEEm(ptr nocapture nonnull align 8 dereferenceable(8) %0, i64 %1) { 307; CHECK-LABEL: _Z24atomic_store_release_u64RNSt3__16atomicImEEm: 308; CHECK: # %bb.0: 309; CHECK-NEXT: fencem 1 310; CHECK-NEXT: st %s1, (, %s0) 311; CHECK-NEXT: b.l.t (, %s10) 312 store atomic i64 %1, ptr %0 release, align 8 313 ret void 314} 315 316; Function Attrs: nofree nounwind mustprogress 317define void @_Z25atomic_store_release_i128RNSt3__16atomicInEEn(ptr nonnull align 16 dereferenceable(16) %0, i128 %1) { 318; CHECK-LABEL: _Z25atomic_store_release_i128RNSt3__16atomicInEEn: 319; CHECK: .LBB{{[0-9]+}}_2: 320; CHECK-NEXT: or %s4, 0, %s0 321; CHECK-NEXT: st %s2, 248(, %s11) 322; CHECK-NEXT: st %s1, 240(, %s11) 323; CHECK-NEXT: lea %s0, __atomic_store@lo 324; CHECK-NEXT: and %s0, %s0, (32)0 325; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0) 326; CHECK-NEXT: lea %s2, 240(, %s11) 327; CHECK-NEXT: or %s0, 16, (0)1 328; CHECK-NEXT: or %s3, 3, (0)1 329; CHECK-NEXT: or %s1, 0, %s4 330; CHECK-NEXT: bsic %s10, (, %s12) 331; CHECK-NEXT: or %s11, 0, %s9 332 %3 = alloca i128, align 16 333 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) 334 store i128 %1, ptr %3, align 16, !tbaa !2 335 call void @__atomic_store(i64 16, ptr nonnull %0, ptr nonnull %3, i32 signext 3) 336 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) 337 ret void 338} 339 340; Function Attrs: nofree nounwind mustprogress 341define void @_Z25atomic_store_release_u128RNSt3__16atomicIoEEo(ptr nonnull align 16 dereferenceable(16) %0, i128 %1) { 342; CHECK-LABEL: _Z25atomic_store_release_u128RNSt3__16atomicIoEEo: 343; CHECK: .LBB{{[0-9]+}}_2: 344; CHECK-NEXT: or %s4, 0, %s0 345; CHECK-NEXT: st %s2, 248(, %s11) 346; CHECK-NEXT: st %s1, 240(, %s11) 347; CHECK-NEXT: lea %s0, __atomic_store@lo 348; CHECK-NEXT: and %s0, %s0, (32)0 349; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0) 350; CHECK-NEXT: lea %s2, 240(, %s11) 351; CHECK-NEXT: or %s0, 16, (0)1 352; CHECK-NEXT: or %s3, 3, (0)1 353; CHECK-NEXT: or %s1, 0, %s4 354; CHECK-NEXT: bsic %s10, (, %s12) 355; CHECK-NEXT: or %s11, 0, %s9 356 %3 = alloca i128, align 16 357 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) 358 store i128 %1, ptr %3, align 16, !tbaa !2 359 call void @__atomic_store(i64 16, ptr nonnull %0, ptr nonnull %3, i32 signext 3) 360 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) 361 ret void 362} 363 364; Function Attrs: nofree norecurse nounwind mustprogress 365define void @_Z23atomic_store_seq_cst_i1RNSt3__16atomicIbEEb(ptr nocapture nonnull align 1 dereferenceable(1) %0, i1 zeroext %1) { 366; CHECK-LABEL: _Z23atomic_store_seq_cst_i1RNSt3__16atomicIbEEb: 367; CHECK: # %bb.0: 368; CHECK-NEXT: fencem 3 369; CHECK-NEXT: st1b %s1, (, %s0) 370; CHECK-NEXT: fencem 3 371; CHECK-NEXT: b.l.t (, %s10) 372 %3 = zext i1 %1 to i8 373 store atomic i8 %3, ptr %0 seq_cst, align 1 374 ret void 375} 376 377; Function Attrs: nofree norecurse nounwind mustprogress 378define void @_Z23atomic_store_seq_cst_i8RNSt3__16atomicIcEEc(ptr nocapture nonnull align 1 dereferenceable(1) %0, i8 signext %1) { 379; CHECK-LABEL: _Z23atomic_store_seq_cst_i8RNSt3__16atomicIcEEc: 380; CHECK: # %bb.0: 381; CHECK-NEXT: fencem 3 382; CHECK-NEXT: st1b %s1, (, %s0) 383; CHECK-NEXT: fencem 3 384; CHECK-NEXT: b.l.t (, %s10) 385 store atomic i8 %1, ptr %0 seq_cst, align 1 386 ret void 387} 388 389; Function Attrs: nofree norecurse nounwind mustprogress 390define void @_Z23atomic_store_seq_cst_u8RNSt3__16atomicIhEEh(ptr nocapture nonnull align 1 dereferenceable(1) %0, i8 zeroext %1) { 391; CHECK-LABEL: _Z23atomic_store_seq_cst_u8RNSt3__16atomicIhEEh: 392; CHECK: # %bb.0: 393; CHECK-NEXT: fencem 3 394; CHECK-NEXT: st1b %s1, (, %s0) 395; CHECK-NEXT: fencem 3 396; CHECK-NEXT: b.l.t (, %s10) 397 store atomic i8 %1, ptr %0 seq_cst, align 1 398 ret void 399} 400 401; Function Attrs: nofree norecurse nounwind mustprogress 402define void @_Z24atomic_store_seq_cst_i16RNSt3__16atomicIsEEs(ptr nocapture nonnull align 2 dereferenceable(2) %0, i16 signext %1) { 403; CHECK-LABEL: _Z24atomic_store_seq_cst_i16RNSt3__16atomicIsEEs: 404; CHECK: # %bb.0: 405; CHECK-NEXT: fencem 3 406; CHECK-NEXT: st2b %s1, (, %s0) 407; CHECK-NEXT: fencem 3 408; CHECK-NEXT: b.l.t (, %s10) 409 store atomic i16 %1, ptr %0 seq_cst, align 2 410 ret void 411} 412 413; Function Attrs: nofree norecurse nounwind mustprogress 414define void @_Z24atomic_store_seq_cst_u16RNSt3__16atomicItEEt(ptr nocapture nonnull align 2 dereferenceable(2) %0, i16 zeroext %1) { 415; CHECK-LABEL: _Z24atomic_store_seq_cst_u16RNSt3__16atomicItEEt: 416; CHECK: # %bb.0: 417; CHECK-NEXT: fencem 3 418; CHECK-NEXT: st2b %s1, (, %s0) 419; CHECK-NEXT: fencem 3 420; CHECK-NEXT: b.l.t (, %s10) 421 store atomic i16 %1, ptr %0 seq_cst, align 2 422 ret void 423} 424 425; Function Attrs: nofree norecurse nounwind mustprogress 426define void @_Z24atomic_store_seq_cst_i32RNSt3__16atomicIiEEi(ptr nocapture nonnull align 4 dereferenceable(4) %0, i32 signext %1) { 427; CHECK-LABEL: _Z24atomic_store_seq_cst_i32RNSt3__16atomicIiEEi: 428; CHECK: # %bb.0: 429; CHECK-NEXT: fencem 3 430; CHECK-NEXT: stl %s1, (, %s0) 431; CHECK-NEXT: fencem 3 432; CHECK-NEXT: b.l.t (, %s10) 433 store atomic i32 %1, ptr %0 seq_cst, align 4 434 ret void 435} 436 437; Function Attrs: nofree norecurse nounwind mustprogress 438define void @_Z24atomic_store_seq_cst_u32RNSt3__16atomicIjEEj(ptr nocapture nonnull align 4 dereferenceable(4) %0, i32 zeroext %1) { 439; CHECK-LABEL: _Z24atomic_store_seq_cst_u32RNSt3__16atomicIjEEj: 440; CHECK: # %bb.0: 441; CHECK-NEXT: fencem 3 442; CHECK-NEXT: stl %s1, (, %s0) 443; CHECK-NEXT: fencem 3 444; CHECK-NEXT: b.l.t (, %s10) 445 store atomic i32 %1, ptr %0 seq_cst, align 4 446 ret void 447} 448 449; Function Attrs: nofree norecurse nounwind mustprogress 450define void @_Z24atomic_store_seq_cst_i64RNSt3__16atomicIlEEl(ptr nocapture nonnull align 8 dereferenceable(8) %0, i64 %1) { 451; CHECK-LABEL: _Z24atomic_store_seq_cst_i64RNSt3__16atomicIlEEl: 452; CHECK: # %bb.0: 453; CHECK-NEXT: fencem 3 454; CHECK-NEXT: st %s1, (, %s0) 455; CHECK-NEXT: fencem 3 456; CHECK-NEXT: b.l.t (, %s10) 457 store atomic i64 %1, ptr %0 seq_cst, align 8 458 ret void 459} 460 461; Function Attrs: nofree norecurse nounwind mustprogress 462define void @_Z24atomic_store_seq_cst_u64RNSt3__16atomicImEEm(ptr nocapture nonnull align 8 dereferenceable(8) %0, i64 %1) { 463; CHECK-LABEL: _Z24atomic_store_seq_cst_u64RNSt3__16atomicImEEm: 464; CHECK: # %bb.0: 465; CHECK-NEXT: fencem 3 466; CHECK-NEXT: st %s1, (, %s0) 467; CHECK-NEXT: fencem 3 468; CHECK-NEXT: b.l.t (, %s10) 469 store atomic i64 %1, ptr %0 seq_cst, align 8 470 ret void 471} 472 473; Function Attrs: nofree nounwind mustprogress 474define void @_Z25atomic_store_seq_cst_i128RNSt3__16atomicInEEn(ptr nonnull align 16 dereferenceable(16) %0, i128 %1) { 475; CHECK-LABEL: _Z25atomic_store_seq_cst_i128RNSt3__16atomicInEEn: 476; CHECK: .LBB{{[0-9]+}}_2: 477; CHECK-NEXT: or %s4, 0, %s0 478; CHECK-NEXT: st %s2, 248(, %s11) 479; CHECK-NEXT: st %s1, 240(, %s11) 480; CHECK-NEXT: lea %s0, __atomic_store@lo 481; CHECK-NEXT: and %s0, %s0, (32)0 482; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0) 483; CHECK-NEXT: lea %s2, 240(, %s11) 484; CHECK-NEXT: or %s0, 16, (0)1 485; CHECK-NEXT: or %s3, 5, (0)1 486; CHECK-NEXT: or %s1, 0, %s4 487; CHECK-NEXT: bsic %s10, (, %s12) 488; CHECK-NEXT: or %s11, 0, %s9 489 %3 = alloca i128, align 16 490 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) 491 store i128 %1, ptr %3, align 16, !tbaa !2 492 call void @__atomic_store(i64 16, ptr nonnull %0, ptr nonnull %3, i32 signext 5) 493 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) 494 ret void 495} 496 497; Function Attrs: nofree nounwind mustprogress 498define void @_Z25atomic_store_seq_cst_u128RNSt3__16atomicIoEEo(ptr nonnull align 16 dereferenceable(16) %0, i128 %1) { 499; CHECK-LABEL: _Z25atomic_store_seq_cst_u128RNSt3__16atomicIoEEo: 500; CHECK: .LBB{{[0-9]+}}_2: 501; CHECK-NEXT: or %s4, 0, %s0 502; CHECK-NEXT: st %s2, 248(, %s11) 503; CHECK-NEXT: st %s1, 240(, %s11) 504; CHECK-NEXT: lea %s0, __atomic_store@lo 505; CHECK-NEXT: and %s0, %s0, (32)0 506; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0) 507; CHECK-NEXT: lea %s2, 240(, %s11) 508; CHECK-NEXT: or %s0, 16, (0)1 509; CHECK-NEXT: or %s3, 5, (0)1 510; CHECK-NEXT: or %s1, 0, %s4 511; CHECK-NEXT: bsic %s10, (, %s12) 512; CHECK-NEXT: or %s11, 0, %s9 513 %3 = alloca i128, align 16 514 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) 515 store i128 %1, ptr %3, align 16, !tbaa !2 516 call void @__atomic_store(i64 16, ptr nonnull %0, ptr nonnull %3, i32 signext 5) 517 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) 518 ret void 519} 520 521; Function Attrs: nofree nounwind mustprogress 522define void @_Z26atomic_load_relaxed_stk_i1b(i1 zeroext %0) { 523; CHECK-LABEL: _Z26atomic_load_relaxed_stk_i1b: 524; CHECK: .LBB{{[0-9]+}}_2: 525; CHECK-NEXT: st1b %s0, 15(, %s11) 526; CHECK-NEXT: adds.l %s11, 16, %s11 527; CHECK-NEXT: b.l.t (, %s10) 528 %2 = alloca i8, align 1 529 call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %2) 530 %3 = zext i1 %0 to i8 531 store atomic volatile i8 %3, ptr %2 monotonic, align 1 532 call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %2) 533 ret void 534} 535 536; Function Attrs: argmemonly nofree nosync nounwind willreturn 537declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) 538 539; Function Attrs: argmemonly nofree nosync nounwind willreturn 540declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) 541 542; Function Attrs: nofree nounwind mustprogress 543define void @_Z26atomic_load_relaxed_stk_i8c(i8 signext %0) { 544; CHECK-LABEL: _Z26atomic_load_relaxed_stk_i8c: 545; CHECK: .LBB{{[0-9]+}}_2: 546; CHECK-NEXT: st1b %s0, 15(, %s11) 547; CHECK-NEXT: adds.l %s11, 16, %s11 548; CHECK-NEXT: b.l.t (, %s10) 549 %2 = alloca i8, align 1 550 call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %2) 551 store atomic volatile i8 %0, ptr %2 monotonic, align 1 552 call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %2) 553 ret void 554} 555 556; Function Attrs: nofree nounwind mustprogress 557define void @_Z26atomic_load_relaxed_stk_u8h(i8 zeroext %0) { 558; CHECK-LABEL: _Z26atomic_load_relaxed_stk_u8h: 559; CHECK: .LBB{{[0-9]+}}_2: 560; CHECK-NEXT: st1b %s0, 15(, %s11) 561; CHECK-NEXT: adds.l %s11, 16, %s11 562; CHECK-NEXT: b.l.t (, %s10) 563 %2 = alloca i8, align 1 564 call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %2) 565 store atomic volatile i8 %0, ptr %2 monotonic, align 1 566 call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %2) 567 ret void 568} 569 570; Function Attrs: nofree nounwind mustprogress 571define void @_Z27atomic_load_relaxed_stk_i16s(i16 signext %0) { 572; CHECK-LABEL: _Z27atomic_load_relaxed_stk_i16s: 573; CHECK: .LBB{{[0-9]+}}_2: 574; CHECK-NEXT: st2b %s0, 14(, %s11) 575; CHECK-NEXT: adds.l %s11, 16, %s11 576; CHECK-NEXT: b.l.t (, %s10) 577 %2 = alloca i16, align 2 578 call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %2) 579 store atomic volatile i16 %0, ptr %2 monotonic, align 2 580 call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %2) 581 ret void 582} 583 584; Function Attrs: nofree nounwind mustprogress 585define void @_Z27atomic_load_relaxed_stk_u16t(i16 zeroext %0) { 586; CHECK-LABEL: _Z27atomic_load_relaxed_stk_u16t: 587; CHECK: .LBB{{[0-9]+}}_2: 588; CHECK-NEXT: st2b %s0, 14(, %s11) 589; CHECK-NEXT: adds.l %s11, 16, %s11 590; CHECK-NEXT: b.l.t (, %s10) 591 %2 = alloca i16, align 2 592 call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %2) 593 store atomic volatile i16 %0, ptr %2 monotonic, align 2 594 call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %2) 595 ret void 596} 597 598; Function Attrs: nofree nounwind mustprogress 599define void @_Z27atomic_load_relaxed_stk_i32i(i32 signext %0) { 600; CHECK-LABEL: _Z27atomic_load_relaxed_stk_i32i: 601; CHECK: .LBB{{[0-9]+}}_2: 602; CHECK-NEXT: stl %s0, 12(, %s11) 603; CHECK-NEXT: adds.l %s11, 16, %s11 604; CHECK-NEXT: b.l.t (, %s10) 605 %2 = alloca i32, align 4 606 call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %2) 607 store atomic volatile i32 %0, ptr %2 monotonic, align 4 608 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %2) 609 ret void 610} 611 612; Function Attrs: nofree nounwind mustprogress 613define void @_Z27atomic_load_relaxed_stk_u32j(i32 zeroext %0) { 614; CHECK-LABEL: _Z27atomic_load_relaxed_stk_u32j: 615; CHECK: .LBB{{[0-9]+}}_2: 616; CHECK-NEXT: stl %s0, 12(, %s11) 617; CHECK-NEXT: adds.l %s11, 16, %s11 618; CHECK-NEXT: b.l.t (, %s10) 619 %2 = alloca i32, align 4 620 call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %2) 621 store atomic volatile i32 %0, ptr %2 monotonic, align 4 622 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %2) 623 ret void 624} 625 626; Function Attrs: nofree nounwind mustprogress 627define void @_Z27atomic_load_relaxed_stk_i64l(i64 %0) { 628; CHECK-LABEL: _Z27atomic_load_relaxed_stk_i64l: 629; CHECK: .LBB{{[0-9]+}}_2: 630; CHECK-NEXT: st %s0, 8(, %s11) 631; CHECK-NEXT: adds.l %s11, 16, %s11 632; CHECK-NEXT: b.l.t (, %s10) 633 %2 = alloca i64, align 8 634 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) 635 store atomic volatile i64 %0, ptr %2 monotonic, align 8 636 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) 637 ret void 638} 639 640; Function Attrs: nofree nounwind mustprogress 641define void @_Z27atomic_load_relaxed_stk_u64m(i64 %0) { 642; CHECK-LABEL: _Z27atomic_load_relaxed_stk_u64m: 643; CHECK: .LBB{{[0-9]+}}_2: 644; CHECK-NEXT: st %s0, 8(, %s11) 645; CHECK-NEXT: adds.l %s11, 16, %s11 646; CHECK-NEXT: b.l.t (, %s10) 647 %2 = alloca i64, align 8 648 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) 649 store atomic volatile i64 %0, ptr %2 monotonic, align 8 650 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) 651 ret void 652} 653 654; Function Attrs: nofree nounwind mustprogress 655define void @_Z28atomic_load_relaxed_stk_i128n(i128 %0) { 656; CHECK-LABEL: _Z28atomic_load_relaxed_stk_i128n: 657; CHECK: .LBB{{[0-9]+}}_2: 658; CHECK-NEXT: st %s1, 264(, %s11) 659; CHECK-NEXT: st %s0, 256(, %s11) 660; CHECK-NEXT: lea %s0, __atomic_store@lo 661; CHECK-NEXT: and %s0, %s0, (32)0 662; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0) 663; CHECK-NEXT: lea %s1, 240(, %s11) 664; CHECK-NEXT: lea %s2, 256(, %s11) 665; CHECK-NEXT: or %s0, 16, (0)1 666; CHECK-NEXT: or %s3, 0, (0)1 667; CHECK-NEXT: bsic %s10, (, %s12) 668; CHECK-NEXT: or %s11, 0, %s9 669 %2 = alloca i128, align 16 670 %3 = alloca %"struct.std::__1::atomic.40", align 16 671 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) 672 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) 673 store i128 %0, ptr %2, align 16, !tbaa !2 674 call void @__atomic_store(i64 16, ptr nonnull %3, ptr nonnull %2, i32 signext 0) 675 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) 676 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) 677 ret void 678} 679 680; Function Attrs: nofree nounwind mustprogress 681define void @_Z28atomic_load_relaxed_stk_u128o(i128 %0) { 682; CHECK-LABEL: _Z28atomic_load_relaxed_stk_u128o: 683; CHECK: .LBB{{[0-9]+}}_2: 684; CHECK-NEXT: st %s1, 264(, %s11) 685; CHECK-NEXT: st %s0, 256(, %s11) 686; CHECK-NEXT: lea %s0, __atomic_store@lo 687; CHECK-NEXT: and %s0, %s0, (32)0 688; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0) 689; CHECK-NEXT: lea %s1, 240(, %s11) 690; CHECK-NEXT: lea %s2, 256(, %s11) 691; CHECK-NEXT: or %s0, 16, (0)1 692; CHECK-NEXT: or %s3, 0, (0)1 693; CHECK-NEXT: bsic %s10, (, %s12) 694; CHECK-NEXT: or %s11, 0, %s9 695 %2 = alloca i128, align 16 696 %3 = alloca %"struct.std::__1::atomic.45", align 16 697 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) 698 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) 699 store i128 %0, ptr %2, align 16, !tbaa !2 700 call void @__atomic_store(i64 16, ptr nonnull %3, ptr nonnull %2, i32 signext 0) 701 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) 702 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) 703 ret void 704} 705 706; Function Attrs: nofree norecurse nounwind mustprogress 707define void @_Z25atomic_load_relaxed_gv_i1b(i1 zeroext %0) { 708; CHECK-LABEL: _Z25atomic_load_relaxed_gv_i1b: 709; CHECK: # %bb.0: 710; CHECK-NEXT: lea %s1, gv_i1@lo 711; CHECK-NEXT: and %s1, %s1, (32)0 712; CHECK-NEXT: lea.sl %s1, gv_i1@hi(, %s1) 713; CHECK-NEXT: st1b %s0, (, %s1) 714; CHECK-NEXT: b.l.t (, %s10) 715 %2 = zext i1 %0 to i8 716 store atomic i8 %2, ptr @gv_i1 monotonic, align 4 717 ret void 718} 719 720; Function Attrs: nofree norecurse nounwind mustprogress 721define void @_Z25atomic_load_relaxed_gv_i8c(i8 signext %0) { 722; CHECK-LABEL: _Z25atomic_load_relaxed_gv_i8c: 723; CHECK: # %bb.0: 724; CHECK-NEXT: lea %s1, gv_i8@lo 725; CHECK-NEXT: and %s1, %s1, (32)0 726; CHECK-NEXT: lea.sl %s1, gv_i8@hi(, %s1) 727; CHECK-NEXT: st1b %s0, (, %s1) 728; CHECK-NEXT: b.l.t (, %s10) 729 store atomic i8 %0, ptr @gv_i8 monotonic, align 4 730 ret void 731} 732 733; Function Attrs: nofree norecurse nounwind mustprogress 734define void @_Z25atomic_load_relaxed_gv_u8h(i8 zeroext %0) { 735; CHECK-LABEL: _Z25atomic_load_relaxed_gv_u8h: 736; CHECK: # %bb.0: 737; CHECK-NEXT: lea %s1, gv_u8@lo 738; CHECK-NEXT: and %s1, %s1, (32)0 739; CHECK-NEXT: lea.sl %s1, gv_u8@hi(, %s1) 740; CHECK-NEXT: st1b %s0, (, %s1) 741; CHECK-NEXT: b.l.t (, %s10) 742 store atomic i8 %0, ptr @gv_u8 monotonic, align 4 743 ret void 744} 745 746; Function Attrs: nofree norecurse nounwind mustprogress 747define void @_Z26atomic_load_relaxed_gv_i16s(i16 signext %0) { 748; CHECK-LABEL: _Z26atomic_load_relaxed_gv_i16s: 749; CHECK: # %bb.0: 750; CHECK-NEXT: lea %s1, gv_i16@lo 751; CHECK-NEXT: and %s1, %s1, (32)0 752; CHECK-NEXT: lea.sl %s1, gv_i16@hi(, %s1) 753; CHECK-NEXT: st2b %s0, (, %s1) 754; CHECK-NEXT: b.l.t (, %s10) 755 store atomic i16 %0, ptr @gv_i16 monotonic, align 4 756 ret void 757} 758 759; Function Attrs: nofree norecurse nounwind mustprogress 760define void @_Z26atomic_load_relaxed_gv_u16t(i16 zeroext %0) { 761; CHECK-LABEL: _Z26atomic_load_relaxed_gv_u16t: 762; CHECK: # %bb.0: 763; CHECK-NEXT: lea %s1, gv_u16@lo 764; CHECK-NEXT: and %s1, %s1, (32)0 765; CHECK-NEXT: lea.sl %s1, gv_u16@hi(, %s1) 766; CHECK-NEXT: st2b %s0, (, %s1) 767; CHECK-NEXT: b.l.t (, %s10) 768 store atomic i16 %0, ptr @gv_u16 monotonic, align 4 769 ret void 770} 771 772; Function Attrs: nofree norecurse nounwind mustprogress 773define void @_Z26atomic_load_relaxed_gv_i32i(i32 signext %0) { 774; CHECK-LABEL: _Z26atomic_load_relaxed_gv_i32i: 775; CHECK: # %bb.0: 776; CHECK-NEXT: lea %s1, gv_i32@lo 777; CHECK-NEXT: and %s1, %s1, (32)0 778; CHECK-NEXT: lea.sl %s1, gv_i32@hi(, %s1) 779; CHECK-NEXT: stl %s0, (, %s1) 780; CHECK-NEXT: b.l.t (, %s10) 781 store atomic i32 %0, ptr @gv_i32 monotonic, align 4 782 ret void 783} 784 785; Function Attrs: nofree norecurse nounwind mustprogress 786define void @_Z26atomic_load_relaxed_gv_u32j(i32 zeroext %0) { 787; CHECK-LABEL: _Z26atomic_load_relaxed_gv_u32j: 788; CHECK: # %bb.0: 789; CHECK-NEXT: lea %s1, gv_u32@lo 790; CHECK-NEXT: and %s1, %s1, (32)0 791; CHECK-NEXT: lea.sl %s1, gv_u32@hi(, %s1) 792; CHECK-NEXT: stl %s0, (, %s1) 793; CHECK-NEXT: b.l.t (, %s10) 794 store atomic i32 %0, ptr @gv_u32 monotonic, align 4 795 ret void 796} 797 798; Function Attrs: nofree norecurse nounwind mustprogress 799define void @_Z26atomic_load_relaxed_gv_i64l(i64 %0) { 800; CHECK-LABEL: _Z26atomic_load_relaxed_gv_i64l: 801; CHECK: # %bb.0: 802; CHECK-NEXT: lea %s1, gv_i64@lo 803; CHECK-NEXT: and %s1, %s1, (32)0 804; CHECK-NEXT: lea.sl %s1, gv_i64@hi(, %s1) 805; CHECK-NEXT: st %s0, (, %s1) 806; CHECK-NEXT: b.l.t (, %s10) 807 store atomic i64 %0, ptr @gv_i64 monotonic, align 8 808 ret void 809} 810 811; Function Attrs: nofree norecurse nounwind mustprogress 812define void @_Z26atomic_load_relaxed_gv_u64m(i64 %0) { 813; CHECK-LABEL: _Z26atomic_load_relaxed_gv_u64m: 814; CHECK: # %bb.0: 815; CHECK-NEXT: lea %s1, gv_u64@lo 816; CHECK-NEXT: and %s1, %s1, (32)0 817; CHECK-NEXT: lea.sl %s1, gv_u64@hi(, %s1) 818; CHECK-NEXT: st %s0, (, %s1) 819; CHECK-NEXT: b.l.t (, %s10) 820 store atomic i64 %0, ptr @gv_u64 monotonic, align 8 821 ret void 822} 823 824; Function Attrs: nofree nounwind mustprogress 825define void @_Z27atomic_load_relaxed_gv_i128n(i128 %0) { 826; CHECK-LABEL: _Z27atomic_load_relaxed_gv_i128n: 827; CHECK: .LBB{{[0-9]+}}_2: 828; CHECK-NEXT: st %s1, 248(, %s11) 829; CHECK-NEXT: st %s0, 240(, %s11) 830; CHECK-NEXT: lea %s0, __atomic_store@lo 831; CHECK-NEXT: and %s0, %s0, (32)0 832; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0) 833; CHECK-NEXT: lea %s0, gv_i128@lo 834; CHECK-NEXT: and %s0, %s0, (32)0 835; CHECK-NEXT: lea.sl %s1, gv_i128@hi(, %s0) 836; CHECK-NEXT: lea %s2, 240(, %s11) 837; CHECK-NEXT: or %s0, 16, (0)1 838; CHECK-NEXT: or %s3, 0, (0)1 839; CHECK-NEXT: bsic %s10, (, %s12) 840; CHECK-NEXT: or %s11, 0, %s9 841 %2 = alloca i128, align 16 842 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) 843 store i128 %0, ptr %2, align 16, !tbaa !2 844 call void @__atomic_store(i64 16, ptr nonnull @gv_i128, ptr nonnull %2, i32 signext 0) 845 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) 846 ret void 847} 848 849; Function Attrs: nofree nounwind mustprogress 850define void @_Z27atomic_load_relaxed_gv_u128o(i128 %0) { 851; CHECK-LABEL: _Z27atomic_load_relaxed_gv_u128o: 852; CHECK: .LBB{{[0-9]+}}_2: 853; CHECK-NEXT: st %s1, 248(, %s11) 854; CHECK-NEXT: st %s0, 240(, %s11) 855; CHECK-NEXT: lea %s0, __atomic_store@lo 856; CHECK-NEXT: and %s0, %s0, (32)0 857; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0) 858; CHECK-NEXT: lea %s0, gv_u128@lo 859; CHECK-NEXT: and %s0, %s0, (32)0 860; CHECK-NEXT: lea.sl %s1, gv_u128@hi(, %s0) 861; CHECK-NEXT: lea %s2, 240(, %s11) 862; CHECK-NEXT: or %s0, 16, (0)1 863; CHECK-NEXT: or %s3, 0, (0)1 864; CHECK-NEXT: bsic %s10, (, %s12) 865; CHECK-NEXT: or %s11, 0, %s9 866 %2 = alloca i128, align 16 867 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) 868 store i128 %0, ptr %2, align 16, !tbaa !2 869 call void @__atomic_store(i64 16, ptr nonnull @gv_u128, ptr nonnull %2, i32 signext 0) 870 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) 871 ret void 872} 873 874; Function Attrs: nofree nounwind willreturn 875declare void @__atomic_store(i64, ptr, ptr, i32) 876 877!2 = !{!3, !3, i64 0} 878!3 = !{!"__int128", !4, i64 0} 879!4 = !{!"omnipotent char", !5, i64 0} 880!5 = !{!"Simple C++ TBAA"} 881