333 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --filter-out "\b(sp)\b" --filter "^\s*(ld[^r]|st|swp|cas|bl|add|and|eor|orn|orr|sub|mvn|sxt|cmp|ccmp|csel|dmb)"2; The base test file was generated by ./llvm/test/CodeGen/AArch64/Atomics/generate-tests.py3; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+v8a -O0 | FileCheck %s --check-prefixes=CHECK,-O04; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+v8a -O1 | FileCheck %s --check-prefixes=CHECK,-O15 6define dso_local void @store_atomic_i8_aligned_unordered(i8 %value, ptr %ptr) {7; CHECK-LABEL: store_atomic_i8_aligned_unordered:8; CHECK: strb w0, [x1]9 store atomic i8 %value, ptr %ptr unordered, align 110 ret void11}12 13define dso_local void @store_atomic_i8_aligned_monotonic(i8 %value, ptr %ptr) {14; CHECK-LABEL: store_atomic_i8_aligned_monotonic:15; CHECK: strb w0, [x1]16 store atomic i8 %value, ptr %ptr monotonic, align 117 ret void18}19 20define dso_local void @store_atomic_i8_aligned_release(i8 %value, ptr %ptr) {21; CHECK-LABEL: store_atomic_i8_aligned_release:22; CHECK: stlrb w0, [x1]23 store atomic i8 %value, ptr %ptr release, align 124 ret void25}26 27define dso_local void @store_atomic_i8_aligned_seq_cst(i8 %value, ptr %ptr) {28; CHECK-LABEL: store_atomic_i8_aligned_seq_cst:29; CHECK: stlrb w0, [x1]30 store atomic i8 %value, ptr %ptr seq_cst, align 131 ret void32}33 34define dso_local void @store_atomic_i16_aligned_unordered(i16 %value, ptr %ptr) {35; CHECK-LABEL: store_atomic_i16_aligned_unordered:36; CHECK: strh w0, [x1]37 store atomic i16 %value, ptr %ptr unordered, align 238 ret void39}40 41define dso_local void @store_atomic_i16_aligned_monotonic(i16 %value, ptr %ptr) {42; CHECK-LABEL: store_atomic_i16_aligned_monotonic:43; CHECK: strh w0, [x1]44 store atomic i16 %value, ptr %ptr monotonic, align 245 ret void46}47 48define dso_local void @store_atomic_i16_aligned_release(i16 %value, ptr %ptr) {49; CHECK-LABEL: store_atomic_i16_aligned_release:50; CHECK: stlrh w0, [x1]51 store atomic i16 %value, ptr %ptr release, align 252 ret void53}54 55define dso_local void @store_atomic_i16_aligned_seq_cst(i16 %value, ptr %ptr) {56; CHECK-LABEL: store_atomic_i16_aligned_seq_cst:57; CHECK: stlrh w0, [x1]58 store atomic i16 %value, ptr %ptr seq_cst, align 259 ret void60}61 62define dso_local void @store_atomic_i32_aligned_unordered(i32 %value, ptr %ptr) {63; CHECK-LABEL: store_atomic_i32_aligned_unordered:64; CHECK: str w0, [x1]65 store atomic i32 %value, ptr %ptr unordered, align 466 ret void67}68 69define dso_local void @store_atomic_i32_aligned_monotonic(i32 %value, ptr %ptr) {70; CHECK-LABEL: store_atomic_i32_aligned_monotonic:71; CHECK: str w0, [x1]72 store atomic i32 %value, ptr %ptr monotonic, align 473 ret void74}75 76define dso_local void @store_atomic_i32_aligned_release(i32 %value, ptr %ptr) {77; CHECK-LABEL: store_atomic_i32_aligned_release:78; CHECK: stlr w0, [x1]79 store atomic i32 %value, ptr %ptr release, align 480 ret void81}82 83define dso_local void @store_atomic_i32_aligned_seq_cst(i32 %value, ptr %ptr) {84; CHECK-LABEL: store_atomic_i32_aligned_seq_cst:85; CHECK: stlr w0, [x1]86 store atomic i32 %value, ptr %ptr seq_cst, align 487 ret void88}89 90define dso_local void @store_atomic_i64_aligned_unordered(i64 %value, ptr %ptr) {91; CHECK-LABEL: store_atomic_i64_aligned_unordered:92; CHECK: str x0, [x1]93 store atomic i64 %value, ptr %ptr unordered, align 894 ret void95}96 97define dso_local void @store_atomic_i64_aligned_monotonic(i64 %value, ptr %ptr) {98; CHECK-LABEL: store_atomic_i64_aligned_monotonic:99; CHECK: str x0, [x1]100 store atomic i64 %value, ptr %ptr monotonic, align 8101 ret void102}103 104define dso_local void @store_atomic_i64_aligned_release(i64 %value, ptr %ptr) {105; CHECK-LABEL: store_atomic_i64_aligned_release:106; CHECK: stlr x0, [x1]107 store atomic i64 %value, ptr %ptr release, align 8108 ret void109}110 111define dso_local void @store_atomic_i64_aligned_seq_cst(i64 %value, ptr %ptr) {112; CHECK-LABEL: store_atomic_i64_aligned_seq_cst:113; CHECK: stlr x0, [x1]114 store atomic i64 %value, ptr %ptr seq_cst, align 8115 ret void116}117 118define dso_local void @store_atomic_i128_aligned_unordered(i128 %value, ptr %ptr) {119; -O0-LABEL: store_atomic_i128_aligned_unordered:120; -O0: ldxp x10, x9, [x11]121; -O0: cmp x10, x12122; -O0: cmp x9, x13123; -O0: stxp w8, x14, x15, [x11]124; -O0: stxp w8, x10, x9, [x11]125; -O0: eor x8, x10, x8126; -O0: eor x11, x9, x11127; -O0: orr x8, x8, x11128; -O0: subs x8, x8, #0129;130; -O1-LABEL: store_atomic_i128_aligned_unordered:131; -O1: ldxp xzr, x8, [x2]132; -O1: stxp w8, x0, x1, [x2]133 store atomic i128 %value, ptr %ptr unordered, align 16134 ret void135}136 137define dso_local void @store_atomic_i128_aligned_monotonic(i128 %value, ptr %ptr) {138; -O0-LABEL: store_atomic_i128_aligned_monotonic:139; -O0: ldxp x10, x9, [x11]140; -O0: cmp x10, x12141; -O0: cmp x9, x13142; -O0: stxp w8, x14, x15, [x11]143; -O0: stxp w8, x10, x9, [x11]144; -O0: eor x8, x10, x8145; -O0: eor x11, x9, x11146; -O0: orr x8, x8, x11147; -O0: subs x8, x8, #0148;149; -O1-LABEL: store_atomic_i128_aligned_monotonic:150; -O1: ldxp xzr, x8, [x2]151; -O1: stxp w8, x0, x1, [x2]152 store atomic i128 %value, ptr %ptr monotonic, align 16153 ret void154}155 156define dso_local void @store_atomic_i128_aligned_release(i128 %value, ptr %ptr) {157; -O0-LABEL: store_atomic_i128_aligned_release:158; -O0: ldxp x10, x9, [x11]159; -O0: cmp x10, x12160; -O0: cmp x9, x13161; -O0: stlxp w8, x14, x15, [x11]162; -O0: stlxp w8, x10, x9, [x11]163; -O0: eor x8, x10, x8164; -O0: eor x11, x9, x11165; -O0: orr x8, x8, x11166; -O0: subs x8, x8, #0167;168; -O1-LABEL: store_atomic_i128_aligned_release:169; -O1: ldxp xzr, x8, [x2]170; -O1: stlxp w8, x0, x1, [x2]171 store atomic i128 %value, ptr %ptr release, align 16172 ret void173}174 175define dso_local void @store_atomic_i128_aligned_seq_cst(i128 %value, ptr %ptr) {176; -O0-LABEL: store_atomic_i128_aligned_seq_cst:177; -O0: ldaxp x10, x9, [x11]178; -O0: cmp x10, x12179; -O0: cmp x9, x13180; -O0: stlxp w8, x14, x15, [x11]181; -O0: stlxp w8, x10, x9, [x11]182; -O0: eor x8, x10, x8183; -O0: eor x11, x9, x11184; -O0: orr x8, x8, x11185; -O0: subs x8, x8, #0186;187; -O1-LABEL: store_atomic_i128_aligned_seq_cst:188; -O1: ldaxp xzr, x8, [x2]189; -O1: stlxp w8, x0, x1, [x2]190 store atomic i128 %value, ptr %ptr seq_cst, align 16191 ret void192}193 194define dso_local void @store_atomic_i8_unaligned_unordered(i8 %value, ptr %ptr) {195; CHECK-LABEL: store_atomic_i8_unaligned_unordered:196; CHECK: strb w0, [x1]197 store atomic i8 %value, ptr %ptr unordered, align 1198 ret void199}200 201define dso_local void @store_atomic_i8_unaligned_monotonic(i8 %value, ptr %ptr) {202; CHECK-LABEL: store_atomic_i8_unaligned_monotonic:203; CHECK: strb w0, [x1]204 store atomic i8 %value, ptr %ptr monotonic, align 1205 ret void206}207 208define dso_local void @store_atomic_i8_unaligned_release(i8 %value, ptr %ptr) {209; CHECK-LABEL: store_atomic_i8_unaligned_release:210; CHECK: stlrb w0, [x1]211 store atomic i8 %value, ptr %ptr release, align 1212 ret void213}214 215define dso_local void @store_atomic_i8_unaligned_seq_cst(i8 %value, ptr %ptr) {216; CHECK-LABEL: store_atomic_i8_unaligned_seq_cst:217; CHECK: stlrb w0, [x1]218 store atomic i8 %value, ptr %ptr seq_cst, align 1219 ret void220}221 222define dso_local void @store_atomic_i16_unaligned_unordered(i16 %value, ptr %ptr) {223; CHECK-LABEL: store_atomic_i16_unaligned_unordered:224; CHECK: bl __atomic_store225 store atomic i16 %value, ptr %ptr unordered, align 1226 ret void227}228 229define dso_local void @store_atomic_i16_unaligned_monotonic(i16 %value, ptr %ptr) {230; CHECK-LABEL: store_atomic_i16_unaligned_monotonic:231; CHECK: bl __atomic_store232 store atomic i16 %value, ptr %ptr monotonic, align 1233 ret void234}235 236define dso_local void @store_atomic_i16_unaligned_release(i16 %value, ptr %ptr) {237; CHECK-LABEL: store_atomic_i16_unaligned_release:238; CHECK: bl __atomic_store239 store atomic i16 %value, ptr %ptr release, align 1240 ret void241}242 243define dso_local void @store_atomic_i16_unaligned_seq_cst(i16 %value, ptr %ptr) {244; CHECK-LABEL: store_atomic_i16_unaligned_seq_cst:245; CHECK: bl __atomic_store246 store atomic i16 %value, ptr %ptr seq_cst, align 1247 ret void248}249 250define dso_local void @store_atomic_i32_unaligned_unordered(i32 %value, ptr %ptr) {251; CHECK-LABEL: store_atomic_i32_unaligned_unordered:252; CHECK: bl __atomic_store253 store atomic i32 %value, ptr %ptr unordered, align 1254 ret void255}256 257define dso_local void @store_atomic_i32_unaligned_monotonic(i32 %value, ptr %ptr) {258; CHECK-LABEL: store_atomic_i32_unaligned_monotonic:259; CHECK: bl __atomic_store260 store atomic i32 %value, ptr %ptr monotonic, align 1261 ret void262}263 264define dso_local void @store_atomic_i32_unaligned_release(i32 %value, ptr %ptr) {265; CHECK-LABEL: store_atomic_i32_unaligned_release:266; CHECK: bl __atomic_store267 store atomic i32 %value, ptr %ptr release, align 1268 ret void269}270 271define dso_local void @store_atomic_i32_unaligned_seq_cst(i32 %value, ptr %ptr) {272; CHECK-LABEL: store_atomic_i32_unaligned_seq_cst:273; CHECK: bl __atomic_store274 store atomic i32 %value, ptr %ptr seq_cst, align 1275 ret void276}277 278define dso_local void @store_atomic_i64_unaligned_unordered(i64 %value, ptr %ptr) {279; CHECK-LABEL: store_atomic_i64_unaligned_unordered:280; CHECK: bl __atomic_store281 store atomic i64 %value, ptr %ptr unordered, align 1282 ret void283}284 285define dso_local void @store_atomic_i64_unaligned_monotonic(i64 %value, ptr %ptr) {286; CHECK-LABEL: store_atomic_i64_unaligned_monotonic:287; CHECK: bl __atomic_store288 store atomic i64 %value, ptr %ptr monotonic, align 1289 ret void290}291 292define dso_local void @store_atomic_i64_unaligned_release(i64 %value, ptr %ptr) {293; CHECK-LABEL: store_atomic_i64_unaligned_release:294; CHECK: bl __atomic_store295 store atomic i64 %value, ptr %ptr release, align 1296 ret void297}298 299define dso_local void @store_atomic_i64_unaligned_seq_cst(i64 %value, ptr %ptr) {300; CHECK-LABEL: store_atomic_i64_unaligned_seq_cst:301; CHECK: bl __atomic_store302 store atomic i64 %value, ptr %ptr seq_cst, align 1303 ret void304}305 306define dso_local void @store_atomic_i128_unaligned_unordered(i128 %value, ptr %ptr) {307; CHECK-LABEL: store_atomic_i128_unaligned_unordered:308; CHECK: bl __atomic_store309 store atomic i128 %value, ptr %ptr unordered, align 1310 ret void311}312 313define dso_local void @store_atomic_i128_unaligned_monotonic(i128 %value, ptr %ptr) {314; CHECK-LABEL: store_atomic_i128_unaligned_monotonic:315; CHECK: bl __atomic_store316 store atomic i128 %value, ptr %ptr monotonic, align 1317 ret void318}319 320define dso_local void @store_atomic_i128_unaligned_release(i128 %value, ptr %ptr) {321; CHECK-LABEL: store_atomic_i128_unaligned_release:322; CHECK: bl __atomic_store323 store atomic i128 %value, ptr %ptr release, align 1324 ret void325}326 327define dso_local void @store_atomic_i128_unaligned_seq_cst(i128 %value, ptr %ptr) {328; CHECK-LABEL: store_atomic_i128_unaligned_seq_cst:329; CHECK: bl __atomic_store330 store atomic i128 %value, ptr %ptr seq_cst, align 1331 ret void332}333