brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 2adbc70 Raw
65 lines · plain
1; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lse -O0 | FileCheck %s2; RUN: llc %s -o - -verify-machineinstrs -mtriple=aarch64 -mattr=+lse -O1 | FileCheck %s3 4; When their destination register is WZR/ZZR, SWP operations are not regarded as5; a read for the purpose of a DMB.LD in the AArch64 memory model.6; This test ensures that the AArch64DeadRegisterDefinitions pass does not7; replace the desitnation register of SWP instructions with the zero register8; when the read value is unused.9 10define 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:    swp14; CHECK-NOT:     wzr15; CHECK-NEXT:    dmb ishld16; CHECK-NEXT:    ldr w0, [x1]17; CHECK-NEXT:    ret18    %r0 = atomicrmw xchg ptr %ptr, i32 %value monotonic19    fence acquire20    %r1 = load atomic i32, ptr %ptr2 monotonic, align 421    ret i32 %r122}23 24define 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:    swpa28; CHECK-NOT:     wzr29; CHECK-NEXT:    dmb ishld30; CHECK-NEXT:    ldr w0, [x1]31; CHECK-NEXT:    ret32    %r0 = atomicrmw xchg ptr %ptr, i32 %value acquire33    fence acquire34    %r1 = load atomic i32, ptr %ptr2 monotonic, align 435    ret i32 %r136}37 38define 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:    swpl42; CHECK-NOT:     wzr43; CHECK-NEXT:    dmb ishld44; CHECK-NEXT:    ldr w0, [x1]45; CHECK-NEXT:    ret46    %r0 = atomicrmw xchg ptr %ptr, i32 %value release47    fence acquire48    %r1 = load atomic i32, ptr %ptr2 monotonic, align 449    ret i32 %r150}51 52define 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:    swpal56; CHECK-NOT:     wzr57; CHECK-NEXT:    dmb ishld58; CHECK-NEXT:    ldr w0, [x1]59; CHECK-NEXT:    ret60    %r0 = atomicrmw xchg ptr %ptr, i32 %value acq_rel61    fence acquire62    %r1 = load atomic i32, ptr %ptr2 monotonic, align 463    ret i32 %r164}65