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.py 3; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lse2 -O0 | FileCheck %s --check-prefixes=CHECK,-O0 4; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lse2 -O1 | FileCheck %s --check-prefixes=CHECK,-O1 5 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 1 10 ret void 11} 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 1 17 ret void 18} 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 1 24 ret void 25} 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 1 31 ret void 32} 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 2 38 ret void 39} 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 2 45 ret void 46} 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 2 52 ret void 53} 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 2 59 ret void 60} 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 4 66 ret void 67} 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 4 73 ret void 74} 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 4 80 ret void 81} 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 4 87 ret void 88} 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 8 94 ret void 95} 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 8 101 ret void 102} 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 8 108 ret void 109} 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 8 115 ret void 116} 117 118define dso_local void @store_atomic_i128_aligned_unordered(i128 %value, ptr %ptr) { 119; CHECK-LABEL: store_atomic_i128_aligned_unordered: 120; CHECK: stp x0, x1, [x2] 121 store atomic i128 %value, ptr %ptr unordered, align 16 122 ret void 123} 124 125define dso_local void @store_atomic_i128_aligned_monotonic(i128 %value, ptr %ptr) { 126; CHECK-LABEL: store_atomic_i128_aligned_monotonic: 127; CHECK: stp x0, x1, [x2] 128 store atomic i128 %value, ptr %ptr monotonic, align 16 129 ret void 130} 131 132define dso_local void @store_atomic_i128_aligned_release(i128 %value, ptr %ptr) { 133; CHECK-LABEL: store_atomic_i128_aligned_release: 134; CHECK: dmb ish 135; CHECK: stp x0, x1, [x2] 136 store atomic i128 %value, ptr %ptr release, align 16 137 ret void 138} 139 140define dso_local void @store_atomic_i128_aligned_seq_cst(i128 %value, ptr %ptr) { 141; CHECK-LABEL: store_atomic_i128_aligned_seq_cst: 142; CHECK: dmb ish 143; CHECK: stp x0, x1, [x2] 144; CHECK: dmb ish 145 store atomic i128 %value, ptr %ptr seq_cst, align 16 146 ret void 147} 148 149define dso_local void @store_atomic_i8_unaligned_unordered(i8 %value, ptr %ptr) { 150; CHECK-LABEL: store_atomic_i8_unaligned_unordered: 151; CHECK: strb w0, [x1] 152 store atomic i8 %value, ptr %ptr unordered, align 1 153 ret void 154} 155 156define dso_local void @store_atomic_i8_unaligned_monotonic(i8 %value, ptr %ptr) { 157; CHECK-LABEL: store_atomic_i8_unaligned_monotonic: 158; CHECK: strb w0, [x1] 159 store atomic i8 %value, ptr %ptr monotonic, align 1 160 ret void 161} 162 163define dso_local void @store_atomic_i8_unaligned_release(i8 %value, ptr %ptr) { 164; CHECK-LABEL: store_atomic_i8_unaligned_release: 165; CHECK: stlrb w0, [x1] 166 store atomic i8 %value, ptr %ptr release, align 1 167 ret void 168} 169 170define dso_local void @store_atomic_i8_unaligned_seq_cst(i8 %value, ptr %ptr) { 171; CHECK-LABEL: store_atomic_i8_unaligned_seq_cst: 172; CHECK: stlrb w0, [x1] 173 store atomic i8 %value, ptr %ptr seq_cst, align 1 174 ret void 175} 176 177define dso_local void @store_atomic_i16_unaligned_unordered(i16 %value, ptr %ptr) { 178; CHECK-LABEL: store_atomic_i16_unaligned_unordered: 179; CHECK: bl __atomic_store 180 store atomic i16 %value, ptr %ptr unordered, align 1 181 ret void 182} 183 184define dso_local void @store_atomic_i16_unaligned_monotonic(i16 %value, ptr %ptr) { 185; CHECK-LABEL: store_atomic_i16_unaligned_monotonic: 186; CHECK: bl __atomic_store 187 store atomic i16 %value, ptr %ptr monotonic, align 1 188 ret void 189} 190 191define dso_local void @store_atomic_i16_unaligned_release(i16 %value, ptr %ptr) { 192; CHECK-LABEL: store_atomic_i16_unaligned_release: 193; CHECK: bl __atomic_store 194 store atomic i16 %value, ptr %ptr release, align 1 195 ret void 196} 197 198define dso_local void @store_atomic_i16_unaligned_seq_cst(i16 %value, ptr %ptr) { 199; CHECK-LABEL: store_atomic_i16_unaligned_seq_cst: 200; CHECK: bl __atomic_store 201 store atomic i16 %value, ptr %ptr seq_cst, align 1 202 ret void 203} 204 205define dso_local void @store_atomic_i32_unaligned_unordered(i32 %value, ptr %ptr) { 206; CHECK-LABEL: store_atomic_i32_unaligned_unordered: 207; CHECK: bl __atomic_store 208 store atomic i32 %value, ptr %ptr unordered, align 1 209 ret void 210} 211 212define dso_local void @store_atomic_i32_unaligned_monotonic(i32 %value, ptr %ptr) { 213; CHECK-LABEL: store_atomic_i32_unaligned_monotonic: 214; CHECK: bl __atomic_store 215 store atomic i32 %value, ptr %ptr monotonic, align 1 216 ret void 217} 218 219define dso_local void @store_atomic_i32_unaligned_release(i32 %value, ptr %ptr) { 220; CHECK-LABEL: store_atomic_i32_unaligned_release: 221; CHECK: bl __atomic_store 222 store atomic i32 %value, ptr %ptr release, align 1 223 ret void 224} 225 226define dso_local void @store_atomic_i32_unaligned_seq_cst(i32 %value, ptr %ptr) { 227; CHECK-LABEL: store_atomic_i32_unaligned_seq_cst: 228; CHECK: bl __atomic_store 229 store atomic i32 %value, ptr %ptr seq_cst, align 1 230 ret void 231} 232 233define dso_local void @store_atomic_i64_unaligned_unordered(i64 %value, ptr %ptr) { 234; CHECK-LABEL: store_atomic_i64_unaligned_unordered: 235; CHECK: bl __atomic_store 236 store atomic i64 %value, ptr %ptr unordered, align 1 237 ret void 238} 239 240define dso_local void @store_atomic_i64_unaligned_monotonic(i64 %value, ptr %ptr) { 241; CHECK-LABEL: store_atomic_i64_unaligned_monotonic: 242; CHECK: bl __atomic_store 243 store atomic i64 %value, ptr %ptr monotonic, align 1 244 ret void 245} 246 247define dso_local void @store_atomic_i64_unaligned_release(i64 %value, ptr %ptr) { 248; CHECK-LABEL: store_atomic_i64_unaligned_release: 249; CHECK: bl __atomic_store 250 store atomic i64 %value, ptr %ptr release, align 1 251 ret void 252} 253 254define dso_local void @store_atomic_i64_unaligned_seq_cst(i64 %value, ptr %ptr) { 255; CHECK-LABEL: store_atomic_i64_unaligned_seq_cst: 256; CHECK: bl __atomic_store 257 store atomic i64 %value, ptr %ptr seq_cst, align 1 258 ret void 259} 260 261define dso_local void @store_atomic_i128_unaligned_unordered(i128 %value, ptr %ptr) { 262; CHECK-LABEL: store_atomic_i128_unaligned_unordered: 263; CHECK: bl __atomic_store 264 store atomic i128 %value, ptr %ptr unordered, align 1 265 ret void 266} 267 268define dso_local void @store_atomic_i128_unaligned_monotonic(i128 %value, ptr %ptr) { 269; CHECK-LABEL: store_atomic_i128_unaligned_monotonic: 270; CHECK: bl __atomic_store 271 store atomic i128 %value, ptr %ptr monotonic, align 1 272 ret void 273} 274 275define dso_local void @store_atomic_i128_unaligned_release(i128 %value, ptr %ptr) { 276; CHECK-LABEL: store_atomic_i128_unaligned_release: 277; CHECK: bl __atomic_store 278 store atomic i128 %value, ptr %ptr release, align 1 279 ret void 280} 281 282define dso_local void @store_atomic_i128_unaligned_seq_cst(i128 %value, ptr %ptr) { 283; CHECK-LABEL: store_atomic_i128_unaligned_seq_cst: 284; CHECK: bl __atomic_store 285 store atomic i128 %value, ptr %ptr seq_cst, align 1 286 ret void 287} 288;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: 289; -O0: {{.*}} 290; -O1: {{.*}} 291