[llvm] [AArch64] Enable FEAT_LSFE CodeGen only when exception can be ignored (PR #212799)

via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 5 08:54:40 PDT 2026


https://github.com/Lukacma updated https://github.com/llvm/llvm-project/pull/212799

>From 50a8f15bf26bbb861357bf135f8b833380e34ef4 Mon Sep 17 00:00:00 2001
From: Marian Lukac <Marian.Lukac at arm.com>
Date: Wed, 29 Jul 2026 15:13:31 +0000
Subject: [PATCH 1/2] [AArch64] Enable FEAT_LSFE CodeGen only when exception
 can be ignored

This patch restricts the generation of new atomic instructions
added under FEAT_LSFE to functions where no-trapping-math flag is set
and strictfp attribute is not set. This is done to preserve the exception
behaviour of the original codegen.
---
 .../Target/AArch64/AArch64ISelLowering.cpp    |  17 +-
 llvm/lib/Target/AArch64/AArch64Subtarget.cpp  |   7 +-
 llvm/lib/Target/AArch64/AArch64Subtarget.h    |   5 +-
 .../Target/AArch64/AArch64TargetMachine.cpp   |   7 +-
 .../AArch64/Atomics/aarch64-atomicrmw-lsfe.ll | 591 +++++++++---------
 .../Atomics/aarch64_be-atomicrmw-lsfe.ll      | 591 +++++++++---------
 .../CodeGen/AArch64/Atomics/generate-tests.py |  25 +-
 7 files changed, 669 insertions(+), 574 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index a5a2c9e430ac2..04bf68e983da0 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -1062,7 +1062,8 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
     setOperationAction(ISD::ATOMIC_LOAD_XOR, MVT::i64, LibCall);
   }
 
