[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / Atomics / aarch64-atomic-exchange-fence.ll
blob2adbc709d238daefadf05a735c530bb49409c4ab
1 ; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lse -O0 | FileCheck %s
2 ; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lse -O1 | FileCheck %s
4 ; When their destination register is WZR/ZZR, SWP operations are not regarded as
5 ; a read for the purpose of a DMB.LD in the AArch64 memory model.
6 ; This test ensures that the AArch64DeadRegisterDefinitions pass does not
7 ; replace the desitnation register of SWP instructions with the zero register
8 ; when the read value is unused.
10 define dso_local i32 @atomic_exchange_monotonic(ptr %ptr, ptr %ptr2, i32 %value) {
11 ; CHECK-LABEL: atomic_exchange_monotonic:
12 ; CHECK:       // %bb.0:
13 ; CHECK-NEXT:    swp
14 ; CHECK-NOT:     wzr
15 ; CHECK-NEXT:    dmb ishld
16 ; CHECK-NEXT:    ldr w0, [x1]
17 ; CHECK-NEXT:    ret
18     %r0 = atomicrmw xchg ptr %ptr, i32 %value monotonic
19     fence acquire
20     %r1 = load atomic i32, ptr %ptr2 monotonic, align 4
21     ret i32 %r1
24 define dso_local i32 @atomic_exchange_acquire(ptr %ptr, ptr %ptr2, i32 %value) {
25 ; CHECK-LABEL: atomic_exchange_acquire:
26 ; CHECK:       // %bb.0:
27 ; CHECK-NEXT:    swpa
28 ; CHECK-NOT:     wzr
29 ; CHECK-NEXT:    dmb ishld
30 ; CHECK-NEXT:    ldr w0, [x1]
31 ; CHECK-NEXT:    ret
32     %r0 = atomicrmw xchg ptr %ptr, i32 %value acquire
33     fence acquire
34     %r1 = load atomic i32, ptr %ptr2 monotonic, align 4
35     ret i32 %r1
38 define dso_local i32 @atomic_exchange_release(ptr %ptr, ptr %ptr2, i32 %value) {
39 ; CHECK-LABEL: atomic_exchange_release:
40 ; CHECK:       // %bb.0:
41 ; CHECK-NEXT:    swpl
42 ; CHECK-NOT:     wzr
43 ; CHECK-NEXT:    dmb ishld
44 ; CHECK-NEXT:    ldr w0, [x1]
45 ; CHECK-NEXT:    ret
46     %r0 = atomicrmw xchg ptr %ptr, i32 %value release
47     fence acquire
48     %r1 = load atomic i32, ptr %ptr2 monotonic, align 4
49     ret i32 %r1
52 define dso_local i32 @atomic_exchange_acquire_release(ptr %ptr, ptr %ptr2, i32 %value) {
53 ; CHECK-LABEL: atomic_exchange_acquire_release:
54 ; CHECK:       // %bb.0:
55 ; CHECK-NEXT:    swpal
56 ; CHECK-NOT:     wzr
57 ; CHECK-NEXT:    dmb ishld
58 ; CHECK-NEXT:    ldr w0, [x1]
59 ; CHECK-NEXT:    ret
60     %r0 = atomicrmw xchg ptr %ptr, i32 %value acq_rel
61     fence acquire
62     %r1 = load atomic i32, ptr %ptr2 monotonic, align 4
63     ret i32 %r1