881 lines · plain
1; RUN: llc < %s -mtriple=ve | FileCheck %s2 3;;; Test atomic store for all types and all memory order4;;;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 466@gv_i8 = global %"struct.std::__1::atomic.0" zeroinitializer, align 467@gv_u8 = global %"struct.std::__1::atomic.5" zeroinitializer, align 468@gv_i16 = global %"struct.std::__1::atomic.10" zeroinitializer, align 469@gv_u16 = global %"struct.std::__1::atomic.15" zeroinitializer, align 470@gv_i32 = global %"struct.std::__1::atomic.20" zeroinitializer, align 471@gv_u32 = global %"struct.std::__1::atomic.25" zeroinitializer, align 472@gv_i64 = global %"struct.std::__1::atomic.30" zeroinitializer, align 873@gv_u64 = global %"struct.std::__1::atomic.35" zeroinitializer, align 874@gv_i128 = global %"struct.std::__1::atomic.40" zeroinitializer, align 1675@gv_u128 = global %"struct.std::__1::atomic.45" zeroinitializer, align 1676 77; Function Attrs: nofree norecurse nounwind mustprogress78define 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 i884 store atomic i8 %3, ptr %0 monotonic, align 185 ret void86}87 88; Function Attrs: nofree norecurse nounwind mustprogress89define 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 195 ret void96}97 98; Function Attrs: nofree norecurse nounwind mustprogress99define 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 1105 ret void106}107 108; Function Attrs: nofree norecurse nounwind mustprogress109define 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 2115 ret void116}117 118; Function Attrs: nofree norecurse nounwind mustprogress119define 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 2125 ret void126}127 128; Function Attrs: nofree norecurse nounwind mustprogress129define 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 4135 ret void136}137 138; Function Attrs: nofree norecurse nounwind mustprogress139define 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 4145 ret void146}147 148; Function Attrs: nofree norecurse nounwind mustprogress149define 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 8155 ret void156}157 158; Function Attrs: nofree norecurse nounwind mustprogress159define 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 8165 ret void166}167 168; Function Attrs: nofree nounwind mustprogress169define 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, %s0173; CHECK-NEXT: st %s2, 248(, %s11)174; CHECK-NEXT: st %s1, 240(, %s11)175; CHECK-NEXT: lea %s0, __atomic_store@lo176; CHECK-NEXT: and %s0, %s0, (32)0177; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0)178; CHECK-NEXT: lea %s2, 240(, %s11)179; CHECK-NEXT: or %s0, 16, (0)1180; CHECK-NEXT: or %s3, 0, (0)1181; CHECK-NEXT: or %s1, 0, %s4182; CHECK-NEXT: bsic %s10, (, %s12)183; CHECK-NEXT: or %s11, 0, %s9184 %3 = alloca i128, align 16185 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3)186 store i128 %1, ptr %3, align 16, !tbaa !2187 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 void190}191 192; Function Attrs: nofree nounwind mustprogress193define 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, %s0197; CHECK-NEXT: st %s2, 248(, %s11)198; CHECK-NEXT: st %s1, 240(, %s11)199; CHECK-NEXT: lea %s0, __atomic_store@lo200; CHECK-NEXT: and %s0, %s0, (32)0201; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0)202; CHECK-NEXT: lea %s2, 240(, %s11)203; CHECK-NEXT: or %s0, 16, (0)1204; CHECK-NEXT: or %s3, 0, (0)1205; CHECK-NEXT: or %s1, 0, %s4206; CHECK-NEXT: bsic %s10, (, %s12)207; CHECK-NEXT: or %s11, 0, %s9208 %3 = alloca i128, align 16209 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3)210 store i128 %1, ptr %3, align 16, !tbaa !2211 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 void214}215 216; Function Attrs: nofree norecurse nounwind mustprogress217define 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 1221; CHECK-NEXT: st1b %s1, (, %s0)222; CHECK-NEXT: b.l.t (, %s10)223 %3 = zext i1 %1 to i8224 store atomic i8 %3, ptr %0 release, align 1225 ret void226}227 228; Function Attrs: nofree norecurse nounwind mustprogress229define 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 1233; CHECK-NEXT: st1b %s1, (, %s0)234; CHECK-NEXT: b.l.t (, %s10)235 store atomic i8 %1, ptr %0 release, align 1236 ret void237}238 239; Function Attrs: nofree norecurse nounwind mustprogress240define 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 1244; CHECK-NEXT: st1b %s1, (, %s0)245; CHECK-NEXT: b.l.t (, %s10)246 store atomic i8 %1, ptr %0 release, align 1247 ret void248}249 250; Function Attrs: nofree norecurse nounwind mustprogress251define 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 1255; CHECK-NEXT: st2b %s1, (, %s0)256; CHECK-NEXT: b.l.t (, %s10)257 store atomic i16 %1, ptr %0 release, align 2258 ret void259}260 261; Function Attrs: nofree norecurse nounwind mustprogress262define 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 1266; CHECK-NEXT: st2b %s1, (, %s0)267; CHECK-NEXT: b.l.t (, %s10)268 store atomic i16 %1, ptr %0 release, align 2269 ret void270}271 272; Function Attrs: nofree norecurse nounwind mustprogress273define 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 1277; CHECK-NEXT: stl %s1, (, %s0)278; CHECK-NEXT: b.l.t (, %s10)279 store atomic i32 %1, ptr %0 release, align 4280 ret void281}282 283; Function Attrs: nofree norecurse nounwind mustprogress284define 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 1288; CHECK-NEXT: stl %s1, (, %s0)289; CHECK-NEXT: b.l.t (, %s10)290 store atomic i32 %1, ptr %0 release, align 4291 ret void292}293 294; Function Attrs: nofree norecurse nounwind mustprogress295define 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 1299; CHECK-NEXT: st %s1, (, %s0)300; CHECK-NEXT: b.l.t (, %s10)301 store atomic i64 %1, ptr %0 release, align 8302 ret void303}304 305; Function Attrs: nofree norecurse nounwind mustprogress306define 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 1310; CHECK-NEXT: st %s1, (, %s0)311; CHECK-NEXT: b.l.t (, %s10)312 store atomic i64 %1, ptr %0 release, align 8313 ret void314}315 316; Function Attrs: nofree nounwind mustprogress317define 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, %s0321; CHECK-NEXT: st %s2, 248(, %s11)322; CHECK-NEXT: st %s1, 240(, %s11)323; CHECK-NEXT: lea %s0, __atomic_store@lo324; CHECK-NEXT: and %s0, %s0, (32)0325; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0)326; CHECK-NEXT: lea %s2, 240(, %s11)327; CHECK-NEXT: or %s0, 16, (0)1328; CHECK-NEXT: or %s3, 3, (0)1329; CHECK-NEXT: or %s1, 0, %s4330; CHECK-NEXT: bsic %s10, (, %s12)331; CHECK-NEXT: or %s11, 0, %s9332 %3 = alloca i128, align 16333 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3)334 store i128 %1, ptr %3, align 16, !tbaa !2335 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 void338}339 340; Function Attrs: nofree nounwind mustprogress341define 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, %s0345; CHECK-NEXT: st %s2, 248(, %s11)346; CHECK-NEXT: st %s1, 240(, %s11)347; CHECK-NEXT: lea %s0, __atomic_store@lo348; CHECK-NEXT: and %s0, %s0, (32)0349; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0)350; CHECK-NEXT: lea %s2, 240(, %s11)351; CHECK-NEXT: or %s0, 16, (0)1352; CHECK-NEXT: or %s3, 3, (0)1353; CHECK-NEXT: or %s1, 0, %s4354; CHECK-NEXT: bsic %s10, (, %s12)355; CHECK-NEXT: or %s11, 0, %s9356 %3 = alloca i128, align 16357 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3)358 store i128 %1, ptr %3, align 16, !tbaa !2359 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 void362}363 364; Function Attrs: nofree norecurse nounwind mustprogress365define 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 3369; CHECK-NEXT: st1b %s1, (, %s0)370; CHECK-NEXT: fencem 3371; CHECK-NEXT: b.l.t (, %s10)372 %3 = zext i1 %1 to i8373 store atomic i8 %3, ptr %0 seq_cst, align 1374 ret void375}376 377; Function Attrs: nofree norecurse nounwind mustprogress378define 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 3382; CHECK-NEXT: st1b %s1, (, %s0)383; CHECK-NEXT: fencem 3384; CHECK-NEXT: b.l.t (, %s10)385 store atomic i8 %1, ptr %0 seq_cst, align 1386 ret void387}388 389; Function Attrs: nofree norecurse nounwind mustprogress390define 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 3394; CHECK-NEXT: st1b %s1, (, %s0)395; CHECK-NEXT: fencem 3396; CHECK-NEXT: b.l.t (, %s10)397 store atomic i8 %1, ptr %0 seq_cst, align 1398 ret void399}400 401; Function Attrs: nofree norecurse nounwind mustprogress402define 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 3406; CHECK-NEXT: st2b %s1, (, %s0)407; CHECK-NEXT: fencem 3408; CHECK-NEXT: b.l.t (, %s10)409 store atomic i16 %1, ptr %0 seq_cst, align 2410 ret void411}412 413; Function Attrs: nofree norecurse nounwind mustprogress414define 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 3418; CHECK-NEXT: st2b %s1, (, %s0)419; CHECK-NEXT: fencem 3420; CHECK-NEXT: b.l.t (, %s10)421 store atomic i16 %1, ptr %0 seq_cst, align 2422 ret void423}424 425; Function Attrs: nofree norecurse nounwind mustprogress426define 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 3430; CHECK-NEXT: stl %s1, (, %s0)431; CHECK-NEXT: fencem 3432; CHECK-NEXT: b.l.t (, %s10)433 store atomic i32 %1, ptr %0 seq_cst, align 4434 ret void435}436 437; Function Attrs: nofree norecurse nounwind mustprogress438define 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 3442; CHECK-NEXT: stl %s1, (, %s0)443; CHECK-NEXT: fencem 3444; CHECK-NEXT: b.l.t (, %s10)445 store atomic i32 %1, ptr %0 seq_cst, align 4446 ret void447}448 449; Function Attrs: nofree norecurse nounwind mustprogress450define 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 3454; CHECK-NEXT: st %s1, (, %s0)455; CHECK-NEXT: fencem 3456; CHECK-NEXT: b.l.t (, %s10)457 store atomic i64 %1, ptr %0 seq_cst, align 8458 ret void459}460 461; Function Attrs: nofree norecurse nounwind mustprogress462define 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 3466; CHECK-NEXT: st %s1, (, %s0)467; CHECK-NEXT: fencem 3468; CHECK-NEXT: b.l.t (, %s10)469 store atomic i64 %1, ptr %0 seq_cst, align 8470 ret void471}472 473; Function Attrs: nofree nounwind mustprogress474define 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, %s0478; CHECK-NEXT: st %s2, 248(, %s11)479; CHECK-NEXT: st %s1, 240(, %s11)480; CHECK-NEXT: lea %s0, __atomic_store@lo481; CHECK-NEXT: and %s0, %s0, (32)0482; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0)483; CHECK-NEXT: lea %s2, 240(, %s11)484; CHECK-NEXT: or %s0, 16, (0)1485; CHECK-NEXT: or %s3, 5, (0)1486; CHECK-NEXT: or %s1, 0, %s4487; CHECK-NEXT: bsic %s10, (, %s12)488; CHECK-NEXT: or %s11, 0, %s9489 %3 = alloca i128, align 16490 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3)491 store i128 %1, ptr %3, align 16, !tbaa !2492 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 void495}496 497; Function Attrs: nofree nounwind mustprogress498define 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, %s0502; CHECK-NEXT: st %s2, 248(, %s11)503; CHECK-NEXT: st %s1, 240(, %s11)504; CHECK-NEXT: lea %s0, __atomic_store@lo505; CHECK-NEXT: and %s0, %s0, (32)0506; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0)507; CHECK-NEXT: lea %s2, 240(, %s11)508; CHECK-NEXT: or %s0, 16, (0)1509; CHECK-NEXT: or %s3, 5, (0)1510; CHECK-NEXT: or %s1, 0, %s4511; CHECK-NEXT: bsic %s10, (, %s12)512; CHECK-NEXT: or %s11, 0, %s9513 %3 = alloca i128, align 16514 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3)515 store i128 %1, ptr %3, align 16, !tbaa !2516 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 void519}520 521; Function Attrs: nofree nounwind mustprogress522define 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, %s11527; CHECK-NEXT: b.l.t (, %s10)528 %2 = alloca i8, align 1529 call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %2)530 %3 = zext i1 %0 to i8531 store atomic volatile i8 %3, ptr %2 monotonic, align 1532 call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %2)533 ret void534}535 536; Function Attrs: argmemonly nofree nosync nounwind willreturn537declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)538 539; Function Attrs: argmemonly nofree nosync nounwind willreturn540declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)541 542; Function Attrs: nofree nounwind mustprogress543define 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, %s11548; CHECK-NEXT: b.l.t (, %s10)549 %2 = alloca i8, align 1550 call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %2)551 store atomic volatile i8 %0, ptr %2 monotonic, align 1552 call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %2)553 ret void554}555 556; Function Attrs: nofree nounwind mustprogress557define 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, %s11562; CHECK-NEXT: b.l.t (, %s10)563 %2 = alloca i8, align 1564 call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %2)565 store atomic volatile i8 %0, ptr %2 monotonic, align 1566 call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %2)567 ret void568}569 570; Function Attrs: nofree nounwind mustprogress571define 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, %s11576; CHECK-NEXT: b.l.t (, %s10)577 %2 = alloca i16, align 2578 call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %2)579 store atomic volatile i16 %0, ptr %2 monotonic, align 2580 call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %2)581 ret void582}583 584; Function Attrs: nofree nounwind mustprogress585define 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, %s11590; CHECK-NEXT: b.l.t (, %s10)591 %2 = alloca i16, align 2592 call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %2)593 store atomic volatile i16 %0, ptr %2 monotonic, align 2594 call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %2)595 ret void596}597 598; Function Attrs: nofree nounwind mustprogress599define 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, %s11604; CHECK-NEXT: b.l.t (, %s10)605 %2 = alloca i32, align 4606 call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %2)607 store atomic volatile i32 %0, ptr %2 monotonic, align 4608 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %2)609 ret void610}611 612; Function Attrs: nofree nounwind mustprogress613define 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, %s11618; CHECK-NEXT: b.l.t (, %s10)619 %2 = alloca i32, align 4620 call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %2)621 store atomic volatile i32 %0, ptr %2 monotonic, align 4622 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %2)623 ret void624}625 626; Function Attrs: nofree nounwind mustprogress627define 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, %s11632; CHECK-NEXT: b.l.t (, %s10)633 %2 = alloca i64, align 8634 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2)635 store atomic volatile i64 %0, ptr %2 monotonic, align 8636 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2)637 ret void638}639 640; Function Attrs: nofree nounwind mustprogress641define 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, %s11646; CHECK-NEXT: b.l.t (, %s10)647 %2 = alloca i64, align 8648 call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2)649 store atomic volatile i64 %0, ptr %2 monotonic, align 8650 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2)651 ret void652}653 654; Function Attrs: nofree nounwind mustprogress655define 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@lo661; CHECK-NEXT: and %s0, %s0, (32)0662; 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)1666; CHECK-NEXT: or %s3, 0, (0)1667; CHECK-NEXT: bsic %s10, (, %s12)668; CHECK-NEXT: or %s11, 0, %s9669 %2 = alloca i128, align 16670 %3 = alloca %"struct.std::__1::atomic.40", align 16671 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 !2674 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 void678}679 680; Function Attrs: nofree nounwind mustprogress681define 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@lo687; CHECK-NEXT: and %s0, %s0, (32)0688; 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)1692; CHECK-NEXT: or %s3, 0, (0)1693; CHECK-NEXT: bsic %s10, (, %s12)694; CHECK-NEXT: or %s11, 0, %s9695 %2 = alloca i128, align 16696 %3 = alloca %"struct.std::__1::atomic.45", align 16697 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 !2700 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 void704}705 706; Function Attrs: nofree norecurse nounwind mustprogress707define 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@lo711; CHECK-NEXT: and %s1, %s1, (32)0712; 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 i8716 store atomic i8 %2, ptr @gv_i1 monotonic, align 4717 ret void718}719 720; Function Attrs: nofree norecurse nounwind mustprogress721define 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@lo725; CHECK-NEXT: and %s1, %s1, (32)0726; 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 4730 ret void731}732 733; Function Attrs: nofree norecurse nounwind mustprogress734define 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@lo738; CHECK-NEXT: and %s1, %s1, (32)0739; 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 4743 ret void744}745 746; Function Attrs: nofree norecurse nounwind mustprogress747define 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@lo751; CHECK-NEXT: and %s1, %s1, (32)0752; 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 4756 ret void757}758 759; Function Attrs: nofree norecurse nounwind mustprogress760define 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@lo764; CHECK-NEXT: and %s1, %s1, (32)0765; 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 4769 ret void770}771 772; Function Attrs: nofree norecurse nounwind mustprogress773define 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@lo777; CHECK-NEXT: and %s1, %s1, (32)0778; 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 4782 ret void783}784 785; Function Attrs: nofree norecurse nounwind mustprogress786define 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@lo790; CHECK-NEXT: and %s1, %s1, (32)0791; 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 4795 ret void796}797 798; Function Attrs: nofree norecurse nounwind mustprogress799define 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@lo803; CHECK-NEXT: and %s1, %s1, (32)0804; 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 8808 ret void809}810 811; Function Attrs: nofree norecurse nounwind mustprogress812define 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@lo816; CHECK-NEXT: and %s1, %s1, (32)0817; 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 8821 ret void822}823 824; Function Attrs: nofree nounwind mustprogress825define 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@lo831; CHECK-NEXT: and %s0, %s0, (32)0832; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0)833; CHECK-NEXT: lea %s0, gv_i128@lo834; CHECK-NEXT: and %s0, %s0, (32)0835; CHECK-NEXT: lea.sl %s1, gv_i128@hi(, %s0)836; CHECK-NEXT: lea %s2, 240(, %s11)837; CHECK-NEXT: or %s0, 16, (0)1838; CHECK-NEXT: or %s3, 0, (0)1839; CHECK-NEXT: bsic %s10, (, %s12)840; CHECK-NEXT: or %s11, 0, %s9841 %2 = alloca i128, align 16842 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2)843 store i128 %0, ptr %2, align 16, !tbaa !2844 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 void847}848 849; Function Attrs: nofree nounwind mustprogress850define 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@lo856; CHECK-NEXT: and %s0, %s0, (32)0857; CHECK-NEXT: lea.sl %s12, __atomic_store@hi(, %s0)858; CHECK-NEXT: lea %s0, gv_u128@lo859; CHECK-NEXT: and %s0, %s0, (32)0860; CHECK-NEXT: lea.sl %s1, gv_u128@hi(, %s0)861; CHECK-NEXT: lea %s2, 240(, %s11)862; CHECK-NEXT: or %s0, 16, (0)1863; CHECK-NEXT: or %s3, 0, (0)1864; CHECK-NEXT: bsic %s10, (, %s12)865; CHECK-NEXT: or %s11, 0, %s9866 %2 = alloca i128, align 16867 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2)868 store i128 %0, ptr %2, align 16, !tbaa !2869 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 void872}873 874; Function Attrs: nofree nounwind willreturn875declare 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