309 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_be -mattr=+outline-atomics -O0 | FileCheck %s --check-prefixes=CHECK,-O04; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64_be -mattr=+outline-atomics -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: bl __aarch64_cas16_relax121; -O0: subs x10, x10, x11122; -O0: ccmp x8, x9, #0, eq123;124; -O1-LABEL: store_atomic_i128_aligned_unordered:125; -O1: ldxp xzr, x8, [x2]126; -O1: stxp w8, x1, x0, [x2]127 store atomic i128 %value, ptr %ptr unordered, align 16128 ret void129}130 131define dso_local void @store_atomic_i128_aligned_monotonic(i128 %value, ptr %ptr) {132; -O0-LABEL: store_atomic_i128_aligned_monotonic:133; -O0: bl __aarch64_cas16_relax134; -O0: subs x10, x10, x11135; -O0: ccmp x8, x9, #0, eq136;137; -O1-LABEL: store_atomic_i128_aligned_monotonic:138; -O1: ldxp xzr, x8, [x2]139; -O1: stxp w8, x1, x0, [x2]140 store atomic i128 %value, ptr %ptr monotonic, align 16141 ret void142}143 144define dso_local void @store_atomic_i128_aligned_release(i128 %value, ptr %ptr) {145; -O0-LABEL: store_atomic_i128_aligned_release:146; -O0: bl __aarch64_cas16_rel147; -O0: subs x10, x10, x11148; -O0: ccmp x8, x9, #0, eq149;150; -O1-LABEL: store_atomic_i128_aligned_release:151; -O1: ldxp xzr, x8, [x2]152; -O1: stlxp w8, x1, x0, [x2]153 store atomic i128 %value, ptr %ptr release, align 16154 ret void155}156 157define dso_local void @store_atomic_i128_aligned_seq_cst(i128 %value, ptr %ptr) {158; -O0-LABEL: store_atomic_i128_aligned_seq_cst:159; -O0: bl __aarch64_cas16_acq_rel160; -O0: subs x10, x10, x11161; -O0: ccmp x8, x9, #0, eq162;163; -O1-LABEL: store_atomic_i128_aligned_seq_cst:164; -O1: ldaxp xzr, x8, [x2]165; -O1: stlxp w8, x1, x0, [x2]166 store atomic i128 %value, ptr %ptr seq_cst, align 16167 ret void168}169 170define dso_local void @store_atomic_i8_unaligned_unordered(i8 %value, ptr %ptr) {171; CHECK-LABEL: store_atomic_i8_unaligned_unordered:172; CHECK: strb w0, [x1]173 store atomic i8 %value, ptr %ptr unordered, align 1174 ret void175}176 177define dso_local void @store_atomic_i8_unaligned_monotonic(i8 %value, ptr %ptr) {178; CHECK-LABEL: store_atomic_i8_unaligned_monotonic:179; CHECK: strb w0, [x1]180 store atomic i8 %value, ptr %ptr monotonic, align 1181 ret void182}183 184define dso_local void @store_atomic_i8_unaligned_release(i8 %value, ptr %ptr) {185; CHECK-LABEL: store_atomic_i8_unaligned_release:186; CHECK: stlrb w0, [x1]187 store atomic i8 %value, ptr %ptr release, align 1188 ret void189}190 191define dso_local void @store_atomic_i8_unaligned_seq_cst(i8 %value, ptr %ptr) {192; CHECK-LABEL: store_atomic_i8_unaligned_seq_cst:193; CHECK: stlrb w0, [x1]194 store atomic i8 %value, ptr %ptr seq_cst, align 1195 ret void196}197 198define dso_local void @store_atomic_i16_unaligned_unordered(i16 %value, ptr %ptr) {199; CHECK-LABEL: store_atomic_i16_unaligned_unordered:200; CHECK: bl __atomic_store201 store atomic i16 %value, ptr %ptr unordered, align 1202 ret void203}204 205define dso_local void @store_atomic_i16_unaligned_monotonic(i16 %value, ptr %ptr) {206; CHECK-LABEL: store_atomic_i16_unaligned_monotonic:207; CHECK: bl __atomic_store208 store atomic i16 %value, ptr %ptr monotonic, align 1209 ret void210}211 212define dso_local void @store_atomic_i16_unaligned_release(i16 %value, ptr %ptr) {213; CHECK-LABEL: store_atomic_i16_unaligned_release:214; CHECK: bl __atomic_store215 store atomic i16 %value, ptr %ptr release, align 1216 ret void217}218 219define dso_local void @store_atomic_i16_unaligned_seq_cst(i16 %value, ptr %ptr) {220; CHECK-LABEL: store_atomic_i16_unaligned_seq_cst:221; CHECK: bl __atomic_store222 store atomic i16 %value, ptr %ptr seq_cst, align 1223 ret void224}225 226define dso_local void @store_atomic_i32_unaligned_unordered(i32 %value, ptr %ptr) {227; CHECK-LABEL: store_atomic_i32_unaligned_unordered:228; CHECK: bl __atomic_store229 store atomic i32 %value, ptr %ptr unordered, align 1230 ret void231}232 233define dso_local void @store_atomic_i32_unaligned_monotonic(i32 %value, ptr %ptr) {234; CHECK-LABEL: store_atomic_i32_unaligned_monotonic:235; CHECK: bl __atomic_store236 store atomic i32 %value, ptr %ptr monotonic, align 1237 ret void238}239 240define dso_local void @store_atomic_i32_unaligned_release(i32 %value, ptr %ptr) {241; CHECK-LABEL: store_atomic_i32_unaligned_release:242; CHECK: bl __atomic_store243 store atomic i32 %value, ptr %ptr release, align 1244 ret void245}246 247define dso_local void @store_atomic_i32_unaligned_seq_cst(i32 %value, ptr %ptr) {248; CHECK-LABEL: store_atomic_i32_unaligned_seq_cst:249; CHECK: bl __atomic_store250 store atomic i32 %value, ptr %ptr seq_cst, align 1251 ret void252}253 254define dso_local void @store_atomic_i64_unaligned_unordered(i64 %value, ptr %ptr) {255; CHECK-LABEL: store_atomic_i64_unaligned_unordered:256; CHECK: bl __atomic_store257 store atomic i64 %value, ptr %ptr unordered, align 1258 ret void259}260 261define dso_local void @store_atomic_i64_unaligned_monotonic(i64 %value, ptr %ptr) {262; CHECK-LABEL: store_atomic_i64_unaligned_monotonic:263; CHECK: bl __atomic_store264 store atomic i64 %value, ptr %ptr monotonic, align 1265 ret void266}267 268define dso_local void @store_atomic_i64_unaligned_release(i64 %value, ptr %ptr) {269; CHECK-LABEL: store_atomic_i64_unaligned_release:270; CHECK: bl __atomic_store271 store atomic i64 %value, ptr %ptr release, align 1272 ret void273}274 275define dso_local void @store_atomic_i64_unaligned_seq_cst(i64 %value, ptr %ptr) {276; CHECK-LABEL: store_atomic_i64_unaligned_seq_cst:277; CHECK: bl __atomic_store278 store atomic i64 %value, ptr %ptr seq_cst, align 1279 ret void280}281 282define dso_local void @store_atomic_i128_unaligned_unordered(i128 %value, ptr %ptr) {283; CHECK-LABEL: store_atomic_i128_unaligned_unordered:284; CHECK: bl __atomic_store285 store atomic i128 %value, ptr %ptr unordered, align 1286 ret void287}288 289define dso_local void @store_atomic_i128_unaligned_monotonic(i128 %value, ptr %ptr) {290; CHECK-LABEL: store_atomic_i128_unaligned_monotonic:291; CHECK: bl __atomic_store292 store atomic i128 %value, ptr %ptr monotonic, align 1293 ret void294}295 296define dso_local void @store_atomic_i128_unaligned_release(i128 %value, ptr %ptr) {297; CHECK-LABEL: store_atomic_i128_unaligned_release:298; CHECK: bl __atomic_store299 store atomic i128 %value, ptr %ptr release, align 1300 ret void301}302 303define dso_local void @store_atomic_i128_unaligned_seq_cst(i128 %value, ptr %ptr) {304; CHECK-LABEL: store_atomic_i128_unaligned_seq_cst:305; CHECK: bl __atomic_store306 store atomic i128 %value, ptr %ptr seq_cst, align 1307 ret void308}309