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