-  if (Subtarget->outlineAtomics() && !Subtarget->hasLSFE()) {
+  if (Subtarget->outlineAtomics() &&
+      (!Subtarget->hasLSFE() || !Subtarget->canIgnoreFPExceptions())) {
     setOperationAction(ISD::ATOMIC_LOAD_FADD, MVT::f16, LibCall);
     setOperationAction(ISD::ATOMIC_LOAD_FADD, MVT::f32, LibCall);
     setOperationAction(ISD::ATOMIC_LOAD_FADD, MVT::f64, LibCall);
@@ -32636,12 +32637,14 @@ AArch64TargetLowering::shouldExpandAtomicRMWInIR(
   if (CanUseLSE128)
     return AtomicExpansionKind::None;
 
-  // If LSFE available, use atomic FP instructions in preference to expansion
-  if (Subtarget->hasLSFE() && (AI->getOperation() == AtomicRMWInst::FAdd ||
-                               AI->getOperation() == AtomicRMWInst::FMax ||
-                               AI->getOperation() == AtomicRMWInst::FMin ||
-                               AI->getOperation() == AtomicRMWInst::FMaximum ||
-                               AI->getOperation() == AtomicRMWInst::FMinimum))
+  // If LSFE is available and FP exceptions are not observable, use atomic FP
+  // instructions in preference to expansion.
+  if (Subtarget->hasLSFE() && Subtarget->canIgnoreFPExceptions() &&
+      (AI->getOperation() == AtomicRMWInst::FAdd ||
+       AI->getOperation() == AtomicRMWInst::FMax ||
+       AI->getOperation() == AtomicRMWInst::FMin ||
+       AI->getOperation() == AtomicRMWInst::FMaximum ||
+       AI->getOperation() == AtomicRMWInst::FMinimum))
     return AtomicExpansionKind::None;
 
   // Leave 128 bits to LLSC or CmpXChg.
diff --git a/llvm/lib/Target/AArch64/AArch64Subtarget.cpp b/llvm/lib/Target/AArch64/AArch64Subtarget.cpp
index 9ee3d0cc9e0ea..7896255dad6dd 100644
--- a/llvm/lib/Target/AArch64/AArch64Subtarget.cpp
+++ b/llvm/lib/Target/AArch64/AArch64Subtarget.cpp
@@ -355,13 +355,14 @@ AArch64Subtarget::AArch64Subtarget(const Triple &TT, StringRef CPU,
                                    unsigned MaxSVEVectorSizeInBitsOverride,
                                    bool IsStreaming, bool IsStreamingCompatible,
                                    bool HasMinSize,
-                                   bool EnableSRLTSubregToRegMitigation)
+                                   bool EnableSRLTSubregToRegMitigation,
+                                   bool CanIgnoreFPExceptions)
     : AArch64GenSubtargetInfo(TT, CPU, TuneCPU, FS),
       ReserveXRegister(AArch64::GPR64commonRegClass.getNumRegs()),
       ReserveXRegisterForRA(AArch64::GPR64commonRegClass.getNumRegs()),
       CustomCallSavedXRegs(AArch64::GPR64commonRegClass.getNumRegs()),
-      IsLittle(LittleEndian), IsStreaming(IsStreaming),
-      IsStreamingCompatible(IsStreamingCompatible),
+      IsLittle(LittleEndian), CanIgnoreFPExceptions(CanIgnoreFPExceptions),
+      IsStreaming(IsStreaming), IsStreamingCompatible(IsStreamingCompatible),
       StreamingHazardSize(
           AArch64StreamingHazardSize.getNumOccurrences() > 0
               ? std::optional<unsigned>(AArch64StreamingHazardSize)
diff --git a/llvm/lib/Target/AArch64/AArch64Subtarget.h b/llvm/lib/Target/AArch64/AArch64Subtarget.h
index 380c3e11fcbf2..6267a77185b4b 100644
--- a/llvm/lib/Target/AArch64/AArch64Subtarget.h
+++ b/llvm/lib/Target/AArch64/AArch64Subtarget.h
@@ -83,6 +83,7 @@ class AArch64Subtarget final : public AArch64GenSubtargetInfo {
   BitVector CustomCallSavedXRegs;
 
   bool IsLittle;
+  bool CanIgnoreFPExceptions;
 
   bool IsStreaming;
   bool IsStreamingCompatible;
@@ -131,7 +132,8 @@ class AArch64Subtarget final : public AArch64GenSubtargetInfo {
                    unsigned MaxSVEVectorSizeInBitsOverride = 0,
                    bool IsStreaming = false, bool IsStreamingCompatible = false,
                    bool HasMinSize = false,
-                   bool EnableSRLTSubregToRegMitigation = false);
+                   bool EnableSRLTSubregToRegMitigation = false,
+                   bool CanIgnoreFPExceptions = false);
 
 // Getters for SubtargetFeatures defined in tablegen
 #define GET_SUBTARGETINFO_MACRO(ATTRIBUTE, DEFAULT, GETTER)                    \
@@ -307,6 +309,7 @@ class AArch64Subtarget final : public AArch64GenSubtargetInfo {
   bool supportsAddressTopByteIgnored() const;
 
   bool isLittleEndian() const { return IsLittle; }
+  bool canIgnoreFPExceptions() const { return CanIgnoreFPExceptions; }
 
   bool isTargetDarwin() const { return TargetTriple.isOSDarwin(); }
   bool isTargetIOS() const { return TargetTriple.isiOS(); }
diff --git a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
index 2b4d50a89ff59..4ccf8092a80fc 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
@@ -449,6 +449,9 @@ AArch64TargetMachine::getSubtargetImpl(const Function &F) const {
                      F.hasFnAttribute("aarch64_pstate_sm_body");
   bool IsStreamingCompatible = ForceStreamingCompatible ||
                                F.hasFnAttribute("aarch64_pstate_sm_compatible");
+  bool CanIgnoreFPExceptions =
+      !F.isStrictFP() &&
+      F.getFnAttribute("no-trapping-math").getValueAsBool();
 
   unsigned MinSVEVectorSize = 0;
   unsigned MaxSVEVectorSize = 0;
@@ -485,6 +488,8 @@ AArch64TargetMachine::getSubtargetImpl(const Function &F) const {
   Key += utostr(IsStreaming);
   Key += "IsStreamingCompatible=";
   Key += utostr(IsStreamingCompatible);
+  Key += "CanIgnoreFPExceptions=";
+  Key += utostr(CanIgnoreFPExceptions);
   Key += CPU;
   Key += TuneCPU;
   Key += FS;
@@ -496,7 +501,7 @@ AArch64TargetMachine::getSubtargetImpl(const Function &F) const {
     I = std::make_unique<AArch64Subtarget>(
         TargetTriple, CPU, TuneCPU, FS, *this, isLittle, MinSVEVectorSize,
         MaxSVEVectorSize, IsStreaming, IsStreamingCompatible, HasMinSize,
-        EnableSRLTSubregToRegMitigation);
+        EnableSRLTSubregToRegMitigation, CanIgnoreFPExceptions);
   }
 
   if (IsStreaming && !I->hasSME())
diff --git a/llvm/test/CodeGen/AArch64/Atomics/aarch64-atomicrmw-lsfe.ll b/llvm/test/CodeGen/AArch64/Atomics/aarch64-atomicrmw-lsfe.ll
index 6a0b689b16888..eab00a5b85008 100644
--- a/llvm/test/CodeGen/AArch64/Atomics/aarch64-atomicrmw-lsfe.ll
+++ b/llvm/test/CodeGen/AArch64/Atomics/aarch64-atomicrmw-lsfe.ll
@@ -6,238 +6,238 @@
 ; NOTE: '_unused' tests are added to ensure we do not lower to ST[F]ADD when the destination register is WZR/XZR.
 ; See discussion on https://github.com/llvm/llvm-project/pull/131174
 
-define dso_local half @atomicrmw_fadd_half_aligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_aligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_aligned_monotonic:
 ; CHECK:    ldfadd h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, half %value monotonic, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fadd_half_aligned_monotonic_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fadd_half_aligned_monotonic_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_aligned_monotonic_unused:
 ; CHECK:    ldfadd h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, half %value monotonic, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fadd_half_aligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_aligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_aligned_acquire:
 ; CHECK:    ldfadda h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, half %value acquire, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fadd_half_aligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_aligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_aligned_release:
 ; CHECK:    ldfaddl h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, half %value release, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fadd_half_aligned_release_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fadd_half_aligned_release_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_aligned_release_unused:
 ; CHECK:    ldfaddl h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, half %value release, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fadd_half_aligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_aligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_aligned_acq_rel:
 ; CHECK:    ldfaddal h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, half %value acq_rel, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fadd_half_aligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_aligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_aligned_seq_cst:
 ; CHECK:    ldfaddal h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, half %value seq_cst, align 2
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_monotonic:
 ; CHECK:    ldbfadd h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, bfloat %value monotonic, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fadd_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fadd_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_monotonic_unused:
 ; CHECK:    ldbfadd h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, bfloat %value monotonic, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_acquire:
 ; CHECK:    ldbfadda h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, bfloat %value acquire, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_release(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_release:
 ; CHECK:    ldbfaddl h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, bfloat %value release, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fadd_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fadd_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_release_unused:
 ; CHECK:    ldbfaddl h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, bfloat %value release, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_acq_rel:
 ; CHECK:    ldbfaddal h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, bfloat %value acq_rel, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_seq_cst:
 ; CHECK:    ldbfaddal h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, bfloat %value seq_cst, align 2
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fadd_float_aligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_aligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_aligned_monotonic:
 ; CHECK:    ldfadd s0, s0, [x0]
     %r = atomicrmw fadd ptr %ptr, float %value monotonic, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fadd_float_aligned_monotonic_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fadd_float_aligned_monotonic_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_aligned_monotonic_unused:
 ; CHECK:    ldfadd s0, s0, [x0]
     %r = atomicrmw fadd ptr %ptr, float %value monotonic, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fadd_float_aligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_aligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_aligned_acquire:
 ; CHECK:    ldfadda s0, s0, [x0]
     %r = atomicrmw fadd ptr %ptr, float %value acquire, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fadd_float_aligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_aligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_aligned_release:
 ; CHECK:    ldfaddl s0, s0, [x0]
     %r = atomicrmw fadd ptr %ptr, float %value release, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fadd_float_aligned_release_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fadd_float_aligned_release_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_aligned_release_unused:
 ; CHECK:    ldfaddl s0, s0, [x0]
     %r = atomicrmw fadd ptr %ptr, float %value release, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fadd_float_aligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_aligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_aligned_acq_rel:
 ; CHECK:    ldfaddal s0, s0, [x0]
     %r = atomicrmw fadd ptr %ptr, float %value acq_rel, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fadd_float_aligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_aligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_aligned_seq_cst:
 ; CHECK:    ldfaddal s0, s0, [x0]
     %r = atomicrmw fadd ptr %ptr, float %value seq_cst, align 4
     ret float %r
 }
 
-define dso_local double @atomicrmw_fadd_double_aligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_aligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_aligned_monotonic:
 ; CHECK:    ldfadd d0, d0, [x0]
     %r = atomicrmw fadd ptr %ptr, double %value monotonic, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fadd_double_aligned_monotonic_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fadd_double_aligned_monotonic_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_aligned_monotonic_unused:
 ; CHECK:    ldfadd d0, d0, [x0]
     %r = atomicrmw fadd ptr %ptr, double %value monotonic, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fadd_double_aligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_aligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_aligned_acquire:
 ; CHECK:    ldfadda d0, d0, [x0]
     %r = atomicrmw fadd ptr %ptr, double %value acquire, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fadd_double_aligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_aligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_aligned_release:
 ; CHECK:    ldfaddl d0, d0, [x0]
     %r = atomicrmw fadd ptr %ptr, double %value release, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fadd_double_aligned_release_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fadd_double_aligned_release_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_aligned_release_unused:
 ; CHECK:    ldfaddl d0, d0, [x0]
     %r = atomicrmw fadd ptr %ptr, double %value release, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fadd_double_aligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_aligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_aligned_acq_rel:
 ; CHECK:    ldfaddal d0, d0, [x0]
     %r = atomicrmw fadd ptr %ptr, double %value acq_rel, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fadd_double_aligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_aligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_aligned_seq_cst:
 ; CHECK:    ldfaddal d0, d0, [x0]
     %r = atomicrmw fadd ptr %ptr, double %value seq_cst, align 8
     ret double %r
 }
 
-define dso_local half @atomicrmw_fadd_half_unaligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_unaligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, half %value monotonic, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fadd_half_unaligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_unaligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, half %value acquire, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fadd_half_unaligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_unaligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, half %value release, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fadd_half_unaligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_unaligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, half %value acq_rel, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fadd_half_unaligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_unaligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, half %value seq_cst, align 1
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_monotonic:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -254,7 +254,7 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_monotonic(ptr %ptr, bfl
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_acquire:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -271,7 +271,7 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acquire(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_release(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_release:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -288,7 +288,7 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_release(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_acq_rel:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -305,7 +305,7 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acq_rel(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_seq_cst:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -322,77 +322,77 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_seq_cst(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fadd_float_unaligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_unaligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, float %value monotonic, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fadd_float_unaligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_unaligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, float %value acquire, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fadd_float_unaligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_unaligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, float %value release, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fadd_float_unaligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_unaligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, float %value acq_rel, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fadd_float_unaligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_unaligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, float %value seq_cst, align 1
     ret float %r
 }
 
-define dso_local double @atomicrmw_fadd_double_unaligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_unaligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, double %value monotonic, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fadd_double_unaligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_unaligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, double %value acquire, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fadd_double_unaligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_unaligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, double %value release, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fadd_double_unaligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_unaligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, double %value acq_rel, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fadd_double_unaligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_unaligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, double %value seq_cst, align 1
     ret double %r
 }
 
-define dso_local half @atomicrmw_fsub_half_aligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_aligned_monotonic(ptr %ptr, half %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_half_aligned_monotonic:
 ; -O0:    ldaxrh w9, [x10]
 ; -O0:    cmp w9, w11, uxth
@@ -406,7 +406,7 @@ define dso_local half @atomicrmw_fsub_half_aligned_monotonic(ptr %ptr, half %val
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_aligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_aligned_acquire(ptr %ptr, half %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_half_aligned_acquire:
 ; -O0:    ldaxrh w9, [x10]
 ; -O0:    cmp w9, w11, uxth
@@ -420,7 +420,7 @@ define dso_local half @atomicrmw_fsub_half_aligned_acquire(ptr %ptr, half %value
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_aligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_aligned_release(ptr %ptr, half %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_half_aligned_release:
 ; -O0:    ldaxrh w9, [x10]
 ; -O0:    cmp w9, w11, uxth
@@ -434,7 +434,7 @@ define dso_local half @atomicrmw_fsub_half_aligned_release(ptr %ptr, half %value
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_aligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_aligned_acq_rel(ptr %ptr, half %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_half_aligned_acq_rel:
 ; -O0:    ldaxrh w9, [x10]
 ; -O0:    cmp w9, w11, uxth
@@ -448,7 +448,7 @@ define dso_local half @atomicrmw_fsub_half_aligned_acq_rel(ptr %ptr, half %value
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_aligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_aligned_seq_cst(ptr %ptr, half %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_half_aligned_seq_cst:
 ; -O0:    ldaxrh w9, [x10]
 ; -O0:    cmp w9, w11, uxth
@@ -462,7 +462,7 @@ define dso_local half @atomicrmw_fsub_half_aligned_seq_cst(ptr %ptr, half %value
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_aligned_monotonic:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -483,7 +483,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_monotonic(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_aligned_acquire:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -504,7 +504,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_acquire(ptr %ptr, bfloat
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_release(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_aligned_release:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -525,7 +525,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_release(ptr %ptr, bfloat
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_aligned_acq_rel:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -546,7 +546,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_acq_rel(ptr %ptr, bfloat
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_aligned_seq_cst:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -567,7 +567,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_seq_cst(ptr %ptr, bfloat
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fsub_float_aligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_aligned_monotonic(ptr %ptr, float %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_float_aligned_monotonic:
 ; -O0:    ldaxr w8, [x10]
 ; -O0:    cmp w8, w11
@@ -581,7 +581,7 @@ define dso_local float @atomicrmw_fsub_float_aligned_monotonic(ptr %ptr, float %
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_aligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_aligned_acquire(ptr %ptr, float %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_float_aligned_acquire:
 ; -O0:    ldaxr w8, [x10]
 ; -O0:    cmp w8, w11
@@ -595,7 +595,7 @@ define dso_local float @atomicrmw_fsub_float_aligned_acquire(ptr %ptr, float %va
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_aligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_aligned_release(ptr %ptr, float %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_float_aligned_release:
 ; -O0:    ldaxr w8, [x10]
 ; -O0:    cmp w8, w11
@@ -609,7 +609,7 @@ define dso_local float @atomicrmw_fsub_float_aligned_release(ptr %ptr, float %va
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_aligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_aligned_acq_rel(ptr %ptr, float %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_float_aligned_acq_rel:
 ; -O0:    ldaxr w8, [x10]
 ; -O0:    cmp w8, w11
@@ -623,7 +623,7 @@ define dso_local float @atomicrmw_fsub_float_aligned_acq_rel(ptr %ptr, float %va
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_aligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_aligned_seq_cst(ptr %ptr, float %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_float_aligned_seq_cst:
 ; -O0:    ldaxr w8, [x10]
 ; -O0:    cmp w8, w11
@@ -637,7 +637,7 @@ define dso_local float @atomicrmw_fsub_float_aligned_seq_cst(ptr %ptr, float %va
     ret float %r
 }
 
-define dso_local double @atomicrmw_fsub_double_aligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_aligned_monotonic(ptr %ptr, double %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_double_aligned_monotonic:
 ; -O0:    ldaxr x8, [x10]
 ; -O0:    cmp x8, x11
@@ -651,7 +651,7 @@ define dso_local double @atomicrmw_fsub_double_aligned_monotonic(ptr %ptr, doubl
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_aligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_aligned_acquire(ptr %ptr, double %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_double_aligned_acquire:
 ; -O0:    ldaxr x8, [x10]
 ; -O0:    cmp x8, x11
@@ -665,7 +665,7 @@ define dso_local double @atomicrmw_fsub_double_aligned_acquire(ptr %ptr, double
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_aligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_aligned_release(ptr %ptr, double %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_double_aligned_release:
 ; -O0:    ldaxr x8, [x10]
 ; -O0:    cmp x8, x11
@@ -679,7 +679,7 @@ define dso_local double @atomicrmw_fsub_double_aligned_release(ptr %ptr, double
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_aligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_aligned_acq_rel(ptr %ptr, double %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_double_aligned_acq_rel:
 ; -O0:    ldaxr x8, [x10]
 ; -O0:    cmp x8, x11
@@ -693,7 +693,7 @@ define dso_local double @atomicrmw_fsub_double_aligned_acq_rel(ptr %ptr, double
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_aligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_aligned_seq_cst(ptr %ptr, double %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_double_aligned_seq_cst:
 ; -O0:    ldaxr x8, [x10]
 ; -O0:    cmp x8, x11
@@ -707,42 +707,42 @@ define dso_local double @atomicrmw_fsub_double_aligned_seq_cst(ptr %ptr, double
     ret double %r
 }
 
-define dso_local half @atomicrmw_fsub_half_unaligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_unaligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_half_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, half %value monotonic, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_unaligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_unaligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_half_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, half %value acquire, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_unaligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_unaligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_half_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, half %value release, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_unaligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_unaligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_half_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, half %value acq_rel, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_unaligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_unaligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_half_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, half %value seq_cst, align 1
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_unaligned_monotonic:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -759,7 +759,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_monotonic(ptr %ptr, bfl
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_unaligned_acquire:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -776,7 +776,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_acquire(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_release(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_unaligned_release:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -793,7 +793,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_release(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_unaligned_acq_rel:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -810,7 +810,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_acq_rel(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_unaligned_seq_cst:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -827,308 +827,308 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_seq_cst(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fsub_float_unaligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_unaligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_float_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, float %value monotonic, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_unaligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_unaligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_float_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, float %value acquire, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_unaligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_unaligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_float_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, float %value release, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_unaligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_unaligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_float_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, float %value acq_rel, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_unaligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_unaligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_float_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, float %value seq_cst, align 1
     ret float %r
 }
 
-define dso_local double @atomicrmw_fsub_double_unaligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_unaligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_double_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, double %value monotonic, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_unaligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_unaligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_double_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, double %value acquire, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_unaligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_unaligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_double_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, double %value release, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_unaligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_unaligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_double_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, double %value acq_rel, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_unaligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_unaligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_double_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, double %value seq_cst, align 1
     ret double %r
 }
 
-define dso_local half @atomicrmw_fmax_half_aligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_aligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_aligned_monotonic:
 ; CHECK:    ldfmaxnm h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, half %value monotonic, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fmax_half_aligned_monotonic_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fmax_half_aligned_monotonic_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_aligned_monotonic_unused:
 ; CHECK:    ldfmaxnm h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, half %value monotonic, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fmax_half_aligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_aligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_aligned_acquire:
 ; CHECK:    ldfmaxnma h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, half %value acquire, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmax_half_aligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_aligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_aligned_release:
 ; CHECK:    ldfmaxnml h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, half %value release, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fmax_half_aligned_release_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fmax_half_aligned_release_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_aligned_release_unused:
 ; CHECK:    ldfmaxnml h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, half %value release, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fmax_half_aligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_aligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_aligned_acq_rel:
 ; CHECK:    ldfmaxnmal h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, half %value acq_rel, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmax_half_aligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_aligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_aligned_seq_cst:
 ; CHECK:    ldfmaxnmal h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, half %value seq_cst, align 2
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_monotonic:
 ; CHECK:    ldbfmaxnm h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, bfloat %value monotonic, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fmax_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fmax_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_monotonic_unused:
 ; CHECK:    ldbfmaxnm h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, bfloat %value monotonic, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_acquire:
 ; CHECK:    ldbfmaxnma h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, bfloat %value acquire, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_release(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_release:
 ; CHECK:    ldbfmaxnml h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, bfloat %value release, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fmax_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fmax_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_release_unused:
 ; CHECK:    ldbfmaxnml h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, bfloat %value release, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_acq_rel:
 ; CHECK:    ldbfmaxnmal h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, bfloat %value acq_rel, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_seq_cst:
 ; CHECK:    ldbfmaxnmal h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, bfloat %value seq_cst, align 2
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fmax_float_aligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_aligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_aligned_monotonic:
 ; CHECK:    ldfmaxnm s0, s0, [x0]
     %r = atomicrmw fmax ptr %ptr, float %value monotonic, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fmax_float_aligned_monotonic_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fmax_float_aligned_monotonic_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_aligned_monotonic_unused:
 ; CHECK:    ldfmaxnm s0, s0, [x0]
     %r = atomicrmw fmax ptr %ptr, float %value monotonic, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fmax_float_aligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_aligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_aligned_acquire:
 ; CHECK:    ldfmaxnma s0, s0, [x0]
     %r = atomicrmw fmax ptr %ptr, float %value acquire, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmax_float_aligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_aligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_aligned_release:
 ; CHECK:    ldfmaxnml s0, s0, [x0]
     %r = atomicrmw fmax ptr %ptr, float %value release, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fmax_float_aligned_release_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fmax_float_aligned_release_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_aligned_release_unused:
 ; CHECK:    ldfmaxnml s0, s0, [x0]
     %r = atomicrmw fmax ptr %ptr, float %value release, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fmax_float_aligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_aligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_aligned_acq_rel:
 ; CHECK:    ldfmaxnmal s0, s0, [x0]
     %r = atomicrmw fmax ptr %ptr, float %value acq_rel, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmax_float_aligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_aligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_aligned_seq_cst:
 ; CHECK:    ldfmaxnmal s0, s0, [x0]
     %r = atomicrmw fmax ptr %ptr, float %value seq_cst, align 4
     ret float %r
 }
 
-define dso_local double @atomicrmw_fmax_double_aligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_aligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_aligned_monotonic:
 ; CHECK:    ldfmaxnm d0, d0, [x0]
     %r = atomicrmw fmax ptr %ptr, double %value monotonic, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fmax_double_aligned_monotonic_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fmax_double_aligned_monotonic_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_aligned_monotonic_unused:
 ; CHECK:    ldfmaxnm d0, d0, [x0]
     %r = atomicrmw fmax ptr %ptr, double %value monotonic, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fmax_double_aligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_aligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_aligned_acquire:
 ; CHECK:    ldfmaxnma d0, d0, [x0]
     %r = atomicrmw fmax ptr %ptr, double %value acquire, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmax_double_aligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_aligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_aligned_release:
 ; CHECK:    ldfmaxnml d0, d0, [x0]
     %r = atomicrmw fmax ptr %ptr, double %value release, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fmax_double_aligned_release_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fmax_double_aligned_release_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_aligned_release_unused:
 ; CHECK:    ldfmaxnml d0, d0, [x0]
     %r = atomicrmw fmax ptr %ptr, double %value release, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fmax_double_aligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_aligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_aligned_acq_rel:
 ; CHECK:    ldfmaxnmal d0, d0, [x0]
     %r = atomicrmw fmax ptr %ptr, double %value acq_rel, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmax_double_aligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_aligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_aligned_seq_cst:
 ; CHECK:    ldfmaxnmal d0, d0, [x0]
     %r = atomicrmw fmax ptr %ptr, double %value seq_cst, align 8
     ret double %r
 }
 
-define dso_local half @atomicrmw_fmax_half_unaligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_unaligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, half %value monotonic, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmax_half_unaligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_unaligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, half %value acquire, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmax_half_unaligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_unaligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, half %value release, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmax_half_unaligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_unaligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, half %value acq_rel, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmax_half_unaligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_unaligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, half %value seq_cst, align 1
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmax_bfloat_unaligned_monotonic:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -1145,7 +1145,7 @@ define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_monotonic(ptr %ptr, bfl
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmax_bfloat_unaligned_acquire:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -1162,7 +1162,7 @@ define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_acquire(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_release(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmax_bfloat_unaligned_release:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -1179,7 +1179,7 @@ define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_release(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmax_bfloat_unaligned_acq_rel:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -1196,7 +1196,7 @@ define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_acq_rel(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmax_bfloat_unaligned_seq_cst:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -1213,308 +1213,308 @@ define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_seq_cst(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fmax_float_unaligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_unaligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, float %value monotonic, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmax_float_unaligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_unaligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, float %value acquire, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmax_float_unaligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_unaligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, float %value release, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmax_float_unaligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_unaligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, float %value acq_rel, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmax_float_unaligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_unaligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, float %value seq_cst, align 1
     ret float %r
 }
 
-define dso_local double @atomicrmw_fmax_double_unaligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_unaligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, double %value monotonic, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmax_double_unaligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_unaligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, double %value acquire, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmax_double_unaligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_unaligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, double %value release, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmax_double_unaligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_unaligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, double %value acq_rel, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmax_double_unaligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_unaligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, double %value seq_cst, align 1
     ret double %r
 }
 
-define dso_local half @atomicrmw_fmin_half_aligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_aligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_aligned_monotonic:
 ; CHECK:    ldfminnm h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, half %value monotonic, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fmin_half_aligned_monotonic_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fmin_half_aligned_monotonic_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_aligned_monotonic_unused:
 ; CHECK:    ldfminnm h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, half %value monotonic, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fmin_half_aligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_aligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_aligned_acquire:
 ; CHECK:    ldfminnma h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, half %value acquire, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmin_half_aligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_aligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_aligned_release:
 ; CHECK:    ldfminnml h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, half %value release, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fmin_half_aligned_release_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fmin_half_aligned_release_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_aligned_release_unused:
 ; CHECK:    ldfminnml h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, half %value release, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fmin_half_aligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_aligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_aligned_acq_rel:
 ; CHECK:    ldfminnmal h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, half %value acq_rel, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmin_half_aligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_aligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_aligned_seq_cst:
 ; CHECK:    ldfminnmal h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, half %value seq_cst, align 2
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_monotonic:
 ; CHECK:    ldbfminnm h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, bfloat %value monotonic, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fmin_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fmin_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_monotonic_unused:
 ; CHECK:    ldbfminnm h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, bfloat %value monotonic, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_acquire:
 ; CHECK:    ldbfminnma h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, bfloat %value acquire, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_release(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_release:
 ; CHECK:    ldbfminnml h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, bfloat %value release, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fmin_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fmin_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_release_unused:
 ; CHECK:    ldbfminnml h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, bfloat %value release, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_acq_rel:
 ; CHECK:    ldbfminnmal h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, bfloat %value acq_rel, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_seq_cst:
 ; CHECK:    ldbfminnmal h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, bfloat %value seq_cst, align 2
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fmin_float_aligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_aligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_aligned_monotonic:
 ; CHECK:    ldfminnm s0, s0, [x0]
     %r = atomicrmw fmin ptr %ptr, float %value monotonic, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fmin_float_aligned_monotonic_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fmin_float_aligned_monotonic_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_aligned_monotonic_unused:
 ; CHECK:    ldfminnm s0, s0, [x0]
     %r = atomicrmw fmin ptr %ptr, float %value monotonic, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fmin_float_aligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_aligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_aligned_acquire:
 ; CHECK:    ldfminnma s0, s0, [x0]
     %r = atomicrmw fmin ptr %ptr, float %value acquire, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmin_float_aligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_aligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_aligned_release:
 ; CHECK:    ldfminnml s0, s0, [x0]
     %r = atomicrmw fmin ptr %ptr, float %value release, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fmin_float_aligned_release_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fmin_float_aligned_release_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_aligned_release_unused:
 ; CHECK:    ldfminnml s0, s0, [x0]
     %r = atomicrmw fmin ptr %ptr, float %value release, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fmin_float_aligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_aligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_aligned_acq_rel:
 ; CHECK:    ldfminnmal s0, s0, [x0]
     %r = atomicrmw fmin ptr %ptr, float %value acq_rel, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmin_float_aligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_aligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_aligned_seq_cst:
 ; CHECK:    ldfminnmal s0, s0, [x0]
     %r = atomicrmw fmin ptr %ptr, float %value seq_cst, align 4
     ret float %r
 }
 
-define dso_local double @atomicrmw_fmin_double_aligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_aligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_aligned_monotonic:
 ; CHECK:    ldfminnm d0, d0, [x0]
     %r = atomicrmw fmin ptr %ptr, double %value monotonic, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fmin_double_aligned_monotonic_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fmin_double_aligned_monotonic_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_aligned_monotonic_unused:
 ; CHECK:    ldfminnm d0, d0, [x0]
     %r = atomicrmw fmin ptr %ptr, double %value monotonic, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fmin_double_aligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_aligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_aligned_acquire:
 ; CHECK:    ldfminnma d0, d0, [x0]
     %r = atomicrmw fmin ptr %ptr, double %value acquire, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmin_double_aligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_aligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_aligned_release:
 ; CHECK:    ldfminnml d0, d0, [x0]
     %r = atomicrmw fmin ptr %ptr, double %value release, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fmin_double_aligned_release_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fmin_double_aligned_release_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_aligned_release_unused:
 ; CHECK:    ldfminnml d0, d0, [x0]
     %r = atomicrmw fmin ptr %ptr, double %value release, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fmin_double_aligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_aligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_aligned_acq_rel:
 ; CHECK:    ldfminnmal d0, d0, [x0]
     %r = atomicrmw fmin ptr %ptr, double %value acq_rel, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmin_double_aligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_aligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_aligned_seq_cst:
 ; CHECK:    ldfminnmal d0, d0, [x0]
     %r = atomicrmw fmin ptr %ptr, double %value seq_cst, align 8
     ret double %r
 }
 
-define dso_local half @atomicrmw_fmin_half_unaligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_unaligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, half %value monotonic, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmin_half_unaligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_unaligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, half %value acquire, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmin_half_unaligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_unaligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, half %value release, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmin_half_unaligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_unaligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, half %value acq_rel, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmin_half_unaligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_unaligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, half %value seq_cst, align 1
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmin_bfloat_unaligned_monotonic:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -1531,7 +1531,7 @@ define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_monotonic(ptr %ptr, bfl
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmin_bfloat_unaligned_acquire:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -1548,7 +1548,7 @@ define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_acquire(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_release(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmin_bfloat_unaligned_release:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -1565,7 +1565,7 @@ define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_release(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmin_bfloat_unaligned_acq_rel:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -1582,7 +1582,7 @@ define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_acq_rel(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmin_bfloat_unaligned_seq_cst:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -1599,308 +1599,308 @@ define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_seq_cst(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fmin_float_unaligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_unaligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, float %value monotonic, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmin_float_unaligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_unaligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, float %value acquire, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmin_float_unaligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_unaligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, float %value release, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmin_float_unaligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_unaligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, float %value acq_rel, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmin_float_unaligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_unaligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, float %value seq_cst, align 1
     ret float %r
 }
 
-define dso_local double @atomicrmw_fmin_double_unaligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_unaligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, double %value monotonic, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmin_double_unaligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_unaligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, double %value acquire, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmin_double_unaligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_unaligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, double %value release, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmin_double_unaligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_unaligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, double %value acq_rel, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmin_double_unaligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_unaligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, double %value seq_cst, align 1
     ret double %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_aligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_aligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_monotonic:
 ; CHECK:    ldfmax h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, half %value monotonic, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fmaximum_half_aligned_monotonic_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fmaximum_half_aligned_monotonic_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_monotonic_unused:
 ; CHECK:    ldfmax h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, half %value monotonic, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fmaximum_half_aligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_aligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_acquire:
 ; CHECK:    ldfmaxa h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, half %value acquire, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_aligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_aligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_release:
 ; CHECK:    ldfmaxl h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, half %value release, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fmaximum_half_aligned_release_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fmaximum_half_aligned_release_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_release_unused:
 ; CHECK:    ldfmaxl h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, half %value release, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fmaximum_half_aligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_aligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_acq_rel:
 ; CHECK:    ldfmaxal h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, half %value acq_rel, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_aligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_aligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_seq_cst:
 ; CHECK:    ldfmaxal h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, half %value seq_cst, align 2
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_monotonic:
 ; CHECK:    ldbfmax h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, bfloat %value monotonic, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fmaximum_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fmaximum_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_monotonic_unused:
 ; CHECK:    ldbfmax h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, bfloat %value monotonic, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_acquire:
 ; CHECK:    ldbfmaxa h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, bfloat %value acquire, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_release(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_release:
 ; CHECK:    ldbfmaxl h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, bfloat %value release, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fmaximum_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fmaximum_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_release_unused:
 ; CHECK:    ldbfmaxl h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, bfloat %value release, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_acq_rel:
 ; CHECK:    ldbfmaxal h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, bfloat %value acq_rel, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_seq_cst:
 ; CHECK:    ldbfmaxal h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, bfloat %value seq_cst, align 2
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_aligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_aligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_monotonic:
 ; CHECK:    ldfmax s0, s0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, float %value monotonic, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fmaximum_float_aligned_monotonic_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fmaximum_float_aligned_monotonic_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_monotonic_unused:
 ; CHECK:    ldfmax s0, s0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, float %value monotonic, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fmaximum_float_aligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_aligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_acquire:
 ; CHECK:    ldfmaxa s0, s0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, float %value acquire, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_aligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_aligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_release:
 ; CHECK:    ldfmaxl s0, s0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, float %value release, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fmaximum_float_aligned_release_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fmaximum_float_aligned_release_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_release_unused:
 ; CHECK:    ldfmaxl s0, s0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, float %value release, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fmaximum_float_aligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_aligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_acq_rel:
 ; CHECK:    ldfmaxal s0, s0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, float %value acq_rel, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_aligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_aligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_seq_cst:
 ; CHECK:    ldfmaxal s0, s0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, float %value seq_cst, align 4
     ret float %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_aligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_aligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_monotonic:
 ; CHECK:    ldfmax d0, d0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, double %value monotonic, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fmaximum_double_aligned_monotonic_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fmaximum_double_aligned_monotonic_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_monotonic_unused:
 ; CHECK:    ldfmax d0, d0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, double %value monotonic, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fmaximum_double_aligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_aligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_acquire:
 ; CHECK:    ldfmaxa d0, d0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, double %value acquire, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_aligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_aligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_release:
 ; CHECK:    ldfmaxl d0, d0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, double %value release, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fmaximum_double_aligned_release_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fmaximum_double_aligned_release_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_release_unused:
 ; CHECK:    ldfmaxl d0, d0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, double %value release, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fmaximum_double_aligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_aligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_acq_rel:
 ; CHECK:    ldfmaxal d0, d0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, double %value acq_rel, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_aligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_aligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_seq_cst:
 ; CHECK:    ldfmaxal d0, d0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, double %value seq_cst, align 8
     ret double %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_unaligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_unaligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, half %value monotonic, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_unaligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_unaligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, half %value acquire, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_unaligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_unaligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, half %value release, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_unaligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_unaligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, half %value acq_rel, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_unaligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_unaligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, half %value seq_cst, align 1
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmaximum_bfloat_unaligned_monotonic:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -1917,7 +1917,7 @@ define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_monotonic(ptr %ptr,
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmaximum_bfloat_unaligned_acquire:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -1934,7 +1934,7 @@ define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_acquire(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_release(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmaximum_bfloat_unaligned_release:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -1951,7 +1951,7 @@ define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_release(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmaximum_bfloat_unaligned_acq_rel:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -1968,7 +1968,7 @@ define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_acq_rel(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmaximum_bfloat_unaligned_seq_cst:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -1985,308 +1985,308 @@ define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_seq_cst(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_unaligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_unaligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, float %value monotonic, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_unaligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_unaligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, float %value acquire, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_unaligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_unaligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, float %value release, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_unaligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_unaligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, float %value acq_rel, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_unaligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_unaligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, float %value seq_cst, align 1
     ret float %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_unaligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_unaligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, double %value monotonic, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_unaligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_unaligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, double %value acquire, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_unaligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_unaligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, double %value release, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_unaligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_unaligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, double %value acq_rel, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_unaligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_unaligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, double %value seq_cst, align 1
     ret double %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_aligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_aligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_aligned_monotonic:
 ; CHECK:    ldfmin h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, half %value monotonic, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fminimum_half_aligned_monotonic_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fminimum_half_aligned_monotonic_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_aligned_monotonic_unused:
 ; CHECK:    ldfmin h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, half %value monotonic, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fminimum_half_aligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_aligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_aligned_acquire:
 ; CHECK:    ldfmina h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, half %value acquire, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_aligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_aligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_aligned_release:
 ; CHECK:    ldfminl h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, half %value release, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fminimum_half_aligned_release_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fminimum_half_aligned_release_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_aligned_release_unused:
 ; CHECK:    ldfminl h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, half %value release, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fminimum_half_aligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_aligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_aligned_acq_rel:
 ; CHECK:    ldfminal h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, half %value acq_rel, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_aligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_aligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_aligned_seq_cst:
 ; CHECK:    ldfminal h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, half %value seq_cst, align 2
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_monotonic:
 ; CHECK:    ldbfmin h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, bfloat %value monotonic, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fminimum_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fminimum_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_monotonic_unused:
 ; CHECK:    ldbfmin h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, bfloat %value monotonic, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_acquire:
 ; CHECK:    ldbfmina h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, bfloat %value acquire, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_release(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_release:
 ; CHECK:    ldbfminl h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, bfloat %value release, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fminimum_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fminimum_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_release_unused:
 ; CHECK:    ldbfminl h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, bfloat %value release, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_acq_rel:
 ; CHECK:    ldbfminal h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, bfloat %value acq_rel, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_seq_cst:
 ; CHECK:    ldbfminal h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, bfloat %value seq_cst, align 2
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_aligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_aligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_aligned_monotonic:
 ; CHECK:    ldfmin s0, s0, [x0]
     %r = atomicrmw fminimum ptr %ptr, float %value monotonic, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fminimum_float_aligned_monotonic_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fminimum_float_aligned_monotonic_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_aligned_monotonic_unused:
 ; CHECK:    ldfmin s0, s0, [x0]
     %r = atomicrmw fminimum ptr %ptr, float %value monotonic, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fminimum_float_aligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_aligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_aligned_acquire:
 ; CHECK:    ldfmina s0, s0, [x0]
     %r = atomicrmw fminimum ptr %ptr, float %value acquire, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_aligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_aligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_aligned_release:
 ; CHECK:    ldfminl s0, s0, [x0]
     %r = atomicrmw fminimum ptr %ptr, float %value release, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fminimum_float_aligned_release_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fminimum_float_aligned_release_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_aligned_release_unused:
 ; CHECK:    ldfminl s0, s0, [x0]
     %r = atomicrmw fminimum ptr %ptr, float %value release, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fminimum_float_aligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_aligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_aligned_acq_rel:
 ; CHECK:    ldfminal s0, s0, [x0]
     %r = atomicrmw fminimum ptr %ptr, float %value acq_rel, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_aligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_aligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_aligned_seq_cst:
 ; CHECK:    ldfminal s0, s0, [x0]
     %r = atomicrmw fminimum ptr %ptr, float %value seq_cst, align 4
     ret float %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_aligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_aligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_aligned_monotonic:
 ; CHECK:    ldfmin d0, d0, [x0]
     %r = atomicrmw fminimum ptr %ptr, double %value monotonic, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fminimum_double_aligned_monotonic_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fminimum_double_aligned_monotonic_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_aligned_monotonic_unused:
 ; CHECK:    ldfmin d0, d0, [x0]
     %r = atomicrmw fminimum ptr %ptr, double %value monotonic, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fminimum_double_aligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_aligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_aligned_acquire:
 ; CHECK:    ldfmina d0, d0, [x0]
     %r = atomicrmw fminimum ptr %ptr, double %value acquire, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_aligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_aligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_aligned_release:
 ; CHECK:    ldfminl d0, d0, [x0]
     %r = atomicrmw fminimum ptr %ptr, double %value release, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fminimum_double_aligned_release_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fminimum_double_aligned_release_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_aligned_release_unused:
 ; CHECK:    ldfminl d0, d0, [x0]
     %r = atomicrmw fminimum ptr %ptr, double %value release, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fminimum_double_aligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_aligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_aligned_acq_rel:
 ; CHECK:    ldfminal d0, d0, [x0]
     %r = atomicrmw fminimum ptr %ptr, double %value acq_rel, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_aligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_aligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_aligned_seq_cst:
 ; CHECK:    ldfminal d0, d0, [x0]
     %r = atomicrmw fminimum ptr %ptr, double %value seq_cst, align 8
     ret double %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_unaligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_unaligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, half %value monotonic, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_unaligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_unaligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, half %value acquire, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_unaligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_unaligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, half %value release, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_unaligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_unaligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, half %value acq_rel, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_unaligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_unaligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, half %value seq_cst, align 1
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fminimum_bfloat_unaligned_monotonic:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -2303,7 +2303,7 @@ define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_monotonic(ptr %ptr,
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fminimum_bfloat_unaligned_acquire:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -2320,7 +2320,7 @@ define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_acquire(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_release(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fminimum_bfloat_unaligned_release:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -2337,7 +2337,7 @@ define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_release(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fminimum_bfloat_unaligned_acq_rel:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -2354,7 +2354,7 @@ define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_acq_rel(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fminimum_bfloat_unaligned_seq_cst:
 ; -O0:    orr w8, w8, #0x400000
 ; -O0:    and w9, w9, #0x1
@@ -2371,72 +2371,103 @@ define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_seq_cst(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_unaligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_unaligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, float %value monotonic, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_unaligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_unaligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, float %value acquire, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_unaligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_unaligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, float %value release, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_unaligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_unaligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, float %value acq_rel, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_unaligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_unaligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, float %value seq_cst, align 1
     ret float %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_unaligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_unaligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, double %value monotonic, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_unaligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_unaligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, double %value acquire, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_unaligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_unaligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, double %value release, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_unaligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_unaligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, double %value acq_rel, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_unaligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_unaligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, double %value seq_cst, align 1
     ret double %r
 }
+
+define dso_local float @atomicrmw_fadd_float_aligned_seq_cst_trapping(ptr %ptr, float %value) {
+; -O0-LABEL: atomicrmw_fadd_float_aligned_seq_cst_trapping:
+; -O0:    ldaxr w8, [x10]
+; -O0:    cmp w8, w11
+; -O0:    stlxr w9, w12, [x10]
+; -O0:    subs w8, w8, w9
+;
+; -O1-LABEL: atomicrmw_fadd_float_aligned_seq_cst_trapping:
+; -O1:    ldaxr w8, [x0]
+; -O1:    stlxr w9, w8, [x0]
+    %r = atomicrmw fadd ptr %ptr, float %value seq_cst, align 4
+    ret float %r
+}
+
+define dso_local float @atomicrmw_fadd_float_aligned_seq_cst_strictfp(ptr %ptr, float %value) #1 {
+; -O0-LABEL: atomicrmw_fadd_float_aligned_seq_cst_strictfp:
+; -O0:    ldaxr w8, [x11]
+; -O0:    cmp w8, w9
+; -O0:    stlxr w10, w12, [x11]
+; -O0:    subs w9, w8, w9
+;
+; -O1-LABEL: atomicrmw_fadd_float_aligned_seq_cst_strictfp:
+; -O1:    ldaxr w8, [x0]
+; -O1:    stlxr w9, w8, [x0]
+    %r = atomicrmw fadd ptr %ptr, float %value seq_cst, align 4
+    ret float %r
+}
+
+attributes #0 = { "no-trapping-math"="true" }
+attributes #1 = { strictfp "no-trapping-math"="true" }
diff --git a/llvm/test/CodeGen/AArch64/Atomics/aarch64_be-atomicrmw-lsfe.ll b/llvm/test/CodeGen/AArch64/Atomics/aarch64_be-atomicrmw-lsfe.ll
index 9f0c6b07d7b7c..b1f9e0cde9931 100644
--- a/llvm/test/CodeGen/AArch64/Atomics/aarch64_be-atomicrmw-lsfe.ll
+++ b/llvm/test/CodeGen/AArch64/Atomics/aarch64_be-atomicrmw-lsfe.ll
@@ -6,238 +6,238 @@
 ; NOTE: '_unused' tests are added to ensure we do not lower to ST[F]ADD when the destination register is WZR/XZR.
 ; See discussion on https://github.com/llvm/llvm-project/pull/131174
 
-define dso_local half @atomicrmw_fadd_half_aligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_aligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_aligned_monotonic:
 ; CHECK:    ldfadd h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, half %value monotonic, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fadd_half_aligned_monotonic_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fadd_half_aligned_monotonic_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_aligned_monotonic_unused:
 ; CHECK:    ldfadd h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, half %value monotonic, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fadd_half_aligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_aligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_aligned_acquire:
 ; CHECK:    ldfadda h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, half %value acquire, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fadd_half_aligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_aligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_aligned_release:
 ; CHECK:    ldfaddl h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, half %value release, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fadd_half_aligned_release_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fadd_half_aligned_release_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_aligned_release_unused:
 ; CHECK:    ldfaddl h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, half %value release, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fadd_half_aligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_aligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_aligned_acq_rel:
 ; CHECK:    ldfaddal h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, half %value acq_rel, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fadd_half_aligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_aligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_aligned_seq_cst:
 ; CHECK:    ldfaddal h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, half %value seq_cst, align 2
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_monotonic:
 ; CHECK:    ldbfadd h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, bfloat %value monotonic, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fadd_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fadd_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_monotonic_unused:
 ; CHECK:    ldbfadd h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, bfloat %value monotonic, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_acquire:
 ; CHECK:    ldbfadda h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, bfloat %value acquire, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_release(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_release:
 ; CHECK:    ldbfaddl h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, bfloat %value release, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fadd_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fadd_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_release_unused:
 ; CHECK:    ldbfaddl h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, bfloat %value release, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_acq_rel:
 ; CHECK:    ldbfaddal h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, bfloat %value acq_rel, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_bfloat_aligned_seq_cst:
 ; CHECK:    ldbfaddal h0, h0, [x0]
     %r = atomicrmw fadd ptr %ptr, bfloat %value seq_cst, align 2
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fadd_float_aligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_aligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_aligned_monotonic:
 ; CHECK:    ldfadd s0, s0, [x0]
     %r = atomicrmw fadd ptr %ptr, float %value monotonic, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fadd_float_aligned_monotonic_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fadd_float_aligned_monotonic_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_aligned_monotonic_unused:
 ; CHECK:    ldfadd s0, s0, [x0]
     %r = atomicrmw fadd ptr %ptr, float %value monotonic, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fadd_float_aligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_aligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_aligned_acquire:
 ; CHECK:    ldfadda s0, s0, [x0]
     %r = atomicrmw fadd ptr %ptr, float %value acquire, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fadd_float_aligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_aligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_aligned_release:
 ; CHECK:    ldfaddl s0, s0, [x0]
     %r = atomicrmw fadd ptr %ptr, float %value release, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fadd_float_aligned_release_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fadd_float_aligned_release_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_aligned_release_unused:
 ; CHECK:    ldfaddl s0, s0, [x0]
     %r = atomicrmw fadd ptr %ptr, float %value release, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fadd_float_aligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_aligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_aligned_acq_rel:
 ; CHECK:    ldfaddal s0, s0, [x0]
     %r = atomicrmw fadd ptr %ptr, float %value acq_rel, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fadd_float_aligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_aligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_aligned_seq_cst:
 ; CHECK:    ldfaddal s0, s0, [x0]
     %r = atomicrmw fadd ptr %ptr, float %value seq_cst, align 4
     ret float %r
 }
 
-define dso_local double @atomicrmw_fadd_double_aligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_aligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_aligned_monotonic:
 ; CHECK:    ldfadd d0, d0, [x0]
     %r = atomicrmw fadd ptr %ptr, double %value monotonic, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fadd_double_aligned_monotonic_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fadd_double_aligned_monotonic_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_aligned_monotonic_unused:
 ; CHECK:    ldfadd d0, d0, [x0]
     %r = atomicrmw fadd ptr %ptr, double %value monotonic, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fadd_double_aligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_aligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_aligned_acquire:
 ; CHECK:    ldfadda d0, d0, [x0]
     %r = atomicrmw fadd ptr %ptr, double %value acquire, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fadd_double_aligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_aligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_aligned_release:
 ; CHECK:    ldfaddl d0, d0, [x0]
     %r = atomicrmw fadd ptr %ptr, double %value release, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fadd_double_aligned_release_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fadd_double_aligned_release_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_aligned_release_unused:
 ; CHECK:    ldfaddl d0, d0, [x0]
     %r = atomicrmw fadd ptr %ptr, double %value release, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fadd_double_aligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_aligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_aligned_acq_rel:
 ; CHECK:    ldfaddal d0, d0, [x0]
     %r = atomicrmw fadd ptr %ptr, double %value acq_rel, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fadd_double_aligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_aligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_aligned_seq_cst:
 ; CHECK:    ldfaddal d0, d0, [x0]
     %r = atomicrmw fadd ptr %ptr, double %value seq_cst, align 8
     ret double %r
 }
 
-define dso_local half @atomicrmw_fadd_half_unaligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_unaligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, half %value monotonic, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fadd_half_unaligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_unaligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, half %value acquire, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fadd_half_unaligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_unaligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, half %value release, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fadd_half_unaligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_unaligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, half %value acq_rel, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fadd_half_unaligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fadd_half_unaligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_half_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, half %value seq_cst, align 1
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_monotonic:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -251,7 +251,7 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_monotonic(ptr %ptr, bfl
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_acquire:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -265,7 +265,7 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acquire(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_release(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_release:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -279,7 +279,7 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_release(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_acq_rel:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -293,7 +293,7 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_acq_rel(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fadd_bfloat_unaligned_seq_cst:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -307,77 +307,77 @@ define dso_local bfloat @atomicrmw_fadd_bfloat_unaligned_seq_cst(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fadd_float_unaligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_unaligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, float %value monotonic, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fadd_float_unaligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_unaligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, float %value acquire, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fadd_float_unaligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_unaligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, float %value release, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fadd_float_unaligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_unaligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, float %value acq_rel, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fadd_float_unaligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fadd_float_unaligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_float_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, float %value seq_cst, align 1
     ret float %r
 }
 
-define dso_local double @atomicrmw_fadd_double_unaligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_unaligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, double %value monotonic, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fadd_double_unaligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_unaligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, double %value acquire, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fadd_double_unaligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_unaligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, double %value release, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fadd_double_unaligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_unaligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, double %value acq_rel, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fadd_double_unaligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fadd_double_unaligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fadd_double_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fadd ptr %ptr, double %value seq_cst, align 1
     ret double %r
 }
 
-define dso_local half @atomicrmw_fsub_half_aligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_aligned_monotonic(ptr %ptr, half %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_half_aligned_monotonic:
 ; -O0:    ldaxrh w8, [x11]
 ; -O0:    cmp w8, w9, uxth
@@ -391,7 +391,7 @@ define dso_local half @atomicrmw_fsub_half_aligned_monotonic(ptr %ptr, half %val
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_aligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_aligned_acquire(ptr %ptr, half %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_half_aligned_acquire:
 ; -O0:    ldaxrh w8, [x11]
 ; -O0:    cmp w8, w9, uxth
@@ -405,7 +405,7 @@ define dso_local half @atomicrmw_fsub_half_aligned_acquire(ptr %ptr, half %value
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_aligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_aligned_release(ptr %ptr, half %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_half_aligned_release:
 ; -O0:    ldaxrh w8, [x11]
 ; -O0:    cmp w8, w9, uxth
@@ -419,7 +419,7 @@ define dso_local half @atomicrmw_fsub_half_aligned_release(ptr %ptr, half %value
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_aligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_aligned_acq_rel(ptr %ptr, half %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_half_aligned_acq_rel:
 ; -O0:    ldaxrh w8, [x11]
 ; -O0:    cmp w8, w9, uxth
@@ -433,7 +433,7 @@ define dso_local half @atomicrmw_fsub_half_aligned_acq_rel(ptr %ptr, half %value
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_aligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_aligned_seq_cst(ptr %ptr, half %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_half_aligned_seq_cst:
 ; -O0:    ldaxrh w8, [x11]
 ; -O0:    cmp w8, w9, uxth
@@ -447,7 +447,7 @@ define dso_local half @atomicrmw_fsub_half_aligned_seq_cst(ptr %ptr, half %value
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_aligned_monotonic:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -465,7 +465,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_monotonic(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_aligned_acquire:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -483,7 +483,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_acquire(ptr %ptr, bfloat
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_release(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_aligned_release:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -501,7 +501,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_release(ptr %ptr, bfloat
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_aligned_acq_rel:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -519,7 +519,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_acq_rel(ptr %ptr, bfloat
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_aligned_seq_cst:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -537,7 +537,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_aligned_seq_cst(ptr %ptr, bfloat
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fsub_float_aligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_aligned_monotonic(ptr %ptr, float %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_float_aligned_monotonic:
 ; -O0:    ldaxr w8, [x11]
 ; -O0:    cmp w8, w9
@@ -551,7 +551,7 @@ define dso_local float @atomicrmw_fsub_float_aligned_monotonic(ptr %ptr, float %
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_aligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_aligned_acquire(ptr %ptr, float %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_float_aligned_acquire:
 ; -O0:    ldaxr w8, [x11]
 ; -O0:    cmp w8, w9
@@ -565,7 +565,7 @@ define dso_local float @atomicrmw_fsub_float_aligned_acquire(ptr %ptr, float %va
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_aligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_aligned_release(ptr %ptr, float %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_float_aligned_release:
 ; -O0:    ldaxr w8, [x11]
 ; -O0:    cmp w8, w9
@@ -579,7 +579,7 @@ define dso_local float @atomicrmw_fsub_float_aligned_release(ptr %ptr, float %va
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_aligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_aligned_acq_rel(ptr %ptr, float %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_float_aligned_acq_rel:
 ; -O0:    ldaxr w8, [x11]
 ; -O0:    cmp w8, w9
@@ -593,7 +593,7 @@ define dso_local float @atomicrmw_fsub_float_aligned_acq_rel(ptr %ptr, float %va
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_aligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_aligned_seq_cst(ptr %ptr, float %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_float_aligned_seq_cst:
 ; -O0:    ldaxr w8, [x11]
 ; -O0:    cmp w8, w9
@@ -607,7 +607,7 @@ define dso_local float @atomicrmw_fsub_float_aligned_seq_cst(ptr %ptr, float %va
     ret float %r
 }
 
-define dso_local double @atomicrmw_fsub_double_aligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_aligned_monotonic(ptr %ptr, double %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_double_aligned_monotonic:
 ; -O0:    ldaxr x8, [x11]
 ; -O0:    cmp x8, x9
@@ -621,7 +621,7 @@ define dso_local double @atomicrmw_fsub_double_aligned_monotonic(ptr %ptr, doubl
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_aligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_aligned_acquire(ptr %ptr, double %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_double_aligned_acquire:
 ; -O0:    ldaxr x8, [x11]
 ; -O0:    cmp x8, x9
@@ -635,7 +635,7 @@ define dso_local double @atomicrmw_fsub_double_aligned_acquire(ptr %ptr, double
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_aligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_aligned_release(ptr %ptr, double %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_double_aligned_release:
 ; -O0:    ldaxr x8, [x11]
 ; -O0:    cmp x8, x9
@@ -649,7 +649,7 @@ define dso_local double @atomicrmw_fsub_double_aligned_release(ptr %ptr, double
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_aligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_aligned_acq_rel(ptr %ptr, double %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_double_aligned_acq_rel:
 ; -O0:    ldaxr x8, [x11]
 ; -O0:    cmp x8, x9
@@ -663,7 +663,7 @@ define dso_local double @atomicrmw_fsub_double_aligned_acq_rel(ptr %ptr, double
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_aligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_aligned_seq_cst(ptr %ptr, double %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_double_aligned_seq_cst:
 ; -O0:    ldaxr x8, [x11]
 ; -O0:    cmp x8, x9
@@ -677,42 +677,42 @@ define dso_local double @atomicrmw_fsub_double_aligned_seq_cst(ptr %ptr, double
     ret double %r
 }
 
-define dso_local half @atomicrmw_fsub_half_unaligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_unaligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_half_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, half %value monotonic, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_unaligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_unaligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_half_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, half %value acquire, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_unaligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_unaligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_half_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, half %value release, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_unaligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_unaligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_half_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, half %value acq_rel, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fsub_half_unaligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fsub_half_unaligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_half_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, half %value seq_cst, align 1
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_unaligned_monotonic:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -726,7 +726,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_monotonic(ptr %ptr, bfl
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_unaligned_acquire:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -740,7 +740,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_acquire(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_release(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_unaligned_release:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -754,7 +754,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_release(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_unaligned_acq_rel:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -768,7 +768,7 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_acq_rel(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fsub_bfloat_unaligned_seq_cst:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -782,308 +782,308 @@ define dso_local bfloat @atomicrmw_fsub_bfloat_unaligned_seq_cst(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fsub_float_unaligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_unaligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_float_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, float %value monotonic, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_unaligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_unaligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_float_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, float %value acquire, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_unaligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_unaligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_float_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, float %value release, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_unaligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_unaligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_float_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, float %value acq_rel, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fsub_float_unaligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fsub_float_unaligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_float_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, float %value seq_cst, align 1
     ret float %r
 }
 
-define dso_local double @atomicrmw_fsub_double_unaligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_unaligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_double_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, double %value monotonic, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_unaligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_unaligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_double_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, double %value acquire, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_unaligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_unaligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_double_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, double %value release, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_unaligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_unaligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_double_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, double %value acq_rel, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fsub_double_unaligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fsub_double_unaligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fsub_double_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fsub ptr %ptr, double %value seq_cst, align 1
     ret double %r
 }
 
-define dso_local half @atomicrmw_fmax_half_aligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_aligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_aligned_monotonic:
 ; CHECK:    ldfmaxnm h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, half %value monotonic, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fmax_half_aligned_monotonic_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fmax_half_aligned_monotonic_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_aligned_monotonic_unused:
 ; CHECK:    ldfmaxnm h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, half %value monotonic, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fmax_half_aligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_aligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_aligned_acquire:
 ; CHECK:    ldfmaxnma h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, half %value acquire, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmax_half_aligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_aligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_aligned_release:
 ; CHECK:    ldfmaxnml h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, half %value release, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fmax_half_aligned_release_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fmax_half_aligned_release_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_aligned_release_unused:
 ; CHECK:    ldfmaxnml h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, half %value release, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fmax_half_aligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_aligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_aligned_acq_rel:
 ; CHECK:    ldfmaxnmal h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, half %value acq_rel, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmax_half_aligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_aligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_aligned_seq_cst:
 ; CHECK:    ldfmaxnmal h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, half %value seq_cst, align 2
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_monotonic:
 ; CHECK:    ldbfmaxnm h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, bfloat %value monotonic, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fmax_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fmax_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_monotonic_unused:
 ; CHECK:    ldbfmaxnm h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, bfloat %value monotonic, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_acquire:
 ; CHECK:    ldbfmaxnma h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, bfloat %value acquire, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_release(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_release:
 ; CHECK:    ldbfmaxnml h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, bfloat %value release, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fmax_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fmax_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_release_unused:
 ; CHECK:    ldbfmaxnml h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, bfloat %value release, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_acq_rel:
 ; CHECK:    ldbfmaxnmal h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, bfloat %value acq_rel, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_bfloat_aligned_seq_cst:
 ; CHECK:    ldbfmaxnmal h0, h0, [x0]
     %r = atomicrmw fmax ptr %ptr, bfloat %value seq_cst, align 2
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fmax_float_aligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_aligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_aligned_monotonic:
 ; CHECK:    ldfmaxnm s0, s0, [x0]
     %r = atomicrmw fmax ptr %ptr, float %value monotonic, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fmax_float_aligned_monotonic_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fmax_float_aligned_monotonic_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_aligned_monotonic_unused:
 ; CHECK:    ldfmaxnm s0, s0, [x0]
     %r = atomicrmw fmax ptr %ptr, float %value monotonic, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fmax_float_aligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_aligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_aligned_acquire:
 ; CHECK:    ldfmaxnma s0, s0, [x0]
     %r = atomicrmw fmax ptr %ptr, float %value acquire, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmax_float_aligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_aligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_aligned_release:
 ; CHECK:    ldfmaxnml s0, s0, [x0]
     %r = atomicrmw fmax ptr %ptr, float %value release, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fmax_float_aligned_release_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fmax_float_aligned_release_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_aligned_release_unused:
 ; CHECK:    ldfmaxnml s0, s0, [x0]
     %r = atomicrmw fmax ptr %ptr, float %value release, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fmax_float_aligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_aligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_aligned_acq_rel:
 ; CHECK:    ldfmaxnmal s0, s0, [x0]
     %r = atomicrmw fmax ptr %ptr, float %value acq_rel, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmax_float_aligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_aligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_aligned_seq_cst:
 ; CHECK:    ldfmaxnmal s0, s0, [x0]
     %r = atomicrmw fmax ptr %ptr, float %value seq_cst, align 4
     ret float %r
 }
 
-define dso_local double @atomicrmw_fmax_double_aligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_aligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_aligned_monotonic:
 ; CHECK:    ldfmaxnm d0, d0, [x0]
     %r = atomicrmw fmax ptr %ptr, double %value monotonic, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fmax_double_aligned_monotonic_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fmax_double_aligned_monotonic_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_aligned_monotonic_unused:
 ; CHECK:    ldfmaxnm d0, d0, [x0]
     %r = atomicrmw fmax ptr %ptr, double %value monotonic, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fmax_double_aligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_aligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_aligned_acquire:
 ; CHECK:    ldfmaxnma d0, d0, [x0]
     %r = atomicrmw fmax ptr %ptr, double %value acquire, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmax_double_aligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_aligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_aligned_release:
 ; CHECK:    ldfmaxnml d0, d0, [x0]
     %r = atomicrmw fmax ptr %ptr, double %value release, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fmax_double_aligned_release_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fmax_double_aligned_release_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_aligned_release_unused:
 ; CHECK:    ldfmaxnml d0, d0, [x0]
     %r = atomicrmw fmax ptr %ptr, double %value release, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fmax_double_aligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_aligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_aligned_acq_rel:
 ; CHECK:    ldfmaxnmal d0, d0, [x0]
     %r = atomicrmw fmax ptr %ptr, double %value acq_rel, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmax_double_aligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_aligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_aligned_seq_cst:
 ; CHECK:    ldfmaxnmal d0, d0, [x0]
     %r = atomicrmw fmax ptr %ptr, double %value seq_cst, align 8
     ret double %r
 }
 
-define dso_local half @atomicrmw_fmax_half_unaligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_unaligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, half %value monotonic, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmax_half_unaligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_unaligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, half %value acquire, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmax_half_unaligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_unaligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, half %value release, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmax_half_unaligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_unaligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, half %value acq_rel, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmax_half_unaligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmax_half_unaligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_half_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, half %value seq_cst, align 1
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmax_bfloat_unaligned_monotonic:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -1097,7 +1097,7 @@ define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_monotonic(ptr %ptr, bfl
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmax_bfloat_unaligned_acquire:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -1111,7 +1111,7 @@ define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_acquire(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_release(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmax_bfloat_unaligned_release:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -1125,7 +1125,7 @@ define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_release(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmax_bfloat_unaligned_acq_rel:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -1139,7 +1139,7 @@ define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_acq_rel(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmax_bfloat_unaligned_seq_cst:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -1153,308 +1153,308 @@ define dso_local bfloat @atomicrmw_fmax_bfloat_unaligned_seq_cst(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fmax_float_unaligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_unaligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, float %value monotonic, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmax_float_unaligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_unaligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, float %value acquire, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmax_float_unaligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_unaligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, float %value release, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmax_float_unaligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_unaligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, float %value acq_rel, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmax_float_unaligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmax_float_unaligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_float_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, float %value seq_cst, align 1
     ret float %r
 }
 
-define dso_local double @atomicrmw_fmax_double_unaligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_unaligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, double %value monotonic, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmax_double_unaligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_unaligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, double %value acquire, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmax_double_unaligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_unaligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, double %value release, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmax_double_unaligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_unaligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, double %value acq_rel, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmax_double_unaligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmax_double_unaligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmax_double_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmax ptr %ptr, double %value seq_cst, align 1
     ret double %r
 }
 
-define dso_local half @atomicrmw_fmin_half_aligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_aligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_aligned_monotonic:
 ; CHECK:    ldfminnm h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, half %value monotonic, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fmin_half_aligned_monotonic_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fmin_half_aligned_monotonic_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_aligned_monotonic_unused:
 ; CHECK:    ldfminnm h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, half %value monotonic, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fmin_half_aligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_aligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_aligned_acquire:
 ; CHECK:    ldfminnma h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, half %value acquire, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmin_half_aligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_aligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_aligned_release:
 ; CHECK:    ldfminnml h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, half %value release, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fmin_half_aligned_release_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fmin_half_aligned_release_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_aligned_release_unused:
 ; CHECK:    ldfminnml h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, half %value release, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fmin_half_aligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_aligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_aligned_acq_rel:
 ; CHECK:    ldfminnmal h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, half %value acq_rel, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmin_half_aligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_aligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_aligned_seq_cst:
 ; CHECK:    ldfminnmal h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, half %value seq_cst, align 2
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_monotonic:
 ; CHECK:    ldbfminnm h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, bfloat %value monotonic, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fmin_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fmin_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_monotonic_unused:
 ; CHECK:    ldbfminnm h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, bfloat %value monotonic, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_acquire:
 ; CHECK:    ldbfminnma h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, bfloat %value acquire, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_release(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_release:
 ; CHECK:    ldbfminnml h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, bfloat %value release, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fmin_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fmin_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_release_unused:
 ; CHECK:    ldbfminnml h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, bfloat %value release, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_acq_rel:
 ; CHECK:    ldbfminnmal h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, bfloat %value acq_rel, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_bfloat_aligned_seq_cst:
 ; CHECK:    ldbfminnmal h0, h0, [x0]
     %r = atomicrmw fmin ptr %ptr, bfloat %value seq_cst, align 2
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fmin_float_aligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_aligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_aligned_monotonic:
 ; CHECK:    ldfminnm s0, s0, [x0]
     %r = atomicrmw fmin ptr %ptr, float %value monotonic, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fmin_float_aligned_monotonic_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fmin_float_aligned_monotonic_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_aligned_monotonic_unused:
 ; CHECK:    ldfminnm s0, s0, [x0]
     %r = atomicrmw fmin ptr %ptr, float %value monotonic, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fmin_float_aligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_aligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_aligned_acquire:
 ; CHECK:    ldfminnma s0, s0, [x0]
     %r = atomicrmw fmin ptr %ptr, float %value acquire, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmin_float_aligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_aligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_aligned_release:
 ; CHECK:    ldfminnml s0, s0, [x0]
     %r = atomicrmw fmin ptr %ptr, float %value release, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fmin_float_aligned_release_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fmin_float_aligned_release_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_aligned_release_unused:
 ; CHECK:    ldfminnml s0, s0, [x0]
     %r = atomicrmw fmin ptr %ptr, float %value release, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fmin_float_aligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_aligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_aligned_acq_rel:
 ; CHECK:    ldfminnmal s0, s0, [x0]
     %r = atomicrmw fmin ptr %ptr, float %value acq_rel, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmin_float_aligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_aligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_aligned_seq_cst:
 ; CHECK:    ldfminnmal s0, s0, [x0]
     %r = atomicrmw fmin ptr %ptr, float %value seq_cst, align 4
     ret float %r
 }
 
-define dso_local double @atomicrmw_fmin_double_aligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_aligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_aligned_monotonic:
 ; CHECK:    ldfminnm d0, d0, [x0]
     %r = atomicrmw fmin ptr %ptr, double %value monotonic, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fmin_double_aligned_monotonic_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fmin_double_aligned_monotonic_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_aligned_monotonic_unused:
 ; CHECK:    ldfminnm d0, d0, [x0]
     %r = atomicrmw fmin ptr %ptr, double %value monotonic, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fmin_double_aligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_aligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_aligned_acquire:
 ; CHECK:    ldfminnma d0, d0, [x0]
     %r = atomicrmw fmin ptr %ptr, double %value acquire, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmin_double_aligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_aligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_aligned_release:
 ; CHECK:    ldfminnml d0, d0, [x0]
     %r = atomicrmw fmin ptr %ptr, double %value release, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fmin_double_aligned_release_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fmin_double_aligned_release_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_aligned_release_unused:
 ; CHECK:    ldfminnml d0, d0, [x0]
     %r = atomicrmw fmin ptr %ptr, double %value release, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fmin_double_aligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_aligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_aligned_acq_rel:
 ; CHECK:    ldfminnmal d0, d0, [x0]
     %r = atomicrmw fmin ptr %ptr, double %value acq_rel, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmin_double_aligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_aligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_aligned_seq_cst:
 ; CHECK:    ldfminnmal d0, d0, [x0]
     %r = atomicrmw fmin ptr %ptr, double %value seq_cst, align 8
     ret double %r
 }
 
-define dso_local half @atomicrmw_fmin_half_unaligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_unaligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, half %value monotonic, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmin_half_unaligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_unaligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, half %value acquire, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmin_half_unaligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_unaligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, half %value release, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmin_half_unaligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_unaligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, half %value acq_rel, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmin_half_unaligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmin_half_unaligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_half_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, half %value seq_cst, align 1
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmin_bfloat_unaligned_monotonic:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -1468,7 +1468,7 @@ define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_monotonic(ptr %ptr, bfl
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmin_bfloat_unaligned_acquire:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -1482,7 +1482,7 @@ define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_acquire(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_release(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmin_bfloat_unaligned_release:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -1496,7 +1496,7 @@ define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_release(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmin_bfloat_unaligned_acq_rel:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -1510,7 +1510,7 @@ define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_acq_rel(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmin_bfloat_unaligned_seq_cst:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -1524,308 +1524,308 @@ define dso_local bfloat @atomicrmw_fmin_bfloat_unaligned_seq_cst(ptr %ptr, bfloa
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fmin_float_unaligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_unaligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, float %value monotonic, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmin_float_unaligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_unaligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, float %value acquire, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmin_float_unaligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_unaligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, float %value release, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmin_float_unaligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_unaligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, float %value acq_rel, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmin_float_unaligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmin_float_unaligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_float_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, float %value seq_cst, align 1
     ret float %r
 }
 
-define dso_local double @atomicrmw_fmin_double_unaligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_unaligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, double %value monotonic, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmin_double_unaligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_unaligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, double %value acquire, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmin_double_unaligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_unaligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, double %value release, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmin_double_unaligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_unaligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, double %value acq_rel, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmin_double_unaligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmin_double_unaligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmin_double_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmin ptr %ptr, double %value seq_cst, align 1
     ret double %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_aligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_aligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_monotonic:
 ; CHECK:    ldfmax h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, half %value monotonic, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fmaximum_half_aligned_monotonic_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fmaximum_half_aligned_monotonic_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_monotonic_unused:
 ; CHECK:    ldfmax h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, half %value monotonic, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fmaximum_half_aligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_aligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_acquire:
 ; CHECK:    ldfmaxa h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, half %value acquire, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_aligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_aligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_release:
 ; CHECK:    ldfmaxl h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, half %value release, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fmaximum_half_aligned_release_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fmaximum_half_aligned_release_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_release_unused:
 ; CHECK:    ldfmaxl h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, half %value release, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fmaximum_half_aligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_aligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_acq_rel:
 ; CHECK:    ldfmaxal h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, half %value acq_rel, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_aligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_aligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_aligned_seq_cst:
 ; CHECK:    ldfmaxal h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, half %value seq_cst, align 2
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_monotonic:
 ; CHECK:    ldbfmax h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, bfloat %value monotonic, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fmaximum_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fmaximum_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_monotonic_unused:
 ; CHECK:    ldbfmax h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, bfloat %value monotonic, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_acquire:
 ; CHECK:    ldbfmaxa h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, bfloat %value acquire, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_release(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_release:
 ; CHECK:    ldbfmaxl h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, bfloat %value release, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fmaximum_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fmaximum_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_release_unused:
 ; CHECK:    ldbfmaxl h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, bfloat %value release, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_acq_rel:
 ; CHECK:    ldbfmaxal h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, bfloat %value acq_rel, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_bfloat_aligned_seq_cst:
 ; CHECK:    ldbfmaxal h0, h0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, bfloat %value seq_cst, align 2
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_aligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_aligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_monotonic:
 ; CHECK:    ldfmax s0, s0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, float %value monotonic, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fmaximum_float_aligned_monotonic_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fmaximum_float_aligned_monotonic_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_monotonic_unused:
 ; CHECK:    ldfmax s0, s0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, float %value monotonic, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fmaximum_float_aligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_aligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_acquire:
 ; CHECK:    ldfmaxa s0, s0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, float %value acquire, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_aligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_aligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_release:
 ; CHECK:    ldfmaxl s0, s0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, float %value release, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fmaximum_float_aligned_release_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fmaximum_float_aligned_release_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_release_unused:
 ; CHECK:    ldfmaxl s0, s0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, float %value release, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fmaximum_float_aligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_aligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_acq_rel:
 ; CHECK:    ldfmaxal s0, s0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, float %value acq_rel, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_aligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_aligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_aligned_seq_cst:
 ; CHECK:    ldfmaxal s0, s0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, float %value seq_cst, align 4
     ret float %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_aligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_aligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_monotonic:
 ; CHECK:    ldfmax d0, d0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, double %value monotonic, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fmaximum_double_aligned_monotonic_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fmaximum_double_aligned_monotonic_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_monotonic_unused:
 ; CHECK:    ldfmax d0, d0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, double %value monotonic, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fmaximum_double_aligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_aligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_acquire:
 ; CHECK:    ldfmaxa d0, d0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, double %value acquire, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_aligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_aligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_release:
 ; CHECK:    ldfmaxl d0, d0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, double %value release, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fmaximum_double_aligned_release_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fmaximum_double_aligned_release_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_release_unused:
 ; CHECK:    ldfmaxl d0, d0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, double %value release, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fmaximum_double_aligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_aligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_acq_rel:
 ; CHECK:    ldfmaxal d0, d0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, double %value acq_rel, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_aligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_aligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_aligned_seq_cst:
 ; CHECK:    ldfmaxal d0, d0, [x0]
     %r = atomicrmw fmaximum ptr %ptr, double %value seq_cst, align 8
     ret double %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_unaligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_unaligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, half %value monotonic, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_unaligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_unaligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, half %value acquire, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_unaligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_unaligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, half %value release, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_unaligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_unaligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, half %value acq_rel, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fmaximum_half_unaligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fmaximum_half_unaligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_half_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, half %value seq_cst, align 1
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmaximum_bfloat_unaligned_monotonic:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -1839,7 +1839,7 @@ define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_monotonic(ptr %ptr,
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmaximum_bfloat_unaligned_acquire:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -1853,7 +1853,7 @@ define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_acquire(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_release(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmaximum_bfloat_unaligned_release:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -1867,7 +1867,7 @@ define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_release(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmaximum_bfloat_unaligned_acq_rel:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -1881,7 +1881,7 @@ define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_acq_rel(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fmaximum_bfloat_unaligned_seq_cst:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -1895,308 +1895,308 @@ define dso_local bfloat @atomicrmw_fmaximum_bfloat_unaligned_seq_cst(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_unaligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_unaligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, float %value monotonic, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_unaligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_unaligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, float %value acquire, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_unaligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_unaligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, float %value release, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_unaligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_unaligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, float %value acq_rel, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fmaximum_float_unaligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fmaximum_float_unaligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_float_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, float %value seq_cst, align 1
     ret float %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_unaligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_unaligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, double %value monotonic, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_unaligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_unaligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, double %value acquire, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_unaligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_unaligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, double %value release, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_unaligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_unaligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, double %value acq_rel, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fmaximum_double_unaligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fmaximum_double_unaligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fmaximum_double_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fmaximum ptr %ptr, double %value seq_cst, align 1
     ret double %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_aligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_aligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_aligned_monotonic:
 ; CHECK:    ldfmin h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, half %value monotonic, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fminimum_half_aligned_monotonic_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fminimum_half_aligned_monotonic_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_aligned_monotonic_unused:
 ; CHECK:    ldfmin h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, half %value monotonic, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fminimum_half_aligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_aligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_aligned_acquire:
 ; CHECK:    ldfmina h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, half %value acquire, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_aligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_aligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_aligned_release:
 ; CHECK:    ldfminl h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, half %value release, align 2
     ret half %r
 }
 
-define dso_local void @atomicrmw_fminimum_half_aligned_release_unused(ptr %ptr, half %value) {
+define dso_local void @atomicrmw_fminimum_half_aligned_release_unused(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_aligned_release_unused:
 ; CHECK:    ldfminl h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, half %value release, align 2
     ret void
 }
 
-define dso_local half @atomicrmw_fminimum_half_aligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_aligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_aligned_acq_rel:
 ; CHECK:    ldfminal h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, half %value acq_rel, align 2
     ret half %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_aligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_aligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_aligned_seq_cst:
 ; CHECK:    ldfminal h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, half %value seq_cst, align 2
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_monotonic:
 ; CHECK:    ldbfmin h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, bfloat %value monotonic, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fminimum_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fminimum_bfloat_aligned_monotonic_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_monotonic_unused:
 ; CHECK:    ldbfmin h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, bfloat %value monotonic, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_acquire:
 ; CHECK:    ldbfmina h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, bfloat %value acquire, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_release(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_release:
 ; CHECK:    ldbfminl h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, bfloat %value release, align 2
     ret bfloat %r
 }
 
-define dso_local void @atomicrmw_fminimum_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) {
+define dso_local void @atomicrmw_fminimum_bfloat_aligned_release_unused(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_release_unused:
 ; CHECK:    ldbfminl h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, bfloat %value release, align 2
     ret void
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_acq_rel:
 ; CHECK:    ldbfminal h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, bfloat %value acq_rel, align 2
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_aligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_bfloat_aligned_seq_cst:
 ; CHECK:    ldbfminal h0, h0, [x0]
     %r = atomicrmw fminimum ptr %ptr, bfloat %value seq_cst, align 2
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_aligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_aligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_aligned_monotonic:
 ; CHECK:    ldfmin s0, s0, [x0]
     %r = atomicrmw fminimum ptr %ptr, float %value monotonic, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fminimum_float_aligned_monotonic_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fminimum_float_aligned_monotonic_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_aligned_monotonic_unused:
 ; CHECK:    ldfmin s0, s0, [x0]
     %r = atomicrmw fminimum ptr %ptr, float %value monotonic, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fminimum_float_aligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_aligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_aligned_acquire:
 ; CHECK:    ldfmina s0, s0, [x0]
     %r = atomicrmw fminimum ptr %ptr, float %value acquire, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_aligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_aligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_aligned_release:
 ; CHECK:    ldfminl s0, s0, [x0]
     %r = atomicrmw fminimum ptr %ptr, float %value release, align 4
     ret float %r
 }
 
-define dso_local void @atomicrmw_fminimum_float_aligned_release_unused(ptr %ptr, float %value) {
+define dso_local void @atomicrmw_fminimum_float_aligned_release_unused(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_aligned_release_unused:
 ; CHECK:    ldfminl s0, s0, [x0]
     %r = atomicrmw fminimum ptr %ptr, float %value release, align 4
     ret void
 }
 
-define dso_local float @atomicrmw_fminimum_float_aligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_aligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_aligned_acq_rel:
 ; CHECK:    ldfminal s0, s0, [x0]
     %r = atomicrmw fminimum ptr %ptr, float %value acq_rel, align 4
     ret float %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_aligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_aligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_aligned_seq_cst:
 ; CHECK:    ldfminal s0, s0, [x0]
     %r = atomicrmw fminimum ptr %ptr, float %value seq_cst, align 4
     ret float %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_aligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_aligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_aligned_monotonic:
 ; CHECK:    ldfmin d0, d0, [x0]
     %r = atomicrmw fminimum ptr %ptr, double %value monotonic, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fminimum_double_aligned_monotonic_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fminimum_double_aligned_monotonic_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_aligned_monotonic_unused:
 ; CHECK:    ldfmin d0, d0, [x0]
     %r = atomicrmw fminimum ptr %ptr, double %value monotonic, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fminimum_double_aligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_aligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_aligned_acquire:
 ; CHECK:    ldfmina d0, d0, [x0]
     %r = atomicrmw fminimum ptr %ptr, double %value acquire, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_aligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_aligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_aligned_release:
 ; CHECK:    ldfminl d0, d0, [x0]
     %r = atomicrmw fminimum ptr %ptr, double %value release, align 8
     ret double %r
 }
 
-define dso_local void @atomicrmw_fminimum_double_aligned_release_unused(ptr %ptr, double %value) {
+define dso_local void @atomicrmw_fminimum_double_aligned_release_unused(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_aligned_release_unused:
 ; CHECK:    ldfminl d0, d0, [x0]
     %r = atomicrmw fminimum ptr %ptr, double %value release, align 8
     ret void
 }
 
-define dso_local double @atomicrmw_fminimum_double_aligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_aligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_aligned_acq_rel:
 ; CHECK:    ldfminal d0, d0, [x0]
     %r = atomicrmw fminimum ptr %ptr, double %value acq_rel, align 8
     ret double %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_aligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_aligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_aligned_seq_cst:
 ; CHECK:    ldfminal d0, d0, [x0]
     %r = atomicrmw fminimum ptr %ptr, double %value seq_cst, align 8
     ret double %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_unaligned_monotonic(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_unaligned_monotonic(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, half %value monotonic, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_unaligned_acquire(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_unaligned_acquire(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, half %value acquire, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_unaligned_release(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_unaligned_release(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, half %value release, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_unaligned_acq_rel(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_unaligned_acq_rel(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, half %value acq_rel, align 1
     ret half %r
 }
 
-define dso_local half @atomicrmw_fminimum_half_unaligned_seq_cst(ptr %ptr, half %value) {
+define dso_local half @atomicrmw_fminimum_half_unaligned_seq_cst(ptr %ptr, half %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_half_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, half %value seq_cst, align 1
     ret half %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_monotonic(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fminimum_bfloat_unaligned_monotonic:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -2210,7 +2210,7 @@ define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_monotonic(ptr %ptr,
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_acquire(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fminimum_bfloat_unaligned_acquire:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -2224,7 +2224,7 @@ define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_acquire(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_release(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_release(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fminimum_bfloat_unaligned_release:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -2238,7 +2238,7 @@ define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_release(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_acq_rel(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fminimum_bfloat_unaligned_acq_rel:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -2252,7 +2252,7 @@ define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_acq_rel(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) {
+define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_seq_cst(ptr %ptr, bfloat %value) #0 {
 ; -O0-LABEL: atomicrmw_fminimum_bfloat_unaligned_seq_cst:
 ; -O0:    add w8, w8, w9
 ; -O0:    add w8, w8, w9
@@ -2266,72 +2266,103 @@ define dso_local bfloat @atomicrmw_fminimum_bfloat_unaligned_seq_cst(ptr %ptr, b
     ret bfloat %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_unaligned_monotonic(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_unaligned_monotonic(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, float %value monotonic, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_unaligned_acquire(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_unaligned_acquire(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, float %value acquire, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_unaligned_release(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_unaligned_release(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, float %value release, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_unaligned_acq_rel(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_unaligned_acq_rel(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, float %value acq_rel, align 1
     ret float %r
 }
 
-define dso_local float @atomicrmw_fminimum_float_unaligned_seq_cst(ptr %ptr, float %value) {
+define dso_local float @atomicrmw_fminimum_float_unaligned_seq_cst(ptr %ptr, float %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_float_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, float %value seq_cst, align 1
     ret float %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_unaligned_monotonic(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_unaligned_monotonic(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_unaligned_monotonic:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, double %value monotonic, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_unaligned_acquire(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_unaligned_acquire(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_unaligned_acquire:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, double %value acquire, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_unaligned_release(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_unaligned_release(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_unaligned_release:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, double %value release, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_unaligned_acq_rel(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_unaligned_acq_rel(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_unaligned_acq_rel:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, double %value acq_rel, align 1
     ret double %r
 }
 
-define dso_local double @atomicrmw_fminimum_double_unaligned_seq_cst(ptr %ptr, double %value) {
+define dso_local double @atomicrmw_fminimum_double_unaligned_seq_cst(ptr %ptr, double %value) #0 {
 ; CHECK-LABEL: atomicrmw_fminimum_double_unaligned_seq_cst:
 ; CHECK:    bl __atomic_compare_exchange
     %r = atomicrmw fminimum ptr %ptr, double %value seq_cst, align 1
     ret double %r
 }
+
+define dso_local float @atomicrmw_fadd_float_aligned_seq_cst_trapping(ptr %ptr, float %value) {
+; -O0-LABEL: atomicrmw_fadd_float_aligned_seq_cst_trapping:
+; -O0:    ldaxr w8, [x11]
+; -O0:    cmp w8, w9
+; -O0:    stlxr w10, w12, [x11]
+; -O0:    subs w9, w8, w9
+;
+; -O1-LABEL: atomicrmw_fadd_float_aligned_seq_cst_trapping:
+; -O1:    ldaxr w8, [x0]
+; -O1:    stlxr w9, w8, [x0]
+    %r = atomicrmw fadd ptr %ptr, float %value seq_cst, align 4
+    ret float %r
+}
+
+define dso_local float @atomicrmw_fadd_float_aligned_seq_cst_strictfp(ptr %ptr, float %value) #1 {
+; -O0-LABEL: atomicrmw_fadd_float_aligned_seq_cst_strictfp:
+; -O0:    ldaxr w8, [x11]
+; -O0:    cmp w8, w9
+; -O0:    stlxr w10, w12, [x11]
+; -O0:    subs w9, w8, w9
+;
+; -O1-LABEL: atomicrmw_fadd_float_aligned_seq_cst_strictfp:
+; -O1:    ldaxr w8, [x0]
+; -O1:    stlxr w9, w8, [x0]
+    %r = atomicrmw fadd ptr %ptr, float %value seq_cst, align 4
+    ret float %r
+}
+
+attributes #0 = { "no-trapping-math"="true" }
+attributes #1 = { strictfp "no-trapping-math"="true" }
diff --git a/llvm/test/CodeGen/AArch64/Atomics/generate-tests.py b/llvm/test/CodeGen/AArch64/Atomics/generate-tests.py
index d8daf6c985e39..189441fa09c06 100755
--- a/llvm/test/CodeGen/AArch64/Atomics/generate-tests.py
+++ b/llvm/test/CodeGen/AArch64/Atomics/generate-tests.py
@@ -209,6 +209,7 @@ def align(val, aligned: bool) -> int:
 def all_atomicrmw(f, datatype, atomicrmw_ops, featname):
     instr = "atomicrmw"
     generate_unused = False
+    attrs = " #0" if featname == "lsfe" else ""
     tests = []
     for op in atomicrmw_ops:
         for aligned in Aligned:
@@ -219,7 +220,7 @@ def all_atomicrmw(f, datatype, atomicrmw_ops, featname):
                     tests.append(
                         textwrap.dedent(
                             f"""
-                        define dso_local {ty} @{name}(ptr %ptr, {ty} %value) {{
+                        define dso_local {ty} @{name}(ptr %ptr, {ty} %value){attrs} {{
                             %r = {instr} {op} ptr %ptr, {ty} %value {ordering}, align {alignval}
                             ret {ty} %r
                         }}
@@ -232,7 +233,7 @@ def all_atomicrmw(f, datatype, atomicrmw_ops, featname):
                         tests.append(
                             textwrap.dedent(
                                 f"""
-                           define dso_local void @{name}(ptr %ptr, {ty} %value) {{
+                           define dso_local void @{name}(ptr %ptr, {ty} %value){attrs} {{
                                %r = {instr} {op} ptr %ptr, {ty} %value {ordering}, align {alignval}
                                ret void
                            }}
@@ -250,6 +251,26 @@ def all_atomicrmw(f, datatype, atomicrmw_ops, featname):
     for test in tests:
         f.write(test)
 
+    if featname == "lsfe":
+        f.write(
+            textwrap.dedent(
+                """
+                define dso_local float @atomicrmw_fadd_float_aligned_seq_cst_trapping(ptr %ptr, float %value) {
+                    %r = atomicrmw fadd ptr %ptr, float %value seq_cst, align 4
+                    ret float %r
+                }
+
+                define dso_local float @atomicrmw_fadd_float_aligned_seq_cst_strictfp(ptr %ptr, float %value) #1 {
+                    %r = atomicrmw fadd ptr %ptr, float %value seq_cst, align 4
+                    ret float %r
+                }
+
+                attributes #0 = { "no-trapping-math"="true" }
+                attributes #1 = { strictfp "no-trapping-math"="true" }
+                """
+            )
+        )
+
 
 def emit_load_tests(f, datatypes, alignments, orderings):
     for aligned in alignments:

>From a4605d6e5ad3b0182176fb8cf7adfcbdc2a14687 Mon Sep 17 00:00:00 2001
From: Marian Lukac <Marian.Lukac at arm.com>
Date: Thu, 30 Jul 2026 10:43:19 +0000
Subject: [PATCH 2/2] Remove incorrect outline intrinsics lowering

---
 .../Target/AArch64/AArch64ISelLowering.cpp    | 32 ++-----------------
 llvm/lib/Target/AArch64/AArch64Subtarget.cpp  |  7 ++--
 llvm/lib/Target/AArch64/AArch64Subtarget.h    |  5 +--
 .../Target/AArch64/AArch64TargetMachine.cpp   |  7 +---
 4 files changed, 8 insertions(+), 43 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index 04bf68e983da0..01a3f1c8a9375 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -1062,34 +1062,6 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
     setOperationAction(ISD::ATOMIC_LOAD_XOR, MVT::i64, LibCall);
   }
 
-  if (Subtarget->outlineAtomics() &&
-      (!Subtarget->hasLSFE() || !Subtarget->canIgnoreFPExceptions())) {
-    setOperationAction(ISD::ATOMIC_LOAD_FADD, MVT::f16, LibCall);
-    setOperationAction(ISD::ATOMIC_LOAD_FADD, MVT::f32, LibCall);
-    setOperationAction(ISD::ATOMIC_LOAD_FADD, MVT::f64, LibCall);
-    setOperationAction(ISD::ATOMIC_LOAD_FADD, MVT::bf16, LibCall);
-
-    setOperationAction(ISD::ATOMIC_LOAD_FMAX, MVT::f16, LibCall);
-    setOperationAction(ISD::ATOMIC_LOAD_FMAX, MVT::f32, LibCall);
-    setOperationAction(ISD::ATOMIC_LOAD_FMAX, MVT::f64, LibCall);
-    setOperationAction(ISD::ATOMIC_LOAD_FMAX, MVT::bf16, LibCall);
-
-    setOperationAction(ISD::ATOMIC_LOAD_FMIN, MVT::f16, LibCall);
-    setOperationAction(ISD::ATOMIC_LOAD_FMIN, MVT::f32, LibCall);
-    setOperationAction(ISD::ATOMIC_LOAD_FMIN, MVT::f64, LibCall);
-    setOperationAction(ISD::ATOMIC_LOAD_FMIN, MVT::bf16, LibCall);
-
-    setOperationAction(ISD::ATOMIC_LOAD_FMAXIMUM, MVT::f16, LibCall);
-    setOperationAction(ISD::ATOMIC_LOAD_FMAXIMUM, MVT::f32, LibCall);
-    setOperationAction(ISD::ATOMIC_LOAD_FMAXIMUM, MVT::f64, LibCall);
-    setOperationAction(ISD::ATOMIC_LOAD_FMAXIMUM, MVT::bf16, LibCall);
-
-    setOperationAction(ISD::ATOMIC_LOAD_FMINIMUM, MVT::f16, LibCall);
-    setOperationAction(ISD::ATOMIC_LOAD_FMINIMUM, MVT::f32, LibCall);
-    setOperationAction(ISD::ATOMIC_LOAD_FMINIMUM, MVT::f64, LibCall);
-    setOperationAction(ISD::ATOMIC_LOAD_FMINIMUM, MVT::bf16, LibCall);
-  }
-
   if (Subtarget->hasLSE128()) {
     // Custom lowering because i128 is not legal. Must be replaced by 2x64
     // values. ATOMIC_LOAD_AND also needs op legalisation to emit LDCLRP.
@@ -32639,7 +32611,9 @@ AArch64TargetLowering::shouldExpandAtomicRMWInIR(
 
   // If LSFE is available and FP exceptions are not observable, use atomic FP
   // instructions in preference to expansion.
-  if (Subtarget->hasLSFE() && Subtarget->canIgnoreFPExceptions() &&
+  const Function &F = *AI->getFunction();
+  if (Subtarget->hasLSFE() && !F.isStrictFP() &&
+      F.getFnAttribute("no-trapping-math").getValueAsBool() &&
       (AI->getOperation() == AtomicRMWInst::FAdd ||
        AI->getOperation() == AtomicRMWInst::FMax ||
        AI->getOperation() == AtomicRMWInst::FMin ||
diff --git a/llvm/lib/Target/AArch64/AArch64Subtarget.cpp b/llvm/lib/Target/AArch64/AArch64Subtarget.cpp
index 7896255dad6dd..9ee3d0cc9e0ea 100644
--- a/llvm/lib/Target/AArch64/AArch64Subtarget.cpp
+++ b/llvm/lib/Target/AArch64/AArch64Subtarget.cpp
@@ -355,14 +355,13 @@ AArch64Subtarget::AArch64Subtarget(const Triple &TT, StringRef CPU,
                                    unsigned MaxSVEVectorSizeInBitsOverride,
                                    bool IsStreaming, bool IsStreamingCompatible,
                                    bool HasMinSize,
-                                   bool EnableSRLTSubregToRegMitigation,
-                                   bool CanIgnoreFPExceptions)
+                                   bool EnableSRLTSubregToRegMitigation)
     : AArch64GenSubtargetInfo(TT, CPU, TuneCPU, FS),
       ReserveXRegister(AArch64::GPR64commonRegClass.getNumRegs()),
       ReserveXRegisterForRA(AArch64::GPR64commonRegClass.getNumRegs()),
       CustomCallSavedXRegs(AArch64::GPR64commonRegClass.getNumRegs()),
-      IsLittle(LittleEndian), CanIgnoreFPExceptions(CanIgnoreFPExceptions),
-      IsStreaming(IsStreaming), IsStreamingCompatible(IsStreamingCompatible),
+      IsLittle(LittleEndian), IsStreaming(IsStreaming),
+      IsStreamingCompatible(IsStreamingCompatible),
       StreamingHazardSize(
           AArch64StreamingHazardSize.getNumOccurrences() > 0
               ? std::optional<unsigned>(AArch64StreamingHazardSize)
diff --git a/llvm/lib/Target/AArch64/AArch64Subtarget.h b/llvm/lib/Target/AArch64/AArch64Subtarget.h
index 6267a77185b4b..380c3e11fcbf2 100644
--- a/llvm/lib/Target/AArch64/AArch64Subtarget.h
+++ b/llvm/lib/Target/AArch64/AArch64Subtarget.h
@@ -83,7 +83,6 @@ class AArch64Subtarget final : public AArch64GenSubtargetInfo {
   BitVector CustomCallSavedXRegs;
 
   bool IsLittle;
-  bool CanIgnoreFPExceptions;
 
   bool IsStreaming;
   bool IsStreamingCompatible;
@@ -132,8 +131,7 @@ class AArch64Subtarget final : public AArch64GenSubtargetInfo {
                    unsigned MaxSVEVectorSizeInBitsOverride = 0,
                    bool IsStreaming = false, bool IsStreamingCompatible = false,
                    bool HasMinSize = false,
-                   bool EnableSRLTSubregToRegMitigation = false,
-                   bool CanIgnoreFPExceptions = false);
+                   bool EnableSRLTSubregToRegMitigation = false);
 
 // Getters for SubtargetFeatures defined in tablegen
 #define GET_SUBTARGETINFO_MACRO(ATTRIBUTE, DEFAULT, GETTER)                    \
@@ -309,7 +307,6 @@ class AArch64Subtarget final : public AArch64GenSubtargetInfo {
   bool supportsAddressTopByteIgnored() const;
 
   bool isLittleEndian() const { return IsLittle; }
-  bool canIgnoreFPExceptions() const { return CanIgnoreFPExceptions; }
 
   bool isTargetDarwin() const { return TargetTriple.isOSDarwin(); }
   bool isTargetIOS() const { return TargetTriple.isiOS(); }
diff --git a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
index 4ccf8092a80fc..2b4d50a89ff59 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
@@ -449,9 +449,6 @@ AArch64TargetMachine::getSubtargetImpl(const Function &F) const {
                      F.hasFnAttribute("aarch64_pstate_sm_body");
   bool IsStreamingCompatible = ForceStreamingCompatible ||
                                F.hasFnAttribute("aarch64_pstate_sm_compatible");
-  bool CanIgnoreFPExceptions =
-      !F.isStrictFP() &&
-      F.getFnAttribute("no-trapping-math").getValueAsBool();
 
   unsigned MinSVEVectorSize = 0;
   unsigned MaxSVEVectorSize = 0;
@@ -488,8 +485,6 @@ AArch64TargetMachine::getSubtargetImpl(const Function &F) const {
   Key += utostr(IsStreaming);
   Key += "IsStreamingCompatible=";
   Key += utostr(IsStreamingCompatible);
-  Key += "CanIgnoreFPExceptions=";
-  Key += utostr(CanIgnoreFPExceptions);
   Key += CPU;
   Key += TuneCPU;
   Key += FS;
@@ -501,7 +496,7 @@ AArch64TargetMachine::getSubtargetImpl(const Function &F) const {
     I = std::make_unique<AArch64Subtarget>(
         TargetTriple, CPU, TuneCPU, FS, *this, isLittle, MinSVEVectorSize,
         MaxSVEVectorSize, IsStreaming, IsStreamingCompatible, HasMinSize,
-        EnableSRLTSubregToRegMitigation, CanIgnoreFPExceptions);
+        EnableSRLTSubregToRegMitigation);
   }
 
   if (IsStreaming && !I->hasSME())



More information about the llvm-commits mailing list