[libunwind] [llvm] [MC][AArch64] Add .cfi_set_ra_sign_state for PAuth_LR (PR #205442)

Jon Roelofs via cfe-commits cfe-commits at lists.llvm.org
Fri Jul 10 09:37:16 PDT 2026


https://github.com/jroelofs updated https://github.com/llvm/llvm-project/pull/205442

>From c05793d405bb826b25dc54bbb5800d62aee4f34d Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 18 Jun 2026 18:13:35 -0700
Subject: [PATCH 01/45] [libunwind] Fix exposure of UNW_AARCH64_RA_SIGN_STATE
 through _Unwind_GetGR

The pseudo register was previously hacked in unrder kRegisterIsUndefined,
leaving it in a state that was only accessible from within the unwinder itself.
To fix this, allowing external access to the state (and therefore tests!), we
invent a new register location kRegisterIsPseudo to record the additional state
that the register has been defined by a .cfi_negate_ra_state opcode having been
executed.
---
 libunwind/src/DwarfInstructions.hpp   |   8 ++
 libunwind/src/DwarfParser.hpp         |  11 +--
 libunwind/test/ra_sign_state.pass.cpp | 125 ++++++++++++++++++++++++++
 3 files changed, 139 insertions(+), 5 deletions(-)
 create mode 100644 libunwind/test/ra_sign_state.pass.cpp

diff --git a/libunwind/src/DwarfInstructions.hpp b/libunwind/src/DwarfInstructions.hpp
index 165c4a99e9a92..0133b2dd330e7 100644
--- a/libunwind/src/DwarfInstructions.hpp
+++ b/libunwind/src/DwarfInstructions.hpp
@@ -113,8 +113,14 @@ typename A::pint_t DwarfInstructions<A, R>::getSavedRegister(
 
   case CFI_Parser<A>::kRegisterInRegister:
     return registers.getRegister((int)savedReg.value);
+
   case CFI_Parser<A>::kRegisterUndefined:
     return 0;
+
+  case CFI_Parser<A>::kRegisterIsPseudo:
+#if defined(_LIBUNWIND_TARGET_AARCH64)
+    return savedReg.value;
+#endif
   case CFI_Parser<A>::kRegisterUnused:
   case CFI_Parser<A>::kRegisterOffsetFromCFA:
     // FIX ME
@@ -141,6 +147,7 @@ double DwarfInstructions<A, R>::getSavedFloatRegister(
 #ifndef _LIBUNWIND_TARGET_ARM
     return registers.getFloatRegister((int)savedReg.value);
 #endif
+  case CFI_Parser<A>::kRegisterIsPseudo:
   case CFI_Parser<A>::kRegisterIsExpression:
   case CFI_Parser<A>::kRegisterUnused:
   case CFI_Parser<A>::kRegisterOffsetFromCFA:
@@ -164,6 +171,7 @@ v128 DwarfInstructions<A, R>::getSavedVectorRegister(
         evaluateExpression((pint_t)savedReg.value, addressSpace,
                             registers, cfa));
 
+  case CFI_Parser<A>::kRegisterIsPseudo:
   case CFI_Parser<A>::kRegisterIsExpression:
   case CFI_Parser<A>::kRegisterUnused:
   case CFI_Parser<A>::kRegisterUndefined:
diff --git a/libunwind/src/DwarfParser.hpp b/libunwind/src/DwarfParser.hpp
index 8e080fb33c5f8..ba40b757ab977 100644
--- a/libunwind/src/DwarfParser.hpp
+++ b/libunwind/src/DwarfParser.hpp
@@ -81,7 +81,8 @@ class CFI_Parser {
     kRegisterOffsetFromCFA,
     kRegisterInRegister,
     kRegisterAtExpression,
-    kRegisterIsExpression
+    kRegisterIsExpression,
+    kRegisterIsPseudo,
   };
   struct RegisterLocation {
     RegisterSavedWhere location;
@@ -794,8 +795,8 @@ bool CFI_Parser<A>::parseFDEInstructions(
         case REGISTERS_ARM64: {
           int64_t value =
               results->savedRegisters[UNW_AARCH64_RA_SIGN_STATE].value ^ 0x1;
-          results->setRegisterValue(UNW_AARCH64_RA_SIGN_STATE, value,
-                                    initialState);
+          results->setRegister(UNW_AARCH64_RA_SIGN_STATE, kRegisterIsPseudo,
+                               value, initialState);
           _LIBUNWIND_TRACE_DWARF("DW_CFA_AARCH64_negate_ra_state\n");
         } break;
 #endif
@@ -846,8 +847,8 @@ bool CFI_Parser<A>::parseFDEInstructions(
       case DW_CFA_AARCH64_negate_ra_state_with_pc: {
         int64_t value =
             results->savedRegisters[UNW_AARCH64_RA_SIGN_STATE].value ^ 0x3;
-        results->setRegisterValue(UNW_AARCH64_RA_SIGN_STATE, value,
-                                  initialState);
+        results->setRegister(UNW_AARCH64_RA_SIGN_STATE, kRegisterIsPseudo,
+                             value, initialState);
         // When using Feat_PAuthLR, the PC value needs to be captured so that
         // during unwinding, the correct PC value is used for re-authentication.
         // It is assumed that the CFI is placed before the signing instruction.
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
new file mode 100644
index 0000000000000..1e113955db027
--- /dev/null
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -0,0 +1,125 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// REQUIRES: target={{aarch64.*}}
+// UNSUPPORTED: target={{.*-windows.*}}
+
+#undef NDEBUG
+#include "support/func_bounds.h"
+#include <assert.h>
+#include <inttypes.h>
+#include <libunwind.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <unwind.h>
+
+#if defined(__APPLE__)
+#include <sys/sysctl.h>
+#endif
+
+// Note: This test requires FEAT_PAuth (and is setup to pass on other targets).
+
+#if defined(__APPLE__)
+static bool checkHasPAuth() {
+  int has_pauth = 0;
+  size_t size = sizeof(has_pauth);
+  if (sysctlbyname("hw.optional.arm.FEAT_PAuth", &has_pauth, &size, NULL, 0))
+    return false;
+  return has_pauth != 0;
+}
+#else
+static bool checkHasPAuth() {
+  // TODO: Support other platforms.
+  return false;
+}
+#endif
+
+FUNC_BOUNDS_DECL(main_func);
+
+_Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx, void *arg) {
+  uint64_t ra_sign_state =
+      (uint64_t)_Unwind_GetGR(ctx, UNW_AARCH64_RA_SIGN_STATE);
+
+  uintptr_t ip = _Unwind_GetIP(ctx);
+  if (ip >= (uintptr_t)FUNC_START(main_func) &&
+      ip < (uintptr_t)FUNC_END(main_func)) {
+
+    // Collect the RA from the callee that will return to main.
+    *(uint64_t *)arg = ra_sign_state;
+
+    // Unwind until main is reached, above frames depend on the platform and
+    // architecture.
+    return _URC_END_OF_STACK;
+  }
+
+#if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
+  assert(ra_sign_state == 1);
+#else
+  assert(ra_sign_state == 0);
+#endif
+
+  return _URC_NO_REASON;
+}
+
+__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state() {
+  uint64_t sign_state = -1;
+  _Unwind_Backtrace(frame_handler, &sign_state);
+  printf("UNW_AARCH64_RA_SIGN_STATE = %" PRIu64 "\n", sign_state);
+  return sign_state;
+}
+
+__attribute__((noinline)) uint64_t check_vanilla() {
+  return get_main_ra_sign_state();
+}
+
+__attribute__((naked)) uint64_t check_negate() {
+  asm(".cfi_negate_ra_state\n"
+      "pacibsp\n"
+
+      "stp x29, x30, [sp, #-16]!\n"
+      ".cfi_def_cfa_offset 16\n"
+      ".cfi_offset x29, -16\n"
+      ".cfi_offset x30, -8\n"
+
+      "bl _get_main_ra_sign_state\n"
+
+      "ldp x29, x30, [sp], #16\n"
+      ".cfi_def_cfa_offset 0\n"
+      ".cfi_restore x29\n"
+      ".cfi_restore x30\n"
+
+      ".cfi_negate_ra_state\n"
+      "retab");
+}
+
+FUNC_ATTR(main_func) int main(int, char **) {
+  uint64_t ret;
+
+  ret = check_vanilla();
+  assert((ret & 2) == ret);
+
+#if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
+  assert(ret == 1);
+#else
+  assert(ret == 0);
+#endif
+
+  if (!checkHasPAuth()) {
+    printf("target does not have FEAT_PAuth\n");
+    return 0;
+  }
+
+  ret = check_negate();
+  assert(ret == 1);
+
+  printf("success\n");
+  return 0;
+}

>From b232cd6fe924ff20f7c1f8abca4f3061830a96a1 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 23 Jun 2026 15:20:55 -0700
Subject: [PATCH 02/45] move/fix state range assertion. add missing target
 feature.

---
 libunwind/test/ra_sign_state.pass.cpp | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 1e113955db027..2b31ef4000386 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -73,6 +73,7 @@ __attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state() {
   uint64_t sign_state = -1;
   _Unwind_Backtrace(frame_handler, &sign_state);
   printf("UNW_AARCH64_RA_SIGN_STATE = %" PRIu64 "\n", sign_state);
+  assert((sign_state & 0x3) == sign_state);
   return sign_state;
 }
 
@@ -80,7 +81,7 @@ __attribute__((noinline)) uint64_t check_vanilla() {
   return get_main_ra_sign_state();
 }
 
-__attribute__((naked)) uint64_t check_negate() {
+__attribute__((naked, target("pauth"))) uint64_t check_negate() {
   asm(".cfi_negate_ra_state\n"
       "pacibsp\n"
 
@@ -104,10 +105,8 @@ FUNC_ATTR(main_func) int main(int, char **) {
   uint64_t ret;
 
   ret = check_vanilla();
-  assert((ret & 2) == ret);
-
 #if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
-  assert(ret == 1);
+  assert(ret == 1 || ret == 2);
 #else
   assert(ret == 0);
 #endif

>From 21104ea8fe6840863caa14c3b9161cee908285b0 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 17 Jun 2026 14:55:05 -0700
Subject: [PATCH 03/45] [MC][AArch64] Add .cfi_llvm_set_ra_sign_state for
 PAuth_LR

The new CFI directive directly assigns an RA signing state to the RA_SIGN_STATE
DWARF pseudo-register for use when unwinding, to indicate whether the value of
PC has been used as a diversifier for return address signing. The new directive
subsumes and replaces .cfi_negate_ra_state_with_pc, which was found to be
unsuitable for descibing some block layouts [1], particularly in hot-cold-split
functions.

1: https://github.com/ARM-software/abi-aa/pull/346
---
 libunwind/src/DwarfParser.hpp                 |  20 +
 libunwind/src/dwarf2.h                        |   1 +
 libunwind/test/CMakeLists.txt                 |  17 +
 libunwind/test/ra_sign_state.pass.cpp         |  28 +
 llvm/include/llvm/BinaryFormat/Dwarf.def      |   1 +
 llvm/include/llvm/CodeGen/CFIInstBuilder.h    |   5 +
 .../DWARF/LowLevel/DWARFCFIProgram.h          |  11 +-
 llvm/include/llvm/MC/MCDwarf.h                |  46 +-
 llvm/include/llvm/MC/MCStreamer.h             |   4 +
 .../CodeGen/AsmPrinter/AsmPrinterDwarf.cpp    |   5 +
 llvm/lib/CodeGen/CFIInstrInserter.cpp         |   1 +
 llvm/lib/CodeGen/MIRParser/MILexer.cpp        |   1 +
 llvm/lib/CodeGen/MIRParser/MILexer.h          |   1 +
 llvm/lib/CodeGen/MIRParser/MIParser.cpp       |  23 +
 llvm/lib/CodeGen/MachineOperand.cpp           |  11 +
 llvm/lib/DWARFCFIChecker/DWARFCFIState.cpp    |   6 +
 llvm/lib/DebugInfo/DWARF/DWARFCFIPrinter.cpp  |   9 +
 .../DWARF/LowLevel/DWARFCFIProgram.cpp        |  16 +
 .../DWARF/LowLevel/DWARFUnwindTable.cpp       |  11 +
 llvm/lib/MC/MCAsmStreamer.cpp                 |  21 +
 llvm/lib/MC/MCDwarf.cpp                       |  21 +
 llvm/lib/MC/MCSFrame.cpp                      |   1 +
 llvm/lib/MC/MCStreamer.cpp                    |  22 +
 .../lib/Target/AArch64/AArch64PointerAuth.cpp | 113 +++-
 .../AArch64/AsmParser/AArch64AsmParser.cpp    |  20 +
 .../MCTargetDesc/AArch64AsmBackend.cpp        |   3 +
 .../AArch64/pauth-lr-tail-call-fpdiff.ll      |  96 +--
 .../sign-return-address-pauth-lr-mir.ll       |  68 +--
 .../AArch64/sign-return-address-pauth-lr.ll   | 549 ++++++++++++++++--
 .../sign-return-address-pauthlr-slh.ll        |   8 +-
 .../CodeGen/AArch64/sign-return-address.ll    | 346 +++++++++++
 .../test/CodeGen/AArch64/swifttail-ptrauth.ll |  36 +-
 llvm/test/CodeGen/MIR/AArch64/cfi.mir         |   4 +
 .../MIR/AArch64/return-address-signing.mir    |   2 +-
 .../cfi_llvm_set_ra_state-shrinkwrap.s        | 142 +++++
 llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s  |  31 +
 .../MC/AArch64/directives-case_insensitive.s  |   2 +
 .../DebugInfo/DWARF/DWARFDebugFrameTest.cpp   |   1 +
 38 files changed, 1547 insertions(+), 156 deletions(-)
 create mode 100644 llvm/test/MC/AArch64/cfi_llvm_set_ra_state-shrinkwrap.s
 create mode 100644 llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s

diff --git a/libunwind/src/DwarfParser.hpp b/libunwind/src/DwarfParser.hpp
index ba40b757ab977..4d3a44567d7a6 100644
--- a/libunwind/src/DwarfParser.hpp
+++ b/libunwind/src/DwarfParser.hpp
@@ -859,6 +859,26 @@ bool CFI_Parser<A>::parseFDEInstructions(
       } break;
 #endif
 
+#if defined(_LIBUNWIND_TARGET_AARCH64)
+      case DW_CFA_AARCH64_set_ra_state: {
+        int64_t value = (int64_t)addressSpace.getULEB128(p, instructionsEnd);
+        if (value < 0 || 2 < value) {
+          _LIBUNWIND_LOG0("malformed DW_CFA_AARCH64_set_ra_state DWARF "
+                          "unwind, RA_SIGN_STATE value not recognized");
+          return false;
+        }
+        offset = addressSpace.getSLEB128(p, instructionsEnd) *
+                 cieInfo.codeAlignFactor;
+        results->setRegisterValue(UNW_AARCH64_RA_SIGN_STATE, value,
+                                  initialState);
+        results->ptrAuthDiversifier = fdeInfo.pcStart + codeOffset + offset;
+        _LIBUNWIND_TRACE_DWARF(
+            "DW_CFA_AARCH64_set_ra_state(state=%" PRId64 ",pc=0x%" PRIx64 ")\n",
+            value,
+            static_cast<uint64_t>(results->ptrAuthDiversifier));
+      } break;
+#endif
+
 #else
         (void)arch;
 #endif
diff --git a/libunwind/src/dwarf2.h b/libunwind/src/dwarf2.h
index 68ad882347203..19f6e4de3fe34 100644
--- a/libunwind/src/dwarf2.h
+++ b/libunwind/src/dwarf2.h
@@ -51,6 +51,7 @@ enum {
   DW_CFA_GNU_negative_offset_extended = 0x2F,
 
   // AARCH64 extensions
+  DW_CFA_AARCH64_set_ra_state = 0x2B,
   DW_CFA_AARCH64_negate_ra_state_with_pc = 0x2C,
   DW_CFA_AARCH64_negate_ra_state = 0x2D
 };
diff --git a/libunwind/test/CMakeLists.txt b/libunwind/test/CMakeLists.txt
index 28cf2acd02aa9..5dbfb2d93c7e6 100644
--- a/libunwind/test/CMakeLists.txt
+++ b/libunwind/test/CMakeLists.txt
@@ -32,6 +32,23 @@ pythonize_bool(LIBUNWIND_ENABLE_GCS)
 pythonize_bool(LIBUNWIND_ENABLE_THREADS)
 pythonize_bool(LIBUNWIND_USES_ARM_EHABI)
 
+file(WRITE "${CMAKE_BINARY_DIR}/check_cfi_llvm_set_ra_state.s" "
+    .text
+    .global _test_cfi_llvm_set_ra_state
+_test_cfi_llvm_set_ra_state:
+    .cfi_startproc
+    .cfi_llvm_set_ra_state 0, 0
+    ret
+    .cfi_endproc
+")
+try_compile(HAVE_CFI_LLVM_SET_RA_STATE
+    "${CMAKE_BINARY_DIR}/check_cfi_llvm_set_ra_state"
+    SOURCES "${CMAKE_BINARY_DIR}/check_cfi_llvm_set_ra_state.s"
+)
+if(HAVE_CFI_LLVM_SET_RA_STATE)
+  add_compile_definitions(HAVE_CFI_LLVM_SET_RA_STATE=1)
+endif()
+
 set(AUTO_GEN_COMMENT "## Autogenerated by libunwind configuration.\n# Do not edit!")
 set(SERIALIZED_LIT_PARAMS "# Lit parameters serialized here for llvm-lit to pick them up\n")
 
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 2b31ef4000386..b5d7866ec8c94 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -101,6 +101,29 @@ __attribute__((naked, target("pauth"))) uint64_t check_negate() {
       "retab");
 }
 
+#if defined(HAVE_CFI_LLVM_SET_RA_STATE)
+__attribute__((naked))
+uint64_t check_set() {
+  asm(".cfi_llvm_set_ra_state 1, 0\n"
+      "pacibsp\n"
+
+      "stp x29, x30, [sp, #-16]!\n"
+      ".cfi_def_cfa_offset 16\n"
+      ".cfi_offset x29, -16\n"
+      ".cfi_offset x30, -8\n"
+
+      "bl _get_main_ra_sign_state\n"
+
+      "ldp x29, x30, [sp], #16\n"
+      ".cfi_def_cfa_offset 0\n"
+      ".cfi_restore x29\n"
+      ".cfi_restore x30\n"
+
+      ".cfi_llvm_set_ra_state 0, -20\n"
+      "retab");
+}
+#endif
+
 FUNC_ATTR(main_func) int main(int, char **) {
   uint64_t ret;
 
@@ -119,6 +142,11 @@ FUNC_ATTR(main_func) int main(int, char **) {
   ret = check_negate();
   assert(ret == 1);
 
+#if defined(HAVE_CFI_LLVM_SET_RA_STATE)
+  ret = check_set();
+  assert(ret == 1);
+#endif
+
   printf("success\n");
   return 0;
 }
diff --git a/llvm/include/llvm/BinaryFormat/Dwarf.def b/llvm/include/llvm/BinaryFormat/Dwarf.def
index 8bb1766bcc259..c7ec6b673976a 100644
--- a/llvm/include/llvm/BinaryFormat/Dwarf.def
+++ b/llvm/include/llvm/BinaryFormat/Dwarf.def
@@ -1301,6 +1301,7 @@ HANDLE_DW_CFA(0x16, val_expression)
 // Vendor extensions:
 HANDLE_DW_CFA_PRED(0x1d, MIPS_advance_loc8, SELECT_MIPS64)
 HANDLE_DW_CFA_PRED(0x2d, GNU_window_save, SELECT_SPARC)
+HANDLE_DW_CFA_PRED(0x2b, AARCH64_set_ra_state, SELECT_AARCH64)
 HANDLE_DW_CFA_PRED(0x2c, AARCH64_negate_ra_state_with_pc, SELECT_AARCH64)
 HANDLE_DW_CFA_PRED(0x2d, AARCH64_negate_ra_state, SELECT_AARCH64)
 HANDLE_DW_CFA_PRED(0x2e, GNU_args_size, SELECT_X86)
diff --git a/llvm/include/llvm/CodeGen/CFIInstBuilder.h b/llvm/include/llvm/CodeGen/CFIInstBuilder.h
index 8e22a5bacef6e..414fee4b38a77 100644
--- a/llvm/include/llvm/CodeGen/CFIInstBuilder.h
+++ b/llvm/include/llvm/CodeGen/CFIInstBuilder.h
@@ -88,6 +88,11 @@ class CFIInstBuilder {
     insertCFIInst(MCCFIInstruction::createNegateRAStateWithPC(nullptr));
   }
 
+  void buildSetRAState(unsigned State, MCSymbol *PACSym) const {
+    insertCFIInst(
+        MCCFIInstruction::createLLVMSetRAState(nullptr, State, PACSym));
+  }
+
   void buildRegister(MCRegister Reg1, MCRegister Reg2) const {
     insertCFIInst(MCCFIInstruction::createRegister(
         nullptr, TRI.getDwarfRegNum(Reg1, IsEH),
diff --git a/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h b/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h
index 398da49aa861a..6e4aca5c0a8fb 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h
@@ -122,6 +122,13 @@ class CFIProgram {
         // No operands
         addInstruction(Opcode);
         break;
+      case DW_CFA_AARCH64_set_ra_state: {
+        // Operands: ULEB128 ra_state, SLEB128 offset
+        uint64_t Op1 = Data.getULEB128(C);
+        uint64_t Op2 = (uint64_t)Data.getSLEB128(C);
+        addInstruction(Opcode, Op1, Op2);
+        break;
+      }
       case DW_CFA_set_loc:
         // Operands: Address
         addInstruction(Opcode, Data.getRelocatedAddress(C));
@@ -236,11 +243,13 @@ class CFIProgram {
     OT_Address,
     OT_Offset,
     OT_FactoredCodeOffset,
+    OT_SignedFactCodeOffset,
     OT_SignedFactDataOffset,
     OT_UnsignedFactDataOffset,
     OT_Register,
     OT_AddressSpace,
-    OT_Expression
+    OT_Expression,
+    OT_RAState,
   };
 
   /// Get the OperandType as a "const char *".
diff --git a/llvm/include/llvm/MC/MCDwarf.h b/llvm/include/llvm/MC/MCDwarf.h
index 10a7035326036..c4224f2ecacbc 100644
--- a/llvm/include/llvm/MC/MCDwarf.h
+++ b/llvm/include/llvm/MC/MCDwarf.h
@@ -527,6 +527,7 @@ class MCCFIInstruction {
     OpWindowSave,
     OpNegateRAState,
     OpNegateRAStateWithPC,
+    OpLLVMSetRAState,
     OpGnuArgsSize,
     OpLabel,
     OpValOffset,
@@ -594,12 +595,24 @@ class MCCFIInstruction {
     unsigned MaskRegister;
     unsigned MaskRegisterSizeInBits;
   };
+  /// Held in ExtraFields when OpLLVMSetRAState.
+  struct LLVMSetRAStateFields {
+    /// The ra_state value (DW_AARCH64_RA_NOT_SIGNED, DW_AARCH64_RA_SIGNED_SP,
+    /// or DW_AARCH64_RA_SIGNED_SP_PC).
+    unsigned State;
+    /// Symbol pointing to the signing instruction.
+    /// Precisely one of \p PACSym xor \p Offset should be non-zero.
+    MCSymbol *PACSym;
+    /// Factored offset to the signing instruction.
+    /// Precisely one of \p PACSym xor \p Offset should be non-zero.
+    int64_t Offset;
+  };
 
 private:
   MCSymbol *Label;
   std::variant<CommonFields, EscapeFields, LabelFields, RegisterPairFields,
                VectorRegistersFields, VectorOffsetFields,
-               VectorRegisterMaskFields>
+               VectorRegisterMaskFields, LLVMSetRAStateFields>
       ExtraFields;
   OpType Operation;
   SMLoc Loc;
@@ -690,6 +703,22 @@ class MCCFIInstruction {
     return {OpNegateRAStateWithPC, L, CommonFields{}, Loc};
   }
 
+  /// .cfi_llvm_set_ra_state AArch64 set RA sign state,
+  // with a symbolic offset to the signing instruction.
+  static MCCFIInstruction createLLVMSetRAState(MCSymbol *L, unsigned State,
+                                               MCSymbol *PACSym = nullptr,
+                                               SMLoc Loc = {}) {
+    return {OpLLVMSetRAState, L, LLVMSetRAStateFields{State, PACSym, 0}, Loc};
+  }
+
+  /// .cfi_llvm_set_ra_state AArch64 set RA sign state,
+  /// with a pre-computed factored offset to the signing instruction.
+  static MCCFIInstruction createLLVMSetRAState(MCSymbol *L, unsigned State,
+                                               int64_t Offset, SMLoc Loc = {}) {
+    return {OpLLVMSetRAState, L, LLVMSetRAStateFields{State, nullptr, Offset},
+            Loc};
+  }
+
   /// .cfi_restore says that the rule for Register is now the same as it
   /// was at the beginning of the function, after all initial instructions added
   /// by .cfi_startproc were executed.
@@ -831,6 +860,21 @@ class MCCFIInstruction {
     return std::get<CommonFields>(ExtraFields).Offset;
   }
 
+  unsigned getRASignState() const {
+    assert(Operation == OpLLVMSetRAState);
+    return std::get<LLVMSetRAStateFields>(ExtraFields).State;
+  }
+
+  MCSymbol *getRASignSymbol() const {
+    assert(Operation == OpLLVMSetRAState);
+    return std::get<LLVMSetRAStateFields>(ExtraFields).PACSym;
+  }
+
+  int64_t getRASignOffset() const {
+    assert(Operation == OpLLVMSetRAState);
+    return std::get<LLVMSetRAStateFields>(ExtraFields).Offset;
+  }
+
   MCSymbol *getCfiLabel() const {
     assert(Operation == OpLabel);
     return std::get<LabelFields>(ExtraFields).CfiLabel;
diff --git a/llvm/include/llvm/MC/MCStreamer.h b/llvm/include/llvm/MC/MCStreamer.h
index f1479f860e885..0facd10e92832 100644
--- a/llvm/include/llvm/MC/MCStreamer.h
+++ b/llvm/include/llvm/MC/MCStreamer.h
@@ -1062,6 +1062,10 @@ class LLVM_ABI MCStreamer {
                                 int64_t MaskRegisterSizeInBits, SMLoc Loc = {});
 
   virtual void emitCFINegateRAStateWithPC(SMLoc Loc = {});
+  virtual void emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
+                                     SMLoc Loc = {});
+  virtual void emitCFILLVMSetRAState(unsigned State, int64_t Offset,
+                                     SMLoc Loc = {});
   virtual void emitCFILabelDirective(SMLoc Loc, StringRef Name);
   virtual void emitCFIValOffset(int64_t Register, int64_t Offset,
                                 SMLoc Loc = {});
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
index 36f186d312e9a..6dad244ad1cfc 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
@@ -238,6 +238,11 @@ void AsmPrinter::emitCFIInstruction(const MCCFIInstruction &Inst) const {
   case MCCFIInstruction::OpNegateRAStateWithPC:
     OutStreamer->emitCFINegateRAStateWithPC(Loc);
     break;
+  case MCCFIInstruction::OpLLVMSetRAState: {
+    OutStreamer->emitCFILLVMSetRAState(Inst.getRASignState(),
+                                       Inst.getRASignSymbol(), Loc);
+    break;
+  }
   case MCCFIInstruction::OpSameValue:
     OutStreamer->emitCFISameValue(Inst.getRegister(), Loc);
     break;
diff --git a/llvm/lib/CodeGen/CFIInstrInserter.cpp b/llvm/lib/CodeGen/CFIInstrInserter.cpp
index b9a48188931de..ad81aaa5e276e 100644
--- a/llvm/lib/CodeGen/CFIInstrInserter.cpp
+++ b/llvm/lib/CodeGen/CFIInstrInserter.cpp
@@ -323,6 +323,7 @@ void CFIInstrInserter::calculateOutgoingCFAInfo(MBBCFAInfo &MBBInfo) {
       case MCCFIInstruction::OpWindowSave:
       case MCCFIInstruction::OpNegateRAState:
       case MCCFIInstruction::OpNegateRAStateWithPC:
+      case MCCFIInstruction::OpLLVMSetRAState:
       case MCCFIInstruction::OpGnuArgsSize:
       case MCCFIInstruction::OpLLVMRegisterPair:
       case MCCFIInstruction::OpLLVMVectorRegisters:
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.cpp b/llvm/lib/CodeGen/MIRParser/MILexer.cpp
index 4188ff8f85131..958e5a3e682c0 100644
--- a/llvm/lib/CodeGen/MIRParser/MILexer.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MILexer.cpp
@@ -242,6 +242,7 @@ static MIToken::TokenKind getIdentifierKind(StringRef Identifier) {
             MIToken::kw_cfi_aarch64_negate_ra_sign_state)
       .Case("negate_ra_sign_state_with_pc",
             MIToken::kw_cfi_aarch64_negate_ra_sign_state_with_pc)
+      .Case("llvm_set_ra_state", MIToken::kw_cfi_llvm_set_ra_state)
       .Case("llvm_register_pair", MIToken::kw_cfi_llvm_register_pair)
       .Case("llvm_vector_registers", MIToken::kw_cfi_llvm_vector_registers)
       .Case("llvm_vector_offset", MIToken::kw_cfi_llvm_vector_offset)
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.h b/llvm/lib/CodeGen/MIRParser/MILexer.h
index 3915222896263..02af892d12ad6 100644
--- a/llvm/lib/CodeGen/MIRParser/MILexer.h
+++ b/llvm/lib/CodeGen/MIRParser/MILexer.h
@@ -99,6 +99,7 @@ struct MIToken {
     kw_cfi_window_save,
     kw_cfi_aarch64_negate_ra_sign_state,
     kw_cfi_aarch64_negate_ra_sign_state_with_pc,
+    kw_cfi_llvm_set_ra_state,
     kw_cfi_llvm_register_pair,
     kw_cfi_llvm_vector_registers,
     kw_cfi_llvm_vector_offset,
diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
index 2924c0dda2390..4d9a8ee4b9cb7 100644
--- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
@@ -2853,6 +2853,28 @@ bool MIParser::parseCFIOperand(MachineOperand &Dest) {
     CFIIndex =
         MF.addFrameInst(MCCFIInstruction::createNegateRAStateWithPC(nullptr));
     break;
+  case MIToken::kw_cfi_llvm_set_ra_state: {
+    unsigned State;
+    MCSymbol *PACSym = nullptr;
+    if (parseCFIUnsigned(State) || expectAndConsume(MIToken::comma))
+      return true;
+    if (Token.is(MIToken::MCSymbol)) {
+      PACSym = getOrCreateMCSymbol(Token.stringValue());
+      lex();
+      CFIIndex = MF.addFrameInst(
+          MCCFIInstruction::createLLVMSetRAState(nullptr, State, PACSym));
+    } else if (Token.is(MIToken::IntegerLiteral)) {
+      int Offset;
+      if (parseCFIOffset(Offset))
+        return true;
+      CFIIndex = MF.addFrameInst(
+          MCCFIInstruction::createLLVMSetRAState(nullptr, State, Offset));
+    } else {
+      return error("expected '<mcsymbol ...>' or integer offset for "
+                   "cfi_llvm_set_ra_state");
+    }
+    break;
+  }
   case MIToken::kw_cfi_llvm_register_pair: {
     unsigned Reg, R1, R2;
     unsigned R1Size, R2Size;
@@ -3298,6 +3320,7 @@ bool MIParser::parseMachineOperand(const unsigned OpCode, const unsigned OpIdx,
   case MIToken::kw_cfi_window_save:
   case MIToken::kw_cfi_aarch64_negate_ra_sign_state:
   case MIToken::kw_cfi_aarch64_negate_ra_sign_state_with_pc:
+  case MIToken::kw_cfi_llvm_set_ra_state:
   case MIToken::kw_cfi_llvm_register_pair:
   case MIToken::kw_cfi_llvm_vector_registers:
   case MIToken::kw_cfi_llvm_vector_offset:
diff --git a/llvm/lib/CodeGen/MachineOperand.cpp b/llvm/lib/CodeGen/MachineOperand.cpp
index 518759952667e..bf48bc7a1cbbb 100644
--- a/llvm/lib/CodeGen/MachineOperand.cpp
+++ b/llvm/lib/CodeGen/MachineOperand.cpp
@@ -790,6 +790,17 @@ static void printCFI(raw_ostream &OS, const MCCFIInstruction &CFI,
     if (MCSymbol *Label = CFI.getLabel())
       MachineOperand::printSymbol(OS, *Label);
     break;
+  case MCCFIInstruction::OpLLVMSetRAState: {
+    OS << "llvm_set_ra_state ";
+    if (MCSymbol *Label = CFI.getLabel())
+      MachineOperand::printSymbol(OS, *Label);
+    OS << CFI.getRASignState() << ", ";
+    if (MCSymbol *PACSym = CFI.getRASignSymbol())
+      MachineOperand::printSymbol(OS, *PACSym);
+    else
+      OS << CFI.getRASignOffset();
+    break;
+  }
   case MCCFIInstruction::OpLLVMRegisterPair: {
     const auto &Fields =
         CFI.getExtraFields<MCCFIInstruction::RegisterPairFields>();
diff --git a/llvm/lib/DWARFCFIChecker/DWARFCFIState.cpp b/llvm/lib/DWARFCFIChecker/DWARFCFIState.cpp
index 2c0eeac0089ae..f76f1ea17314e 100644
--- a/llvm/lib/DWARFCFIChecker/DWARFCFIState.cpp
+++ b/llvm/lib/DWARFCFIChecker/DWARFCFIState.cpp
@@ -150,6 +150,12 @@ dwarf::CFIProgram DWARFCFIState::convert(MCCFIInstruction Directive) {
   case MCCFIInstruction::OpNegateRAStateWithPC:
     CFIP.addInstruction(dwarf::DW_CFA_AARCH64_negate_ra_state_with_pc);
     break;
+  case MCCFIInstruction::OpLLVMSetRAState: {
+    CFIP.addInstruction(dwarf::DW_CFA_AARCH64_set_ra_state,
+                        Directive.getRASignState(),
+                        (uint64_t)Directive.getRASignOffset());
+    break;
+  }
   case MCCFIInstruction::OpGnuArgsSize:
     CFIP.addInstruction(dwarf::DW_CFA_GNU_args_size);
     break;
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFCFIPrinter.cpp b/llvm/lib/DebugInfo/DWARF/DWARFCFIPrinter.cpp
index 182b4956e5792..adc1c1ac48a15 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFCFIPrinter.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFCFIPrinter.cpp
@@ -83,6 +83,12 @@ static void printOperand(raw_ostream &OS, const DIDumpOptions &DumpOpts,
     else
       OS << formatv(" {0}*data_alignment_factor", int64_t(Operand));
     break;
+  case CFIProgram::OT_SignedFactCodeOffset:
+    if (P.codeAlign())
+      OS << formatv(" {0}", int64_t(Operand) * (int64_t)P.codeAlign());
+    else
+      OS << formatv(" {0}*code_alignment_factor", int64_t(Operand));
+    break;
   case CFIProgram::OT_UnsignedFactDataOffset:
     if (P.dataAlign())
       OS << formatv(" {0}", int64_t(Operand * P.dataAlign()));
@@ -93,6 +99,9 @@ static void printOperand(raw_ostream &OS, const DIDumpOptions &DumpOpts,
     OS << ' ';
     printRegister(OS, DumpOpts, Operand);
     break;
+  case CFIProgram::OT_RAState:
+    OS << ' ' << Operand;
+    break;
   case CFIProgram::OT_AddressSpace:
     OS << formatv(" in addrspace{0}", Operand);
     break;
diff --git a/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.cpp b/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.cpp
index eaf56b3071592..f8bc7dd2623f3 100644
--- a/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.cpp
+++ b/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.cpp
@@ -32,11 +32,13 @@ const char *CFIProgram::operandTypeString(CFIProgram::OperandType OT) {
     ENUM_TO_CSTR(OT_Address);
     ENUM_TO_CSTR(OT_Offset);
     ENUM_TO_CSTR(OT_FactoredCodeOffset);
+    ENUM_TO_CSTR(OT_SignedFactCodeOffset);
     ENUM_TO_CSTR(OT_SignedFactDataOffset);
     ENUM_TO_CSTR(OT_UnsignedFactDataOffset);
     ENUM_TO_CSTR(OT_Register);
     ENUM_TO_CSTR(OT_AddressSpace);
     ENUM_TO_CSTR(OT_Expression);
+    ENUM_TO_CSTR(OT_RAState);
   }
   return "<unknown CFIProgram::OperandType>";
 }
@@ -61,6 +63,7 @@ CFIProgram::Instruction::getOperandAsUnsigned(const CFIProgram &CFIP,
   case OT_Offset:
   case OT_SignedFactDataOffset:
   case OT_UnsignedFactDataOffset:
+  case OT_SignedFactCodeOffset:
     return createStringError(
         errc::invalid_argument,
         "op[%" PRIu32 "] has OperandType OT_Offset which produces a signed "
@@ -70,6 +73,7 @@ CFIProgram::Instruction::getOperandAsUnsigned(const CFIProgram &CFIP,
   case OT_Address:
   case OT_Register:
   case OT_AddressSpace:
+  case OT_RAState:
     return Operand;
 
   case OT_FactoredCodeOffset: {
@@ -106,6 +110,7 @@ CFIProgram::Instruction::getOperandAsSigned(const CFIProgram &CFIP,
   case OT_Address:
   case OT_Register:
   case OT_AddressSpace:
+  case OT_RAState:
     return createStringError(
         errc::invalid_argument,
         "op[%" PRIu32 "] has OperandType %s which produces an unsigned result, "
@@ -126,6 +131,16 @@ CFIProgram::Instruction::getOperandAsSigned(const CFIProgram &CFIP,
     return int64_t(Operand) * DataAlignmentFactor;
   }
 
+  case OT_SignedFactCodeOffset: {
+    const int64_t CodeAlignmentFactor = CFIP.codeAlign();
+    if (CodeAlignmentFactor == 0)
+      return createStringError(errc::invalid_argument,
+                               "op[%" PRIu32 "] has type %s but code "
+                               "alignment is zero",
+                               OperandIdx, CFIProgram::operandTypeString(Type));
+    return int64_t(Operand) * CodeAlignmentFactor;
+  }
+
   case OT_UnsignedFactDataOffset: {
     const int64_t DataAlignmentFactor = CFIP.dataAlign();
     if (DataAlignmentFactor == 0)
@@ -192,6 +207,7 @@ CFIProgram::getOperandTypes() {
   DECLARE_OP0(DW_CFA_restore_state);
   DECLARE_OP0(DW_CFA_GNU_window_save);
   DECLARE_OP0(DW_CFA_AARCH64_negate_ra_state_with_pc);
+  DECLARE_OP2(DW_CFA_AARCH64_set_ra_state, OT_RAState, OT_SignedFactCodeOffset);
   DECLARE_OP1(DW_CFA_GNU_args_size, OT_Offset);
   DECLARE_OP0(DW_CFA_nop);
 
diff --git a/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFUnwindTable.cpp b/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFUnwindTable.cpp
index 20f52673eefe1..94d62d176e638 100644
--- a/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFUnwindTable.cpp
+++ b/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFUnwindTable.cpp
@@ -257,6 +257,17 @@ llvm::dwarf::parseRows(const CFIProgram &CFIP, UnwindRow &Row,
       break;
     }
 
+    case dwarf::DW_CFA_AARCH64_set_ra_state: {
+      constexpr uint32_t AArch64DWARFPAuthRaState = 34;
+      llvm::Expected<uint64_t> State = Inst.getOperandAsUnsigned(CFIP, 0);
+      if (!State)
+        return State.takeError();
+      Row.getRegisterLocations().setRegisterLocation(
+          AArch64DWARFPAuthRaState,
+          UnwindLocation::createIsConstant((int64_t)*State));
+      break;
+    }
+
     case dwarf::DW_CFA_undefined: {
       llvm::Expected<uint64_t> RegNum = Inst.getOperandAsUnsigned(CFIP, 0);
       if (!RegNum)
diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp
index a518daa997945..36296a61c3d26 100644
--- a/llvm/lib/MC/MCAsmStreamer.cpp
+++ b/llvm/lib/MC/MCAsmStreamer.cpp
@@ -396,6 +396,9 @@ class MCAsmStreamer final : public MCAsmBaseStreamer {
   void emitCFIWindowSave(SMLoc Loc) override;
   void emitCFINegateRAState(SMLoc Loc) override;
   void emitCFINegateRAStateWithPC(SMLoc Loc) override;
+  void emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
+                             SMLoc Loc) override;
+  void emitCFILLVMSetRAState(unsigned State, int64_t Offset, SMLoc Loc) override;
   void emitCFIReturnColumn(int64_t Register) override;
   void emitCFILLVMRegisterPair(int64_t Register, int64_t R1, int64_t R1Size,
                                int64_t R2, int64_t R2Size, SMLoc Loc) override;
@@ -2283,6 +2286,24 @@ void MCAsmStreamer::emitCFINegateRAStateWithPC(SMLoc Loc) {
   EmitEOL();
 }
 
+void MCAsmStreamer::emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
+                                          SMLoc Loc) {
+  MCStreamer::emitCFILLVMSetRAState(State, PACSym, Loc);
+  OS << "\t.cfi_llvm_set_ra_state " << State << ", ";
+  if (PACSym)
+    PACSym->print(OS, MAI);
+  else
+    OS << "0";
+  EmitEOL();
+}
+
+void MCAsmStreamer::emitCFILLVMSetRAState(unsigned State, int64_t Offset,
+                                          SMLoc Loc) {
+  MCStreamer::emitCFILLVMSetRAState(State, Offset, Loc);
+  OS << "\t.cfi_llvm_set_ra_state " << State << ", " << Offset;
+  EmitEOL();
+}
+
 void MCAsmStreamer::emitCFIReturnColumn(int64_t Register) {
   MCStreamer::emitCFIReturnColumn(Register);
   OS << "\t.cfi_return_column ";
diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp
index 37ec324cdc499..209fcbf056e12 100644
--- a/llvm/lib/MC/MCDwarf.cpp
+++ b/llvm/lib/MC/MCDwarf.cpp
@@ -1330,6 +1330,9 @@ void MCCFIInstruction::replaceRegister(unsigned FromReg, unsigned ToReg) {
         ReplaceReg(F.Register);
         ReplaceReg(F.SpillRegister);
         ReplaceReg(F.MaskRegister);
+      },
+      [](LLVMSetRAStateFields &) {
+        assert(false && ".cfi_set_ra_state does not have registers");
       });
   std::visit(Visitor, ExtraFields);
 }
@@ -1456,6 +1459,24 @@ void FrameEmitterImpl::emitCFIInstruction(const MCCFIInstruction &Instr) {
     Streamer.emitInt8(dwarf::DW_CFA_AARCH64_negate_ra_state_with_pc);
     return;
 
+  case MCCFIInstruction::OpLLVMSetRAState: {
+    Streamer.emitInt8(dwarf::DW_CFA_AARCH64_set_ra_state);
+    Streamer.emitULEB128IntValue(Instr.getRASignState());
+    if (MCSymbol *PACSym = Instr.getRASignSymbol()) {
+      MCContext &Ctx = Streamer.getContext();
+      const MCExpr *Diff = MCBinaryExpr::createSub(
+          MCSymbolRefExpr::create(PACSym, Ctx),
+          MCSymbolRefExpr::create(Instr.getLabel(), Ctx), Ctx);
+      const MCExpr *Factored = MCBinaryExpr::createDiv(
+          Diff,
+          MCConstantExpr::create(Ctx.getAsmInfo().getMinInstAlignment(), Ctx),
+          Ctx);
+      Streamer.emitSLEB128Value(Factored);
+    } else {
+      Streamer.emitSLEB128IntValue(Instr.getRASignOffset());
+    }
+    return;
+  }
   case MCCFIInstruction::OpUndefined: {
     unsigned Reg = Instr.getRegister();
     Streamer.emitInt8(dwarf::DW_CFA_undefined);
diff --git a/llvm/lib/MC/MCSFrame.cpp b/llvm/lib/MC/MCSFrame.cpp
index bdf2c95d5c071..5e5a6aaeb19f0 100644
--- a/llvm/lib/MC/MCSFrame.cpp
+++ b/llvm/lib/MC/MCSFrame.cpp
@@ -339,6 +339,7 @@ class SFrameEmitterImpl {
       case dwarf::DW_CFA_MIPS_advance_loc8:
       case dwarf::DW_CFA_AARCH64_negate_ra_state_with_pc:
       case dwarf::DW_CFA_AARCH64_negate_ra_state:
+      case dwarf::DW_CFA_AARCH64_set_ra_state:
       case dwarf::DW_CFA_LLVM_def_aspace_cfa:
       case dwarf::DW_CFA_LLVM_def_aspace_cfa_sf:
         Streamer.getContext().reportWarning(
diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp
index 1cd94715b2592..7ca8658f53afc 100644
--- a/llvm/lib/MC/MCStreamer.cpp
+++ b/llvm/lib/MC/MCStreamer.cpp
@@ -748,6 +748,28 @@ void MCStreamer::emitCFINegateRAStateWithPC(SMLoc Loc) {
   CurFrame->Instructions.push_back(std::move(Instruction));
 }
 
+void MCStreamer::emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
+                                       SMLoc Loc) {
+  MCSymbol *Label = emitCFILabel();
+  MCCFIInstruction Instruction =
+      MCCFIInstruction::createLLVMSetRAState(Label, State, PACSym, Loc);
+  MCDwarfFrameInfo *CurFrame = getCurrentDwarfFrameInfo();
+  if (!CurFrame)
+    return;
+  CurFrame->Instructions.push_back(std::move(Instruction));
+}
+
+void MCStreamer::emitCFILLVMSetRAState(unsigned State, int64_t Offset,
+                                       SMLoc Loc) {
+  MCSymbol *Label = emitCFILabel();
+  MCCFIInstruction Instruction =
+      MCCFIInstruction::createLLVMSetRAState(Label, State, Offset, Loc);
+  MCDwarfFrameInfo *CurFrame = getCurrentDwarfFrameInfo();
+  if (!CurFrame)
+    return;
+  CurFrame->Instructions.push_back(std::move(Instruction));
+}
+
 void MCStreamer::emitCFIReturnColumn(int64_t Register) {
   MCDwarfFrameInfo *CurFrame = getCurrentDwarfFrameInfo();
   if (!CurFrame)
diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index cd660ad7d37f2..98d13226af30d 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -25,6 +25,40 @@ using namespace llvm::AArch64PAuth;
 
 namespace {
 
+/// Control the emission of .cfi_llvm_set_ra_state, which replaces the
+/// deprecated .cfi_negate_ra_state_with_pc [1].
+///
+/// The latter is fundamentally unable to express some program orders [2], as the
+/// dwarf 'program' reads functions in a linear scan of their addresses to
+/// reconstruct the state of the frame, whereas control flow may enter and exit
+/// such regions arbitrarily (such as in hot-cold-split, and shrinkwrapped
+/// fucntions), and thus the negate-based cfi is unable to encode the address of
+/// the signing instruciton in all program orders.
+///
+/// Since .cfi_negate_ra_state is still sufficient for describing
+/// ptrauth-returns=pauth, we default to using the new CFI only for PAuth_LR, as
+/// it is a smaller encoding than DW_CFA_AARCH64_set_ra_state.
+///
+/// 1: https://github.com/ARM-software/abi-aa/pull/346
+/// 2: https://github.com/ARM-software/abi-aa/issues/327
+enum class SetRAStateMode {
+  Never,   // Always use .cfi_negate_ra_state(_with_pc)
+  PAuthLR, // Use .cfi_llvm_set_ra_state only for PAuth_LR
+  Always,  // Use .cfi_llvm_set_ra_state for both PAuth and PAuth_LR
+};
+cl::opt<SetRAStateMode> CFILLVMSetRASignStateMode(
+    "aarch64-cfi-llvm-set-ra-sign-state", cl::init(SetRAStateMode::PAuthLR),
+    cl::desc(
+        "Control emission of .cfi_llvm_set_ra_state for PAC return address "
+        "signing CFI"),
+    cl::values(clEnumValN(SetRAStateMode::Never, "never",
+                          "Always use legacy .cfi_negate_ra_state[_with_pc]"),
+               clEnumValN(SetRAStateMode::PAuthLR, "pauth-lr",
+                          "Use new CFI only for PAuth_LR (default)"),
+               clEnumValN(SetRAStateMode::Always, "always",
+                          "Use new CFI for both PAuth and PAuth_LR")),
+    cl::Hidden);
+
 class AArch64PointerAuthImpl {
 public:
   bool run(MachineFunction &MF);
@@ -77,18 +111,69 @@ static void emitEpiloguePACSymOffsetIntoReg(const TargetInstrInfo &TII,
 }
 
 static void emitPACCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
-                       MachineInstr::MIFlag Flags, bool EmitCFI) {
+                       bool EmitCFI, MCSymbol *PACSym) {
   if (!EmitCFI)
     return;
 
   auto &MF = *MBB.getParent();
   auto &MFnI = *MF.getInfo<AArch64FunctionInfo>();
+  CFIInstBuilder CFIBuilder(MBB, MBBI, MachineInstr::FrameSetup);
+  const Triple &TT = MF.getTarget().getTargetTriple();
 
-  CFIInstBuilder CFIBuilder(MBB, MBBI, Flags);
   if (MFnI.branchProtectionPAuthLR()) {
-    CFIBuilder.buildNegateRAStateWithPC();
-  } else if (!MF.getTarget().getTargetTriple().isOSBinFormatMachO()) {
-    CFIBuilder.buildNegateRAState();
+    switch (CFILLVMSetRASignStateMode) {
+    case SetRAStateMode::Never:
+      CFIBuilder.buildNegateRAStateWithPC();
+      break;
+    case SetRAStateMode::PAuthLR:
+    case SetRAStateMode::Always:
+      assert(PACSym && "No PAC instruction to refer to");
+      CFIBuilder.buildSetRAState(2, PACSym);
+      break;
+    }
+  } else if (!TT.isOSBinFormatMachO()) {
+    switch (CFILLVMSetRASignStateMode) {
+    case SetRAStateMode::Never:
+    case SetRAStateMode::PAuthLR:
+      CFIBuilder.buildNegateRAState();
+      break;
+    case SetRAStateMode::Always:
+      CFIBuilder.buildSetRAState(1, nullptr);
+      break;
+    }
+  }
+}
+
+static void emitAUTCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
+                       bool EmitCFI, MCSymbol *PACSym) {
+  if (!EmitCFI)
+    return;
+
+  auto &MF = *MBB.getParent();
+  auto &MFnI = *MF.getInfo<AArch64FunctionInfo>();
+  CFIInstBuilder CFIBuilder(MBB, MBBI, MachineInstr::FrameDestroy);
+  const Triple &TT = MF.getTarget().getTargetTriple();
+
+  if (MFnI.branchProtectionPAuthLR()) {
+    switch (CFILLVMSetRASignStateMode) {
+    case SetRAStateMode::Never:
+      CFIBuilder.buildNegateRAStateWithPC();
+      break;
+    case SetRAStateMode::PAuthLR:
+    case SetRAStateMode::Always:
+      CFIBuilder.buildSetRAState(0, nullptr);
+      break;
+    }
+  } else if (!TT.isOSBinFormatMachO()) {
+    switch (CFILLVMSetRASignStateMode) {
+    case SetRAStateMode::Never:
+    case SetRAStateMode::PAuthLR:
+      CFIBuilder.buildNegateRAState();
+      break;
+    case SetRAStateMode::Always:
+      CFIBuilder.buildSetRAState(0, nullptr);
+      break;
+    }
   }
 }
 
@@ -119,7 +204,7 @@ void AArch64PointerAuthImpl::signLR(MachineFunction &MF,
   // No SEH opcode for this one; it doesn't materialize into an
   // instruction on Windows.
   if (MFnI.branchProtectionPAuthLR() && Subtarget->hasPAuthLR()) {
-    emitPACCFI(MBB, MBBI, MachineInstr::FrameSetup, EmitCFI);
+    emitPACCFI(MBB, MBBI, EmitCFI, MFnI.getSigningInstrLabel());
     BuildMI(MBB, MBBI, DL,
             TII->get(UseBKey ? AArch64::PACIBSPPC : AArch64::PACIASPPC))
         .setMIFlag(MachineInstr::FrameSetup)
@@ -128,14 +213,14 @@ void AArch64PointerAuthImpl::signLR(MachineFunction &MF,
     if (MFnI.branchProtectionPAuthLR()) {
       BuildMI(MBB, MBBI, DL, TII->get(AArch64::PACM))
           .setMIFlag(MachineInstr::FrameSetup);
-      emitPACCFI(MBB, MBBI, MachineInstr::FrameSetup, EmitCFI);
+      emitPACCFI(MBB, MBBI, EmitCFI, MFnI.getSigningInstrLabel());
     }
     BuildMI(MBB, MBBI, DL,
             TII->get(UseBKey ? AArch64::PACIBSP : AArch64::PACIASP))
         .setMIFlag(MachineInstr::FrameSetup)
         ->setPreInstrSymbol(MF, MFnI.getSigningInstrLabel());
     if (!MFnI.branchProtectionPAuthLR())
-      emitPACCFI(MBB, MBBI, MachineInstr::FrameSetup, EmitCFI);
+      emitPACCFI(MBB, MBBI, EmitCFI, nullptr);
   }
 
   if (!EmitCFI && NeedsWinCFI) {
@@ -217,7 +302,7 @@ void AArch64PointerAuthImpl::authenticateLR(
       emitEpiloguePACSymOffsetIntoReg(*TII, MBB, MBBI, DL, PACSym,
                                       AArch64::X15);
 
-      emitPACCFI(MBB, MBBI, MachineInstr::FrameDestroy, EmitAsyncCFI);
+      emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
       unsigned AutOpc = UseBKey ? AArch64::AUTIB171615 : AArch64::AUTIA171615;
       BuildMI(MBB, MBBI, DL, TII->get(AutOpc))
           .setMIFlag(MachineInstr::FrameDestroy);
@@ -234,7 +319,7 @@ void AArch64PointerAuthImpl::authenticateLR(
       BuildMI(MBB, MBBI, DL, TII->get(AArch64::PACM))
           .setMIFlag(MachineInstr::FrameDestroy);
 
-      emitPACCFI(MBB, MBBI, MachineInstr::FrameDestroy, EmitAsyncCFI);
+      emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
       unsigned AutOpc = UseBKey ? AArch64::AUTIB1716 : AArch64::AUTIA1716;
       BuildMI(MBB, MBBI, DL, TII->get(AutOpc))
           .setMIFlag(MachineInstr::FrameDestroy);
@@ -242,7 +327,7 @@ void AArch64PointerAuthImpl::authenticateLR(
       unsigned AutOpc = UseBKey ? AArch64::AUTIB1716 : AArch64::AUTIA1716;
       BuildMI(MBB, MBBI, DL, TII->get(AutOpc))
           .setMIFlag(MachineInstr::FrameDestroy);
-      emitPACCFI(MBB, MBBI, MachineInstr::FrameDestroy, EmitAsyncCFI);
+      emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
     }
 
     BuildMI(MBB, MBBI, DL, TII->get(AArch64::ORRXrs), AArch64::LR)
@@ -278,7 +363,7 @@ void AArch64PointerAuthImpl::authenticateLR(
 
   if (MFnI->branchProtectionPAuthLR() && Subtarget->hasPAuthLR()) {
     assert(PACSym && "No PAC instruction to refer to");
-    emitPACCFI(MBB, MBBI, MachineInstr::FrameDestroy, EmitAsyncCFI);
+    emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
     BuildMI(MBB, MBBI, DL,
             TII->get(UseBKey ? AArch64::AUTIBSPPCi : AArch64::AUTIASPPCi))
         .addSym(PACSym)
@@ -290,13 +375,13 @@ void AArch64PointerAuthImpl::authenticateLR(
 
       BuildMI(MBB, MBBI, DL, TII->get(AArch64::PACM))
           .setMIFlag(MachineInstr::FrameDestroy);
-      emitPACCFI(MBB, MBBI, MachineInstr::FrameDestroy, EmitAsyncCFI);
+      emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
     }
     BuildMI(MBB, MBBI, DL,
             TII->get(UseBKey ? AArch64::AUTIBSP : AArch64::AUTIASP))
         .setMIFlag(MachineInstr::FrameDestroy);
     if (!MFnI->branchProtectionPAuthLR())
-      emitPACCFI(MBB, MBBI, MachineInstr::FrameDestroy, EmitAsyncCFI);
+      emitAUTCFI(MBB, MBBI, EmitAsyncCFI, nullptr);
   }
 
   if (NeedsWinCFI) {
diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index 6a6b73b8a4c88..5cbce8bf9527f 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -200,6 +200,7 @@ class AArch64AsmParser : public MCTargetAsmParser {
   bool parseDirectiveUnreq(SMLoc L);
   bool parseDirectiveCFINegateRAState();
   bool parseDirectiveCFINegateRAStateWithPC();
+  bool parseDirectiveCFILLVMSetRAState();
   bool parseDirectiveCFIBKeyFrame();
   bool parseDirectiveCFIMTETaggedFrame();
 
@@ -7282,6 +7283,8 @@ bool AArch64AsmParser::ParseDirective(AsmToken DirectiveID) {
     parseDirectiveCFINegateRAState();
   else if (IDVal == ".cfi_negate_ra_state_with_pc")
     parseDirectiveCFINegateRAStateWithPC();
+  else if (IDVal == ".cfi_llvm_set_ra_state")
+    parseDirectiveCFILLVMSetRAState();
   else if (IDVal == ".cfi_b_key_frame")
     parseDirectiveCFIBKeyFrame();
   else if (IDVal == ".cfi_mte_tagged_frame")
@@ -7757,6 +7760,23 @@ bool AArch64AsmParser::parseDirectiveCFINegateRAStateWithPC() {
   return false;
 }
 
+/// parseDirectiveCFILLVMSetRAState
+/// ::= .cfi_llvm_set_ra_state ra_state, offset
+bool AArch64AsmParser::parseDirectiveCFILLVMSetRAState() {
+  int64_t State;
+  if (getParser().parseAbsoluteExpression(State))
+    return true;
+  if (parseToken(AsmToken::Comma, "expected ','"))
+    return true;
+  int64_t Offset;
+  if (getParser().parseAbsoluteExpression(Offset))
+    return true;
+  if (parseEOL())
+    return true;
+  getStreamer().emitCFILLVMSetRAState((unsigned)State, Offset);
+  return false;
+}
+
 /// parseDirectiveCFIBKeyFrame
 /// ::= .cfi_b_key
 bool AArch64AsmParser::parseDirectiveCFIBKeyFrame() {
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
index 98fd4fd4a451b..8d1125ef4cf14 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
@@ -724,6 +724,9 @@ class DarwinAArch64AsmBackend : public AArch64AsmBackend {
 
         break;
       }
+      case MCCFIInstruction::OpLLVMSetRAState:
+        // .cfi_llvm_set_ra_state is not yet supported in Compact Unwind.
+        return CU::UNWIND_ARM64_MODE_DWARF;
       }
     }
 
diff --git a/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll b/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
index 67bff0b15fd49..429586dc235c1 100644
--- a/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
+++ b/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
@@ -18,16 +18,16 @@ define swifttailcc void @tail_call_fpdiff_a_key(ptr swiftasync %ctx) "branch-pro
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp0
 ; COMPAT-NEXT: .Ltmp0:
 ; COMPAT-NEXT:   hint #25
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp0
 ; V83A-NEXT:   .Ltmp0:
 ; V83A-NEXT:     paciasp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp0
 ; V9A-NEXT:    .Ltmp0:
 ; V9A-NEXT:      paciasppc
 
@@ -66,18 +66,18 @@ define swifttailcc void @tail_call_fpdiff_a_key(ptr swiftasync %ctx) "branch-pro
 ; COMPAT-NEXT:   adrp x15, .Ltmp0
 ; COMPAT-NEXT:   add x15, x15, :lo12:.Ltmp0
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #12
 
 ; V83A-NEXT:     adrp x15, .Ltmp0
 ; V83A-NEXT:     add x15, x15, :lo12:.Ltmp0
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
 ; V83A-NEXT:     autia1716
 
 ; V9A-NEXT:      adrp x15, .Ltmp0
 ; V9A-NEXT:      add x15, x15, :lo12:.Ltmp0
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
 ; V9A-NEXT:      autia171615
 
 ; PAUTH-NEXT:    autia1716
@@ -96,16 +96,16 @@ define swifttailcc void @tail_call_fpdiff_b_key(ptr swiftasync %ctx) "branch-pro
 ; CHECK-NEXT:    .cfi_b_key_frame
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp1
 ; COMPAT-NEXT: .Ltmp1:
 ; COMPAT-NEXT:   hint #27
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp1
 ; V83A-NEXT:   .Ltmp1:
 ; V83A-NEXT:     pacibsp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp1
 ; V9A-NEXT:    .Ltmp1:
 ; V9A-NEXT:      pacibsppc
 
@@ -144,18 +144,18 @@ define swifttailcc void @tail_call_fpdiff_b_key(ptr swiftasync %ctx) "branch-pro
 ; COMPAT-NEXT:   adrp x15, .Ltmp1
 ; COMPAT-NEXT:   add x15, x15, :lo12:.Ltmp1
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #14
 
 ; V83A-NEXT:     adrp x15, .Ltmp1
 ; V83A-NEXT:     add x15, x15, :lo12:.Ltmp1
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
 ; V83A-NEXT:     autib1716
 
 ; V9A-NEXT:      adrp x15, .Ltmp1
 ; V9A-NEXT:      add x15, x15, :lo12:.Ltmp1
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
 ; V9A-NEXT:      autib171615
 
 ; PAUTH-NEXT:    autib1716
@@ -173,16 +173,16 @@ define swifttailcc void @tail_call_no_fpdiff_a_key(ptr swiftasync %ctx) "branch-
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp2
 ; COMPAT-NEXT: .Ltmp2:
 ; COMPAT-NEXT:   hint #25
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp2
 ; V83A-NEXT:   .Ltmp2:
 ; V83A-NEXT:     paciasp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp2
 ; V9A-NEXT:    .Ltmp2:
 ; V9A-NEXT:      paciasppc
 
@@ -209,16 +209,16 @@ define swifttailcc void @tail_call_no_fpdiff_a_key(ptr swiftasync %ctx) "branch-
 ; COMPAT-NEXT:   adrp x16, .Ltmp2
 ; COMPAT-NEXT:   add x16, x16, :lo12:.Ltmp2
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #29
 
 ; V83A-NEXT:     adrp x16, .Ltmp2
 ; V83A-NEXT:     add x16, x16, :lo12:.Ltmp2
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
 ; V83A-NEXT:     autiasp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
 ; V9A-NEXT:      autiasppc .Ltmp2
 
 ; PAUTH-NEXT:    autiasp
@@ -236,16 +236,16 @@ define swifttailcc void @tail_call_no_fpdiff_b_key(ptr swiftasync %ctx) "branch-
 ; CHECK-NEXT:    .cfi_b_key_frame
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp3
 ; COMPAT-NEXT: .Ltmp3:
 ; COMPAT-NEXT:   hint #27
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp3
 ; V83A-NEXT:   .Ltmp3:
 ; V83A-NEXT:     pacibsp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp3
 ; V9A-NEXT:    .Ltmp3:
 ; V9A-NEXT:      pacibsppc
 
@@ -272,16 +272,16 @@ define swifttailcc void @tail_call_no_fpdiff_b_key(ptr swiftasync %ctx) "branch-
 ; COMPAT-NEXT:   adrp x16, .Ltmp3
 ; COMPAT-NEXT:   add x16, x16, :lo12:.Ltmp3
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #31
 
 ; V83A-NEXT:     adrp x16, .Ltmp3
 ; V83A-NEXT:     add x16, x16, :lo12:.Ltmp3
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
 ; V83A-NEXT:     autibsp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
 ; V9A-NEXT:      autibsppc .Ltmp3
 
 ; PAUTH-NEXT:    autibsp
@@ -298,16 +298,16 @@ define swifttailcc void @indirect_tail_call_fpdiff_a_key(ptr swiftasync %ctx, pt
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp4
 ; COMPAT-NEXT: .Ltmp4:
 ; COMPAT-NEXT:   hint #25
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp4
 ; V83A-NEXT:   .Ltmp4:
 ; V83A-NEXT:     paciasp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp4
 ; V9A-NEXT:    .Ltmp4:
 ; V9A-NEXT:      paciasppc
 
@@ -347,18 +347,18 @@ define swifttailcc void @indirect_tail_call_fpdiff_a_key(ptr swiftasync %ctx, pt
 ; COMPAT-NEXT:   adrp x15, .Ltmp4
 ; COMPAT-NEXT:   add x15, x15, :lo12:.Ltmp4
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #12
 
 ; V83A-NEXT:     adrp x15, .Ltmp4
 ; V83A-NEXT:     add x15, x15, :lo12:.Ltmp4
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
 ; V83A-NEXT:     autia1716
 
 ; V9A-NEXT:      adrp x15, .Ltmp4
 ; V9A-NEXT:      add x15, x15, :lo12:.Ltmp4
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
 ; V9A-NEXT:      autia171615
 
 ; PAUTH-NEXT:    autia1716
@@ -377,16 +377,16 @@ define swifttailcc void @indirect_tail_call_fpdiff_b_key(ptr swiftasync %ctx, pt
 ; CHECK-NEXT:    .cfi_b_key_frame
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp5
 ; COMPAT-NEXT: .Ltmp5:
 ; COMPAT-NEXT:   hint #27
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp5
 ; V83A-NEXT:   .Ltmp5:
 ; V83A-NEXT:     pacibsp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp5
 ; V9A-NEXT:    .Ltmp5:
 ; V9A-NEXT:      pacibsppc
 
@@ -426,18 +426,18 @@ define swifttailcc void @indirect_tail_call_fpdiff_b_key(ptr swiftasync %ctx, pt
 ; COMPAT-NEXT:   adrp x15, .Ltmp5
 ; COMPAT-NEXT:   add x15, x15, :lo12:.Ltmp5
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #14
 
 ; V83A-NEXT:     adrp x15, .Ltmp5
 ; V83A-NEXT:     add x15, x15, :lo12:.Ltmp5
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
 ; V83A-NEXT:     autib1716
 
 ; V9A-NEXT:      adrp x15, .Ltmp5
 ; V9A-NEXT:      add x15, x15, :lo12:.Ltmp5
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
 ; V9A-NEXT:      autib171615
 
 ; PAUTH-NEXT:    autib1716
@@ -455,16 +455,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_a_key(ptr swiftasync %ctx,
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp6
 ; COMPAT-NEXT: .Ltmp6:
 ; COMPAT-NEXT:   hint #25
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp6
 ; V83A-NEXT:   .Ltmp6:
 ; V83A-NEXT:     paciasp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp6
 ; V9A-NEXT:    .Ltmp6:
 ; V9A-NEXT:      paciasppc
 
@@ -491,16 +491,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_a_key(ptr swiftasync %ctx,
 ; COMPAT-NEXT:   adrp x16, .Ltmp6
 ; COMPAT-NEXT:   add x16, x16, :lo12:.Ltmp6
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #29
 
 ; V83A-NEXT:     adrp x16, .Ltmp6
 ; V83A-NEXT:     add x16, x16, :lo12:.Ltmp6
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
 ; V83A-NEXT:     autiasp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
 ; V9A-NEXT:      autiasppc .Ltmp6
 
 ; PAUTH-NEXT:    autiasp
@@ -518,16 +518,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_b_key(ptr swiftasync %ctx,
 ; CHECK-NEXT:    .cfi_b_key_frame
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp7
 ; COMPAT-NEXT: .Ltmp7:
 ; COMPAT-NEXT:   hint #27
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp7
 ; V83A-NEXT:   .Ltmp7:
 ; V83A-NEXT:     pacibsp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp7
 ; V9A-NEXT:    .Ltmp7:
 ; V9A-NEXT:      pacibsppc
 
@@ -554,16 +554,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_b_key(ptr swiftasync %ctx,
 ; COMPAT-NEXT:   adrp x16, .Ltmp7
 ; COMPAT-NEXT:   add x16, x16, :lo12:.Ltmp7
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #31
 
 ; V83A-NEXT:     adrp x16, .Ltmp7
 ; V83A-NEXT:     add x16, x16, :lo12:.Ltmp7
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
 ; V83A-NEXT:     autibsp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
 ; V9A-NEXT:      autibsppc .Ltmp7
 
 ; PAUTH-NEXT:    autibsp
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll
index 2de549bdcca26..684c8565cd8b4 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll
@@ -57,7 +57,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
   ; COMPAT-MIR-NEXT:   liveins: $w0
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -70,7 +70,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
   ; V83A-MIR-NEXT:   liveins: $w0
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -81,7 +81,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
@@ -93,7 +93,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
   ; COMPAT-MIR-NEXT:   liveins: $x0, $lr
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; COMPAT-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -111,7 +111,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
   ; V83A-MIR-NEXT:   liveins: $x0, $lr
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; V83A-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -127,7 +127,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $x0, $lr
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -147,7 +147,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
   ; COMPAT-MIR-NEXT:   liveins: $w0, $lr
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; COMPAT-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -165,7 +165,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
   ; V83A-MIR-NEXT:   liveins: $w0, $lr
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; V83A-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -181,7 +181,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $w0, $lr
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -199,7 +199,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
   ; COMPAT-MIR-NEXT:   liveins: $w0, $lr
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; COMPAT-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -217,7 +217,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
   ; V83A-MIR-NEXT:   liveins: $w0, $lr
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; V83A-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -233,7 +233,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $w0, $lr
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -251,7 +251,7 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
   ; CHECK-MIR-NEXT:   liveins: $w0, $lr, $x18
   ; CHECK-MIR-NEXT: {{  $}}
   ; CHECK-MIR-NEXT:   frame-setup PACM
-  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; CHECK-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; CHECK-MIR-NEXT:   early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
   ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
@@ -271,7 +271,7 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $w0, $lr, $x18
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
   ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
@@ -293,7 +293,7 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
   ; CHECK-MIR-NEXT:   liveins: $w0
   ; CHECK-MIR-NEXT: {{  $}}
   ; CHECK-MIR-NEXT:   frame-setup PACM
-  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; CHECK-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; CHECK-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; CHECK-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -304,7 +304,7 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
@@ -318,7 +318,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
   ; CHECK-MIR-NEXT:   liveins: $x0, $lr
   ; CHECK-MIR-NEXT: {{  $}}
   ; CHECK-MIR-NEXT:   frame-setup PACM
-  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; CHECK-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; CHECK-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -335,7 +335,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $x0, $lr
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -355,7 +355,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
   ; COMPAT-MIR-NEXT:   liveins: $w0
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -368,7 +368,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
   ; V83A-MIR-NEXT:   liveins: $w0
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -379,7 +379,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
@@ -392,7 +392,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup EMITBKEY
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -406,7 +406,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup EMITBKEY
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -418,7 +418,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
   ; PAUTHLR-MIR-NEXT:   frame-setup EMITBKEY
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
@@ -431,7 +431,7 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; CHECK-MIR-NEXT: {{  $}}
   ; CHECK-MIR-NEXT:   frame-setup EMITBKEY
   ; CHECK-MIR-NEXT:   frame-setup PACM
-  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; CHECK-MIR-NEXT:   frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; CHECK-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; CHECK-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -443,7 +443,7 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
   ; PAUTHLR-MIR-NEXT:   frame-setup EMITBKEY
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
@@ -455,7 +455,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; COMPAT-MIR-NEXT:   liveins: $w0
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -468,7 +468,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; V83A-MIR-NEXT:   liveins: $w0
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -479,7 +479,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
@@ -492,7 +492,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup EMITBKEY
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -506,7 +506,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup EMITBKEY
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -518,7 +518,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
   ; PAUTHLR-MIR-NEXT:   frame-setup EMITBKEY
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
@@ -531,7 +531,7 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
   ; CHECK-MIR-NEXT: {{  $}}
   ; CHECK-MIR-NEXT:   frame-setup EMITBKEY
   ; CHECK-MIR-NEXT:   frame-setup PACM
-  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; CHECK-MIR-NEXT:   frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; CHECK-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; CHECK-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -543,7 +543,7 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
   ; PAUTHLR-MIR-NEXT:   frame-setup EMITBKEY
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
index 7f7c021995bb2..2b844efff6456 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
@@ -22,6 +22,9 @@
 ; RUN: llc -mtriple=aarch64              < %s | FileCheck --check-prefixes=CHECK,COMPAT %s
 ; RUN: llc -mtriple=aarch64 -mattr=v8.3a < %s | FileCheck --check-prefixes=CHECK,V83A %s
 ; RUN: llc -mtriple=aarch64 -mattr=v9a -mattr=pauth-lr < %s | FileCheck --check-prefixes=PAUTHLR %s
+; RUN: llc -mtriple=aarch64              -aarch64-cfi-llvm-set-ra-sign-state=never < %s | FileCheck --check-prefixes=NEGATE-CHECK,NEGATE-COMPAT %s
+; RUN: llc -mtriple=aarch64 -mattr=v8.3a -aarch64-cfi-llvm-set-ra-sign-state=never < %s | FileCheck --check-prefixes=NEGATE-CHECK,NEGATE-V83A %s
+; RUN: llc -mtriple=aarch64 -mattr=v9a -mattr=pauth-lr -aarch64-cfi-llvm-set-ra-sign-state=never < %s | FileCheck --check-prefixes=NEGATE-PAUTHLR %s
 
 ; See also: sign-return-address-pauth-lr-mir.ll
 
@@ -33,6 +36,14 @@ define i32 @leaf(i32 %x) "branch-protection-pauth-lr" {
 ; PAUTHLR-LABEL: leaf:
 ; PAUTHLR:       // %bb.0:
 ; PAUTHLR-NEXT:    ret
+;
+; NEGATE-CHECK-LABEL: leaf:
+; NEGATE-CHECK:       // %bb.0:
+; NEGATE-CHECK-NEXT:    ret
+;
+; NEGATE-PAUTHLR-LABEL: leaf:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    ret
   ret i32 %x
 }
 
@@ -44,6 +55,14 @@ define i32 @leaf_sign_none(i32 %x) "branch-protection-pauth-lr"   {
 ; PAUTHLR-LABEL: leaf_sign_none:
 ; PAUTHLR:       // %bb.0:
 ; PAUTHLR-NEXT:    ret
+;
+; NEGATE-CHECK-LABEL: leaf_sign_none:
+; NEGATE-CHECK:       // %bb.0:
+; NEGATE-CHECK-NEXT:    ret
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_none:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    ret
   ret i32 %x
 }
 
@@ -55,6 +74,14 @@ define i32 @leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-return
 ; PAUTHLR-LABEL: leaf_sign_non_leaf:
 ; PAUTHLR:       // %bb.0:
 ; PAUTHLR-NEXT:    ret
+;
+; NEGATE-CHECK-LABEL: leaf_sign_non_leaf:
+; NEGATE-CHECK:       // %bb.0:
+; NEGATE-CHECK-NEXT:    ret
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_non_leaf:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    ret
   ret i32 %x
 }
 
@@ -62,7 +89,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
 ; COMPAT-LABEL: leaf_sign_all:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp0
 ; COMPAT-NEXT:  .Ltmp0:
 ; COMPAT-NEXT:    hint #25
 ; COMPAT-NEXT:    adrp x16, .Ltmp0
@@ -74,7 +101,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
 ; V83A-LABEL: leaf_sign_all:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp0
 ; V83A-NEXT:  .Ltmp0:
 ; V83A-NEXT:    paciasp
 ; V83A-NEXT:    adrp x16, .Ltmp0
@@ -84,10 +111,40 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
 ;
 ; PAUTHLR-LABEL: leaf_sign_all:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp0
 ; PAUTHLR-NEXT:  .Ltmp0:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    retaasppc .Ltmp0
+;
+; NEGATE-COMPAT-LABEL: leaf_sign_all:
+; NEGATE-COMPAT:       // %bb.0:
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT:  .Ltmp0:
+; NEGATE-COMPAT-NEXT:    hint #25
+; NEGATE-COMPAT-NEXT:    adrp x16, .Ltmp0
+; NEGATE-COMPAT-NEXT:    add x16, x16, :lo12:.Ltmp0
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    hint #29
+; NEGATE-COMPAT-NEXT:    ret
+;
+; NEGATE-V83A-LABEL: leaf_sign_all:
+; NEGATE-V83A:       // %bb.0:
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT:  .Ltmp0:
+; NEGATE-V83A-NEXT:    paciasp
+; NEGATE-V83A-NEXT:    adrp x16, .Ltmp0
+; NEGATE-V83A-NEXT:    add x16, x16, :lo12:.Ltmp0
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    retaa
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT:  .Ltmp0:
+; NEGATE-PAUTHLR-NEXT:    paciasppc
+; NEGATE-PAUTHLR-NEXT:    retaasppc .Ltmp0
   ret i32 %x
 }
 
@@ -95,7 +152,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
 ; COMPAT-LABEL: leaf_clobbers_lr:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp1
 ; COMPAT-NEXT:  .Ltmp1:
 ; COMPAT-NEXT:    hint #25
 ; COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -114,7 +171,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
 ; V83A-LABEL: leaf_clobbers_lr:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp1
 ; V83A-NEXT:  .Ltmp1:
 ; V83A-NEXT:    paciasp
 ; V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -131,7 +188,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
 ;
 ; PAUTHLR-LABEL: leaf_clobbers_lr:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp1
 ; PAUTHLR-NEXT:  .Ltmp1:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -142,6 +199,57 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
 ; PAUTHLR-NEXT:    //NO_APP
 ; PAUTHLR-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
 ; PAUTHLR-NEXT:    retaasppc .Ltmp1
+;
+; NEGATE-COMPAT-LABEL: leaf_clobbers_lr:
+; NEGATE-COMPAT:       // %bb.0:
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT:  .Ltmp1:
+; NEGATE-COMPAT-NEXT:    hint #25
+; NEGATE-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-COMPAT-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-COMPAT-NEXT:    .cfi_offset w30, -16
+; NEGATE-COMPAT-NEXT:    //APP
+; NEGATE-COMPAT-NEXT:    mov x30, x0
+; NEGATE-COMPAT-NEXT:    //NO_APP
+; NEGATE-COMPAT-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-COMPAT-NEXT:    adrp x16, .Ltmp1
+; NEGATE-COMPAT-NEXT:    add x16, x16, :lo12:.Ltmp1
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    hint #29
+; NEGATE-COMPAT-NEXT:    ret
+;
+; NEGATE-V83A-LABEL: leaf_clobbers_lr:
+; NEGATE-V83A:       // %bb.0:
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT:  .Ltmp1:
+; NEGATE-V83A-NEXT:    paciasp
+; NEGATE-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-V83A-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-V83A-NEXT:    .cfi_offset w30, -16
+; NEGATE-V83A-NEXT:    //APP
+; NEGATE-V83A-NEXT:    mov x30, x0
+; NEGATE-V83A-NEXT:    //NO_APP
+; NEGATE-V83A-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-V83A-NEXT:    adrp x16, .Ltmp1
+; NEGATE-V83A-NEXT:    add x16, x16, :lo12:.Ltmp1
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    retaa
+;
+; NEGATE-PAUTHLR-LABEL: leaf_clobbers_lr:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT:  .Ltmp1:
+; NEGATE-PAUTHLR-NEXT:    paciasppc
+; NEGATE-PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-PAUTHLR-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-PAUTHLR-NEXT:    .cfi_offset w30, -16
+; NEGATE-PAUTHLR-NEXT:    //APP
+; NEGATE-PAUTHLR-NEXT:    mov x30, x0
+; NEGATE-PAUTHLR-NEXT:    //NO_APP
+; NEGATE-PAUTHLR-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-PAUTHLR-NEXT:    retaasppc .Ltmp1
   call void asm sideeffect "mov x30, $0", "r,~{lr}"(i64 %x) #1
   ret i64 %x
 }
@@ -152,7 +260,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ; COMPAT-LABEL: non_leaf_sign_all:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp2
 ; COMPAT-NEXT:  .Ltmp2:
 ; COMPAT-NEXT:    hint #25
 ; COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -169,7 +277,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ; V83A-LABEL: non_leaf_sign_all:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp2
 ; V83A-NEXT:  .Ltmp2:
 ; V83A-NEXT:    paciasp
 ; V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -184,7 +292,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ;
 ; PAUTHLR-LABEL: non_leaf_sign_all:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp2
 ; PAUTHLR-NEXT:  .Ltmp2:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -193,6 +301,51 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ; PAUTHLR-NEXT:    bl foo
 ; PAUTHLR-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
 ; PAUTHLR-NEXT:    retaasppc .Ltmp2
+;
+; NEGATE-COMPAT-LABEL: non_leaf_sign_all:
+; NEGATE-COMPAT:       // %bb.0:
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT:  .Ltmp2:
+; NEGATE-COMPAT-NEXT:    hint #25
+; NEGATE-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-COMPAT-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-COMPAT-NEXT:    .cfi_offset w30, -16
+; NEGATE-COMPAT-NEXT:    bl foo
+; NEGATE-COMPAT-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-COMPAT-NEXT:    adrp x16, .Ltmp2
+; NEGATE-COMPAT-NEXT:    add x16, x16, :lo12:.Ltmp2
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    hint #29
+; NEGATE-COMPAT-NEXT:    ret
+;
+; NEGATE-V83A-LABEL: non_leaf_sign_all:
+; NEGATE-V83A:       // %bb.0:
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT:  .Ltmp2:
+; NEGATE-V83A-NEXT:    paciasp
+; NEGATE-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-V83A-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-V83A-NEXT:    .cfi_offset w30, -16
+; NEGATE-V83A-NEXT:    bl foo
+; NEGATE-V83A-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-V83A-NEXT:    adrp x16, .Ltmp2
+; NEGATE-V83A-NEXT:    add x16, x16, :lo12:.Ltmp2
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    retaa
+;
+; NEGATE-PAUTHLR-LABEL: non_leaf_sign_all:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT:  .Ltmp2:
+; NEGATE-PAUTHLR-NEXT:    paciasppc
+; NEGATE-PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-PAUTHLR-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-PAUTHLR-NEXT:    .cfi_offset w30, -16
+; NEGATE-PAUTHLR-NEXT:    bl foo
+; NEGATE-PAUTHLR-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-PAUTHLR-NEXT:    retaasppc .Ltmp2
   %call = call i32 @foo(i32 %x)
   ret i32 %call
 }
@@ -201,7 +354,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
 ; COMPAT-LABEL: non_leaf_sign_non_leaf:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp3
 ; COMPAT-NEXT:  .Ltmp3:
 ; COMPAT-NEXT:    hint #25
 ; COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -218,7 +371,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
 ; V83A-LABEL: non_leaf_sign_non_leaf:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp3
 ; V83A-NEXT:  .Ltmp3:
 ; V83A-NEXT:    paciasp
 ; V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -233,7 +386,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
 ;
 ; PAUTHLR-LABEL: non_leaf_sign_non_leaf:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp3
 ; PAUTHLR-NEXT:  .Ltmp3:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -242,6 +395,51 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
 ; PAUTHLR-NEXT:    bl foo
 ; PAUTHLR-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
 ; PAUTHLR-NEXT:    retaasppc .Ltmp3
+;
+; NEGATE-COMPAT-LABEL: non_leaf_sign_non_leaf:
+; NEGATE-COMPAT:       // %bb.0:
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT:  .Ltmp3:
+; NEGATE-COMPAT-NEXT:    hint #25
+; NEGATE-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-COMPAT-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-COMPAT-NEXT:    .cfi_offset w30, -16
+; NEGATE-COMPAT-NEXT:    bl foo
+; NEGATE-COMPAT-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-COMPAT-NEXT:    adrp x16, .Ltmp3
+; NEGATE-COMPAT-NEXT:    add x16, x16, :lo12:.Ltmp3
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    hint #29
+; NEGATE-COMPAT-NEXT:    ret
+;
+; NEGATE-V83A-LABEL: non_leaf_sign_non_leaf:
+; NEGATE-V83A:       // %bb.0:
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT:  .Ltmp3:
+; NEGATE-V83A-NEXT:    paciasp
+; NEGATE-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-V83A-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-V83A-NEXT:    .cfi_offset w30, -16
+; NEGATE-V83A-NEXT:    bl foo
+; NEGATE-V83A-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-V83A-NEXT:    adrp x16, .Ltmp3
+; NEGATE-V83A-NEXT:    add x16, x16, :lo12:.Ltmp3
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    retaa
+;
+; NEGATE-PAUTHLR-LABEL: non_leaf_sign_non_leaf:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT:  .Ltmp3:
+; NEGATE-PAUTHLR-NEXT:    paciasppc
+; NEGATE-PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-PAUTHLR-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-PAUTHLR-NEXT:    .cfi_offset w30, -16
+; NEGATE-PAUTHLR-NEXT:    bl foo
+; NEGATE-PAUTHLR-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-PAUTHLR-NEXT:    retaasppc .Ltmp3
   %call = call i32 @foo(i32 %x)
   ret i32 %call
 }
@@ -251,7 +449,7 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
 ; CHECK-LABEL: non_leaf_scs:
 ; CHECK:       // %bb.0:
 ; CHECK-NEXT:    hint #39
-; CHECK-NEXT:    .cfi_negate_ra_state_with_pc
+; CHECK-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp4
 ; CHECK-NEXT:  .Ltmp4:
 ; CHECK-NEXT:    paciasp
 ; CHECK-NEXT:    str x30, [x18], #8
@@ -270,7 +468,7 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
 ;
 ; PAUTHLR-LABEL: non_leaf_scs:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp4
 ; PAUTHLR-NEXT:  .Ltmp4:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    str x30, [x18], #8
@@ -283,6 +481,42 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
 ; PAUTHLR-NEXT:    ldr x30, [x18, #-8]!
 ; PAUTHLR-NEXT:    autiasppc .Ltmp4
 ; PAUTHLR-NEXT:    ret
+;
+; NEGATE-CHECK-LABEL: non_leaf_scs:
+; NEGATE-CHECK:       // %bb.0:
+; NEGATE-CHECK-NEXT:    hint #39
+; NEGATE-CHECK-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-CHECK-NEXT:  .Ltmp4:
+; NEGATE-CHECK-NEXT:    paciasp
+; NEGATE-CHECK-NEXT:    str x30, [x18], #8
+; NEGATE-CHECK-NEXT:    .cfi_escape 0x16, 0x12, 0x02, 0x82, 0x78 //
+; NEGATE-CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CHECK-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-CHECK-NEXT:    .cfi_offset w30, -16
+; NEGATE-CHECK-NEXT:    bl foo
+; NEGATE-CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CHECK-NEXT:    ldr x30, [x18, #-8]!
+; NEGATE-CHECK-NEXT:    adrp x16, .Ltmp4
+; NEGATE-CHECK-NEXT:    add x16, x16, :lo12:.Ltmp4
+; NEGATE-CHECK-NEXT:    hint #39
+; NEGATE-CHECK-NEXT:    autiasp
+; NEGATE-CHECK-NEXT:    ret
+;
+; NEGATE-PAUTHLR-LABEL: non_leaf_scs:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT:  .Ltmp4:
+; NEGATE-PAUTHLR-NEXT:    paciasppc
+; NEGATE-PAUTHLR-NEXT:    str x30, [x18], #8
+; NEGATE-PAUTHLR-NEXT:    .cfi_escape 0x16, 0x12, 0x02, 0x82, 0x78 //
+; NEGATE-PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-PAUTHLR-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-PAUTHLR-NEXT:    .cfi_offset w30, -16
+; NEGATE-PAUTHLR-NEXT:    bl foo
+; NEGATE-PAUTHLR-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-PAUTHLR-NEXT:    ldr x30, [x18, #-8]!
+; NEGATE-PAUTHLR-NEXT:    autiasppc .Ltmp4
+; NEGATE-PAUTHLR-NEXT:    ret
   %call = call i32 @foo(i32 %x)
   ret i32 %call
 }
@@ -291,7 +525,7 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ; CHECK-LABEL: leaf_sign_all_v83:
 ; CHECK:       // %bb.0:
 ; CHECK-NEXT:    hint #39
-; CHECK-NEXT:    .cfi_negate_ra_state_with_pc
+; CHECK-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp5
 ; CHECK-NEXT:  .Ltmp5:
 ; CHECK-NEXT:    paciasp
 ; CHECK-NEXT:    adrp x16, .Ltmp5
@@ -301,10 +535,28 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ;
 ; PAUTHLR-LABEL: leaf_sign_all_v83:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp5
 ; PAUTHLR-NEXT:  .Ltmp5:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    retaasppc .Ltmp5
+;
+; NEGATE-CHECK-LABEL: leaf_sign_all_v83:
+; NEGATE-CHECK:       // %bb.0:
+; NEGATE-CHECK-NEXT:    hint #39
+; NEGATE-CHECK-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-CHECK-NEXT:  .Ltmp5:
+; NEGATE-CHECK-NEXT:    paciasp
+; NEGATE-CHECK-NEXT:    adrp x16, .Ltmp5
+; NEGATE-CHECK-NEXT:    add x16, x16, :lo12:.Ltmp5
+; NEGATE-CHECK-NEXT:    hint #39
+; NEGATE-CHECK-NEXT:    retaa
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all_v83:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT:  .Ltmp5:
+; NEGATE-PAUTHLR-NEXT:    paciasppc
+; NEGATE-PAUTHLR-NEXT:    retaasppc .Ltmp5
   ret i32 %x
 }
 
@@ -314,7 +566,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
 ; COMPAT-LABEL: spill_lr_and_tail_call:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp6
 ; COMPAT-NEXT:  .Ltmp6:
 ; COMPAT-NEXT:    hint #25
 ; COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -333,7 +585,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
 ; V83A-LABEL: spill_lr_and_tail_call:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp6
 ; V83A-NEXT:  .Ltmp6:
 ; V83A-NEXT:    paciasp
 ; V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -351,7 +603,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
 ;
 ; PAUTHLR-LABEL: spill_lr_and_tail_call:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp6
 ; PAUTHLR-NEXT:  .Ltmp6:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -363,6 +615,59 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
 ; PAUTHLR-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
 ; PAUTHLR-NEXT:    autiasppc .Ltmp6
 ; PAUTHLR-NEXT:    b bar
+;
+; NEGATE-COMPAT-LABEL: spill_lr_and_tail_call:
+; NEGATE-COMPAT:       // %bb.0:
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT:  .Ltmp6:
+; NEGATE-COMPAT-NEXT:    hint #25
+; NEGATE-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-COMPAT-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-COMPAT-NEXT:    .cfi_offset w30, -16
+; NEGATE-COMPAT-NEXT:    //APP
+; NEGATE-COMPAT-NEXT:    mov x30, x0
+; NEGATE-COMPAT-NEXT:    //NO_APP
+; NEGATE-COMPAT-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-COMPAT-NEXT:    adrp x16, .Ltmp6
+; NEGATE-COMPAT-NEXT:    add x16, x16, :lo12:.Ltmp6
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    hint #29
+; NEGATE-COMPAT-NEXT:    b bar
+;
+; NEGATE-V83A-LABEL: spill_lr_and_tail_call:
+; NEGATE-V83A:       // %bb.0:
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT:  .Ltmp6:
+; NEGATE-V83A-NEXT:    paciasp
+; NEGATE-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-V83A-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-V83A-NEXT:    .cfi_offset w30, -16
+; NEGATE-V83A-NEXT:    //APP
+; NEGATE-V83A-NEXT:    mov x30, x0
+; NEGATE-V83A-NEXT:    //NO_APP
+; NEGATE-V83A-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-V83A-NEXT:    adrp x16, .Ltmp6
+; NEGATE-V83A-NEXT:    add x16, x16, :lo12:.Ltmp6
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    autiasp
+; NEGATE-V83A-NEXT:    b bar
+;
+; NEGATE-PAUTHLR-LABEL: spill_lr_and_tail_call:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT:  .Ltmp6:
+; NEGATE-PAUTHLR-NEXT:    paciasppc
+; NEGATE-PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-PAUTHLR-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-PAUTHLR-NEXT:    .cfi_offset w30, -16
+; NEGATE-PAUTHLR-NEXT:    //APP
+; NEGATE-PAUTHLR-NEXT:    mov x30, x0
+; NEGATE-PAUTHLR-NEXT:    //NO_APP
+; NEGATE-PAUTHLR-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-PAUTHLR-NEXT:    autiasppc .Ltmp6
+; NEGATE-PAUTHLR-NEXT:    b bar
   call void asm sideeffect "mov x30, $0", "r,~{lr}"(i64 %x) #1
   tail call fastcc i64 @bar(i64 %x)
   ret void
@@ -372,7 +677,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ; COMPAT-LABEL: leaf_sign_all_a_key:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp7
 ; COMPAT-NEXT:  .Ltmp7:
 ; COMPAT-NEXT:    hint #25
 ; COMPAT-NEXT:    adrp x16, .Ltmp7
@@ -384,7 +689,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ; V83A-LABEL: leaf_sign_all_a_key:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp7
 ; V83A-NEXT:  .Ltmp7:
 ; V83A-NEXT:    paciasp
 ; V83A-NEXT:    adrp x16, .Ltmp7
@@ -394,10 +699,40 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ;
 ; PAUTHLR-LABEL: leaf_sign_all_a_key:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp7
 ; PAUTHLR-NEXT:  .Ltmp7:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    retaasppc .Ltmp7
+;
+; NEGATE-COMPAT-LABEL: leaf_sign_all_a_key:
+; NEGATE-COMPAT:       // %bb.0:
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT:  .Ltmp7:
+; NEGATE-COMPAT-NEXT:    hint #25
+; NEGATE-COMPAT-NEXT:    adrp x16, .Ltmp7
+; NEGATE-COMPAT-NEXT:    add x16, x16, :lo12:.Ltmp7
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    hint #29
+; NEGATE-COMPAT-NEXT:    ret
+;
+; NEGATE-V83A-LABEL: leaf_sign_all_a_key:
+; NEGATE-V83A:       // %bb.0:
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT:  .Ltmp7:
+; NEGATE-V83A-NEXT:    paciasp
+; NEGATE-V83A-NEXT:    adrp x16, .Ltmp7
+; NEGATE-V83A-NEXT:    add x16, x16, :lo12:.Ltmp7
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    retaa
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all_a_key:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT:  .Ltmp7:
+; NEGATE-PAUTHLR-NEXT:    paciasppc
+; NEGATE-PAUTHLR-NEXT:    retaasppc .Ltmp7
   ret i32 %x
 }
 
@@ -406,7 +741,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    .cfi_b_key_frame
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp8
 ; COMPAT-NEXT:  .Ltmp8:
 ; COMPAT-NEXT:    hint #27
 ; COMPAT-NEXT:    adrp x16, .Ltmp8
@@ -419,7 +754,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    .cfi_b_key_frame
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp8
 ; V83A-NEXT:  .Ltmp8:
 ; V83A-NEXT:    pacibsp
 ; V83A-NEXT:    adrp x16, .Ltmp8
@@ -430,10 +765,43 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ; PAUTHLR-LABEL: leaf_sign_all_b_key:
 ; PAUTHLR:       // %bb.0:
 ; PAUTHLR-NEXT:    .cfi_b_key_frame
-; PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp8
 ; PAUTHLR-NEXT:  .Ltmp8:
 ; PAUTHLR-NEXT:    pacibsppc
 ; PAUTHLR-NEXT:    retabsppc .Ltmp8
+;
+; NEGATE-COMPAT-LABEL: leaf_sign_all_b_key:
+; NEGATE-COMPAT:       // %bb.0:
+; NEGATE-COMPAT-NEXT:    .cfi_b_key_frame
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT:  .Ltmp8:
+; NEGATE-COMPAT-NEXT:    hint #27
+; NEGATE-COMPAT-NEXT:    adrp x16, .Ltmp8
+; NEGATE-COMPAT-NEXT:    add x16, x16, :lo12:.Ltmp8
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    hint #31
+; NEGATE-COMPAT-NEXT:    ret
+;
+; NEGATE-V83A-LABEL: leaf_sign_all_b_key:
+; NEGATE-V83A:       // %bb.0:
+; NEGATE-V83A-NEXT:    .cfi_b_key_frame
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT:  .Ltmp8:
+; NEGATE-V83A-NEXT:    pacibsp
+; NEGATE-V83A-NEXT:    adrp x16, .Ltmp8
+; NEGATE-V83A-NEXT:    add x16, x16, :lo12:.Ltmp8
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    retab
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all_b_key:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    .cfi_b_key_frame
+; NEGATE-PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT:  .Ltmp8:
+; NEGATE-PAUTHLR-NEXT:    pacibsppc
+; NEGATE-PAUTHLR-NEXT:    retabsppc .Ltmp8
   ret i32 %x
 }
 
@@ -442,7 +810,7 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; CHECK:       // %bb.0:
 ; CHECK-NEXT:    .cfi_b_key_frame
 ; CHECK-NEXT:    hint #39
-; CHECK-NEXT:    .cfi_negate_ra_state_with_pc
+; CHECK-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp9
 ; CHECK-NEXT:  .Ltmp9:
 ; CHECK-NEXT:    pacibsp
 ; CHECK-NEXT:    adrp x16, .Ltmp9
@@ -453,10 +821,30 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; PAUTHLR-LABEL: leaf_sign_all_v83_b_key:
 ; PAUTHLR:       // %bb.0:
 ; PAUTHLR-NEXT:    .cfi_b_key_frame
-; PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp9
 ; PAUTHLR-NEXT:  .Ltmp9:
 ; PAUTHLR-NEXT:    pacibsppc
 ; PAUTHLR-NEXT:    retabsppc .Ltmp9
+;
+; NEGATE-CHECK-LABEL: leaf_sign_all_v83_b_key:
+; NEGATE-CHECK:       // %bb.0:
+; NEGATE-CHECK-NEXT:    .cfi_b_key_frame
+; NEGATE-CHECK-NEXT:    hint #39
+; NEGATE-CHECK-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-CHECK-NEXT:  .Ltmp9:
+; NEGATE-CHECK-NEXT:    pacibsp
+; NEGATE-CHECK-NEXT:    adrp x16, .Ltmp9
+; NEGATE-CHECK-NEXT:    add x16, x16, :lo12:.Ltmp9
+; NEGATE-CHECK-NEXT:    hint #39
+; NEGATE-CHECK-NEXT:    retab
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all_v83_b_key:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    .cfi_b_key_frame
+; NEGATE-PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT:  .Ltmp9:
+; NEGATE-PAUTHLR-NEXT:    pacibsppc
+; NEGATE-PAUTHLR-NEXT:    retabsppc .Ltmp9
   ret i32 %x
 }
 
@@ -466,7 +854,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #34
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp10
 ; COMPAT-NEXT:  .Ltmp10:
 ; COMPAT-NEXT:    hint #25
 ; COMPAT-NEXT:    adrp x16, .Ltmp10
@@ -479,7 +867,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #34
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp10
 ; V83A-NEXT:  .Ltmp10:
 ; V83A-NEXT:    paciasp
 ; V83A-NEXT:    adrp x16, .Ltmp10
@@ -489,11 +877,44 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ;
 ; PAUTHLR-LABEL: leaf_sign_all_a_key_bti:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp10
 ; PAUTHLR-NEXT:    bti c
 ; PAUTHLR-NEXT:  .Ltmp10:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    retaasppc .Ltmp10
+;
+; NEGATE-COMPAT-LABEL: leaf_sign_all_a_key_bti:
+; NEGATE-COMPAT:       // %bb.0:
+; NEGATE-COMPAT-NEXT:    hint #34
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT:  .Ltmp10:
+; NEGATE-COMPAT-NEXT:    hint #25
+; NEGATE-COMPAT-NEXT:    adrp x16, .Ltmp10
+; NEGATE-COMPAT-NEXT:    add x16, x16, :lo12:.Ltmp10
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    hint #29
+; NEGATE-COMPAT-NEXT:    ret
+;
+; NEGATE-V83A-LABEL: leaf_sign_all_a_key_bti:
+; NEGATE-V83A:       // %bb.0:
+; NEGATE-V83A-NEXT:    hint #34
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT:  .Ltmp10:
+; NEGATE-V83A-NEXT:    paciasp
+; NEGATE-V83A-NEXT:    adrp x16, .Ltmp10
+; NEGATE-V83A-NEXT:    add x16, x16, :lo12:.Ltmp10
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    retaa
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all_a_key_bti:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT:    bti c
+; NEGATE-PAUTHLR-NEXT:  .Ltmp10:
+; NEGATE-PAUTHLR-NEXT:    paciasppc
+; NEGATE-PAUTHLR-NEXT:    retaasppc .Ltmp10
   ret i32 %x
 }
 
@@ -504,7 +925,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; COMPAT-NEXT:    .cfi_b_key_frame
 ; COMPAT-NEXT:    hint #34
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp11
 ; COMPAT-NEXT:  .Ltmp11:
 ; COMPAT-NEXT:    hint #27
 ; COMPAT-NEXT:    adrp x16, .Ltmp11
@@ -518,7 +939,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; V83A-NEXT:    .cfi_b_key_frame
 ; V83A-NEXT:    hint #34
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp11
 ; V83A-NEXT:  .Ltmp11:
 ; V83A-NEXT:    pacibsp
 ; V83A-NEXT:    adrp x16, .Ltmp11
@@ -529,11 +950,47 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; PAUTHLR-LABEL: leaf_sign_all_b_key_bti:
 ; PAUTHLR:       // %bb.0:
 ; PAUTHLR-NEXT:    .cfi_b_key_frame
-; PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp11
 ; PAUTHLR-NEXT:    bti c
 ; PAUTHLR-NEXT:  .Ltmp11:
 ; PAUTHLR-NEXT:    pacibsppc
 ; PAUTHLR-NEXT:    retabsppc .Ltmp11
+;
+; NEGATE-COMPAT-LABEL: leaf_sign_all_b_key_bti:
+; NEGATE-COMPAT:       // %bb.0:
+; NEGATE-COMPAT-NEXT:    .cfi_b_key_frame
+; NEGATE-COMPAT-NEXT:    hint #34
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT:  .Ltmp11:
+; NEGATE-COMPAT-NEXT:    hint #27
+; NEGATE-COMPAT-NEXT:    adrp x16, .Ltmp11
+; NEGATE-COMPAT-NEXT:    add x16, x16, :lo12:.Ltmp11
+; NEGATE-COMPAT-NEXT:    hint #39
+; NEGATE-COMPAT-NEXT:    hint #31
+; NEGATE-COMPAT-NEXT:    ret
+;
+; NEGATE-V83A-LABEL: leaf_sign_all_b_key_bti:
+; NEGATE-V83A:       // %bb.0:
+; NEGATE-V83A-NEXT:    .cfi_b_key_frame
+; NEGATE-V83A-NEXT:    hint #34
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT:  .Ltmp11:
+; NEGATE-V83A-NEXT:    pacibsp
+; NEGATE-V83A-NEXT:    adrp x16, .Ltmp11
+; NEGATE-V83A-NEXT:    add x16, x16, :lo12:.Ltmp11
+; NEGATE-V83A-NEXT:    hint #39
+; NEGATE-V83A-NEXT:    retab
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all_b_key_bti:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    .cfi_b_key_frame
+; NEGATE-PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT:    bti c
+; NEGATE-PAUTHLR-NEXT:  .Ltmp11:
+; NEGATE-PAUTHLR-NEXT:    pacibsppc
+; NEGATE-PAUTHLR-NEXT:    retabsppc .Ltmp11
   ret i32 %x
 }
 
@@ -544,7 +1001,7 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
 ; CHECK-NEXT:    .cfi_b_key_frame
 ; CHECK-NEXT:    hint #34
 ; CHECK-NEXT:    hint #39
-; CHECK-NEXT:    .cfi_negate_ra_state_with_pc
+; CHECK-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp12
 ; CHECK-NEXT:  .Ltmp12:
 ; CHECK-NEXT:    pacibsp
 ; CHECK-NEXT:    adrp x16, .Ltmp12
@@ -555,10 +1012,32 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
 ; PAUTHLR-LABEL: leaf_sign_all_v83_b_key_bti:
 ; PAUTHLR:       // %bb.0:
 ; PAUTHLR-NEXT:    .cfi_b_key_frame
-; PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp12
 ; PAUTHLR-NEXT:    bti c
 ; PAUTHLR-NEXT:  .Ltmp12:
 ; PAUTHLR-NEXT:    pacibsppc
 ; PAUTHLR-NEXT:    retabsppc .Ltmp12
+;
+; NEGATE-CHECK-LABEL: leaf_sign_all_v83_b_key_bti:
+; NEGATE-CHECK:       // %bb.0:
+; NEGATE-CHECK-NEXT:    .cfi_b_key_frame
+; NEGATE-CHECK-NEXT:    hint #34
+; NEGATE-CHECK-NEXT:    hint #39
+; NEGATE-CHECK-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-CHECK-NEXT:  .Ltmp12:
+; NEGATE-CHECK-NEXT:    pacibsp
+; NEGATE-CHECK-NEXT:    adrp x16, .Ltmp12
+; NEGATE-CHECK-NEXT:    add x16, x16, :lo12:.Ltmp12
+; NEGATE-CHECK-NEXT:    hint #39
+; NEGATE-CHECK-NEXT:    retab
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all_v83_b_key_bti:
+; NEGATE-PAUTHLR:       // %bb.0:
+; NEGATE-PAUTHLR-NEXT:    .cfi_b_key_frame
+; NEGATE-PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT:    bti c
+; NEGATE-PAUTHLR-NEXT:  .Ltmp12:
+; NEGATE-PAUTHLR-NEXT:    pacibsppc
+; NEGATE-PAUTHLR-NEXT:    retabsppc .Ltmp12
   ret i32 %x
 }
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
index f74e369647730..07ae21464646e 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
@@ -10,7 +10,7 @@ define i32 @f() #0 {
 ; CHECK-NO-PAUTH-NEXT:    dsb sy
 ; CHECK-NO-PAUTH-NEXT:    isb
 ; CHECK-NO-PAUTH-NEXT:    hint #39
-; CHECK-NO-PAUTH-NEXT:    .cfi_negate_ra_state_with_pc
+; CHECK-NO-PAUTH-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp0
 ; CHECK-NO-PAUTH-NEXT:  .Ltmp0:
 ; CHECK-NO-PAUTH-NEXT:    hint #25
 ; CHECK-NO-PAUTH-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -32,7 +32,7 @@ define i32 @f() #0 {
 ; CHECK-PAUTH-NEXT:    dsb sy
 ; CHECK-PAUTH-NEXT:    isb
 ; CHECK-PAUTH-NEXT:    hint #39
-; CHECK-PAUTH-NEXT:    .cfi_negate_ra_state_with_pc
+; CHECK-PAUTH-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp0
 ; CHECK-PAUTH-NEXT:  .Ltmp0:
 ; CHECK-PAUTH-NEXT:    paciasp
 ; CHECK-PAUTH-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -52,7 +52,7 @@ define i32 @f() #0 {
 ; CHECK-PAUTHLR:       // %bb.0: // %entry
 ; CHECK-PAUTHLR-NEXT:    cmp sp, #0
 ; CHECK-PAUTHLR-NEXT:    csetm x16, ne
-; CHECK-PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; CHECK-PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp0
 ; CHECK-PAUTHLR-NEXT:  .Ltmp0:
 ; CHECK-PAUTHLR-NEXT:    paciasppc
 ; CHECK-PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -75,7 +75,7 @@ define i32 @f() #0 {
 ; CHECK-PAUTH-PAUTHLR:       // %bb.0: // %entry
 ; CHECK-PAUTH-PAUTHLR-NEXT:    cmp sp, #0
 ; CHECK-PAUTH-PAUTHLR-NEXT:    csetm x16, ne
-; CHECK-PAUTH-PAUTHLR-NEXT:    .cfi_negate_ra_state_with_pc
+; CHECK-PAUTH-PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp0
 ; CHECK-PAUTH-PAUTHLR-NEXT:  .Ltmp0:
 ; CHECK-PAUTH-PAUTHLR-NEXT:    paciasppc
 ; CHECK-PAUTH-PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address.ll b/llvm/test/CodeGen/AArch64/sign-return-address.ll
index 7267ce0e3afbf..a13e8284dc64e 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address.ll
@@ -4,6 +4,10 @@
 
 ; v9.5-A is not expected to change codegen without -mbranch-protection=+pc, so reuse DWARFCFI-V83A.
 ; RUN: llc -mtriple=aarch64 -mattr=v9.5a < %s | FileCheck --check-prefixes=CHECK,DWARFCFI,DWARFCFI-V83A %s
+; RUN: llc -mtriple=aarch64              -aarch64-cfi-llvm-set-ra-sign-state=never < %s | FileCheck --check-prefixes=CHECK,NEGATE-CFI,NEGATE-CFI-COMPAT %s
+; RUN: llc -mtriple=aarch64 -mattr=v8.3a -aarch64-cfi-llvm-set-ra-sign-state=never < %s | FileCheck --check-prefixes=CHECK,NEGATE-CFI,NEGATE-CFI-V83A %s
+; RUN: llc -mtriple=aarch64              -aarch64-cfi-llvm-set-ra-sign-state=always < %s | FileCheck --check-prefixes=CHECK,ALWAYS-CFI,ALWAYS-CFI-COMPAT %s
+; RUN: llc -mtriple=aarch64 -mattr=v8.3a -aarch64-cfi-llvm-set-ra-sign-state=always < %s | FileCheck --check-prefixes=CHECK,ALWAYS-CFI,ALWAYS-CFI-V83A %s
 
 ; RUN: llc -mtriple=aarch64-windows              < %s | FileCheck --check-prefixes=CHECK,WINCFI,WINCFI-COMPAT %s
 ; RUN: llc -mtriple=aarch64-windows -mattr=v8.3a < %s | FileCheck --check-prefixes=CHECK,WINCFI,WINCFI-V83A %s
@@ -37,18 +41,35 @@ define i32 @leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf"  {
 
 define i32 @leaf_sign_all(i32 %x) "sign-return-address"="all" {
 ; DWARFCFI-COMPAT-LABEL: leaf_sign_all:
+; ALWAYS-CFI-COMPAT-LABEL: leaf_sign_all:
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    hint #29
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
 ; DWARFCFI-V83A-LABEL: leaf_sign_all:
+; ALWAYS-CFI-V83A-LABEL: leaf_sign_all:
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    retaa
 ;
+; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all:
+; NEGATE-CFI-COMPAT:       // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT:    hint #25
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT:    hint #29
+; NEGATE-CFI-COMPAT-NEXT:    ret
+;
+; NEGATE-CFI-V83A-LABEL: leaf_sign_all:
+; NEGATE-CFI-V83A:       // %bb.0:
+; NEGATE-CFI-V83A-NEXT:    paciasp
+; NEGATE-CFI-V83A-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT:    retaa
+;
 ; WINCFI-COMPAT-LABEL: leaf_sign_all:
 ; WINCFI-COMPAT:       .seh_proc leaf_sign_all
 ; WINCFI-COMPAT-NEXT:  // %bb.0:
@@ -81,9 +102,11 @@ define i32 @leaf_sign_all(i32 %x) "sign-return-address"="all" {
 
 define i64 @leaf_clobbers_lr(i64 %x) "sign-return-address"="non-leaf"  {
 ; DWARFCFI-COMPAT-LABEL: leaf_clobbers_lr:
+; ALWAYS-CFI-COMPAT-LABEL: leaf_clobbers_lr:
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-COMPAT-NEXT:    .cfi_offset w30, -16
@@ -95,9 +118,11 @@ define i64 @leaf_clobbers_lr(i64 %x) "sign-return-address"="non-leaf"  {
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
 ; DWARFCFI-V83A-LABEL: leaf_clobbers_lr:
+; ALWAYS-CFI-V83A-LABEL: leaf_clobbers_lr:
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-V83A-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-V83A-NEXT:    .cfi_offset w30, -16
@@ -107,6 +132,33 @@ define i64 @leaf_clobbers_lr(i64 %x) "sign-return-address"="non-leaf"  {
 ; DWARFCFI-V83A-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
 ; DWARFCFI-V83A-NEXT:    retaa
 ;
+; NEGATE-CFI-COMPAT-LABEL: leaf_clobbers_lr:
+; NEGATE-CFI-COMPAT:       // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT:    hint #25
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_offset w30, -16
+; NEGATE-CFI-COMPAT-NEXT:    //APP
+; NEGATE-CFI-COMPAT-NEXT:    mov x30, x0
+; NEGATE-CFI-COMPAT-NEXT:    //NO_APP
+; NEGATE-CFI-COMPAT-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-COMPAT-NEXT:    hint #29
+; NEGATE-CFI-COMPAT-NEXT:    ret
+;
+; NEGATE-CFI-V83A-LABEL: leaf_clobbers_lr:
+; NEGATE-CFI-V83A:       // %bb.0:
+; NEGATE-CFI-V83A-NEXT:    paciasp
+; NEGATE-CFI-V83A-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-V83A-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-CFI-V83A-NEXT:    .cfi_offset w30, -16
+; NEGATE-CFI-V83A-NEXT:    //APP
+; NEGATE-CFI-V83A-NEXT:    mov x30, x0
+; NEGATE-CFI-V83A-NEXT:    //NO_APP
+; NEGATE-CFI-V83A-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-V83A-NEXT:    retaa
+;
 ; WINCFI-COMPAT-LABEL: leaf_clobbers_lr:
 ; WINCFI-COMPAT:       .seh_proc leaf_clobbers_lr
 ; WINCFI-COMPAT-NEXT:  // %bb.0:
@@ -156,9 +208,11 @@ declare i32 @foo(i32)
 
 define i32 @non_leaf_sign_all(i32 %x) "sign-return-address"="all" {
 ; DWARFCFI-COMPAT-LABEL: non_leaf_sign_all:
+; ALWAYS-CFI-COMPAT-LABEL: non_leaf_sign_all:
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-COMPAT-NEXT:    .cfi_offset w30, -16
@@ -168,9 +222,11 @@ define i32 @non_leaf_sign_all(i32 %x) "sign-return-address"="all" {
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
 ; DWARFCFI-V83A-LABEL: non_leaf_sign_all:
+; ALWAYS-CFI-V83A-LABEL: non_leaf_sign_all:
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-V83A-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-V83A-NEXT:    .cfi_offset w30, -16
@@ -178,6 +234,29 @@ define i32 @non_leaf_sign_all(i32 %x) "sign-return-address"="all" {
 ; DWARFCFI-V83A-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
 ; DWARFCFI-V83A-NEXT:    retaa
 ;
+; NEGATE-CFI-COMPAT-LABEL: non_leaf_sign_all:
+; NEGATE-CFI-COMPAT:       // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT:    hint #25
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_offset w30, -16
+; NEGATE-CFI-COMPAT-NEXT:    bl foo
+; NEGATE-CFI-COMPAT-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-COMPAT-NEXT:    hint #29
+; NEGATE-CFI-COMPAT-NEXT:    ret
+;
+; NEGATE-CFI-V83A-LABEL: non_leaf_sign_all:
+; NEGATE-CFI-V83A:       // %bb.0:
+; NEGATE-CFI-V83A-NEXT:    paciasp
+; NEGATE-CFI-V83A-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-V83A-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-CFI-V83A-NEXT:    .cfi_offset w30, -16
+; NEGATE-CFI-V83A-NEXT:    bl foo
+; NEGATE-CFI-V83A-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-V83A-NEXT:    retaa
+;
 ; WINCFI-COMPAT-LABEL: non_leaf_sign_all:
 ; WINCFI-COMPAT:       .seh_proc non_leaf_sign_all
 ; WINCFI-COMPAT-NEXT:  // %bb.0:
@@ -221,9 +300,11 @@ define i32 @non_leaf_sign_all(i32 %x) "sign-return-address"="all" {
 
 define i32 @non_leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf"  {
 ; DWARFCFI-COMPAT-LABEL: non_leaf_sign_non_leaf:
+; ALWAYS-CFI-COMPAT-LABEL: non_leaf_sign_non_leaf:
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-COMPAT-NEXT:    .cfi_offset w30, -16
@@ -233,9 +314,11 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf"  {
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
 ; DWARFCFI-V83A-LABEL: non_leaf_sign_non_leaf:
+; ALWAYS-CFI-V83A-LABEL: non_leaf_sign_non_leaf:
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-V83A-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-V83A-NEXT:    .cfi_offset w30, -16
@@ -243,6 +326,29 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf"  {
 ; DWARFCFI-V83A-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
 ; DWARFCFI-V83A-NEXT:    retaa
 ;
+; NEGATE-CFI-COMPAT-LABEL: non_leaf_sign_non_leaf:
+; NEGATE-CFI-COMPAT:       // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT:    hint #25
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_offset w30, -16
+; NEGATE-CFI-COMPAT-NEXT:    bl foo
+; NEGATE-CFI-COMPAT-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-COMPAT-NEXT:    hint #29
+; NEGATE-CFI-COMPAT-NEXT:    ret
+;
+; NEGATE-CFI-V83A-LABEL: non_leaf_sign_non_leaf:
+; NEGATE-CFI-V83A:       // %bb.0:
+; NEGATE-CFI-V83A-NEXT:    paciasp
+; NEGATE-CFI-V83A-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-V83A-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-CFI-V83A-NEXT:    .cfi_offset w30, -16
+; NEGATE-CFI-V83A-NEXT:    bl foo
+; NEGATE-CFI-V83A-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-V83A-NEXT:    retaa
+;
 ; WINCFI-COMPAT-LABEL: non_leaf_sign_non_leaf:
 ; WINCFI-COMPAT:       .seh_proc non_leaf_sign_non_leaf
 ; WINCFI-COMPAT-NEXT:  // %bb.0:
@@ -287,9 +393,11 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf"  {
 ; Should not use the RETAA instruction.
 define i32 @non_leaf_scs(i32 %x) "sign-return-address"="non-leaf" shadowcallstack "target-features"="+v8.3a,+reserve-x18"  {
 ; DWARFCFI-LABEL: non_leaf_scs:
+; ALWAYS-CFI-LABEL: non_leaf_scs:
 ; DWARFCFI:       // %bb.0:
 ; DWARFCFI-NEXT:    paciasp
 ; DWARFCFI-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-NEXT:    str x30, [x18], #8
 ; DWARFCFI-NEXT:    .cfi_escape 0x16, 0x12, 0x02, 0x82, 0x78 //
 ; DWARFCFI-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -301,6 +409,21 @@ define i32 @non_leaf_scs(i32 %x) "sign-return-address"="non-leaf" shadowcallstac
 ; DWARFCFI-NEXT:    autiasp
 ; DWARFCFI-NEXT:    ret
 ;
+; NEGATE-CFI-LABEL: non_leaf_scs:
+; NEGATE-CFI:       // %bb.0:
+; NEGATE-CFI-NEXT:    paciasp
+; NEGATE-CFI-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-NEXT:    str x30, [x18], #8
+; NEGATE-CFI-NEXT:    .cfi_escape 0x16, 0x12, 0x02, 0x82, 0x78 //
+; NEGATE-CFI-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-CFI-NEXT:    .cfi_offset w30, -16
+; NEGATE-CFI-NEXT:    bl foo
+; NEGATE-CFI-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-NEXT:    ldr x30, [x18, #-8]!
+; NEGATE-CFI-NEXT:    autiasp
+; NEGATE-CFI-NEXT:    ret
+;
 ; WINCFI-LABEL: non_leaf_scs:
 ; WINCFI:       .seh_proc non_leaf_scs
 ; WINCFI-NEXT:  // %bb.0:
@@ -332,11 +455,13 @@ define i32 @non_leaf_scs(i32 %x) "sign-return-address"="non-leaf" shadowcallstac
 ; By default, pac-ret hardening respects shrink-wrapping optimization.
 define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"="non-leaf" uwtable(async) {
 ; DWARFCFI-COMPAT-LABEL: shrink_wrap_sign_non_leaf:
+; ALWAYS-CFI-COMPAT-LABEL: shrink_wrap_sign_non_leaf:
 ; DWARFCFI-COMPAT:       // %bb.0: // %entry
 ; DWARFCFI-COMPAT-NEXT:    cbnz w1, .LBB8_2
 ; DWARFCFI-COMPAT-NEXT:  // %bb.1: // %if.then
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-COMPAT-NEXT:    .cfi_offset w30, -16
@@ -346,6 +471,7 @@ define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"=
 ; DWARFCFI-COMPAT-NEXT:    .cfi_restore w30
 ; DWARFCFI-COMPAT-NEXT:    hint #29
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 0, 0
 ; DWARFCFI-COMPAT-NEXT:  .LBB8_2: // %exit
 ; DWARFCFI-COMPAT-NEXT:    adrp x8, var
 ; DWARFCFI-COMPAT-NEXT:    mov w9, #42 // =0x2a
@@ -353,11 +479,13 @@ define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"=
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
 ; DWARFCFI-V83A-LABEL: shrink_wrap_sign_non_leaf:
+; ALWAYS-CFI-V83A-LABEL: shrink_wrap_sign_non_leaf:
 ; DWARFCFI-V83A:       // %bb.0: // %entry
 ; DWARFCFI-V83A-NEXT:    cbnz w1, .LBB8_2
 ; DWARFCFI-V83A-NEXT:  // %bb.1: // %if.then
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-V83A-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-V83A-NEXT:    .cfi_offset w30, -16
@@ -367,12 +495,55 @@ define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"=
 ; DWARFCFI-V83A-NEXT:    .cfi_restore w30
 ; DWARFCFI-V83A-NEXT:    autiasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 0, 0
 ; DWARFCFI-V83A-NEXT:  .LBB8_2: // %exit
 ; DWARFCFI-V83A-NEXT:    adrp x8, var
 ; DWARFCFI-V83A-NEXT:    mov w9, #42 // =0x2a
 ; DWARFCFI-V83A-NEXT:    str x9, [x8, :lo12:var]
 ; DWARFCFI-V83A-NEXT:    ret
 ;
+; NEGATE-CFI-COMPAT-LABEL: shrink_wrap_sign_non_leaf:
+; NEGATE-CFI-COMPAT:       // %bb.0: // %entry
+; NEGATE-CFI-COMPAT-NEXT:    cbnz w1, .LBB8_2
+; NEGATE-CFI-COMPAT-NEXT:  // %bb.1: // %if.then
+; NEGATE-CFI-COMPAT-NEXT:    hint #25
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_offset w30, -16
+; NEGATE-CFI-COMPAT-NEXT:    bl foo
+; NEGATE-CFI-COMPAT-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_def_cfa_offset 0
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_restore w30
+; NEGATE-CFI-COMPAT-NEXT:    hint #29
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT:  .LBB8_2: // %exit
+; NEGATE-CFI-COMPAT-NEXT:    adrp x8, var
+; NEGATE-CFI-COMPAT-NEXT:    mov w9, #42 // =0x2a
+; NEGATE-CFI-COMPAT-NEXT:    str x9, [x8, :lo12:var]
+; NEGATE-CFI-COMPAT-NEXT:    ret
+;
+; NEGATE-CFI-V83A-LABEL: shrink_wrap_sign_non_leaf:
+; NEGATE-CFI-V83A:       // %bb.0: // %entry
+; NEGATE-CFI-V83A-NEXT:    cbnz w1, .LBB8_2
+; NEGATE-CFI-V83A-NEXT:  // %bb.1: // %if.then
+; NEGATE-CFI-V83A-NEXT:    paciasp
+; NEGATE-CFI-V83A-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-V83A-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-CFI-V83A-NEXT:    .cfi_offset w30, -16
+; NEGATE-CFI-V83A-NEXT:    bl foo
+; NEGATE-CFI-V83A-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-V83A-NEXT:    .cfi_def_cfa_offset 0
+; NEGATE-CFI-V83A-NEXT:    .cfi_restore w30
+; NEGATE-CFI-V83A-NEXT:    autiasp
+; NEGATE-CFI-V83A-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT:  .LBB8_2: // %exit
+; NEGATE-CFI-V83A-NEXT:    adrp x8, var
+; NEGATE-CFI-V83A-NEXT:    mov w9, #42 // =0x2a
+; NEGATE-CFI-V83A-NEXT:    str x9, [x8, :lo12:var]
+; NEGATE-CFI-V83A-NEXT:    ret
+;
 ; WINCFI-COMPAT-LABEL: shrink_wrap_sign_non_leaf:
 ; WINCFI-COMPAT:       .seh_proc shrink_wrap_sign_non_leaf
 ; WINCFI-COMPAT-NEXT:  // %bb.0: // %entry
@@ -437,9 +608,11 @@ exit:
 ; function, ignoring shrink-wrapping.
 define void @shrink_wrap_sign_all(i32 %x, i32 %cond) "sign-return-address"="all" uwtable(async) {
 ; DWARFCFI-COMPAT-LABEL: shrink_wrap_sign_all:
+; ALWAYS-CFI-COMPAT-LABEL: shrink_wrap_sign_all:
 ; DWARFCFI-COMPAT:       // %bb.0: // %entry
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    cbnz w1, .LBB9_2
 ; DWARFCFI-COMPAT-NEXT:  // %bb.1: // %if.then
 ; DWARFCFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -455,12 +628,15 @@ define void @shrink_wrap_sign_all(i32 %x, i32 %cond) "sign-return-address"="all"
 ; DWARFCFI-COMPAT-NEXT:    str x9, [x8, :lo12:var]
 ; DWARFCFI-COMPAT-NEXT:    hint #29
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 0, 0
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
 ; DWARFCFI-V83A-LABEL: shrink_wrap_sign_all:
+; ALWAYS-CFI-V83A-LABEL: shrink_wrap_sign_all:
 ; DWARFCFI-V83A:       // %bb.0: // %entry
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    cbnz w1, .LBB9_2
 ; DWARFCFI-V83A-NEXT:  // %bb.1: // %if.then
 ; DWARFCFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -476,6 +652,46 @@ define void @shrink_wrap_sign_all(i32 %x, i32 %cond) "sign-return-address"="all"
 ; DWARFCFI-V83A-NEXT:    str x9, [x8, :lo12:var]
 ; DWARFCFI-V83A-NEXT:    retaa
 ;
+; NEGATE-CFI-COMPAT-LABEL: shrink_wrap_sign_all:
+; NEGATE-CFI-COMPAT:       // %bb.0: // %entry
+; NEGATE-CFI-COMPAT-NEXT:    hint #25
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT:    cbnz w1, .LBB9_2
+; NEGATE-CFI-COMPAT-NEXT:  // %bb.1: // %if.then
+; NEGATE-CFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_offset w30, -16
+; NEGATE-CFI-COMPAT-NEXT:    bl foo
+; NEGATE-CFI-COMPAT-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_def_cfa_offset 0
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_restore w30
+; NEGATE-CFI-COMPAT-NEXT:  .LBB9_2: // %exit
+; NEGATE-CFI-COMPAT-NEXT:    adrp x8, var
+; NEGATE-CFI-COMPAT-NEXT:    mov w9, #42 // =0x2a
+; NEGATE-CFI-COMPAT-NEXT:    str x9, [x8, :lo12:var]
+; NEGATE-CFI-COMPAT-NEXT:    hint #29
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT:    ret
+;
+; NEGATE-CFI-V83A-LABEL: shrink_wrap_sign_all:
+; NEGATE-CFI-V83A:       // %bb.0: // %entry
+; NEGATE-CFI-V83A-NEXT:    paciasp
+; NEGATE-CFI-V83A-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT:    cbnz w1, .LBB9_2
+; NEGATE-CFI-V83A-NEXT:  // %bb.1: // %if.then
+; NEGATE-CFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-V83A-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-CFI-V83A-NEXT:    .cfi_offset w30, -16
+; NEGATE-CFI-V83A-NEXT:    bl foo
+; NEGATE-CFI-V83A-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-V83A-NEXT:    .cfi_def_cfa_offset 0
+; NEGATE-CFI-V83A-NEXT:    .cfi_restore w30
+; NEGATE-CFI-V83A-NEXT:  .LBB9_2: // %exit
+; NEGATE-CFI-V83A-NEXT:    adrp x8, var
+; NEGATE-CFI-V83A-NEXT:    mov w9, #42 // =0x2a
+; NEGATE-CFI-V83A-NEXT:    str x9, [x8, :lo12:var]
+; NEGATE-CFI-V83A-NEXT:    retaa
+;
 ; WINCFI-COMPAT-LABEL: shrink_wrap_sign_all:
 ; WINCFI-COMPAT:       .seh_proc shrink_wrap_sign_all
 ; WINCFI-COMPAT-NEXT:  // %bb.0: // %entry
@@ -538,11 +754,19 @@ exit:
 
 define i32 @leaf_sign_all_v83(i32 %x) "sign-return-address"="all" "target-features"="+v8.3a" {
 ; DWARFCFI-LABEL: leaf_sign_all_v83:
+; ALWAYS-CFI-LABEL: leaf_sign_all_v83:
 ; DWARFCFI:       // %bb.0:
 ; DWARFCFI-NEXT:    paciasp
 ; DWARFCFI-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-NEXT:    retaa
 ;
+; NEGATE-CFI-LABEL: leaf_sign_all_v83:
+; NEGATE-CFI:       // %bb.0:
+; NEGATE-CFI-NEXT:    paciasp
+; NEGATE-CFI-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-NEXT:    retaa
+;
 ; WINCFI-LABEL: leaf_sign_all_v83:
 ; WINCFI:       .seh_proc leaf_sign_all_v83
 ; WINCFI-NEXT:  // %bb.0:
@@ -563,9 +787,11 @@ declare fastcc i64 @bar(i64)
 
 define fastcc void @spill_lr_and_tail_call(i64 %x) "sign-return-address"="all" {
 ; DWARFCFI-COMPAT-LABEL: spill_lr_and_tail_call:
+; ALWAYS-CFI-COMPAT-LABEL: spill_lr_and_tail_call:
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-COMPAT-NEXT:    .cfi_offset w30, -16
@@ -577,9 +803,11 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "sign-return-address"="all" {
 ; DWARFCFI-COMPAT-NEXT:    b bar
 ;
 ; DWARFCFI-V83A-LABEL: spill_lr_and_tail_call:
+; ALWAYS-CFI-V83A-LABEL: spill_lr_and_tail_call:
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-V83A-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-V83A-NEXT:    .cfi_offset w30, -16
@@ -590,6 +818,34 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "sign-return-address"="all" {
 ; DWARFCFI-V83A-NEXT:    autiasp
 ; DWARFCFI-V83A-NEXT:    b bar
 ;
+; NEGATE-CFI-COMPAT-LABEL: spill_lr_and_tail_call:
+; NEGATE-CFI-COMPAT:       // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT:    hint #25
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_offset w30, -16
+; NEGATE-CFI-COMPAT-NEXT:    //APP
+; NEGATE-CFI-COMPAT-NEXT:    mov x30, x0
+; NEGATE-CFI-COMPAT-NEXT:    //NO_APP
+; NEGATE-CFI-COMPAT-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-COMPAT-NEXT:    hint #29
+; NEGATE-CFI-COMPAT-NEXT:    b bar
+;
+; NEGATE-CFI-V83A-LABEL: spill_lr_and_tail_call:
+; NEGATE-CFI-V83A:       // %bb.0:
+; NEGATE-CFI-V83A-NEXT:    paciasp
+; NEGATE-CFI-V83A-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-V83A-NEXT:    .cfi_def_cfa_offset 16
+; NEGATE-CFI-V83A-NEXT:    .cfi_offset w30, -16
+; NEGATE-CFI-V83A-NEXT:    //APP
+; NEGATE-CFI-V83A-NEXT:    mov x30, x0
+; NEGATE-CFI-V83A-NEXT:    //NO_APP
+; NEGATE-CFI-V83A-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-V83A-NEXT:    autiasp
+; NEGATE-CFI-V83A-NEXT:    b bar
+;
 ; WINCFI-COMPAT-LABEL: spill_lr_and_tail_call:
 ; WINCFI-COMPAT:       .seh_proc spill_lr_and_tail_call
 ; WINCFI-COMPAT-NEXT:  // %bb.0:
@@ -638,18 +894,35 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "sign-return-address"="all" {
 
 define i32 @leaf_sign_all_a_key(i32 %x) "sign-return-address"="all" "sign-return-address-key"="a_key" {
 ; DWARFCFI-COMPAT-LABEL: leaf_sign_all_a_key:
+; ALWAYS-CFI-COMPAT-LABEL: leaf_sign_all_a_key:
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    hint #29
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
 ; DWARFCFI-V83A-LABEL: leaf_sign_all_a_key:
+; ALWAYS-CFI-V83A-LABEL: leaf_sign_all_a_key:
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    retaa
 ;
+; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_a_key:
+; NEGATE-CFI-COMPAT:       // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT:    hint #25
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT:    hint #29
+; NEGATE-CFI-COMPAT-NEXT:    ret
+;
+; NEGATE-CFI-V83A-LABEL: leaf_sign_all_a_key:
+; NEGATE-CFI-V83A:       // %bb.0:
+; NEGATE-CFI-V83A-NEXT:    paciasp
+; NEGATE-CFI-V83A-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT:    retaa
+;
 ; WINCFI-COMPAT-LABEL: leaf_sign_all_a_key:
 ; WINCFI-COMPAT:       .seh_proc leaf_sign_all_a_key
 ; WINCFI-COMPAT-NEXT:  // %bb.0:
@@ -682,20 +955,39 @@ define i32 @leaf_sign_all_a_key(i32 %x) "sign-return-address"="all" "sign-return
 
 define i32 @leaf_sign_all_b_key(i32 %x) "sign-return-address"="all" "sign-return-address-key"="b_key" {
 ; DWARFCFI-COMPAT-LABEL: leaf_sign_all_b_key:
+; ALWAYS-CFI-COMPAT-LABEL: leaf_sign_all_b_key:
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    .cfi_b_key_frame
 ; DWARFCFI-COMPAT-NEXT:    hint #27
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    hint #31
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
 ; DWARFCFI-V83A-LABEL: leaf_sign_all_b_key:
+; ALWAYS-CFI-V83A-LABEL: leaf_sign_all_b_key:
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    .cfi_b_key_frame
 ; DWARFCFI-V83A-NEXT:    pacibsp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    retab
 ;
+; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_b_key:
+; NEGATE-CFI-COMPAT:       // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_b_key_frame
+; NEGATE-CFI-COMPAT-NEXT:    hint #27
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT:    hint #31
+; NEGATE-CFI-COMPAT-NEXT:    ret
+;
+; NEGATE-CFI-V83A-LABEL: leaf_sign_all_b_key:
+; NEGATE-CFI-V83A:       // %bb.0:
+; NEGATE-CFI-V83A-NEXT:    .cfi_b_key_frame
+; NEGATE-CFI-V83A-NEXT:    pacibsp
+; NEGATE-CFI-V83A-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT:    retab
+;
 ; WINCFI-COMPAT-LABEL: leaf_sign_all_b_key:
 ; WINCFI-COMPAT:       .seh_proc leaf_sign_all_b_key
 ; WINCFI-COMPAT-NEXT:  // %bb.0:
@@ -728,12 +1020,21 @@ define i32 @leaf_sign_all_b_key(i32 %x) "sign-return-address"="all" "sign-return
 
 define i32 @leaf_sign_all_v83_b_key(i32 %x) "sign-return-address"="all" "target-features"="+v8.3a" "sign-return-address-key"="b_key" {
 ; DWARFCFI-LABEL: leaf_sign_all_v83_b_key:
+; ALWAYS-CFI-LABEL: leaf_sign_all_v83_b_key:
 ; DWARFCFI:       // %bb.0:
 ; DWARFCFI-NEXT:    .cfi_b_key_frame
 ; DWARFCFI-NEXT:    pacibsp
 ; DWARFCFI-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-NEXT:    retab
 ;
+; NEGATE-CFI-LABEL: leaf_sign_all_v83_b_key:
+; NEGATE-CFI:       // %bb.0:
+; NEGATE-CFI-NEXT:    .cfi_b_key_frame
+; NEGATE-CFI-NEXT:    pacibsp
+; NEGATE-CFI-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-NEXT:    retab
+;
 ; WINCFI-LABEL: leaf_sign_all_v83_b_key:
 ; WINCFI:       .seh_proc leaf_sign_all_v83_b_key
 ; WINCFI-NEXT:  // %bb.0:
@@ -753,18 +1054,35 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "sign-return-address"="all" "target-
 ; Note that BTI instruction is not needed before PACIASP.
 define i32 @leaf_sign_all_a_key_bti(i32 %x) "sign-return-address"="all" "sign-return-address-key"="a_key" "branch-target-enforcement"{
 ; DWARFCFI-COMPAT-LABEL: leaf_sign_all_a_key_bti:
+; ALWAYS-CFI-COMPAT-LABEL: leaf_sign_all_a_key_bti:
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    hint #29
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
 ; DWARFCFI-V83A-LABEL: leaf_sign_all_a_key_bti:
+; ALWAYS-CFI-V83A-LABEL: leaf_sign_all_a_key_bti:
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    retaa
 ;
+; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_a_key_bti:
+; NEGATE-CFI-COMPAT:       // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT:    hint #25
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT:    hint #29
+; NEGATE-CFI-COMPAT-NEXT:    ret
+;
+; NEGATE-CFI-V83A-LABEL: leaf_sign_all_a_key_bti:
+; NEGATE-CFI-V83A:       // %bb.0:
+; NEGATE-CFI-V83A-NEXT:    paciasp
+; NEGATE-CFI-V83A-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT:    retaa
+;
 ; WINCFI-COMPAT-LABEL: leaf_sign_all_a_key_bti:
 ; WINCFI-COMPAT:       .seh_proc leaf_sign_all_a_key_bti
 ; WINCFI-COMPAT-NEXT:  // %bb.0:
@@ -798,20 +1116,39 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "sign-return-address"="all" "sign-re
 ; Note that BTI instruction is not needed before PACIBSP.
 define i32 @leaf_sign_all_b_key_bti(i32 %x) "sign-return-address"="all" "sign-return-address-key"="b_key" "branch-target-enforcement"{
 ; DWARFCFI-COMPAT-LABEL: leaf_sign_all_b_key_bti:
+; ALWAYS-CFI-COMPAT-LABEL: leaf_sign_all_b_key_bti:
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    .cfi_b_key_frame
 ; DWARFCFI-COMPAT-NEXT:    hint #27
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    hint #31
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
 ; DWARFCFI-V83A-LABEL: leaf_sign_all_b_key_bti:
+; ALWAYS-CFI-V83A-LABEL: leaf_sign_all_b_key_bti:
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    .cfi_b_key_frame
 ; DWARFCFI-V83A-NEXT:    pacibsp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    retab
 ;
+; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_b_key_bti:
+; NEGATE-CFI-COMPAT:       // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_b_key_frame
+; NEGATE-CFI-COMPAT-NEXT:    hint #27
+; NEGATE-CFI-COMPAT-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT:    hint #31
+; NEGATE-CFI-COMPAT-NEXT:    ret
+;
+; NEGATE-CFI-V83A-LABEL: leaf_sign_all_b_key_bti:
+; NEGATE-CFI-V83A:       // %bb.0:
+; NEGATE-CFI-V83A-NEXT:    .cfi_b_key_frame
+; NEGATE-CFI-V83A-NEXT:    pacibsp
+; NEGATE-CFI-V83A-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT:    retab
+;
 ; WINCFI-COMPAT-LABEL: leaf_sign_all_b_key_bti:
 ; WINCFI-COMPAT:       .seh_proc leaf_sign_all_b_key_bti
 ; WINCFI-COMPAT-NEXT:  // %bb.0:
@@ -845,12 +1182,21 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "sign-return-address"="all" "sign-re
 ; Note that BTI instruction is not needed before PACIBSP.
 define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "sign-return-address"="all" "target-features"="+v8.3a" "sign-return-address-key"="b_key" "branch-target-enforcement" {
 ; DWARFCFI-LABEL: leaf_sign_all_v83_b_key_bti:
+; ALWAYS-CFI-LABEL: leaf_sign_all_v83_b_key_bti:
 ; DWARFCFI:       // %bb.0:
 ; DWARFCFI-NEXT:    .cfi_b_key_frame
 ; DWARFCFI-NEXT:    pacibsp
 ; DWARFCFI-NEXT:    .cfi_negate_ra_state
+; ALWAYS-CFI:    .cfi_llvm_set_ra_state 1, 0
 ; DWARFCFI-NEXT:    retab
 ;
+; NEGATE-CFI-LABEL: leaf_sign_all_v83_b_key_bti:
+; NEGATE-CFI:       // %bb.0:
+; NEGATE-CFI-NEXT:    .cfi_b_key_frame
+; NEGATE-CFI-NEXT:    pacibsp
+; NEGATE-CFI-NEXT:    .cfi_negate_ra_state
+; NEGATE-CFI-NEXT:    retab
+;
 ; WINCFI-LABEL: leaf_sign_all_v83_b_key_bti:
 ; WINCFI:       .seh_proc leaf_sign_all_v83_b_key_bti
 ; WINCFI-NEXT:  // %bb.0:
diff --git a/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll b/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
index 5d31d7a99ef7b..6c099bae66c81 100644
--- a/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
+++ b/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
@@ -20,16 +20,16 @@ define swifttailcc void @caller_to0_from0() "branch-protection-pauth-lr" "sign-r
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp0
 ; COMPAT-NEXT: .Ltmp0:
 ; COMPAT-NEXT:   hint #25
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp0
 ; V83A-NEXT:   .Ltmp0:
 ; V83A-NEXT:     paciasp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp0
 ; V9A-NEXT:    .Ltmp0:
 ; V9A-NEXT:      paciasppc
 
@@ -51,16 +51,16 @@ define swifttailcc void @caller_to0_from0() "branch-protection-pauth-lr" "sign-r
 ; COMPAT-NEXT:   adrp x16, .Ltmp0
 ; COMPAT-NEXT:   add x16, x16, :lo12:.Ltmp0
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #29
 
 ; V83A-NEXT:     adrp x16, .Ltmp0
 ; V83A-NEXT:     add x16, x16, :lo12:.Ltmp0
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
 ; V83A-NEXT:     autiasp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
 ; V9A-NEXT:      autiasppc .Ltmp0
 
 ; PAUTH-NEXT:    autiasp
@@ -83,16 +83,16 @@ define swifttailcc void @caller_to0_from8([8 x i64], i64) "branch-protection-pau
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp1
 ; COMPAT-NEXT: .Ltmp1:
 ; COMPAT-NEXT:   hint #25
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp1
 ; V83A-NEXT:   .Ltmp1:
 ; V83A-NEXT:     paciasp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp1
 ; V9A-NEXT:    .Ltmp1:
 ; V9A-NEXT:      paciasppc
 
@@ -115,16 +115,16 @@ define swifttailcc void @caller_to0_from8([8 x i64], i64) "branch-protection-pau
 ; COMPAT-NEXT:   adrp x16, .Ltmp1
 ; COMPAT-NEXT:   add x16, x16, :lo12:.Ltmp1
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #29
 
 ; V83A-NEXT:     adrp x16, .Ltmp1
 ; V83A-NEXT:     add x16, x16, :lo12:.Ltmp1
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
 ; V83A-NEXT:     autiasp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
 ; V9A-NEXT:      autiasppc .Ltmp1
 
 ; PAUTH-NEXT:    autiasp
@@ -143,16 +143,16 @@ define swifttailcc void @caller_to8_from0() "branch-protection-pauth-lr" "sign-r
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp2
 ; COMPAT-NEXT: .Ltmp2:
 ; COMPAT-NEXT:   hint #25
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp2
 ; V83A-NEXT:   .Ltmp2:
 ; V83A-NEXT:     paciasp
 
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp2
 ; V9A-NEXT:    .Ltmp2:
 ; V9A-NEXT:      paciasppc
 
@@ -178,18 +178,18 @@ define swifttailcc void @caller_to8_from0() "branch-protection-pauth-lr" "sign-r
 ; COMPAT-NEXT:   adrp x15, .Ltmp2
 ; COMPAT-NEXT:   add x15, x15, :lo12:.Ltmp2
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #12
 
 ; V83A-NEXT:     adrp x15, .Ltmp2
 ; V83A-NEXT:     add x15, x15, :lo12:.Ltmp2
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_negate_ra_state_with_pc
+; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
 ; V83A-NEXT:     autia1716
 
 ; V9A-NEXT:      adrp x15, .Ltmp2
 ; V9A-NEXT:      add x15, x15, :lo12:.Ltmp2
-; V9A-NEXT:      .cfi_negate_ra_state_with_pc
+; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
 ; V9A-NEXT:      autia171615
 
 ; PAUTH-NEXT:    autia1716
diff --git a/llvm/test/CodeGen/MIR/AArch64/cfi.mir b/llvm/test/CodeGen/MIR/AArch64/cfi.mir
index efa053699b491..7e08c4040b9bf 100644
--- a/llvm/test/CodeGen/MIR/AArch64/cfi.mir
+++ b/llvm/test/CodeGen/MIR/AArch64/cfi.mir
@@ -49,4 +49,8 @@ body: |
     ; CHECK: CFI_INSTRUCTION window_save
     CFI_INSTRUCTION negate_ra_sign_state
     ; CHECK: CFI_INSTRUCTION negate_ra_sign_state
+    CFI_INSTRUCTION negate_ra_sign_state_with_pc
+    ; CHECK: CFI_INSTRUCTION negate_ra_sign_state_with_pc
+    CFI_INSTRUCTION llvm_set_ra_state 2, 0
+    ; CHECK: CFI_INSTRUCTION llvm_set_ra_state 2, 0
     RET_ReallyLR
diff --git a/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir b/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir
index 302f70fc15192..78e87c2074406 100644
--- a/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir
+++ b/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir
@@ -59,7 +59,7 @@ tracksRegLiveness: true
 frameInfo:
   maxCallFrameSize: 0
 #CHECK:    frame-setup PACM
-#CHECK:    frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+#CHECK:    frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
 #CHECK:    frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
 #CHECK:    frame-destroy PACM
 #CHECK:    frame-destroy AUTIASP implicit-def $lr, implicit $lr, implicit $sp
diff --git a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state-shrinkwrap.s b/llvm/test/MC/AArch64/cfi_llvm_set_ra_state-shrinkwrap.s
new file mode 100644
index 0000000000000..d75c6a164a06d
--- /dev/null
+++ b/llvm/test/MC/AArch64/cfi_llvm_set_ra_state-shrinkwrap.s
@@ -0,0 +1,142 @@
+# RUN: llvm-mc -triple arm64e-apple-darwin -mattr=+pauth-lr %s -filetype=obj -o %t.o
+# RUN: llvm-objdump --macho --unwind-info --dwarf=frames %t.o | FileCheck %s
+
+# Vanilla ptrauth-returns=pauth frame.
+  .globl _pauth
+_pauth:
+  .cfi_startproc
+  .cfi_llvm_set_ra_state 1, 0
+  pacibsp
+
+  .cfi_llvm_set_ra_state 0, -4
+  retab
+  .cfi_endproc
+
+
+# Vanilla ptrauth-returns=pauth-lr frame, with .cfi_llvm_set_ra_state instead of
+# the deprecated .cfi_negate_ra_state_with_pc
+  .globl _pauthlr
+_pauthlr:
+  .cfi_startproc
+  .cfi_llvm_set_ra_state 2, 0
+  pacibsppc
+
+  .cfi_llvm_set_ra_state 0, -4
+  retabsppc _pauthlr
+  .cfi_endproc
+
+
+# Shrink-wrapped frame, with a strange block ordering that puts the aut before
+# the pac, which is not representable via .cfi_negate_ra_state_with_pc
+# See: https://github.com/ARM-software/abi-aa/issues/327
+  .globl _pauthlr_shrinkwrap
+_pauthlr_shrinkwrap:
+  .cfi_startproc
+  cmp w0, #42
+  b.lt LBB0
+  ret
+
+LBB1:
+  ldp x29, x30, [sp], #16
+  .cfi_def_cfa_offset 0
+  .cfi_restore x29
+  .cfi_restore x30
+
+  adrp x16, LBB0 at PAGE
+  add x16, x16, LBB0 at PAGEOFF
+  .cfi_llvm_set_ra_state 0, 16
+  autibsppcr x16
+
+  mov w0, #42
+  ret
+
+LBB0:
+  .cfi_llvm_set_ra_state 2, 0
+  pacibsppc
+
+  stp x29, x30, [sp, #-16]!
+  .cfi_def_cfa_offset 16
+  .cfi_offset x29, -16
+  .cfi_offset x30, -8
+
+  b LBB1
+  .cfi_endproc
+
+
+# CHECK-LABEL:  Contents of __compact_unwind section:
+# CHECK-NEXT:     Entry at offset 0x0:
+# CHECK-NEXT:       start:                0x0 ltmp0
+# CHECK-NEXT:       length:               0x8
+# CHECK-NEXT:       compact encoding:     0x03000000
+# CHECK-NEXT:     Entry at offset 0x20:
+# CHECK-NEXT:       start:                0x8 _pauthlr
+# CHECK-NEXT:       length:               0x8
+# CHECK-NEXT:       compact encoding:     0x03000000
+# CHECK-NEXT:     Entry at offset 0x40:
+# CHECK-NEXT:       start:                0x10 _pauthlr_shrinkwrap
+# CHECK-NEXT:       length:               0x30
+# CHECK-NEXT:       compact encoding:     0x03000000
+# CHECK-EMPTY:
+# CHECK-LABEL:  .debug_frame contents:
+# CHECK-EMPTY:
+# CHECK-EMPTY:
+# CHECK-LABEL:  .eh_frame contents:
+# CHECK-EMPTY:
+# CHECK-NEXT:   00000000 00000010 00000000 CIE
+# CHECK-NEXT:     Format:                DWARF32
+# CHECK-NEXT:     Version:               1
+# CHECK-NEXT:     Augmentation:          "zR"
+# CHECK-NEXT:     Code alignment factor: 1
+# CHECK-NEXT:     Data alignment factor: -8
+# CHECK-NEXT:     Return address column: 30
+# CHECK-NEXT:     Augmentation data:     10
+# CHECK-EMPTY:
+# CHECK-NEXT:     DW_CFA_def_cfa: reg31 +0
+# CHECK-EMPTY:
+# CHECK-NEXT:     CFA=reg31
+# CHECK-EMPTY:
+# CHECK-NEXT:   00000014 00000020 00000018 FDE cie=00000000 pc=000000a0...000000a8
+# CHECK-NEXT:     Format:       DWARF32
+# CHECK-NEXT:     DW_CFA_AARCH64_set_ra_state: 1 0
+# CHECK-NEXT:     DW_CFA_advance_loc: 4 to 0xa4
+# CHECK-NEXT:     DW_CFA_AARCH64_set_ra_state: 0 -4
+# CHECK-NEXT:     DW_CFA_nop:
+# CHECK-NEXT:     DW_CFA_nop:
+# CHECK-NEXT:     DW_CFA_nop:
+# CHECK-NEXT:     DW_CFA_nop:
+# CHECK-EMPTY:
+# CHECK-NEXT:     0xa0: CFA=reg31: reg34=1
+# CHECK-NEXT:     0xa4: CFA=reg31: reg34=0
+# CHECK-EMPTY:
+# CHECK-NEXT:   00000038 0000001c 0000003c FDE cie=00000000 pc=000000a0...000000a8
+# CHECK-NEXT:     Format:       DWARF32
+# CHECK-NEXT:     DW_CFA_AARCH64_set_ra_state: 2 0
+# CHECK-NEXT:     DW_CFA_advance_loc: 4 to 0xa4
+# CHECK-NEXT:     DW_CFA_AARCH64_set_ra_state: 0 -4
+# CHECK-EMPTY:
+# CHECK-NEXT:     0xa0: CFA=reg31: reg34=2
+# CHECK-NEXT:     0xa4: CFA=reg31: reg34=0
+# CHECK-EMPTY:
+# CHECK-NEXT:   00000058 0000002c 0000005c FDE cie=00000000 pc=000000a0...000000d0
+# CHECK-NEXT:     Format:       DWARF32
+# CHECK-NEXT:     DW_CFA_advance_loc: 16 to 0xb0
+# CHECK-NEXT:     DW_CFA_def_cfa_offset: +0
+# CHECK-NEXT:     DW_CFA_restore: reg29
+# CHECK-NEXT:     DW_CFA_restore: reg30
+# CHECK-NEXT:     DW_CFA_advance_loc: 8 to 0xb8
+# CHECK-NEXT:     DW_CFA_AARCH64_set_ra_state: 0 16
+# CHECK-NEXT:     DW_CFA_advance_loc: 12 to 0xc4
+# CHECK-NEXT:     DW_CFA_AARCH64_set_ra_state: 2 0
+# CHECK-NEXT:     DW_CFA_advance_loc: 8 to 0xcc
+# CHECK-NEXT:     DW_CFA_def_cfa_offset: +16
+# CHECK-NEXT:     DW_CFA_offset: reg29 -16
+# CHECK-NEXT:     DW_CFA_offset: reg30 -8
+# CHECK-NEXT:     DW_CFA_nop:
+# CHECK-NEXT:     DW_CFA_nop:
+# CHECK-NEXT:     DW_CFA_nop:
+# CHECK-EMPTY:
+# CHECK-NEXT:     0xa0: CFA=reg31
+# CHECK-NEXT:     0xb0: CFA=reg31
+# CHECK-NEXT:     0xb8: CFA=reg31: reg34=0
+# CHECK-NEXT:     0xc4: CFA=reg31: reg34=2
+# CHECK-NEXT:     0xcc: CFA=reg31+16: reg29=[CFA-16], reg30=[CFA-8], reg34=2
diff --git a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s b/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s
new file mode 100644
index 0000000000000..cba21103377e5
--- /dev/null
+++ b/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s
@@ -0,0 +1,31 @@
+# RUN: llvm-mc -triple aarch64-pc-linux-gnu %s -filetype=asm -o - | FileCheck %s --check-prefix=ASM
+
+# RUN: llvm-mc -triple aarch64-pc-linux-gnu %s -filetype=obj -o %t.o
+# RUN: llvm-dwarfdump --eh-frame %t.o | FileCheck %s --check-prefix=DWARF
+# RUN: llvm-readobj --hex-dump=.eh_frame %t.o | FileCheck %s --check-prefix=HEX
+
+  .cfi_startproc
+  .cfi_llvm_set_ra_state 1, 0
+  .cfi_llvm_set_ra_state 2, 0
+  .cfi_llvm_set_ra_state 0, -4
+  .cfi_endproc
+
+# ASM:      .cfi_startproc
+# ASM-NEXT: .cfi_llvm_set_ra_state 1, 0
+# ASM-NEXT: .cfi_llvm_set_ra_state 2, 0
+# ASM-NEXT: .cfi_llvm_set_ra_state 0, -4
+# ASM-NEXT: .cfi_endproc
+
+# DWARF:      DW_CFA_AARCH64_set_ra_state: 1 0
+# DWARF-NEXT: DW_CFA_AARCH64_set_ra_state: 2 0
+# DWARF-NEXT: DW_CFA_AARCH64_set_ra_state: 0 -4
+
+# Verify the raw encoding:
+#
+#   opcode 0x2b, then ULEB128(state), then SLEB128(offset).
+#
+#   state=1, offset= 0  => 2b 01 00
+#   state=2, offset= 0  => 2b 02 00
+#   state=0, offset=-4  => 2b 00 7c
+#
+# HEX: 002b0100 2b02002b 007c
diff --git a/llvm/test/MC/AArch64/directives-case_insensitive.s b/llvm/test/MC/AArch64/directives-case_insensitive.s
index c2bdec73e349e..a9d67a99e65c0 100644
--- a/llvm/test/MC/AArch64/directives-case_insensitive.s
+++ b/llvm/test/MC/AArch64/directives-case_insensitive.s
@@ -33,11 +33,13 @@ fred .REQ x5
 .CFI_STARTPROC
 .CFI_NEGATE_RA_STATE
 .CFI_NEGATE_RA_STATE_WITH_PC
+.CFI_LLVM_SET_RA_STATE 2, 0
 .CFI_B_KEY_FRAME
 .CFI_ENDPROC
 // CHECK: .cfi_startproc
 // CHECK: .cfi_negate_ra_state
 // CHECK: .cfi_negate_ra_state_with_pc
+// CHECK: .cfi_llvm_set_ra_state 2, 0
 // CHECK: .cfi_b_key_frame
 // CHECK: .cfi_endproc
 
diff --git a/llvm/unittests/DebugInfo/DWARF/DWARFDebugFrameTest.cpp b/llvm/unittests/DebugInfo/DWARF/DWARFDebugFrameTest.cpp
index 5b7e90092744c..f225f30de61c8 100644
--- a/llvm/unittests/DebugInfo/DWARF/DWARFDebugFrameTest.cpp
+++ b/llvm/unittests/DebugInfo/DWARF/DWARFDebugFrameTest.cpp
@@ -176,6 +176,7 @@ TEST(DWARFDebugFrame, InvalidCFIOpcodesTest) {
       dwarf::DW_CFA_GNU_window_save,
       dwarf::DW_CFA_AARCH64_negate_ra_state,
       dwarf::DW_CFA_AARCH64_negate_ra_state_with_pc,
+      dwarf::DW_CFA_AARCH64_set_ra_state,
       dwarf::DW_CFA_GNU_args_size};
 
   dwarf::CIE TestCIE = createCIE(/*IsDWARF64=*/false,

>From f2df12068d8e9c4c56f17b1faf31dbadfa4118a4 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 23 Jun 2026 15:27:17 -0700
Subject: [PATCH 04/45] clang-format

---
 libunwind/src/DwarfParser.hpp                  | 3 +--
 libunwind/test/ra_sign_state.pass.cpp          | 3 +--
 llvm/lib/MC/MCAsmStreamer.cpp                  | 3 ++-
 llvm/lib/Target/AArch64/AArch64PointerAuth.cpp | 4 ++--
 4 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/libunwind/src/DwarfParser.hpp b/libunwind/src/DwarfParser.hpp
index 4d3a44567d7a6..72c0504bb472f 100644
--- a/libunwind/src/DwarfParser.hpp
+++ b/libunwind/src/DwarfParser.hpp
@@ -874,8 +874,7 @@ bool CFI_Parser<A>::parseFDEInstructions(
         results->ptrAuthDiversifier = fdeInfo.pcStart + codeOffset + offset;
         _LIBUNWIND_TRACE_DWARF(
             "DW_CFA_AARCH64_set_ra_state(state=%" PRId64 ",pc=0x%" PRIx64 ")\n",
-            value,
-            static_cast<uint64_t>(results->ptrAuthDiversifier));
+            value, static_cast<uint64_t>(results->ptrAuthDiversifier));
       } break;
 #endif
 
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index b5d7866ec8c94..9fc3c30e674fb 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -102,8 +102,7 @@ __attribute__((naked, target("pauth"))) uint64_t check_negate() {
 }
 
 #if defined(HAVE_CFI_LLVM_SET_RA_STATE)
-__attribute__((naked))
-uint64_t check_set() {
+__attribute__((naked)) uint64_t check_set() {
   asm(".cfi_llvm_set_ra_state 1, 0\n"
       "pacibsp\n"
 
diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp
index 36296a61c3d26..052ae1310c4ad 100644
--- a/llvm/lib/MC/MCAsmStreamer.cpp
+++ b/llvm/lib/MC/MCAsmStreamer.cpp
@@ -398,7 +398,8 @@ class MCAsmStreamer final : public MCAsmBaseStreamer {
   void emitCFINegateRAStateWithPC(SMLoc Loc) override;
   void emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
                              SMLoc Loc) override;
-  void emitCFILLVMSetRAState(unsigned State, int64_t Offset, SMLoc Loc) override;
+  void emitCFILLVMSetRAState(unsigned State, int64_t Offset,
+                             SMLoc Loc) override;
   void emitCFIReturnColumn(int64_t Register) override;
   void emitCFILLVMRegisterPair(int64_t Register, int64_t R1, int64_t R1Size,
                                int64_t R2, int64_t R2Size, SMLoc Loc) override;
diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index 98d13226af30d..242189b92d36b 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -28,8 +28,8 @@ namespace {
 /// Control the emission of .cfi_llvm_set_ra_state, which replaces the
 /// deprecated .cfi_negate_ra_state_with_pc [1].
 ///
-/// The latter is fundamentally unable to express some program orders [2], as the
-/// dwarf 'program' reads functions in a linear scan of their addresses to
+/// The latter is fundamentally unable to express some program orders [2], as
+/// the dwarf 'program' reads functions in a linear scan of their addresses to
 /// reconstruct the state of the frame, whereas control flow may enter and exit
 /// such regions arbitrarily (such as in hot-cold-split, and shrinkwrapped
 /// fucntions), and thus the negate-based cfi is unable to encode the address of

>From d4b0c8cc2b851fed0bc91a8a37b3dc27c466d637 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 23 Jun 2026 16:16:25 -0700
Subject: [PATCH 05/45] bolt (non-)support

---
 bolt/lib/Core/BinaryFunction.cpp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/bolt/lib/Core/BinaryFunction.cpp b/bolt/lib/Core/BinaryFunction.cpp
index 0e538fa48907a..b6ffd73de78ac 100644
--- a/bolt/lib/Core/BinaryFunction.cpp
+++ b/bolt/lib/Core/BinaryFunction.cpp
@@ -2834,6 +2834,7 @@ struct CFISnapshot {
     case MCCFIInstruction::OpLabel:
     case MCCFIInstruction::OpValOffset:
     case MCCFIInstruction::OpNegateRAState:
+    case MCCFIInstruction::OpLLVMSetRAState:
       reportFatalUsageError("unsupported CFI opcode");
     case MCCFIInstruction::OpLLVMRegisterPair:
     case MCCFIInstruction::OpLLVMVectorRegisters:
@@ -2979,6 +2980,7 @@ struct CFISnapshotDiff : public CFISnapshot {
     case MCCFIInstruction::OpLabel:
     case MCCFIInstruction::OpValOffset:
     case MCCFIInstruction::OpNegateRAState:
+    case MCCFIInstruction::OpLLVMSetRAState:
       reportFatalUsageError("unsupported CFI opcode");
     case MCCFIInstruction::OpLLVMRegisterPair:
     case MCCFIInstruction::OpLLVMVectorRegisters:
@@ -3134,6 +3136,7 @@ BinaryFunction::unwindCFIState(int32_t FromState, int32_t ToState,
     case MCCFIInstruction::OpLabel:
     case MCCFIInstruction::OpValOffset:
     case MCCFIInstruction::OpNegateRAState:
+    case MCCFIInstruction::OpLLVMSetRAState:
       reportFatalUsageError("unsupported CFI opcode");
     case MCCFIInstruction::OpLLVMRegisterPair:
     case MCCFIInstruction::OpLLVMVectorRegisters:

>From 408cdbc859be5961f1d1a66683d9d513ea554a1f Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 10:02:34 -0700
Subject: [PATCH 06/45] xfail on stdlib=apple-libc++ &&
 target=.*-apple-.*{{<=27.0}}

---
 libunwind/test/ra_sign_state.pass.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 2b31ef4000386..7e256316e5a17 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -10,6 +10,10 @@
 // REQUIRES: target={{aarch64.*}}
 // UNSUPPORTED: target={{.*-windows.*}}
 
+// The libSystem unwinder does not correctly read UNW_AARCH64_RA_SIGN_STATE, at
+// least through OS version 27.0
+// XFAIL: stdlib=apple-libc++ && target={{.*}}-apple-{{.*}}{{11|12|13|14|15|26|27.0}}
+
 #undef NDEBUG
 #include "support/func_bounds.h"
 #include <assert.h>

>From bf97dc7d7d95e55e3fa4f7efabf235ff8bfc024a Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 10:11:22 -0700
Subject: [PATCH 07/45] HWCAP_PACA checks for getauxval/elf_aux_info platforms

---
 libunwind/test/ra_sign_state.pass.cpp | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 7e256316e5a17..cbeb5c13694de 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -28,6 +28,9 @@
 #if defined(__APPLE__)
 #include <sys/sysctl.h>
 #endif
+#if defined(_LIBUNWIND_HAVE_GETAUXVAL) || defined(_LIBUNWIND_HAVE_ELF_AUX_INFO)
+#include <sys/auxv.h>
+#endif
 
 // Note: This test requires FEAT_PAuth (and is setup to pass on other targets).
 
@@ -39,6 +42,19 @@ static bool checkHasPAuth() {
     return false;
   return has_pauth != 0;
 }
+#elif defined(_LIBUNWIND_HAVE_GETAUXVAL)
+static bool checkHasPAuth() {
+  constexpr unsigned long hwcap_paca = (1UL << 30);
+  unsigned long hwcap = getauxval(AT_HWCAP);
+  return (hwcap & hwcap_paca) != 0;
+}
+#elif defined(_LIBUNWIND_HAVE_ELF_AUX_INFO)
+static bool checkHasPAuth() {
+  constexpr unsigned long hwcap_paca = (1UL << 30);
+  unsigned long hwcap = 0;
+  elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap));
+  return (hwcap & hwcap_paca) != 0;
+}
 #else
 static bool checkHasPAuth() {
   // TODO: Support other platforms.

>From a2bff648464dcbf4802d1436c7c9047717fe6b1f Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 10:14:47 -0700
Subject: [PATCH 08/45] tell clang-format to go away

---
 libunwind/test/ra_sign_state.pass.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index cbeb5c13694de..88b8425073fea 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -7,6 +7,8 @@
 //
 //===----------------------------------------------------------------------===//
 
+// clang-format-off
+
 // REQUIRES: target={{aarch64.*}}
 // UNSUPPORTED: target={{.*-windows.*}}
 
@@ -14,6 +16,8 @@
 // least through OS version 27.0
 // XFAIL: stdlib=apple-libc++ && target={{.*}}-apple-{{.*}}{{11|12|13|14|15|26|27.0}}
 
+// clang-format-on
+
 #undef NDEBUG
 #include "support/func_bounds.h"
 #include <assert.h>

>From 1531e7d37c62706be171452353dbc0e1ccd02797 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 10:23:08 -0700
Subject: [PATCH 09/45] really tell clang-format off

---
 libunwind/test/ra_sign_state.pass.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index eb392f2ef46d5..6a9b8cbe62d41 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 
-// clang-format-off
+// clang-format off
 
 // REQUIRES: target={{aarch64.*}}
 // UNSUPPORTED: target={{.*-windows.*}}
@@ -16,7 +16,7 @@
 // least through OS version 27.0
 // XFAIL: stdlib=apple-libc++ && target={{.*}}-apple-{{.*}}{{11|12|13|14|15|26|27.0}}
 
-// clang-format-on
+// clang-format on
 
 #undef NDEBUG
 #include "support/func_bounds.h"

>From f4f205e35841a9d61520dda56a1cdccc1422dbbc Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 10:23:08 -0700
Subject: [PATCH 10/45] really tell clang-format off

---
 libunwind/test/ra_sign_state.pass.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 88b8425073fea..6b8fb3373565d 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 
-// clang-format-off
+// clang-format off
 
 // REQUIRES: target={{aarch64.*}}
 // UNSUPPORTED: target={{.*-windows.*}}
@@ -16,7 +16,7 @@
 // least through OS version 27.0
 // XFAIL: stdlib=apple-libc++ && target={{.*}}-apple-{{.*}}{{11|12|13|14|15|26|27.0}}
 
-// clang-format-on
+// clang-format on
 
 #undef NDEBUG
 #include "support/func_bounds.h"

>From 9665afc0ef4ca276b8af9c57a38778f3dcfcf262 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 13:36:59 -0700
Subject: [PATCH 11/45] clang-format reflow the big comment

---
 .../lib/Target/AArch64/AArch64PointerAuth.cpp | 24 +++++++++----------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index 60d352d17b33c..a5624ef70c5c7 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -164,17 +164,17 @@ static void emitAUTCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
       // DWARF CFI is evaluated linearly over the byte stream, not along control
       // flow edges. The toggle semantics of this directive therefore cannot
       // faithfully represent the signed/unsigned RA state for all possible CFG
-      // paths. The added complexity versus DW_CFA_AARCH64_negate_ra_state is that
-      // an unwinder must also reconstruct the PC of the PACI[AB]SPPC in order to
-      // verify the signed LR, and that address is derived from the location of this
-      // directive in the linear CFI stream.
+      // paths. The added complexity versus DW_CFA_AARCH64_negate_ra_state is
+      // that an unwinder must also reconstruct the PC of the PACI[AB]SPPC in
+      // order to verify the signed LR, and that address is derived from the
+      // location of this directive in the linear CFI stream.
       //
-      // The correct fix is to use DW_CFA_AARCH64_set_ra_state_with_pc, which sets
-      // the RA state and signing address absolutely rather than toggling them. An
-      // unwinder that supports this directive can reconstruct the correct state on
-      // any CFG path, regardless of how many signing/authenticating pairs exist in
-      // the function. However, not all unwinders support this directive, so we
-      // cannot rely on it exclusively.
+      // The correct fix is to use DW_CFA_AARCH64_set_ra_state_with_pc, which
+      // sets the RA state and signing address absolutely rather than toggling
+      // them. An unwinder that supports this directive can reconstruct the
+      // correct state on any CFG path, regardless of how many
+      // signing/authenticating pairs exist in the function. However, not all
+      // unwinders support this directive, so we cannot rely on it exclusively.
       //
       // For unwinders that only support DW_CFA_AARCH64_negate_ra_state_with_pc,
       // libunwind exploits a loophole: it records the address at the
@@ -185,8 +185,8 @@ static void emitAUTCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
       // for the signing site, as long as each function has at most one such
       // signing location. That invariant holds today because shrinkwrapping
       // does not yet hoist or sink PAuth_LR frame code across CFG join/split
-      // points; once it does, we must avoid those transformations on platforms that
-      // have this limitation.
+      // points; once it does, we must avoid those transformations on platforms
+      // that have this limitation.
       //
       // https://github.com/ARM-software/abi-aa/issues/327
       // https://github.com/ARM-software/abi-aa/pull/346

>From 708273e49151faf9c3e9bc479ae5cde5e618f47d Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 14:29:14 -0700
Subject: [PATCH 12/45] user-label-prefix extern C symbol

---
 libunwind/test/ra_sign_state.pass.cpp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 6b8fb3373565d..8ce0e36dd99a4 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -19,6 +19,7 @@
 // clang-format on
 
 #undef NDEBUG
+#include "../src/config.h"
 #include "support/func_bounds.h"
 #include <assert.h>
 #include <inttypes.h>
@@ -106,6 +107,7 @@ __attribute__((noinline)) uint64_t check_vanilla() {
 }
 
 __attribute__((naked, target("pauth"))) uint64_t check_negate() {
+  // clang-format off
   asm(".cfi_negate_ra_state\n"
       "pacibsp\n"
 
@@ -114,7 +116,7 @@ __attribute__((naked, target("pauth"))) uint64_t check_negate() {
       ".cfi_offset x29, -16\n"
       ".cfi_offset x30, -8\n"
 
-      "bl _get_main_ra_sign_state\n"
+      "bl " SYMBOL_NAME(get_main_ra_sign_state) "\n"
 
       "ldp x29, x30, [sp], #16\n"
       ".cfi_def_cfa_offset 0\n"
@@ -123,6 +125,7 @@ __attribute__((naked, target("pauth"))) uint64_t check_negate() {
 
       ".cfi_negate_ra_state\n"
       "retab");
+  // clang-format on
 }
 
 FUNC_ATTR(main_func) int main(int, char **) {

>From 3c882bb09827368856eece7089a9be5bef0e291e Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jroelofs at gmail.com>
Date: Wed, 24 Jun 2026 14:32:29 -0700
Subject: [PATCH 13/45] s/cfi_set_ra_state/cfi_llvm_set_ra_state/

---
 llvm/lib/MC/MCDwarf.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp
index 209fcbf056e12..1b9b100f5b284 100644
--- a/llvm/lib/MC/MCDwarf.cpp
+++ b/llvm/lib/MC/MCDwarf.cpp
@@ -1332,7 +1332,7 @@ void MCCFIInstruction::replaceRegister(unsigned FromReg, unsigned ToReg) {
         ReplaceReg(F.MaskRegister);
       },
       [](LLVMSetRAStateFields &) {
-        assert(false && ".cfi_set_ra_state does not have registers");
+        assert(false && ".cfi_llvm_set_ra_state does not have registers");
       });
   std::visit(Visitor, ExtraFields);
 }

>From c2046ff78dfb757085ebaa682fda33ccbcbf8dc3 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 14:36:23 -0700
Subject: [PATCH 14/45] user-label-prefix in check_set

---
 libunwind/test/ra_sign_state.pass.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index e78513f7e7a42..062b3950af2f3 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -130,6 +130,7 @@ __attribute__((naked, target("pauth"))) uint64_t check_negate() {
 
 #if defined(HAVE_CFI_LLVM_SET_RA_STATE)
 __attribute__((naked)) uint64_t check_set() {
+  // clang-format off
   asm(".cfi_llvm_set_ra_state 1, 0\n"
       "pacibsp\n"
 
@@ -138,7 +139,7 @@ __attribute__((naked)) uint64_t check_set() {
       ".cfi_offset x29, -16\n"
       ".cfi_offset x30, -8\n"
 
-      "bl _get_main_ra_sign_state\n"
+      "bl " SYMBOL_NAME(get_main_ra_sign_state) "\n"
 
       "ldp x29, x30, [sp], #16\n"
       ".cfi_def_cfa_offset 0\n"
@@ -147,6 +148,7 @@ __attribute__((naked)) uint64_t check_set() {
 
       ".cfi_llvm_set_ra_state 0, -20\n"
       "retab");
+  // clang-format on
 }
 #endif
 

>From 44292e03b67205517c27a20b5d658ea642ae71c7 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 20:24:25 -0700
Subject: [PATCH 15/45] printf debug

premerge testing fails with:

```
 -- Testing: 21 tests, 16 workers --
  Testing:  0.. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90
  FAIL: llvm-libunwind-shared.cfg.in :: ra_sign_state.pass.cpp (21 of 21)
  ******************** TEST 'llvm-libunwind-shared.cfg.in :: ra_sign_state.pass.cpp' FAILED ********************
  Exit Code: 252

  Command Output (stdout):
  --
  # COMPILED WITH
  /__w/llvm-project/llvm-project/build/./bin/clang++ /__w/llvm-project/llvm-project/libunwind/test/ra_sign_state.pass.cpp  --target=aarch64-unknown-linux-gnu -nostdinc++ -I /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/include -D_LIBUNWIND_HAVE_GETAUXVAL -funwind-tables -std=c++26 -Werror -Wall -Wctad-maybe-unsupported -Wextra -Wshadow -Wundef -Wunused-template -Wno-unused-command-line-argument -Wno-attributes -Wno-pessimizing-move -Wno-noexcept-type -Wno-atomic-alignment -Wno-reserved-module-identifier -Wdeprecated-copy -Wdeprecated-copy-dtor -Wshift-negative-value -Wno-user-defined-literals -Wno-tautological-compare -Wno-stringop-overread -Wsign-compare -Wunused-variable -Wunused-parameter -Wunreachable-code -Wno-unused-local-typedef -Wno-local-type-template-args -Wno-c++11-extensions -Wno-unknown-pragmas -Wno-pass-failed -Wno-mismatched-new-delete -Wno-redundant-move -Wno-self-move -Wno-nullability-completeness -flax-vector-conversions=none -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -Wuser-defined-warnings  -L /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -Wl,-rpath,/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -lunwind -Wl,--export-dynamic -ldl -latomic -o /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
  # executed command: /__w/llvm-project/llvm-project/build/./bin/clang++ /__w/llvm-project/llvm-project/libunwind/test/ra_sign_state.pass.cpp --target=aarch64-unknown-linux-gnu -nostdinc++ -I /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/include -D_LIBUNWIND_HAVE_GETAUXVAL -funwind-tables -std=c++26 -Werror -Wall -Wctad-maybe-unsupported -Wextra -Wshadow -Wundef -Wunused-template -Wno-unused-command-line-argument -Wno-attributes -Wno-pessimizing-move -Wno-noexcept-type -Wno-atomic-alignment -Wno-reserved-module-identifier -Wdeprecated-copy -Wdeprecated-copy-dtor -Wshift-negative-value -Wno-user-defined-literals -Wno-tautological-compare -Wno-stringop-overread -Wsign-compare -Wunused-variable -Wunused-parameter -Wunreachable-code -Wno-unused-local-typedef -Wno-local-type-template-args -Wno-c++11-extensions -Wno-unknown-pragmas -Wno-pass-failed -Wno-mismatched-new-delete -Wno-redundant-move -Wno-self-move -Wno-nullability-completeness -flax-vector-conversions=none -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -Wuser-defined-warnings -L /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -Wl,-rpath,/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -lunwind -Wl,--export-dynamic -ldl -latomic -o /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
  # note: command had no output on stdout or stderr
  # EXECUTED AS
  /usr/bin/python3 /__w/llvm-project/llvm-project/libcxx/utils/run.py --execdir /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir --  /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
  # executed command: /usr/bin/python3 /__w/llvm-project/llvm-project/libcxx/utils/run.py --execdir /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir -- /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
  # note: command had no output on stdout or stderr
  # error: command failed with exit status: 252

  --
```

https://github.com/llvm/llvm-project/actions/runs/28131005033/job/83306950690?pr=205442
---
 libunwind/test/ra_sign_state.pass.cpp | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 062b3950af2f3..cb83a4cfd2937 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -94,19 +94,20 @@ _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx, void *arg) {
   return _URC_NO_REASON;
 }
 
-__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state() {
+__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state(const char *note) {
+  printf("check: %s\n", note);
   uint64_t sign_state = -1;
   _Unwind_Backtrace(frame_handler, &sign_state);
-  printf("UNW_AARCH64_RA_SIGN_STATE = %" PRIu64 "\n", sign_state);
+  printf("UNW_AARCH64_RA_SIGN_STATE for %s = %" PRIu64 "\n", note, sign_state);
   assert((sign_state & 0x3) == sign_state);
   return sign_state;
 }
 
-__attribute__((noinline)) uint64_t check_vanilla() {
-  return get_main_ra_sign_state();
+__attribute__((noinline)) uint64_t check_vanilla(const char *note) {
+  return get_main_ra_sign_state(note);
 }
 
-__attribute__((naked, target("pauth"))) uint64_t check_negate() {
+__attribute__((naked, target("pauth"))) uint64_t check_negate(const char *note) {
   // clang-format off
   asm(".cfi_negate_ra_state\n"
       "pacibsp\n"
@@ -129,7 +130,7 @@ __attribute__((naked, target("pauth"))) uint64_t check_negate() {
 }
 
 #if defined(HAVE_CFI_LLVM_SET_RA_STATE)
-__attribute__((naked)) uint64_t check_set() {
+__attribute__((naked)) uint64_t check_set(const char *note) {
   // clang-format off
   asm(".cfi_llvm_set_ra_state 1, 0\n"
       "pacibsp\n"
@@ -155,7 +156,7 @@ __attribute__((naked)) uint64_t check_set() {
 FUNC_ATTR(main_func) int main(int, char **) {
   uint64_t ret;
 
-  ret = check_vanilla();
+  ret = check_vanilla("check_vanilla");
 #if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
   assert(ret == 1 || ret == 2);
 #else
@@ -167,11 +168,11 @@ FUNC_ATTR(main_func) int main(int, char **) {
     return 0;
   }
 
-  ret = check_negate();
+  ret = check_negate("check_negate");
   assert(ret == 1);
 
 #if defined(HAVE_CFI_LLVM_SET_RA_STATE)
-  ret = check_set();
+  ret = check_set("check_set");
   assert(ret == 1);
 #endif
 

>From a9c26c85267293b5949b7d09792af7f1a556e05e Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 25 Jun 2026 14:05:02 -0700
Subject: [PATCH 16/45] fix XFAIL regex

---
 libunwind/test/ra_sign_state.pass.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 8ce0e36dd99a4..e6349a83b583a 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -14,7 +14,8 @@
 
 // The libSystem unwinder does not correctly read UNW_AARCH64_RA_SIGN_STATE, at
 // least through OS version 27.0
-// XFAIL: stdlib=apple-libc++ && target={{.*}}-apple-{{.*}}{{11|12|13|14|15|26|27.0}}
+// XFAIL: stdlib=apple-libc++ && target={{.*}}-apple-{{.*}}{{(11|12|13|14|15|26)(\.\d+)?}}
+// XFAIL: stdlib=apple-libc++ && target={{.*}}-apple-{{.*}}27.0
 
 // clang-format on
 

>From 4a487f5b48fbabcaa3bf4428a3388b35ffe13c12 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 20:24:25 -0700
Subject: [PATCH 17/45] printf debug

premerge testing fails with:

```
 -- Testing: 21 tests, 16 workers --
  Testing:  0.. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90
  FAIL: llvm-libunwind-shared.cfg.in :: ra_sign_state.pass.cpp (21 of 21)
  ******************** TEST 'llvm-libunwind-shared.cfg.in :: ra_sign_state.pass.cpp' FAILED ********************
  Exit Code: 252

  Command Output (stdout):
  --
  # COMPILED WITH
  /__w/llvm-project/llvm-project/build/./bin/clang++ /__w/llvm-project/llvm-project/libunwind/test/ra_sign_state.pass.cpp  --target=aarch64-unknown-linux-gnu -nostdinc++ -I /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/include -D_LIBUNWIND_HAVE_GETAUXVAL -funwind-tables -std=c++26 -Werror -Wall -Wctad-maybe-unsupported -Wextra -Wshadow -Wundef -Wunused-template -Wno-unused-command-line-argument -Wno-attributes -Wno-pessimizing-move -Wno-noexcept-type -Wno-atomic-alignment -Wno-reserved-module-identifier -Wdeprecated-copy -Wdeprecated-copy-dtor -Wshift-negative-value -Wno-user-defined-literals -Wno-tautological-compare -Wno-stringop-overread -Wsign-compare -Wunused-variable -Wunused-parameter -Wunreachable-code -Wno-unused-local-typedef -Wno-local-type-template-args -Wno-c++11-extensions -Wno-unknown-pragmas -Wno-pass-failed -Wno-mismatched-new-delete -Wno-redundant-move -Wno-self-move -Wno-nullability-completeness -flax-vector-conversions=none -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -Wuser-defined-warnings  -L /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -Wl,-rpath,/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -lunwind -Wl,--export-dynamic -ldl -latomic -o /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
  # executed command: /__w/llvm-project/llvm-project/build/./bin/clang++ /__w/llvm-project/llvm-project/libunwind/test/ra_sign_state.pass.cpp --target=aarch64-unknown-linux-gnu -nostdinc++ -I /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/include -D_LIBUNWIND_HAVE_GETAUXVAL -funwind-tables -std=c++26 -Werror -Wall -Wctad-maybe-unsupported -Wextra -Wshadow -Wundef -Wunused-template -Wno-unused-command-line-argument -Wno-attributes -Wno-pessimizing-move -Wno-noexcept-type -Wno-atomic-alignment -Wno-reserved-module-identifier -Wdeprecated-copy -Wdeprecated-copy-dtor -Wshift-negative-value -Wno-user-defined-literals -Wno-tautological-compare -Wno-stringop-overread -Wsign-compare -Wunused-variable -Wunused-parameter -Wunreachable-code -Wno-unused-local-typedef -Wno-local-type-template-args -Wno-c++11-extensions -Wno-unknown-pragmas -Wno-pass-failed -Wno-mismatched-new-delete -Wno-redundant-move -Wno-self-move -Wno-nullability-completeness -flax-vector-conversions=none -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -Wuser-defined-warnings -L /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -Wl,-rpath,/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -lunwind -Wl,--export-dynamic -ldl -latomic -o /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
  # note: command had no output on stdout or stderr
  # EXECUTED AS
  /usr/bin/python3 /__w/llvm-project/llvm-project/libcxx/utils/run.py --execdir /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir --  /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
  # executed command: /usr/bin/python3 /__w/llvm-project/llvm-project/libcxx/utils/run.py --execdir /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir -- /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
  # note: command had no output on stdout or stderr
  # error: command failed with exit status: 252

  --
```

https://github.com/llvm/llvm-project/actions/runs/28131005033/job/83306950690?pr=205442
---
 libunwind/test/ra_sign_state.pass.cpp | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index e6349a83b583a..d589a2a787bc0 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -95,19 +95,20 @@ _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx, void *arg) {
   return _URC_NO_REASON;
 }
 
-__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state() {
+__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state(const char *note) {
+  printf("check: %s\n", note);
   uint64_t sign_state = -1;
   _Unwind_Backtrace(frame_handler, &sign_state);
-  printf("UNW_AARCH64_RA_SIGN_STATE = %" PRIu64 "\n", sign_state);
+  printf("UNW_AARCH64_RA_SIGN_STATE for %s = %" PRIu64 "\n", note, sign_state);
   assert((sign_state & 0x3) == sign_state);
   return sign_state;
 }
 
-__attribute__((noinline)) uint64_t check_vanilla() {
-  return get_main_ra_sign_state();
+__attribute__((noinline)) uint64_t check_vanilla(const char *note) {
+  return get_main_ra_sign_state(note);
 }
 
-__attribute__((naked, target("pauth"))) uint64_t check_negate() {
+__attribute__((naked, target("pauth"))) uint64_t check_negate(const char *note) {
   // clang-format off
   asm(".cfi_negate_ra_state\n"
       "pacibsp\n"
@@ -132,7 +133,7 @@ __attribute__((naked, target("pauth"))) uint64_t check_negate() {
 FUNC_ATTR(main_func) int main(int, char **) {
   uint64_t ret;
 
-  ret = check_vanilla();
+  ret = check_vanilla("check_vanilla");
 #if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
   assert(ret == 1 || ret == 2);
 #else
@@ -144,7 +145,7 @@ FUNC_ATTR(main_func) int main(int, char **) {
     return 0;
   }
 
-  ret = check_negate();
+  ret = check_negate("check_negate");
   assert(ret == 1);
 
   printf("success\n");

>From 8354ca738a056975a66d7c61bc1997d55e68e36c Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 25 Jun 2026 14:17:20 -0700
Subject: [PATCH 18/45] clang-format

---
 libunwind/test/ra_sign_state.pass.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index d589a2a787bc0..9732f85f8a84f 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -95,7 +95,8 @@ _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx, void *arg) {
   return _URC_NO_REASON;
 }
 
-__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state(const char *note) {
+__attribute__((noinline)) extern "C" uintptr_t
+get_main_ra_sign_state(const char *note) {
   printf("check: %s\n", note);
   uint64_t sign_state = -1;
   _Unwind_Backtrace(frame_handler, &sign_state);
@@ -108,7 +109,8 @@ __attribute__((noinline)) uint64_t check_vanilla(const char *note) {
   return get_main_ra_sign_state(note);
 }
 
-__attribute__((naked, target("pauth"))) uint64_t check_negate(const char *note) {
+__attribute__((naked, target("pauth"))) uint64_t
+check_negate(const char *note) {
   // clang-format off
   asm(".cfi_negate_ra_state\n"
       "pacibsp\n"

>From b891ff00eefa771f73248debec9d27f76a582b00 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 25 Jun 2026 16:09:41 -0700
Subject: [PATCH 19/45] fix .cfi_llvm_set_ra_state 2, Label round-tripping

---
 .../AArch64/AsmParser/AArch64AsmParser.cpp    | 16 +++++++++---
 llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s  | 26 ++++++++++++++-----
 2 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index 5cbce8bf9527f..383ea8b1c08c3 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -7762,18 +7762,28 @@ bool AArch64AsmParser::parseDirectiveCFINegateRAStateWithPC() {
 
 /// parseDirectiveCFILLVMSetRAState
 /// ::= .cfi_llvm_set_ra_state ra_state, offset
+/// ::= .cfi_llvm_set_ra_state ra_state, pac_sym
 bool AArch64AsmParser::parseDirectiveCFILLVMSetRAState() {
   int64_t State;
   if (getParser().parseAbsoluteExpression(State))
     return true;
   if (parseToken(AsmToken::Comma, "expected ','"))
     return true;
-  int64_t Offset;
-  if (getParser().parseAbsoluteExpression(Offset))
+  const MCExpr *Expr;
+  SMLoc ExprLoc = getLoc();
+  if (getParser().parseExpression(Expr))
     return true;
   if (parseEOL())
     return true;
-  getStreamer().emitCFILLVMSetRAState((unsigned)State, Offset);
+  if (auto *SymRef = dyn_cast<MCSymbolRefExpr>(Expr)) {
+    getStreamer().emitCFILLVMSetRAState(
+        (unsigned)State, const_cast<MCSymbol *>(&SymRef->getSymbol()));
+  } else if (auto *CE = dyn_cast<MCConstantExpr>(Expr)) {
+    getStreamer().emitCFILLVMSetRAState((unsigned)State, CE->getValue());
+  } else {
+    return Error(ExprLoc,
+                 "expected an integer offset or a symbol for .cfi_llvm_set_ra_state");
+  }
   return false;
 }
 
diff --git a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s b/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s
index cba21103377e5..f7c48cecbec6a 100644
--- a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s
+++ b/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s
@@ -1,6 +1,6 @@
-# RUN: llvm-mc -triple aarch64-pc-linux-gnu %s -filetype=asm -o - | FileCheck %s --check-prefix=ASM
+# RUN: llvm-mc -triple aarch64-pc-linux-gnu -mattr=+pauth-lr %s -filetype=asm -o - | FileCheck %s --check-prefix=ASM
 
-# RUN: llvm-mc -triple aarch64-pc-linux-gnu %s -filetype=obj -o %t.o
+# RUN: llvm-mc -triple aarch64-pc-linux-gnu -mattr=+pauth-lr %s -filetype=obj -o %t.o
 # RUN: llvm-dwarfdump --eh-frame %t.o | FileCheck %s --check-prefix=DWARF
 # RUN: llvm-readobj --hex-dump=.eh_frame %t.o | FileCheck %s --check-prefix=HEX
 
@@ -8,24 +8,38 @@
   .cfi_llvm_set_ra_state 1, 0
   .cfi_llvm_set_ra_state 2, 0
   .cfi_llvm_set_ra_state 0, -4
+  .cfi_llvm_set_ra_state 2, LSigningInstrAfter
+LSigningInstrBefore:
+  nop
+  nop
+LSigningInstrAfter:
+  .cfi_llvm_set_ra_state 2, LSigningInstrBefore
   .cfi_endproc
 
 # ASM:      .cfi_startproc
 # ASM-NEXT: .cfi_llvm_set_ra_state 1, 0
 # ASM-NEXT: .cfi_llvm_set_ra_state 2, 0
 # ASM-NEXT: .cfi_llvm_set_ra_state 0, -4
+# ASM-NEXT: .cfi_llvm_set_ra_state 2, LSigningInstrAfter
+# ASM:      .cfi_llvm_set_ra_state 2, LSigningInstrBefore
 # ASM-NEXT: .cfi_endproc
 
 # DWARF:      DW_CFA_AARCH64_set_ra_state: 1 0
 # DWARF-NEXT: DW_CFA_AARCH64_set_ra_state: 2 0
 # DWARF-NEXT: DW_CFA_AARCH64_set_ra_state: 0 -4
+# DWARF-NEXT: DW_CFA_AARCH64_set_ra_state: 2 8
+# DWARF:      DW_CFA_AARCH64_set_ra_state: 2 -8
 
 # Verify the raw encoding:
 #
 #   opcode 0x2b, then ULEB128(state), then SLEB128(offset).
 #
-#   state=1, offset= 0  => 2b 01 00
-#   state=2, offset= 0  => 2b 02 00
-#   state=0, offset=-4  => 2b 00 7c
+#   state=1, offset=  0  => 2b 01 00
+#   state=2, offset=  0  => 2b 02 00
+#   state=0, offset= -4  => 2b 00 7c
+#   state=2, offset= +8  => 2b 02 08
+#   (advance_loc 8)      => 48
+#   state=2, offset= -8  => 2b 02 78
 #
-# HEX: 002b0100 2b02002b 007c
+# HEX: 002b0100 2b02002b 007c2b02
+# HEX: 08482b02 78

>From 5bd524cc52403cd29c5f52e09e62a5ccba6004d3 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 25 Jun 2026 16:10:45 -0700
Subject: [PATCH 20/45] clang-format

---
 llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index 383ea8b1c08c3..45ca82f475a97 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -7781,8 +7781,9 @@ bool AArch64AsmParser::parseDirectiveCFILLVMSetRAState() {
   } else if (auto *CE = dyn_cast<MCConstantExpr>(Expr)) {
     getStreamer().emitCFILLVMSetRAState((unsigned)State, CE->getValue());
   } else {
-    return Error(ExprLoc,
-                 "expected an integer offset or a symbol for .cfi_llvm_set_ra_state");
+    return Error(
+        ExprLoc,
+        "expected an integer offset or a symbol for .cfi_llvm_set_ra_state");
   }
   return false;
 }

>From a3ae8e496cd5aa42283228506d74f05a5f702405 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 26 Jun 2026 10:55:35 -0700
Subject: [PATCH 21/45] static

---
 libunwind/test/ra_sign_state.pass.cpp | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 9732f85f8a84f..e25a1c12720c9 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -70,7 +70,8 @@ static bool checkHasPAuth() {
 
 FUNC_BOUNDS_DECL(main_func);
 
-_Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx, void *arg) {
+static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
+                                         void *arg) {
   uint64_t ra_sign_state =
       (uint64_t)_Unwind_GetGR(ctx, UNW_AARCH64_RA_SIGN_STATE);
 
@@ -105,11 +106,11 @@ get_main_ra_sign_state(const char *note) {
   return sign_state;
 }
 
-__attribute__((noinline)) uint64_t check_vanilla(const char *note) {
+__attribute__((noinline)) static uint64_t check_vanilla(const char *note) {
   return get_main_ra_sign_state(note);
 }
 
-__attribute__((naked, target("pauth"))) uint64_t
+__attribute__((naked, target("pauth"))) static uint64_t
 check_negate(const char *note) {
   // clang-format off
   asm(".cfi_negate_ra_state\n"

>From 65ac137bf5173e26e1f394a78da0f437a41e08e5 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 26 Jun 2026 10:56:09 -0700
Subject: [PATCH 22/45] _LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING

---
 libunwind/test/ra_sign_state.pass.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index e25a1c12720c9..cea5117e09c61 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -87,7 +87,7 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
     return _URC_END_OF_STACK;
   }
 
-#if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
+#if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
   assert(ra_sign_state == 1);
 #else
   assert(ra_sign_state == 0);
@@ -137,7 +137,7 @@ FUNC_ATTR(main_func) int main(int, char **) {
   uint64_t ret;
 
   ret = check_vanilla("check_vanilla");
-#if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
+#if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
   assert(ret == 1 || ret == 2);
 #else
   assert(ret == 0);

>From a6a4939d6e502d466a826c1ac5828237cb3c47bb Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 26 Jun 2026 10:57:35 -0700
Subject: [PATCH 23/45] ra_sign_state == 2

---
 libunwind/test/ra_sign_state.pass.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index cea5117e09c61..2244cddca0786 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -88,7 +88,7 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
   }
 
 #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
-  assert(ra_sign_state == 1);
+  assert(ra_sign_state == 1 || ra_sign_state == 2);
 #else
   assert(ra_sign_state == 0);
 #endif

>From 66dc3ab7a26677d1c976e3c524aa34c6649b707b Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 26 Jun 2026 11:08:26 -0700
Subject: [PATCH 24/45] rm dead PACSym param

---
 llvm/lib/Target/AArch64/AArch64PointerAuth.cpp | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index a5624ef70c5c7..0d651b2ff90bd 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -145,7 +145,7 @@ static void emitPACCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
 }
 
 static void emitAUTCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
-                       bool EmitCFI, MCSymbol *PACSym) {
+                       bool EmitCFI) {
   if (!EmitCFI)
     return;
 
@@ -334,7 +334,7 @@ void AArch64PointerAuthImpl::authenticateLR(
       emitEpiloguePACSymOffsetIntoReg(*TII, MBB, MBBI, DL, PACSym,
                                       AArch64::X15);
 
-      emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
+      emitAUTCFI(MBB, MBBI, EmitAsyncCFI);
       unsigned AutOpc = UseBKey ? AArch64::AUTIB171615 : AArch64::AUTIA171615;
       BuildMI(MBB, MBBI, DL, TII->get(AutOpc))
           .setMIFlag(MachineInstr::FrameDestroy);
@@ -351,7 +351,7 @@ void AArch64PointerAuthImpl::authenticateLR(
       BuildMI(MBB, MBBI, DL, TII->get(AArch64::PACM))
           .setMIFlag(MachineInstr::FrameDestroy);
 
-      emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
+      emitAUTCFI(MBB, MBBI, EmitAsyncCFI);
       unsigned AutOpc = UseBKey ? AArch64::AUTIB1716 : AArch64::AUTIA1716;
       BuildMI(MBB, MBBI, DL, TII->get(AutOpc))
           .setMIFlag(MachineInstr::FrameDestroy);
@@ -359,7 +359,7 @@ void AArch64PointerAuthImpl::authenticateLR(
       unsigned AutOpc = UseBKey ? AArch64::AUTIB1716 : AArch64::AUTIA1716;
       BuildMI(MBB, MBBI, DL, TII->get(AutOpc))
           .setMIFlag(MachineInstr::FrameDestroy);
-      emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
+      emitAUTCFI(MBB, MBBI, EmitAsyncCFI);
     }
 
     BuildMI(MBB, MBBI, DL, TII->get(AArch64::ORRXrs), AArch64::LR)
@@ -395,7 +395,7 @@ void AArch64PointerAuthImpl::authenticateLR(
 
   if (MFnI->branchProtectionPAuthLR() && Subtarget->hasPAuthLR()) {
     assert(PACSym && "No PAC instruction to refer to");
-    emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
+    emitAUTCFI(MBB, MBBI, EmitAsyncCFI);
     BuildMI(MBB, MBBI, DL,
             TII->get(UseBKey ? AArch64::AUTIBSPPCi : AArch64::AUTIASPPCi))
         .addSym(PACSym)
@@ -407,13 +407,13 @@ void AArch64PointerAuthImpl::authenticateLR(
 
       BuildMI(MBB, MBBI, DL, TII->get(AArch64::PACM))
           .setMIFlag(MachineInstr::FrameDestroy);
-      emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
+      emitAUTCFI(MBB, MBBI, EmitAsyncCFI);
     }
     BuildMI(MBB, MBBI, DL,
             TII->get(UseBKey ? AArch64::AUTIBSP : AArch64::AUTIASP))
         .setMIFlag(MachineInstr::FrameDestroy);
     if (!MFnI->branchProtectionPAuthLR())
-      emitAUTCFI(MBB, MBBI, EmitAsyncCFI, nullptr);
+      emitAUTCFI(MBB, MBBI, EmitAsyncCFI);
   }
 
   if (NeedsWinCFI) {

>From 10458b312a7a9464334787ad7ef1246ca2c70a39 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Sat, 27 Jun 2026 11:06:22 -0700
Subject: [PATCH 25/45] additional printf debug. revert me

---
 libunwind/test/ra_sign_state.pass.cpp | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index def4c14f9475f..5a1909be25414 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -72,10 +72,16 @@ FUNC_BOUNDS_DECL(main_func);
 
 static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
                                          void *arg) {
+  printf("frame_handler\n");
   uint64_t ra_sign_state =
       (uint64_t)_Unwind_GetGR(ctx, UNW_AARCH64_RA_SIGN_STATE);
 
+  printf("ra_sign_state = %llu\n", ra_sign_state);
+
   uintptr_t ip = _Unwind_GetIP(ctx);
+
+  printf("ip = 0x%llx\n", ip);
+
   if (ip >= (uintptr_t)FUNC_START(main_func) &&
       ip < (uintptr_t)FUNC_END(main_func)) {
 
@@ -158,6 +164,8 @@ __attribute__((naked)) uint64_t check_set(const char *note) {
 #endif
 
 FUNC_ATTR(main_func) int main(int, char **) {
+  printf("ra_sign_state.pass.cpp\n");
+
   uint64_t ret;
 
   ret = check_vanilla("check_vanilla");

>From ca23e42af4e869a828a6e344d20913ad645fe8ba Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Mon, 29 Jun 2026 10:35:53 -0700
Subject: [PATCH 26/45] fix printf debug

---
 libunwind/test/ra_sign_state.pass.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 5a1909be25414..8d926198ff63c 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -80,7 +80,7 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
 
   uintptr_t ip = _Unwind_GetIP(ctx);
 
-  printf("ip = 0x%llx\n", ip);
+  printf("ip = 0x%lx\n", ip);
 
   if (ip >= (uintptr_t)FUNC_START(main_func) &&
       ip < (uintptr_t)FUNC_END(main_func)) {

>From 44a942b49d31c67386c7f4d032d1fec1b85a2e83 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Mon, 29 Jun 2026 12:12:44 -0700
Subject: [PATCH 27/45] more debug print fixing

---
 libunwind/test/ra_sign_state.pass.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 8d926198ff63c..6f8e75a0aff1a 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -76,7 +76,7 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
   uint64_t ra_sign_state =
       (uint64_t)_Unwind_GetGR(ctx, UNW_AARCH64_RA_SIGN_STATE);
 
-  printf("ra_sign_state = %llu\n", ra_sign_state);
+  printf("ra_sign_state = 0x%" PRIx64 "\n", ra_sign_state);
 
   uintptr_t ip = _Unwind_GetIP(ctx);
 

>From f88ee0f1a212f11ccb27580f5496163fc11a14d1 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 30 Jun 2026 11:07:46 -0700
Subject: [PATCH 28/45] s/cfi_llvm_set_ra_state/cfi_set_ra_state/g

---
 libunwind/test/CMakeLists.txt                 | 18 ++--
 libunwind/test/ra_sign_state.pass.cpp         |  8 +-
 llvm/include/llvm/MC/MCDwarf.h                |  4 +-
 .../CodeGen/AsmPrinter/AsmPrinterDwarf.cpp    |  8 +-
 llvm/lib/CodeGen/MIRParser/MILexer.cpp        |  2 +-
 llvm/lib/CodeGen/MIRParser/MILexer.h          |  2 +-
 llvm/lib/CodeGen/MIRParser/MIParser.cpp       |  6 +-
 llvm/lib/MC/MCAsmStreamer.cpp                 |  4 +-
 llvm/lib/MC/MCDwarf.cpp                       |  2 +-
 .../lib/Target/AArch64/AArch64PointerAuth.cpp |  8 +-
 .../AArch64/AsmParser/AArch64AsmParser.cpp    |  8 +-
 .../MCTargetDesc/AArch64AsmBackend.cpp        |  2 +-
 .../AArch64/pauth-lr-tail-call-fpdiff.ll      | 96 +++++++++----------
 .../AArch64/sign-return-address-pauth-lr.ll   | 70 +++++++-------
 .../sign-return-address-pauthlr-slh.ll        |  8 +-
 .../CodeGen/AArch64/sign-return-address.ll    | 58 +++++------
 .../test/CodeGen/AArch64/swifttail-ptrauth.ll | 36 +++----
 ...nkwrap.s => cfi_set_ra_state-shrinkwrap.s} | 14 +--
 ...llvm_set_ra_state.s => cfi_set_ra_state.s} | 20 ++--
 .../MC/AArch64/directives-case_insensitive.s  |  4 +-
 20 files changed, 191 insertions(+), 187 deletions(-)
 rename llvm/test/MC/AArch64/{cfi_llvm_set_ra_state-shrinkwrap.s => cfi_set_ra_state-shrinkwrap.s} (94%)
 rename llvm/test/MC/AArch64/{cfi_llvm_set_ra_state.s => cfi_set_ra_state.s} (72%)

diff --git a/libunwind/test/CMakeLists.txt b/libunwind/test/CMakeLists.txt
index 5dbfb2d93c7e6..94ccbcc203d2c 100644
--- a/libunwind/test/CMakeLists.txt
+++ b/libunwind/test/CMakeLists.txt
@@ -32,21 +32,21 @@ pythonize_bool(LIBUNWIND_ENABLE_GCS)
 pythonize_bool(LIBUNWIND_ENABLE_THREADS)
 pythonize_bool(LIBUNWIND_USES_ARM_EHABI)
 
-file(WRITE "${CMAKE_BINARY_DIR}/check_cfi_llvm_set_ra_state.s" "
+file(WRITE "${CMAKE_BINARY_DIR}/check_cfi_set_ra_state.s" "
     .text
-    .global _test_cfi_llvm_set_ra_state
-_test_cfi_llvm_set_ra_state:
+    .global _test_cfi_set_ra_state
+_test_cfi_set_ra_state:
     .cfi_startproc
-    .cfi_llvm_set_ra_state 0, 0
+    .cfi_set_ra_state 0, 0
     ret
     .cfi_endproc
 ")
-try_compile(HAVE_CFI_LLVM_SET_RA_STATE
-    "${CMAKE_BINARY_DIR}/check_cfi_llvm_set_ra_state"
-    SOURCES "${CMAKE_BINARY_DIR}/check_cfi_llvm_set_ra_state.s"
+try_compile(HAVE_CFI_SET_RA_STATE
+    "${CMAKE_BINARY_DIR}/check_cfi_set_ra_state"
+    SOURCES "${CMAKE_BINARY_DIR}/check_cfi_set_ra_state.s"
 )
-if(HAVE_CFI_LLVM_SET_RA_STATE)
-  add_compile_definitions(HAVE_CFI_LLVM_SET_RA_STATE=1)
+if(HAVE_CFI_SET_RA_STATE)
+  add_compile_definitions(HAVE_CFI_SET_RA_STATE=1)
 endif()
 
 set(AUTO_GEN_COMMENT "## Autogenerated by libunwind configuration.\n# Do not edit!")
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 6f8e75a0aff1a..23e9850ba499c 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -139,10 +139,10 @@ check_negate(const char *note) {
   // clang-format on
 }
 
-#if defined(HAVE_CFI_LLVM_SET_RA_STATE)
+#if defined(HAVE_CFI_SET_RA_STATE)
 __attribute__((naked)) uint64_t check_set(const char *note) {
   // clang-format off
-  asm(".cfi_llvm_set_ra_state 1, 0\n"
+  asm(".cfi_set_ra_state 1, 0\n"
       "pacibsp\n"
 
       "stp x29, x30, [sp, #-16]!\n"
@@ -157,7 +157,7 @@ __attribute__((naked)) uint64_t check_set(const char *note) {
       ".cfi_restore x29\n"
       ".cfi_restore x30\n"
 
-      ".cfi_llvm_set_ra_state 0, -20\n"
+      ".cfi_set_ra_state 0, -20\n"
       "retab");
   // clang-format on
 }
@@ -183,7 +183,7 @@ FUNC_ATTR(main_func) int main(int, char **) {
   ret = check_negate("check_negate");
   assert(ret == 1);
 
-#if defined(HAVE_CFI_LLVM_SET_RA_STATE)
+#if defined(HAVE_CFI_SET_RA_STATE)
   ret = check_set("check_set");
   assert(ret == 1);
 #endif
diff --git a/llvm/include/llvm/MC/MCDwarf.h b/llvm/include/llvm/MC/MCDwarf.h
index c4224f2ecacbc..b570a9659f108 100644
--- a/llvm/include/llvm/MC/MCDwarf.h
+++ b/llvm/include/llvm/MC/MCDwarf.h
@@ -703,7 +703,7 @@ class MCCFIInstruction {
     return {OpNegateRAStateWithPC, L, CommonFields{}, Loc};
   }
 
-  /// .cfi_llvm_set_ra_state AArch64 set RA sign state,
+  /// .cfi_set_ra_state AArch64 set RA sign state,
   // with a symbolic offset to the signing instruction.
   static MCCFIInstruction createLLVMSetRAState(MCSymbol *L, unsigned State,
                                                MCSymbol *PACSym = nullptr,
@@ -711,7 +711,7 @@ class MCCFIInstruction {
     return {OpLLVMSetRAState, L, LLVMSetRAStateFields{State, PACSym, 0}, Loc};
   }
 
-  /// .cfi_llvm_set_ra_state AArch64 set RA sign state,
+  /// .cfi_set_ra_state AArch64 set RA sign state,
   /// with a pre-computed factored offset to the signing instruction.
   static MCCFIInstruction createLLVMSetRAState(MCSymbol *L, unsigned State,
                                                int64_t Offset, SMLoc Loc = {}) {
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
index 6dad244ad1cfc..01a1bbabf02a2 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
@@ -239,8 +239,12 @@ void AsmPrinter::emitCFIInstruction(const MCCFIInstruction &Inst) const {
     OutStreamer->emitCFINegateRAStateWithPC(Loc);
     break;
   case MCCFIInstruction::OpLLVMSetRAState: {
-    OutStreamer->emitCFILLVMSetRAState(Inst.getRASignState(),
-                                       Inst.getRASignSymbol(), Loc);
+    if (MCSymbol *Symbol = Inst.getRASignSymbol())
+      OutStreamer->emitCFILLVMSetRAState(Inst.getRASignState(),
+                                         Symbol, Loc);
+    else
+      OutStreamer->emitCFILLVMSetRAState(Inst.getRASignState(),
+                                         Inst.getRASignOffset(), Loc);
     break;
   }
   case MCCFIInstruction::OpSameValue:
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.cpp b/llvm/lib/CodeGen/MIRParser/MILexer.cpp
index 958e5a3e682c0..e06384507effb 100644
--- a/llvm/lib/CodeGen/MIRParser/MILexer.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MILexer.cpp
@@ -242,7 +242,7 @@ static MIToken::TokenKind getIdentifierKind(StringRef Identifier) {
             MIToken::kw_cfi_aarch64_negate_ra_sign_state)
       .Case("negate_ra_sign_state_with_pc",
             MIToken::kw_cfi_aarch64_negate_ra_sign_state_with_pc)
-      .Case("llvm_set_ra_state", MIToken::kw_cfi_llvm_set_ra_state)
+      .Case("llvm_set_ra_state", MIToken::kw_cfi_set_ra_state)
       .Case("llvm_register_pair", MIToken::kw_cfi_llvm_register_pair)
       .Case("llvm_vector_registers", MIToken::kw_cfi_llvm_vector_registers)
       .Case("llvm_vector_offset", MIToken::kw_cfi_llvm_vector_offset)
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.h b/llvm/lib/CodeGen/MIRParser/MILexer.h
index 02af892d12ad6..685685a98a43c 100644
--- a/llvm/lib/CodeGen/MIRParser/MILexer.h
+++ b/llvm/lib/CodeGen/MIRParser/MILexer.h
@@ -99,7 +99,7 @@ struct MIToken {
     kw_cfi_window_save,
     kw_cfi_aarch64_negate_ra_sign_state,
     kw_cfi_aarch64_negate_ra_sign_state_with_pc,
-    kw_cfi_llvm_set_ra_state,
+    kw_cfi_set_ra_state,
     kw_cfi_llvm_register_pair,
     kw_cfi_llvm_vector_registers,
     kw_cfi_llvm_vector_offset,
diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
index 4d9a8ee4b9cb7..fb858c81c735c 100644
--- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
@@ -2853,7 +2853,7 @@ bool MIParser::parseCFIOperand(MachineOperand &Dest) {
     CFIIndex =
         MF.addFrameInst(MCCFIInstruction::createNegateRAStateWithPC(nullptr));
     break;
-  case MIToken::kw_cfi_llvm_set_ra_state: {
+  case MIToken::kw_cfi_set_ra_state: {
     unsigned State;
     MCSymbol *PACSym = nullptr;
     if (parseCFIUnsigned(State) || expectAndConsume(MIToken::comma))
@@ -2871,7 +2871,7 @@ bool MIParser::parseCFIOperand(MachineOperand &Dest) {
           MCCFIInstruction::createLLVMSetRAState(nullptr, State, Offset));
     } else {
       return error("expected '<mcsymbol ...>' or integer offset for "
-                   "cfi_llvm_set_ra_state");
+                   "cfi_set_ra_state");
     }
     break;
   }
@@ -3320,7 +3320,7 @@ bool MIParser::parseMachineOperand(const unsigned OpCode, const unsigned OpIdx,
   case MIToken::kw_cfi_window_save:
   case MIToken::kw_cfi_aarch64_negate_ra_sign_state:
   case MIToken::kw_cfi_aarch64_negate_ra_sign_state_with_pc:
-  case MIToken::kw_cfi_llvm_set_ra_state:
+  case MIToken::kw_cfi_set_ra_state:
   case MIToken::kw_cfi_llvm_register_pair:
   case MIToken::kw_cfi_llvm_vector_registers:
   case MIToken::kw_cfi_llvm_vector_offset:
diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp
index 052ae1310c4ad..af9ff13de1c56 100644
--- a/llvm/lib/MC/MCAsmStreamer.cpp
+++ b/llvm/lib/MC/MCAsmStreamer.cpp
@@ -2290,7 +2290,7 @@ void MCAsmStreamer::emitCFINegateRAStateWithPC(SMLoc Loc) {
 void MCAsmStreamer::emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
                                           SMLoc Loc) {
   MCStreamer::emitCFILLVMSetRAState(State, PACSym, Loc);
-  OS << "\t.cfi_llvm_set_ra_state " << State << ", ";
+  OS << "\t.cfi_set_ra_state " << State << ", ";
   if (PACSym)
     PACSym->print(OS, MAI);
   else
@@ -2301,7 +2301,7 @@ void MCAsmStreamer::emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
 void MCAsmStreamer::emitCFILLVMSetRAState(unsigned State, int64_t Offset,
                                           SMLoc Loc) {
   MCStreamer::emitCFILLVMSetRAState(State, Offset, Loc);
-  OS << "\t.cfi_llvm_set_ra_state " << State << ", " << Offset;
+  OS << "\t.cfi_set_ra_state " << State << ", " << Offset;
   EmitEOL();
 }
 
diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp
index 1b9b100f5b284..209fcbf056e12 100644
--- a/llvm/lib/MC/MCDwarf.cpp
+++ b/llvm/lib/MC/MCDwarf.cpp
@@ -1332,7 +1332,7 @@ void MCCFIInstruction::replaceRegister(unsigned FromReg, unsigned ToReg) {
         ReplaceReg(F.MaskRegister);
       },
       [](LLVMSetRAStateFields &) {
-        assert(false && ".cfi_llvm_set_ra_state does not have registers");
+        assert(false && ".cfi_set_ra_state does not have registers");
       });
   std::visit(Visitor, ExtraFields);
 }
diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index 0d651b2ff90bd..9d14367d42be4 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -25,7 +25,7 @@ using namespace llvm::AArch64PAuth;
 
 namespace {
 
-/// Control the emission of .cfi_llvm_set_ra_state, which replaces the
+/// Control the emission of .cfi_set_ra_state, which replaces the
 /// deprecated .cfi_negate_ra_state_with_pc [1].
 ///
 /// The latter is fundamentally unable to express some program orders [2], as
@@ -43,13 +43,13 @@ namespace {
 /// 2: https://github.com/ARM-software/abi-aa/issues/327
 enum class SetRAStateMode {
   Never,   // Always use .cfi_negate_ra_state(_with_pc)
-  PAuthLR, // Use .cfi_llvm_set_ra_state only for PAuth_LR
-  Always,  // Use .cfi_llvm_set_ra_state for both PAuth and PAuth_LR
+  PAuthLR, // Use .cfi_set_ra_state only for PAuth_LR
+  Always,  // Use .cfi_set_ra_state for both PAuth and PAuth_LR
 };
 cl::opt<SetRAStateMode> CFILLVMSetRASignStateMode(
     "aarch64-cfi-llvm-set-ra-sign-state", cl::init(SetRAStateMode::PAuthLR),
     cl::desc(
-        "Control emission of .cfi_llvm_set_ra_state for PAC return address "
+        "Control emission of .cfi_set_ra_state for PAC return address "
         "signing CFI"),
     cl::values(clEnumValN(SetRAStateMode::Never, "never",
                           "Always use legacy .cfi_negate_ra_state[_with_pc]"),
diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index 7960e86c397ae..7e4065533b45b 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -7296,7 +7296,7 @@ bool AArch64AsmParser::ParseDirective(AsmToken DirectiveID) {
     parseDirectiveCFINegateRAState();
   else if (IDVal == ".cfi_negate_ra_state_with_pc")
     parseDirectiveCFINegateRAStateWithPC();
-  else if (IDVal == ".cfi_llvm_set_ra_state")
+  else if (IDVal == ".cfi_set_ra_state")
     parseDirectiveCFILLVMSetRAState();
   else if (IDVal == ".cfi_b_key_frame")
     parseDirectiveCFIBKeyFrame();
@@ -7774,8 +7774,8 @@ bool AArch64AsmParser::parseDirectiveCFINegateRAStateWithPC() {
 }
 
 /// parseDirectiveCFILLVMSetRAState
-/// ::= .cfi_llvm_set_ra_state ra_state, offset
-/// ::= .cfi_llvm_set_ra_state ra_state, pac_sym
+/// ::= .cfi_set_ra_state ra_state, offset
+/// ::= .cfi_set_ra_state ra_state, pac_sym
 bool AArch64AsmParser::parseDirectiveCFILLVMSetRAState() {
   int64_t State;
   if (getParser().parseAbsoluteExpression(State))
@@ -7796,7 +7796,7 @@ bool AArch64AsmParser::parseDirectiveCFILLVMSetRAState() {
   } else {
     return Error(
         ExprLoc,
-        "expected an integer offset or a symbol for .cfi_llvm_set_ra_state");
+        "expected an integer offset or a symbol for .cfi_set_ra_state");
   }
   return false;
 }
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
index 8d1125ef4cf14..6e2b30078b0f6 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
@@ -725,7 +725,7 @@ class DarwinAArch64AsmBackend : public AArch64AsmBackend {
         break;
       }
       case MCCFIInstruction::OpLLVMSetRAState:
-        // .cfi_llvm_set_ra_state is not yet supported in Compact Unwind.
+        // .cfi_set_ra_state is not yet supported in Compact Unwind.
         return CU::UNWIND_ARM64_MODE_DWARF;
       }
     }
diff --git a/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll b/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
index 429586dc235c1..e1aa437195e90 100644
--- a/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
+++ b/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
@@ -18,16 +18,16 @@ define swifttailcc void @tail_call_fpdiff_a_key(ptr swiftasync %ctx) "branch-pro
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp0
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp0
 ; COMPAT-NEXT: .Ltmp0:
 ; COMPAT-NEXT:   hint #25
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp0
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp0
 ; V83A-NEXT:   .Ltmp0:
 ; V83A-NEXT:     paciasp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp0
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp0
 ; V9A-NEXT:    .Ltmp0:
 ; V9A-NEXT:      paciasppc
 
@@ -66,18 +66,18 @@ define swifttailcc void @tail_call_fpdiff_a_key(ptr swiftasync %ctx) "branch-pro
 ; COMPAT-NEXT:   adrp x15, .Ltmp0
 ; COMPAT-NEXT:   add x15, x15, :lo12:.Ltmp0
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT:   .cfi_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #12
 
 ; V83A-NEXT:     adrp x15, .Ltmp0
 ; V83A-NEXT:     add x15, x15, :lo12:.Ltmp0
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT:     .cfi_set_ra_state 0, 0
 ; V83A-NEXT:     autia1716
 
 ; V9A-NEXT:      adrp x15, .Ltmp0
 ; V9A-NEXT:      add x15, x15, :lo12:.Ltmp0
-; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT:      .cfi_set_ra_state 0, 0
 ; V9A-NEXT:      autia171615
 
 ; PAUTH-NEXT:    autia1716
@@ -96,16 +96,16 @@ define swifttailcc void @tail_call_fpdiff_b_key(ptr swiftasync %ctx) "branch-pro
 ; CHECK-NEXT:    .cfi_b_key_frame
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp1
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp1
 ; COMPAT-NEXT: .Ltmp1:
 ; COMPAT-NEXT:   hint #27
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp1
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp1
 ; V83A-NEXT:   .Ltmp1:
 ; V83A-NEXT:     pacibsp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp1
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp1
 ; V9A-NEXT:    .Ltmp1:
 ; V9A-NEXT:      pacibsppc
 
@@ -144,18 +144,18 @@ define swifttailcc void @tail_call_fpdiff_b_key(ptr swiftasync %ctx) "branch-pro
 ; COMPAT-NEXT:   adrp x15, .Ltmp1
 ; COMPAT-NEXT:   add x15, x15, :lo12:.Ltmp1
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT:   .cfi_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #14
 
 ; V83A-NEXT:     adrp x15, .Ltmp1
 ; V83A-NEXT:     add x15, x15, :lo12:.Ltmp1
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT:     .cfi_set_ra_state 0, 0
 ; V83A-NEXT:     autib1716
 
 ; V9A-NEXT:      adrp x15, .Ltmp1
 ; V9A-NEXT:      add x15, x15, :lo12:.Ltmp1
-; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT:      .cfi_set_ra_state 0, 0
 ; V9A-NEXT:      autib171615
 
 ; PAUTH-NEXT:    autib1716
@@ -173,16 +173,16 @@ define swifttailcc void @tail_call_no_fpdiff_a_key(ptr swiftasync %ctx) "branch-
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp2
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp2
 ; COMPAT-NEXT: .Ltmp2:
 ; COMPAT-NEXT:   hint #25
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp2
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp2
 ; V83A-NEXT:   .Ltmp2:
 ; V83A-NEXT:     paciasp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp2
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp2
 ; V9A-NEXT:    .Ltmp2:
 ; V9A-NEXT:      paciasppc
 
@@ -209,16 +209,16 @@ define swifttailcc void @tail_call_no_fpdiff_a_key(ptr swiftasync %ctx) "branch-
 ; COMPAT-NEXT:   adrp x16, .Ltmp2
 ; COMPAT-NEXT:   add x16, x16, :lo12:.Ltmp2
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT:   .cfi_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #29
 
 ; V83A-NEXT:     adrp x16, .Ltmp2
 ; V83A-NEXT:     add x16, x16, :lo12:.Ltmp2
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT:     .cfi_set_ra_state 0, 0
 ; V83A-NEXT:     autiasp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT:      .cfi_set_ra_state 0, 0
 ; V9A-NEXT:      autiasppc .Ltmp2
 
 ; PAUTH-NEXT:    autiasp
@@ -236,16 +236,16 @@ define swifttailcc void @tail_call_no_fpdiff_b_key(ptr swiftasync %ctx) "branch-
 ; CHECK-NEXT:    .cfi_b_key_frame
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp3
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp3
 ; COMPAT-NEXT: .Ltmp3:
 ; COMPAT-NEXT:   hint #27
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp3
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp3
 ; V83A-NEXT:   .Ltmp3:
 ; V83A-NEXT:     pacibsp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp3
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp3
 ; V9A-NEXT:    .Ltmp3:
 ; V9A-NEXT:      pacibsppc
 
@@ -272,16 +272,16 @@ define swifttailcc void @tail_call_no_fpdiff_b_key(ptr swiftasync %ctx) "branch-
 ; COMPAT-NEXT:   adrp x16, .Ltmp3
 ; COMPAT-NEXT:   add x16, x16, :lo12:.Ltmp3
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT:   .cfi_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #31
 
 ; V83A-NEXT:     adrp x16, .Ltmp3
 ; V83A-NEXT:     add x16, x16, :lo12:.Ltmp3
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT:     .cfi_set_ra_state 0, 0
 ; V83A-NEXT:     autibsp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT:      .cfi_set_ra_state 0, 0
 ; V9A-NEXT:      autibsppc .Ltmp3
 
 ; PAUTH-NEXT:    autibsp
@@ -298,16 +298,16 @@ define swifttailcc void @indirect_tail_call_fpdiff_a_key(ptr swiftasync %ctx, pt
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp4
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp4
 ; COMPAT-NEXT: .Ltmp4:
 ; COMPAT-NEXT:   hint #25
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp4
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp4
 ; V83A-NEXT:   .Ltmp4:
 ; V83A-NEXT:     paciasp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp4
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp4
 ; V9A-NEXT:    .Ltmp4:
 ; V9A-NEXT:      paciasppc
 
@@ -347,18 +347,18 @@ define swifttailcc void @indirect_tail_call_fpdiff_a_key(ptr swiftasync %ctx, pt
 ; COMPAT-NEXT:   adrp x15, .Ltmp4
 ; COMPAT-NEXT:   add x15, x15, :lo12:.Ltmp4
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT:   .cfi_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #12
 
 ; V83A-NEXT:     adrp x15, .Ltmp4
 ; V83A-NEXT:     add x15, x15, :lo12:.Ltmp4
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT:     .cfi_set_ra_state 0, 0
 ; V83A-NEXT:     autia1716
 
 ; V9A-NEXT:      adrp x15, .Ltmp4
 ; V9A-NEXT:      add x15, x15, :lo12:.Ltmp4
-; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT:      .cfi_set_ra_state 0, 0
 ; V9A-NEXT:      autia171615
 
 ; PAUTH-NEXT:    autia1716
@@ -377,16 +377,16 @@ define swifttailcc void @indirect_tail_call_fpdiff_b_key(ptr swiftasync %ctx, pt
 ; CHECK-NEXT:    .cfi_b_key_frame
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp5
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp5
 ; COMPAT-NEXT: .Ltmp5:
 ; COMPAT-NEXT:   hint #27
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp5
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp5
 ; V83A-NEXT:   .Ltmp5:
 ; V83A-NEXT:     pacibsp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp5
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp5
 ; V9A-NEXT:    .Ltmp5:
 ; V9A-NEXT:      pacibsppc
 
@@ -426,18 +426,18 @@ define swifttailcc void @indirect_tail_call_fpdiff_b_key(ptr swiftasync %ctx, pt
 ; COMPAT-NEXT:   adrp x15, .Ltmp5
 ; COMPAT-NEXT:   add x15, x15, :lo12:.Ltmp5
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT:   .cfi_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #14
 
 ; V83A-NEXT:     adrp x15, .Ltmp5
 ; V83A-NEXT:     add x15, x15, :lo12:.Ltmp5
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT:     .cfi_set_ra_state 0, 0
 ; V83A-NEXT:     autib1716
 
 ; V9A-NEXT:      adrp x15, .Ltmp5
 ; V9A-NEXT:      add x15, x15, :lo12:.Ltmp5
-; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT:      .cfi_set_ra_state 0, 0
 ; V9A-NEXT:      autib171615
 
 ; PAUTH-NEXT:    autib1716
@@ -455,16 +455,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_a_key(ptr swiftasync %ctx,
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp6
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp6
 ; COMPAT-NEXT: .Ltmp6:
 ; COMPAT-NEXT:   hint #25
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp6
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp6
 ; V83A-NEXT:   .Ltmp6:
 ; V83A-NEXT:     paciasp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp6
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp6
 ; V9A-NEXT:    .Ltmp6:
 ; V9A-NEXT:      paciasppc
 
@@ -491,16 +491,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_a_key(ptr swiftasync %ctx,
 ; COMPAT-NEXT:   adrp x16, .Ltmp6
 ; COMPAT-NEXT:   add x16, x16, :lo12:.Ltmp6
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT:   .cfi_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #29
 
 ; V83A-NEXT:     adrp x16, .Ltmp6
 ; V83A-NEXT:     add x16, x16, :lo12:.Ltmp6
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT:     .cfi_set_ra_state 0, 0
 ; V83A-NEXT:     autiasp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT:      .cfi_set_ra_state 0, 0
 ; V9A-NEXT:      autiasppc .Ltmp6
 
 ; PAUTH-NEXT:    autiasp
@@ -518,16 +518,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_b_key(ptr swiftasync %ctx,
 ; CHECK-NEXT:    .cfi_b_key_frame
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp7
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp7
 ; COMPAT-NEXT: .Ltmp7:
 ; COMPAT-NEXT:   hint #27
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp7
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp7
 ; V83A-NEXT:   .Ltmp7:
 ; V83A-NEXT:     pacibsp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp7
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp7
 ; V9A-NEXT:    .Ltmp7:
 ; V9A-NEXT:      pacibsppc
 
@@ -554,16 +554,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_b_key(ptr swiftasync %ctx,
 ; COMPAT-NEXT:   adrp x16, .Ltmp7
 ; COMPAT-NEXT:   add x16, x16, :lo12:.Ltmp7
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT:   .cfi_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #31
 
 ; V83A-NEXT:     adrp x16, .Ltmp7
 ; V83A-NEXT:     add x16, x16, :lo12:.Ltmp7
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT:     .cfi_set_ra_state 0, 0
 ; V83A-NEXT:     autibsp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT:      .cfi_set_ra_state 0, 0
 ; V9A-NEXT:      autibsppc .Ltmp7
 
 ; PAUTH-NEXT:    autibsp
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
index 2b844efff6456..02bebc85a8f60 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
@@ -89,7 +89,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
 ; COMPAT-LABEL: leaf_sign_all:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp0
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; COMPAT-NEXT:  .Ltmp0:
 ; COMPAT-NEXT:    hint #25
 ; COMPAT-NEXT:    adrp x16, .Ltmp0
@@ -101,7 +101,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
 ; V83A-LABEL: leaf_sign_all:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp0
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; V83A-NEXT:  .Ltmp0:
 ; V83A-NEXT:    paciasp
 ; V83A-NEXT:    adrp x16, .Ltmp0
@@ -111,7 +111,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
 ;
 ; PAUTHLR-LABEL: leaf_sign_all:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp0
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; PAUTHLR-NEXT:  .Ltmp0:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    retaasppc .Ltmp0
@@ -152,7 +152,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
 ; COMPAT-LABEL: leaf_clobbers_lr:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp1
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp1
 ; COMPAT-NEXT:  .Ltmp1:
 ; COMPAT-NEXT:    hint #25
 ; COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -171,7 +171,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
 ; V83A-LABEL: leaf_clobbers_lr:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp1
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp1
 ; V83A-NEXT:  .Ltmp1:
 ; V83A-NEXT:    paciasp
 ; V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -188,7 +188,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
 ;
 ; PAUTHLR-LABEL: leaf_clobbers_lr:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp1
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp1
 ; PAUTHLR-NEXT:  .Ltmp1:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -260,7 +260,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ; COMPAT-LABEL: non_leaf_sign_all:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp2
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp2
 ; COMPAT-NEXT:  .Ltmp2:
 ; COMPAT-NEXT:    hint #25
 ; COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -277,7 +277,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ; V83A-LABEL: non_leaf_sign_all:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp2
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp2
 ; V83A-NEXT:  .Ltmp2:
 ; V83A-NEXT:    paciasp
 ; V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -292,7 +292,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ;
 ; PAUTHLR-LABEL: non_leaf_sign_all:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp2
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp2
 ; PAUTHLR-NEXT:  .Ltmp2:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -354,7 +354,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
 ; COMPAT-LABEL: non_leaf_sign_non_leaf:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp3
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp3
 ; COMPAT-NEXT:  .Ltmp3:
 ; COMPAT-NEXT:    hint #25
 ; COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -371,7 +371,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
 ; V83A-LABEL: non_leaf_sign_non_leaf:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp3
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp3
 ; V83A-NEXT:  .Ltmp3:
 ; V83A-NEXT:    paciasp
 ; V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -386,7 +386,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
 ;
 ; PAUTHLR-LABEL: non_leaf_sign_non_leaf:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp3
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp3
 ; PAUTHLR-NEXT:  .Ltmp3:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -449,7 +449,7 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
 ; CHECK-LABEL: non_leaf_scs:
 ; CHECK:       // %bb.0:
 ; CHECK-NEXT:    hint #39
-; CHECK-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp4
+; CHECK-NEXT:    .cfi_set_ra_state 2, .Ltmp4
 ; CHECK-NEXT:  .Ltmp4:
 ; CHECK-NEXT:    paciasp
 ; CHECK-NEXT:    str x30, [x18], #8
@@ -468,7 +468,7 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
 ;
 ; PAUTHLR-LABEL: non_leaf_scs:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp4
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp4
 ; PAUTHLR-NEXT:  .Ltmp4:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    str x30, [x18], #8
@@ -525,7 +525,7 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ; CHECK-LABEL: leaf_sign_all_v83:
 ; CHECK:       // %bb.0:
 ; CHECK-NEXT:    hint #39
-; CHECK-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp5
+; CHECK-NEXT:    .cfi_set_ra_state 2, .Ltmp5
 ; CHECK-NEXT:  .Ltmp5:
 ; CHECK-NEXT:    paciasp
 ; CHECK-NEXT:    adrp x16, .Ltmp5
@@ -535,7 +535,7 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ;
 ; PAUTHLR-LABEL: leaf_sign_all_v83:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp5
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp5
 ; PAUTHLR-NEXT:  .Ltmp5:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    retaasppc .Ltmp5
@@ -566,7 +566,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
 ; COMPAT-LABEL: spill_lr_and_tail_call:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp6
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp6
 ; COMPAT-NEXT:  .Ltmp6:
 ; COMPAT-NEXT:    hint #25
 ; COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -585,7 +585,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
 ; V83A-LABEL: spill_lr_and_tail_call:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp6
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp6
 ; V83A-NEXT:  .Ltmp6:
 ; V83A-NEXT:    paciasp
 ; V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -603,7 +603,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
 ;
 ; PAUTHLR-LABEL: spill_lr_and_tail_call:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp6
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp6
 ; PAUTHLR-NEXT:  .Ltmp6:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -677,7 +677,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ; COMPAT-LABEL: leaf_sign_all_a_key:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp7
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp7
 ; COMPAT-NEXT:  .Ltmp7:
 ; COMPAT-NEXT:    hint #25
 ; COMPAT-NEXT:    adrp x16, .Ltmp7
@@ -689,7 +689,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ; V83A-LABEL: leaf_sign_all_a_key:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp7
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp7
 ; V83A-NEXT:  .Ltmp7:
 ; V83A-NEXT:    paciasp
 ; V83A-NEXT:    adrp x16, .Ltmp7
@@ -699,7 +699,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ;
 ; PAUTHLR-LABEL: leaf_sign_all_a_key:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp7
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp7
 ; PAUTHLR-NEXT:  .Ltmp7:
 ; PAUTHLR-NEXT:    paciasppc
 ; PAUTHLR-NEXT:    retaasppc .Ltmp7
@@ -741,7 +741,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    .cfi_b_key_frame
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp8
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp8
 ; COMPAT-NEXT:  .Ltmp8:
 ; COMPAT-NEXT:    hint #27
 ; COMPAT-NEXT:    adrp x16, .Ltmp8
@@ -754,7 +754,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    .cfi_b_key_frame
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp8
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp8
 ; V83A-NEXT:  .Ltmp8:
 ; V83A-NEXT:    pacibsp
 ; V83A-NEXT:    adrp x16, .Ltmp8
@@ -765,7 +765,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ; PAUTHLR-LABEL: leaf_sign_all_b_key:
 ; PAUTHLR:       // %bb.0:
 ; PAUTHLR-NEXT:    .cfi_b_key_frame
-; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp8
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp8
 ; PAUTHLR-NEXT:  .Ltmp8:
 ; PAUTHLR-NEXT:    pacibsppc
 ; PAUTHLR-NEXT:    retabsppc .Ltmp8
@@ -810,7 +810,7 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; CHECK:       // %bb.0:
 ; CHECK-NEXT:    .cfi_b_key_frame
 ; CHECK-NEXT:    hint #39
-; CHECK-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp9
+; CHECK-NEXT:    .cfi_set_ra_state 2, .Ltmp9
 ; CHECK-NEXT:  .Ltmp9:
 ; CHECK-NEXT:    pacibsp
 ; CHECK-NEXT:    adrp x16, .Ltmp9
@@ -821,7 +821,7 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; PAUTHLR-LABEL: leaf_sign_all_v83_b_key:
 ; PAUTHLR:       // %bb.0:
 ; PAUTHLR-NEXT:    .cfi_b_key_frame
-; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp9
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp9
 ; PAUTHLR-NEXT:  .Ltmp9:
 ; PAUTHLR-NEXT:    pacibsppc
 ; PAUTHLR-NEXT:    retabsppc .Ltmp9
@@ -854,7 +854,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #34
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp10
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp10
 ; COMPAT-NEXT:  .Ltmp10:
 ; COMPAT-NEXT:    hint #25
 ; COMPAT-NEXT:    adrp x16, .Ltmp10
@@ -867,7 +867,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #34
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp10
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp10
 ; V83A-NEXT:  .Ltmp10:
 ; V83A-NEXT:    paciasp
 ; V83A-NEXT:    adrp x16, .Ltmp10
@@ -877,7 +877,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ;
 ; PAUTHLR-LABEL: leaf_sign_all_a_key_bti:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp10
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp10
 ; PAUTHLR-NEXT:    bti c
 ; PAUTHLR-NEXT:  .Ltmp10:
 ; PAUTHLR-NEXT:    paciasppc
@@ -925,7 +925,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; COMPAT-NEXT:    .cfi_b_key_frame
 ; COMPAT-NEXT:    hint #34
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp11
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp11
 ; COMPAT-NEXT:  .Ltmp11:
 ; COMPAT-NEXT:    hint #27
 ; COMPAT-NEXT:    adrp x16, .Ltmp11
@@ -939,7 +939,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; V83A-NEXT:    .cfi_b_key_frame
 ; V83A-NEXT:    hint #34
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp11
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp11
 ; V83A-NEXT:  .Ltmp11:
 ; V83A-NEXT:    pacibsp
 ; V83A-NEXT:    adrp x16, .Ltmp11
@@ -950,7 +950,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; PAUTHLR-LABEL: leaf_sign_all_b_key_bti:
 ; PAUTHLR:       // %bb.0:
 ; PAUTHLR-NEXT:    .cfi_b_key_frame
-; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp11
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp11
 ; PAUTHLR-NEXT:    bti c
 ; PAUTHLR-NEXT:  .Ltmp11:
 ; PAUTHLR-NEXT:    pacibsppc
@@ -1001,7 +1001,7 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
 ; CHECK-NEXT:    .cfi_b_key_frame
 ; CHECK-NEXT:    hint #34
 ; CHECK-NEXT:    hint #39
-; CHECK-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp12
+; CHECK-NEXT:    .cfi_set_ra_state 2, .Ltmp12
 ; CHECK-NEXT:  .Ltmp12:
 ; CHECK-NEXT:    pacibsp
 ; CHECK-NEXT:    adrp x16, .Ltmp12
@@ -1012,7 +1012,7 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
 ; PAUTHLR-LABEL: leaf_sign_all_v83_b_key_bti:
 ; PAUTHLR:       // %bb.0:
 ; PAUTHLR-NEXT:    .cfi_b_key_frame
-; PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp12
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp12
 ; PAUTHLR-NEXT:    bti c
 ; PAUTHLR-NEXT:  .Ltmp12:
 ; PAUTHLR-NEXT:    pacibsppc
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
index 07ae21464646e..956f481fb2df7 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
@@ -10,7 +10,7 @@ define i32 @f() #0 {
 ; CHECK-NO-PAUTH-NEXT:    dsb sy
 ; CHECK-NO-PAUTH-NEXT:    isb
 ; CHECK-NO-PAUTH-NEXT:    hint #39
-; CHECK-NO-PAUTH-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp0
+; CHECK-NO-PAUTH-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; CHECK-NO-PAUTH-NEXT:  .Ltmp0:
 ; CHECK-NO-PAUTH-NEXT:    hint #25
 ; CHECK-NO-PAUTH-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -32,7 +32,7 @@ define i32 @f() #0 {
 ; CHECK-PAUTH-NEXT:    dsb sy
 ; CHECK-PAUTH-NEXT:    isb
 ; CHECK-PAUTH-NEXT:    hint #39
-; CHECK-PAUTH-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp0
+; CHECK-PAUTH-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; CHECK-PAUTH-NEXT:  .Ltmp0:
 ; CHECK-PAUTH-NEXT:    paciasp
 ; CHECK-PAUTH-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -52,7 +52,7 @@ define i32 @f() #0 {
 ; CHECK-PAUTHLR:       // %bb.0: // %entry
 ; CHECK-PAUTHLR-NEXT:    cmp sp, #0
 ; CHECK-PAUTHLR-NEXT:    csetm x16, ne
-; CHECK-PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp0
+; CHECK-PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; CHECK-PAUTHLR-NEXT:  .Ltmp0:
 ; CHECK-PAUTHLR-NEXT:    paciasppc
 ; CHECK-PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -75,7 +75,7 @@ define i32 @f() #0 {
 ; CHECK-PAUTH-PAUTHLR:       // %bb.0: // %entry
 ; CHECK-PAUTH-PAUTHLR-NEXT:    cmp sp, #0
 ; CHECK-PAUTH-PAUTHLR-NEXT:    csetm x16, ne
-; CHECK-PAUTH-PAUTHLR-NEXT:    .cfi_llvm_set_ra_state 2, .Ltmp0
+; CHECK-PAUTH-PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; CHECK-PAUTH-PAUTHLR-NEXT:  .Ltmp0:
 ; CHECK-PAUTH-PAUTHLR-NEXT:    paciasppc
 ; CHECK-PAUTH-PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address.ll b/llvm/test/CodeGen/AArch64/sign-return-address.ll
index a13e8284dc64e..e552ba5f845cf 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address.ll
@@ -45,7 +45,7 @@ define i32 @leaf_sign_all(i32 %x) "sign-return-address"="all" {
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    hint #29
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
@@ -54,7 +54,7 @@ define i32 @leaf_sign_all(i32 %x) "sign-return-address"="all" {
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    retaa
 ;
 ; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all:
@@ -106,7 +106,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "sign-return-address"="non-leaf"  {
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-COMPAT-NEXT:    .cfi_offset w30, -16
@@ -122,7 +122,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "sign-return-address"="non-leaf"  {
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-V83A-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-V83A-NEXT:    .cfi_offset w30, -16
@@ -212,7 +212,7 @@ define i32 @non_leaf_sign_all(i32 %x) "sign-return-address"="all" {
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-COMPAT-NEXT:    .cfi_offset w30, -16
@@ -226,7 +226,7 @@ define i32 @non_leaf_sign_all(i32 %x) "sign-return-address"="all" {
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-V83A-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-V83A-NEXT:    .cfi_offset w30, -16
@@ -304,7 +304,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf"  {
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-COMPAT-NEXT:    .cfi_offset w30, -16
@@ -318,7 +318,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf"  {
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-V83A-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-V83A-NEXT:    .cfi_offset w30, -16
@@ -397,7 +397,7 @@ define i32 @non_leaf_scs(i32 %x) "sign-return-address"="non-leaf" shadowcallstac
 ; DWARFCFI:       // %bb.0:
 ; DWARFCFI-NEXT:    paciasp
 ; DWARFCFI-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-NEXT:    str x30, [x18], #8
 ; DWARFCFI-NEXT:    .cfi_escape 0x16, 0x12, 0x02, 0x82, 0x78 //
 ; DWARFCFI-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -461,7 +461,7 @@ define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"=
 ; DWARFCFI-COMPAT-NEXT:  // %bb.1: // %if.then
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-COMPAT-NEXT:    .cfi_offset w30, -16
@@ -471,7 +471,7 @@ define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"=
 ; DWARFCFI-COMPAT-NEXT:    .cfi_restore w30
 ; DWARFCFI-COMPAT-NEXT:    hint #29
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 0, 0
+; ALWAYS-CFI-COMPAT:    .cfi_set_ra_state 0, 0
 ; DWARFCFI-COMPAT-NEXT:  .LBB8_2: // %exit
 ; DWARFCFI-COMPAT-NEXT:    adrp x8, var
 ; DWARFCFI-COMPAT-NEXT:    mov w9, #42 // =0x2a
@@ -485,7 +485,7 @@ define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"=
 ; DWARFCFI-V83A-NEXT:  // %bb.1: // %if.then
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-V83A-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-V83A-NEXT:    .cfi_offset w30, -16
@@ -495,7 +495,7 @@ define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"=
 ; DWARFCFI-V83A-NEXT:    .cfi_restore w30
 ; DWARFCFI-V83A-NEXT:    autiasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 0, 0
+; ALWAYS-CFI-V83A:    .cfi_set_ra_state 0, 0
 ; DWARFCFI-V83A-NEXT:  .LBB8_2: // %exit
 ; DWARFCFI-V83A-NEXT:    adrp x8, var
 ; DWARFCFI-V83A-NEXT:    mov w9, #42 // =0x2a
@@ -612,7 +612,7 @@ define void @shrink_wrap_sign_all(i32 %x, i32 %cond) "sign-return-address"="all"
 ; DWARFCFI-COMPAT:       // %bb.0: // %entry
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    cbnz w1, .LBB9_2
 ; DWARFCFI-COMPAT-NEXT:  // %bb.1: // %if.then
 ; DWARFCFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -628,7 +628,7 @@ define void @shrink_wrap_sign_all(i32 %x, i32 %cond) "sign-return-address"="all"
 ; DWARFCFI-COMPAT-NEXT:    str x9, [x8, :lo12:var]
 ; DWARFCFI-COMPAT-NEXT:    hint #29
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 0, 0
+; ALWAYS-CFI-COMPAT:    .cfi_set_ra_state 0, 0
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
 ; DWARFCFI-V83A-LABEL: shrink_wrap_sign_all:
@@ -636,7 +636,7 @@ define void @shrink_wrap_sign_all(i32 %x, i32 %cond) "sign-return-address"="all"
 ; DWARFCFI-V83A:       // %bb.0: // %entry
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    cbnz w1, .LBB9_2
 ; DWARFCFI-V83A-NEXT:  // %bb.1: // %if.then
 ; DWARFCFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -758,7 +758,7 @@ define i32 @leaf_sign_all_v83(i32 %x) "sign-return-address"="all" "target-featur
 ; DWARFCFI:       // %bb.0:
 ; DWARFCFI-NEXT:    paciasp
 ; DWARFCFI-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-NEXT:    retaa
 ;
 ; NEGATE-CFI-LABEL: leaf_sign_all_v83:
@@ -791,7 +791,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "sign-return-address"="all" {
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-COMPAT-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-COMPAT-NEXT:    .cfi_offset w30, -16
@@ -807,7 +807,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "sign-return-address"="all" {
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; DWARFCFI-V83A-NEXT:    .cfi_def_cfa_offset 16
 ; DWARFCFI-V83A-NEXT:    .cfi_offset w30, -16
@@ -898,7 +898,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "sign-return-address"="all" "sign-return
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    hint #29
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
@@ -907,7 +907,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "sign-return-address"="all" "sign-return
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    retaa
 ;
 ; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_a_key:
@@ -960,7 +960,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "sign-return-address"="all" "sign-return
 ; DWARFCFI-COMPAT-NEXT:    .cfi_b_key_frame
 ; DWARFCFI-COMPAT-NEXT:    hint #27
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    hint #31
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
@@ -970,7 +970,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "sign-return-address"="all" "sign-return
 ; DWARFCFI-V83A-NEXT:    .cfi_b_key_frame
 ; DWARFCFI-V83A-NEXT:    pacibsp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    retab
 ;
 ; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_b_key:
@@ -1025,7 +1025,7 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "sign-return-address"="all" "target-
 ; DWARFCFI-NEXT:    .cfi_b_key_frame
 ; DWARFCFI-NEXT:    pacibsp
 ; DWARFCFI-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-NEXT:    retab
 ;
 ; NEGATE-CFI-LABEL: leaf_sign_all_v83_b_key:
@@ -1058,7 +1058,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "sign-return-address"="all" "sign-re
 ; DWARFCFI-COMPAT:       // %bb.0:
 ; DWARFCFI-COMPAT-NEXT:    hint #25
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    hint #29
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
@@ -1067,7 +1067,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "sign-return-address"="all" "sign-re
 ; DWARFCFI-V83A:       // %bb.0:
 ; DWARFCFI-V83A-NEXT:    paciasp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    retaa
 ;
 ; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_a_key_bti:
@@ -1121,7 +1121,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "sign-return-address"="all" "sign-re
 ; DWARFCFI-COMPAT-NEXT:    .cfi_b_key_frame
 ; DWARFCFI-COMPAT-NEXT:    hint #27
 ; DWARFCFI-COMPAT-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-COMPAT-NEXT:    hint #31
 ; DWARFCFI-COMPAT-NEXT:    ret
 ;
@@ -1131,7 +1131,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "sign-return-address"="all" "sign-re
 ; DWARFCFI-V83A-NEXT:    .cfi_b_key_frame
 ; DWARFCFI-V83A-NEXT:    pacibsp
 ; DWARFCFI-V83A-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI-V83A:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-V83A-NEXT:    retab
 ;
 ; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_b_key_bti:
@@ -1187,7 +1187,7 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "sign-return-address"="all" "tar
 ; DWARFCFI-NEXT:    .cfi_b_key_frame
 ; DWARFCFI-NEXT:    pacibsp
 ; DWARFCFI-NEXT:    .cfi_negate_ra_state
-; ALWAYS-CFI:    .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI:    .cfi_set_ra_state 1, 0
 ; DWARFCFI-NEXT:    retab
 ;
 ; NEGATE-CFI-LABEL: leaf_sign_all_v83_b_key_bti:
diff --git a/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll b/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
index 6c099bae66c81..3f5a435a8c3a0 100644
--- a/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
+++ b/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
@@ -20,16 +20,16 @@ define swifttailcc void @caller_to0_from0() "branch-protection-pauth-lr" "sign-r
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp0
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp0
 ; COMPAT-NEXT: .Ltmp0:
 ; COMPAT-NEXT:   hint #25
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp0
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp0
 ; V83A-NEXT:   .Ltmp0:
 ; V83A-NEXT:     paciasp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp0
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp0
 ; V9A-NEXT:    .Ltmp0:
 ; V9A-NEXT:      paciasppc
 
@@ -51,16 +51,16 @@ define swifttailcc void @caller_to0_from0() "branch-protection-pauth-lr" "sign-r
 ; COMPAT-NEXT:   adrp x16, .Ltmp0
 ; COMPAT-NEXT:   add x16, x16, :lo12:.Ltmp0
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT:   .cfi_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #29
 
 ; V83A-NEXT:     adrp x16, .Ltmp0
 ; V83A-NEXT:     add x16, x16, :lo12:.Ltmp0
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT:     .cfi_set_ra_state 0, 0
 ; V83A-NEXT:     autiasp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT:      .cfi_set_ra_state 0, 0
 ; V9A-NEXT:      autiasppc .Ltmp0
 
 ; PAUTH-NEXT:    autiasp
@@ -83,16 +83,16 @@ define swifttailcc void @caller_to0_from8([8 x i64], i64) "branch-protection-pau
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp1
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp1
 ; COMPAT-NEXT: .Ltmp1:
 ; COMPAT-NEXT:   hint #25
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp1
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp1
 ; V83A-NEXT:   .Ltmp1:
 ; V83A-NEXT:     paciasp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp1
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp1
 ; V9A-NEXT:    .Ltmp1:
 ; V9A-NEXT:      paciasppc
 
@@ -115,16 +115,16 @@ define swifttailcc void @caller_to0_from8([8 x i64], i64) "branch-protection-pau
 ; COMPAT-NEXT:   adrp x16, .Ltmp1
 ; COMPAT-NEXT:   add x16, x16, :lo12:.Ltmp1
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT:   .cfi_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #29
 
 ; V83A-NEXT:     adrp x16, .Ltmp1
 ; V83A-NEXT:     add x16, x16, :lo12:.Ltmp1
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT:     .cfi_set_ra_state 0, 0
 ; V83A-NEXT:     autiasp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT:      .cfi_set_ra_state 0, 0
 ; V9A-NEXT:      autiasppc .Ltmp1
 
 ; PAUTH-NEXT:    autiasp
@@ -143,16 +143,16 @@ define swifttailcc void @caller_to8_from0() "branch-protection-pauth-lr" "sign-r
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 2, .Ltmp2
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp2
 ; COMPAT-NEXT: .Ltmp2:
 ; COMPAT-NEXT:   hint #25
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 2, .Ltmp2
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp2
 ; V83A-NEXT:   .Ltmp2:
 ; V83A-NEXT:     paciasp
 
-; V9A-NEXT:      .cfi_llvm_set_ra_state 2, .Ltmp2
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp2
 ; V9A-NEXT:    .Ltmp2:
 ; V9A-NEXT:      paciasppc
 
@@ -178,18 +178,18 @@ define swifttailcc void @caller_to8_from0() "branch-protection-pauth-lr" "sign-r
 ; COMPAT-NEXT:   adrp x15, .Ltmp2
 ; COMPAT-NEXT:   add x15, x15, :lo12:.Ltmp2
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT:   .cfi_set_ra_state 0, 0
 ; COMPAT-NEXT:   hint #12
 
 ; V83A-NEXT:     adrp x15, .Ltmp2
 ; V83A-NEXT:     add x15, x15, :lo12:.Ltmp2
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT:     .cfi_set_ra_state 0, 0
 ; V83A-NEXT:     autia1716
 
 ; V9A-NEXT:      adrp x15, .Ltmp2
 ; V9A-NEXT:      add x15, x15, :lo12:.Ltmp2
-; V9A-NEXT:      .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT:      .cfi_set_ra_state 0, 0
 ; V9A-NEXT:      autia171615
 
 ; PAUTH-NEXT:    autia1716
diff --git a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state-shrinkwrap.s b/llvm/test/MC/AArch64/cfi_set_ra_state-shrinkwrap.s
similarity index 94%
rename from llvm/test/MC/AArch64/cfi_llvm_set_ra_state-shrinkwrap.s
rename to llvm/test/MC/AArch64/cfi_set_ra_state-shrinkwrap.s
index d75c6a164a06d..67c12461c9fd6 100644
--- a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state-shrinkwrap.s
+++ b/llvm/test/MC/AArch64/cfi_set_ra_state-shrinkwrap.s
@@ -5,23 +5,23 @@
   .globl _pauth
 _pauth:
   .cfi_startproc
-  .cfi_llvm_set_ra_state 1, 0
+  .cfi_set_ra_state 1, 0
   pacibsp
 
-  .cfi_llvm_set_ra_state 0, -4
+  .cfi_set_ra_state 0, -4
   retab
   .cfi_endproc
 
 
-# Vanilla ptrauth-returns=pauth-lr frame, with .cfi_llvm_set_ra_state instead of
+# Vanilla ptrauth-returns=pauth-lr frame, with .cfi_set_ra_state instead of
 # the deprecated .cfi_negate_ra_state_with_pc
   .globl _pauthlr
 _pauthlr:
   .cfi_startproc
-  .cfi_llvm_set_ra_state 2, 0
+  .cfi_set_ra_state 2, 0
   pacibsppc
 
-  .cfi_llvm_set_ra_state 0, -4
+  .cfi_set_ra_state 0, -4
   retabsppc _pauthlr
   .cfi_endproc
 
@@ -44,14 +44,14 @@ LBB1:
 
   adrp x16, LBB0 at PAGE
   add x16, x16, LBB0 at PAGEOFF
-  .cfi_llvm_set_ra_state 0, 16
+  .cfi_set_ra_state 0, 16
   autibsppcr x16
 
   mov w0, #42
   ret
 
 LBB0:
-  .cfi_llvm_set_ra_state 2, 0
+  .cfi_set_ra_state 2, 0
   pacibsppc
 
   stp x29, x30, [sp, #-16]!
diff --git a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s b/llvm/test/MC/AArch64/cfi_set_ra_state.s
similarity index 72%
rename from llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s
rename to llvm/test/MC/AArch64/cfi_set_ra_state.s
index f7c48cecbec6a..f42a2f4cbb2bb 100644
--- a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s
+++ b/llvm/test/MC/AArch64/cfi_set_ra_state.s
@@ -5,23 +5,23 @@
 # RUN: llvm-readobj --hex-dump=.eh_frame %t.o | FileCheck %s --check-prefix=HEX
 
   .cfi_startproc
-  .cfi_llvm_set_ra_state 1, 0
-  .cfi_llvm_set_ra_state 2, 0
-  .cfi_llvm_set_ra_state 0, -4
-  .cfi_llvm_set_ra_state 2, LSigningInstrAfter
+  .cfi_set_ra_state 1, 0
+  .cfi_set_ra_state 2, 0
+  .cfi_set_ra_state 0, -4
+  .cfi_set_ra_state 2, LSigningInstrAfter
 LSigningInstrBefore:
   nop
   nop
 LSigningInstrAfter:
-  .cfi_llvm_set_ra_state 2, LSigningInstrBefore
+  .cfi_set_ra_state 2, LSigningInstrBefore
   .cfi_endproc
 
 # ASM:      .cfi_startproc
-# ASM-NEXT: .cfi_llvm_set_ra_state 1, 0
-# ASM-NEXT: .cfi_llvm_set_ra_state 2, 0
-# ASM-NEXT: .cfi_llvm_set_ra_state 0, -4
-# ASM-NEXT: .cfi_llvm_set_ra_state 2, LSigningInstrAfter
-# ASM:      .cfi_llvm_set_ra_state 2, LSigningInstrBefore
+# ASM-NEXT: .cfi_set_ra_state 1, 0
+# ASM-NEXT: .cfi_set_ra_state 2, 0
+# ASM-NEXT: .cfi_set_ra_state 0, -4
+# ASM-NEXT: .cfi_set_ra_state 2, LSigningInstrAfter
+# ASM:      .cfi_set_ra_state 2, LSigningInstrBefore
 # ASM-NEXT: .cfi_endproc
 
 # DWARF:      DW_CFA_AARCH64_set_ra_state: 1 0
diff --git a/llvm/test/MC/AArch64/directives-case_insensitive.s b/llvm/test/MC/AArch64/directives-case_insensitive.s
index a9d67a99e65c0..88f70521543f9 100644
--- a/llvm/test/MC/AArch64/directives-case_insensitive.s
+++ b/llvm/test/MC/AArch64/directives-case_insensitive.s
@@ -33,13 +33,13 @@ fred .REQ x5
 .CFI_STARTPROC
 .CFI_NEGATE_RA_STATE
 .CFI_NEGATE_RA_STATE_WITH_PC
-.CFI_LLVM_SET_RA_STATE 2, 0
+.CFI_SET_RA_STATE 2, 0
 .CFI_B_KEY_FRAME
 .CFI_ENDPROC
 // CHECK: .cfi_startproc
 // CHECK: .cfi_negate_ra_state
 // CHECK: .cfi_negate_ra_state_with_pc
-// CHECK: .cfi_llvm_set_ra_state 2, 0
+// CHECK: .cfi_set_ra_state 2, 0
 // CHECK: .cfi_b_key_frame
 // CHECK: .cfi_endproc
 

>From a8f9de296f863fa6a68aad937cdc52f7839adc97 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 30 Jun 2026 11:09:14 -0700
Subject: [PATCH 29/45] unreachable

---
 llvm/lib/MC/MCDwarf.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp
index 209fcbf056e12..b06ab36d1d66d 100644
--- a/llvm/lib/MC/MCDwarf.cpp
+++ b/llvm/lib/MC/MCDwarf.cpp
@@ -1332,7 +1332,7 @@ void MCCFIInstruction::replaceRegister(unsigned FromReg, unsigned ToReg) {
         ReplaceReg(F.MaskRegister);
       },
       [](LLVMSetRAStateFields &) {
-        assert(false && ".cfi_set_ra_state does not have registers");
+        llvm_unreachable(".cfi_set_ra_state does not have registers");
       });
   std::visit(Visitor, ExtraFields);
 }

>From 76a4edba1e9b63368a3141eb25225dd73f8ad60b Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 30 Jun 2026 12:18:54 -0700
Subject: [PATCH 30/45] fix RA sign state detection

---
 libunwind/src/DwarfInstructions.hpp | 45 ++++++++++++-----------------
 1 file changed, 18 insertions(+), 27 deletions(-)

diff --git a/libunwind/src/DwarfInstructions.hpp b/libunwind/src/DwarfInstructions.hpp
index 0133b2dd330e7..83cceb7eb0cb1 100644
--- a/libunwind/src/DwarfInstructions.hpp
+++ b/libunwind/src/DwarfInstructions.hpp
@@ -76,10 +76,14 @@ class DwarfInstructions {
     __builtin_unreachable();
   }
 #if defined(_LIBUNWIND_TARGET_AARCH64)
-  static bool isReturnAddressSigned(A &addressSpace, R registers, pint_t cfa,
-                                    PrologInfo &prolog);
-  static bool isReturnAddressSignedWithPC(A &addressSpace, R registers,
-                                          pint_t cfa, PrologInfo &prolog);
+  enum RASignStatus {
+    RANotSigned = 0,
+    RASigned = 1,
+    RASignedWithPC = 2,
+  };
+  static RASignStatus getReturnAddressSignStatus(A &addressSpace, R registers,
+                                                 pint_t cfa,
+                                                 PrologInfo &prolog);
 #endif
 };
 
@@ -185,7 +189,8 @@ v128 DwarfInstructions<A, R>::getSavedVectorRegister(
 }
 #if defined(_LIBUNWIND_TARGET_AARCH64)
 template <typename A, typename R>
-bool DwarfInstructions<A, R>::isReturnAddressSigned(A &addressSpace,
+DwarfInstructions<A, R>::RASignStatus
+DwarfInstructions<A, R>::getReturnAddressSignStatus(A &addressSpace,
                                                     R registers, pint_t cfa,
                                                     PrologInfo &prolog) {
   pint_t raSignState;
@@ -195,24 +200,9 @@ bool DwarfInstructions<A, R>::isReturnAddressSigned(A &addressSpace,
   else
     raSignState = getSavedRegister(addressSpace, registers, cfa, regloc);
 
-  // Only bit[0] is meaningful.
-  return raSignState & 0x01;
-}
-
-template <typename A, typename R>
-bool DwarfInstructions<A, R>::isReturnAddressSignedWithPC(A &addressSpace,
-                                                          R registers,
-                                                          pint_t cfa,
-                                                          PrologInfo &prolog) {
-  pint_t raSignState;
-  auto regloc = prolog.savedRegisters[UNW_AARCH64_RA_SIGN_STATE];
-  if (regloc.location == CFI_Parser<A>::kRegisterUnused)
-    raSignState = static_cast<pint_t>(regloc.value);
-  else
-    raSignState = getSavedRegister(addressSpace, registers, cfa, regloc);
-
-  // Only bit[1] is meaningful.
-  return raSignState & 0x02;
+  // bits[1:0] describe how RA is signed.
+  assert((raSignState & 0x3) != 3 && "unexpected RA sign state");
+  return static_cast<RASignStatus>(raSignState & 0x3);
 }
 #endif
 
@@ -325,8 +315,9 @@ int DwarfInstructions<A, R>::stepWithDwarf(
       // return address needs to be authenticated before the return address is
       // restored. autia1716 is used instead of autia as autia1716 assembles
       // to a NOP on pre-v8.3a architectures.
-      if ((R::getArch() == REGISTERS_ARM64) &&
-          isReturnAddressSigned(addressSpace, registers, cfa, prolog) &&
+      RASignStatus RAState =
+          getReturnAddressSignStatus(addressSpace, registers, cfa, prolog);
+      if ((R::getArch() == REGISTERS_ARM64) && RAState != RANotSigned &&
           returnAddress != 0) {
 #if !defined(_LIBUNWIND_IS_NATIVE_ONLY)
         return UNW_ECROSSRASIGNING;
@@ -337,9 +328,9 @@ int DwarfInstructions<A, R>::stepWithDwarf(
         // We use the hint versions of the authentication instructions below to
         // ensure they're assembled by the compiler even for targets with no
         // FEAT_PAuth/FEAT_PAuth_LR support.
-        if (isReturnAddressSignedWithPC(addressSpace, registers, cfa, prolog)) {
+        if (RAState == RASignedWithPC) {
           register unsigned long long x15 __asm("x15") =
-              prolog.ptrAuthDiversifier;
+                prolog.ptrAuthDiversifier;
           if (cieInfo.addressesSignedWithBKey) {
             asm("hint 0x27\n\t" // pacm
                 "hint 0xe"

>From a9324dd801af66e395e05986f81923cd534ef43a Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 30 Jun 2026 12:39:43 -0700
Subject: [PATCH 31/45] clang-format

---
 llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp | 3 +--
 llvm/lib/Target/AArch64/AArch64PointerAuth.cpp  | 5 ++---
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
index 01a1bbabf02a2..b0de5f563ac29 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
@@ -240,8 +240,7 @@ void AsmPrinter::emitCFIInstruction(const MCCFIInstruction &Inst) const {
     break;
   case MCCFIInstruction::OpLLVMSetRAState: {
     if (MCSymbol *Symbol = Inst.getRASignSymbol())
-      OutStreamer->emitCFILLVMSetRAState(Inst.getRASignState(),
-                                         Symbol, Loc);
+      OutStreamer->emitCFILLVMSetRAState(Inst.getRASignState(), Symbol, Loc);
     else
       OutStreamer->emitCFILLVMSetRAState(Inst.getRASignState(),
                                          Inst.getRASignOffset(), Loc);
diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index 9d14367d42be4..e345bd168a5b7 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -48,9 +48,8 @@ enum class SetRAStateMode {
 };
 cl::opt<SetRAStateMode> CFILLVMSetRASignStateMode(
     "aarch64-cfi-llvm-set-ra-sign-state", cl::init(SetRAStateMode::PAuthLR),
-    cl::desc(
-        "Control emission of .cfi_set_ra_state for PAC return address "
-        "signing CFI"),
+    cl::desc("Control emission of .cfi_set_ra_state for PAC return address "
+             "signing CFI"),
     cl::values(clEnumValN(SetRAStateMode::Never, "never",
                           "Always use legacy .cfi_negate_ra_state[_with_pc]"),
                clEnumValN(SetRAStateMode::PAuthLR, "pauth-lr",

>From 8b15f9954d3c73854a60d7a062c519ded338883c Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 30 Jun 2026 12:41:27 -0700
Subject: [PATCH 32/45] typename

---
 libunwind/src/DwarfInstructions.hpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libunwind/src/DwarfInstructions.hpp b/libunwind/src/DwarfInstructions.hpp
index 83cceb7eb0cb1..3f000921554c6 100644
--- a/libunwind/src/DwarfInstructions.hpp
+++ b/libunwind/src/DwarfInstructions.hpp
@@ -189,7 +189,7 @@ v128 DwarfInstructions<A, R>::getSavedVectorRegister(
 }
 #if defined(_LIBUNWIND_TARGET_AARCH64)
 template <typename A, typename R>
-DwarfInstructions<A, R>::RASignStatus
+typename DwarfInstructions<A, R>::RASignStatus
 DwarfInstructions<A, R>::getReturnAddressSignStatus(A &addressSpace,
                                                     R registers, pint_t cfa,
                                                     PrologInfo &prolog) {

>From 046c9e6d4e16ab5ef7352d061d703507e2264ac0 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 1 Jul 2026 09:29:17 -0700
Subject: [PATCH 33/45] clang-format

---
 libunwind/src/DwarfInstructions.hpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libunwind/src/DwarfInstructions.hpp b/libunwind/src/DwarfInstructions.hpp
index 3f000921554c6..267ee6ab4693d 100644
--- a/libunwind/src/DwarfInstructions.hpp
+++ b/libunwind/src/DwarfInstructions.hpp
@@ -330,7 +330,7 @@ int DwarfInstructions<A, R>::stepWithDwarf(
         // FEAT_PAuth/FEAT_PAuth_LR support.
         if (RAState == RASignedWithPC) {
           register unsigned long long x15 __asm("x15") =
-                prolog.ptrAuthDiversifier;
+              prolog.ptrAuthDiversifier;
           if (cieInfo.addressesSignedWithBKey) {
             asm("hint 0x27\n\t" // pacm
                 "hint 0xe"

>From f8b6bbe0c5b9cf7ba65d3697bfbb4c6fd8f9ab90 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 2 Jul 2026 13:05:03 -0700
Subject: [PATCH 34/45] relax ra sign state checks on
 !_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING

---
 libunwind/test/ra_sign_state.pass.cpp | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 2244cddca0786..9649ffc6afa5b 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -89,8 +89,6 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
 
 #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
   assert(ra_sign_state == 1 || ra_sign_state == 2);
-#else
-  assert(ra_sign_state == 0);
 #endif
 
   return _URC_NO_REASON;
@@ -139,8 +137,6 @@ FUNC_ATTR(main_func) int main(int, char **) {
   ret = check_vanilla("check_vanilla");
 #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
   assert(ret == 1 || ret == 2);
-#else
-  assert(ret == 0);
 #endif
 
   if (!checkHasPAuth()) {

>From 0ee9034303e03388440b807b147e8f04c3bb977e Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 2 Jul 2026 13:12:32 -0700
Subject: [PATCH 35/45] streamline printf debug

---
 libunwind/test/ra_sign_state.pass.cpp | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 9649ffc6afa5b..0db48abd5151c 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -76,6 +76,10 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
       (uint64_t)_Unwind_GetGR(ctx, UNW_AARCH64_RA_SIGN_STATE);
 
   uintptr_t ip = _Unwind_GetIP(ctx);
+
+  printf("UNW_AARCH64_RA_SIGN_STATE @ 0x%" PRIx64 " = %" PRIu64 "\n", ip,
+         ra_sign_state);
+
   if (ip >= (uintptr_t)FUNC_START(main_func) &&
       ip < (uintptr_t)FUNC_END(main_func)) {
 
@@ -94,22 +98,18 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
   return _URC_NO_REASON;
 }
 
-__attribute__((noinline)) extern "C" uintptr_t
-get_main_ra_sign_state(const char *note) {
-  printf("check: %s\n", note);
+__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state() {
   uint64_t sign_state = -1;
   _Unwind_Backtrace(frame_handler, &sign_state);
-  printf("UNW_AARCH64_RA_SIGN_STATE for %s = %" PRIu64 "\n", note, sign_state);
   assert((sign_state & 0x3) == sign_state);
   return sign_state;
 }
 
-__attribute__((noinline)) static uint64_t check_vanilla(const char *note) {
-  return get_main_ra_sign_state(note);
+__attribute__((noinline)) static uint64_t check_vanilla() {
+  return get_main_ra_sign_state();
 }
 
-__attribute__((naked, target("pauth"))) static uint64_t
-check_negate(const char *note) {
+__attribute__((naked, target("pauth"))) static uint64_t check_negate() {
   // clang-format off
   asm(".cfi_negate_ra_state\n"
       "pacibsp\n"
@@ -134,7 +134,7 @@ check_negate(const char *note) {
 FUNC_ATTR(main_func) int main(int, char **) {
   uint64_t ret;
 
-  ret = check_vanilla("check_vanilla");
+  ret = check_vanilla();
 #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
   assert(ret == 1 || ret == 2);
 #endif
@@ -144,7 +144,7 @@ FUNC_ATTR(main_func) int main(int, char **) {
     return 0;
   }
 
-  ret = check_negate("check_negate");
+  ret = check_negate();
   assert(ret == 1);
 
   printf("success\n");

>From 408a3beb61645b529a375a1ac61df67726548f4d Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 2 Jul 2026 15:55:15 -0700
Subject: [PATCH 36/45] PRIxPTR

---
 libunwind/test/ra_sign_state.pass.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 0db48abd5151c..13159131ee619 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -77,7 +77,7 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
 
   uintptr_t ip = _Unwind_GetIP(ctx);
 
-  printf("UNW_AARCH64_RA_SIGN_STATE @ 0x%" PRIx64 " = %" PRIu64 "\n", ip,
+  printf("UNW_AARCH64_RA_SIGN_STATE @ 0x%" PRIxPTR " = %" PRIu64 "\n", ip,
          ra_sign_state);
 
   if (ip >= (uintptr_t)FUNC_START(main_func) &&

>From b7ac51e9554fb94b7e3978a6fa303101a5c142fc Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 2 Jul 2026 15:55:15 -0700
Subject: [PATCH 37/45] PRIxPTR

---
 libunwind/test/ra_sign_state.pass.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 5a15e39c7bdb2..9a5230a588cd9 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -80,7 +80,7 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
 
   uintptr_t ip = _Unwind_GetIP(ctx);
 
-  printf("UNW_AARCH64_RA_SIGN_STATE @ 0x%" PRIx64 " = %" PRIu64 "\n", ip,
+  printf("UNW_AARCH64_RA_SIGN_STATE @ 0x%" PRIxPTR " = %" PRIu64 "\n", ip,
          ra_sign_state);
 
   if (ip >= (uintptr_t)FUNC_START(main_func) &&

>From 832270f1217ff48242761f1d551d57a887c2b29e Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Mon, 6 Jul 2026 16:23:05 -0700
Subject: [PATCH 38/45] s/createLLVMSetRAState/createSetRAState/g

---
 llvm/include/llvm/CodeGen/CFIInstBuilder.h |  3 +--
 llvm/include/llvm/MC/MCDwarf.h             | 10 +++++-----
 llvm/lib/CodeGen/MIRParser/MIParser.cpp    |  4 ++--
 llvm/lib/MC/MCStreamer.cpp                 |  4 ++--
 4 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/llvm/include/llvm/CodeGen/CFIInstBuilder.h b/llvm/include/llvm/CodeGen/CFIInstBuilder.h
index 414fee4b38a77..fa64ab6d6c23f 100644
--- a/llvm/include/llvm/CodeGen/CFIInstBuilder.h
+++ b/llvm/include/llvm/CodeGen/CFIInstBuilder.h
@@ -89,8 +89,7 @@ class CFIInstBuilder {
   }
 
   void buildSetRAState(unsigned State, MCSymbol *PACSym) const {
-    insertCFIInst(
-        MCCFIInstruction::createLLVMSetRAState(nullptr, State, PACSym));
+    insertCFIInst(MCCFIInstruction::createSetRAState(nullptr, State, PACSym));
   }
 
   void buildRegister(MCRegister Reg1, MCRegister Reg2) const {
diff --git a/llvm/include/llvm/MC/MCDwarf.h b/llvm/include/llvm/MC/MCDwarf.h
index b570a9659f108..efb32acd919e2 100644
--- a/llvm/include/llvm/MC/MCDwarf.h
+++ b/llvm/include/llvm/MC/MCDwarf.h
@@ -705,16 +705,16 @@ class MCCFIInstruction {
 
   /// .cfi_set_ra_state AArch64 set RA sign state,
   // with a symbolic offset to the signing instruction.
-  static MCCFIInstruction createLLVMSetRAState(MCSymbol *L, unsigned State,
-                                               MCSymbol *PACSym = nullptr,
-                                               SMLoc Loc = {}) {
+  static MCCFIInstruction createSetRAState(MCSymbol *L, unsigned State,
+                                           MCSymbol *PACSym = nullptr,
+                                           SMLoc Loc = {}) {
     return {OpLLVMSetRAState, L, LLVMSetRAStateFields{State, PACSym, 0}, Loc};
   }
 
   /// .cfi_set_ra_state AArch64 set RA sign state,
   /// with a pre-computed factored offset to the signing instruction.
-  static MCCFIInstruction createLLVMSetRAState(MCSymbol *L, unsigned State,
-                                               int64_t Offset, SMLoc Loc = {}) {
+  static MCCFIInstruction createSetRAState(MCSymbol *L, unsigned State,
+                                           int64_t Offset, SMLoc Loc = {}) {
     return {OpLLVMSetRAState, L, LLVMSetRAStateFields{State, nullptr, Offset},
             Loc};
   }
diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
index fb858c81c735c..0c2c31247ebb8 100644
--- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
@@ -2862,13 +2862,13 @@ bool MIParser::parseCFIOperand(MachineOperand &Dest) {
       PACSym = getOrCreateMCSymbol(Token.stringValue());
       lex();
       CFIIndex = MF.addFrameInst(
-          MCCFIInstruction::createLLVMSetRAState(nullptr, State, PACSym));
+          MCCFIInstruction::createSetRAState(nullptr, State, PACSym));
     } else if (Token.is(MIToken::IntegerLiteral)) {
       int Offset;
       if (parseCFIOffset(Offset))
         return true;
       CFIIndex = MF.addFrameInst(
-          MCCFIInstruction::createLLVMSetRAState(nullptr, State, Offset));
+          MCCFIInstruction::createSetRAState(nullptr, State, Offset));
     } else {
       return error("expected '<mcsymbol ...>' or integer offset for "
                    "cfi_set_ra_state");
diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp
index 7ca8658f53afc..cf1ae4373b195 100644
--- a/llvm/lib/MC/MCStreamer.cpp
+++ b/llvm/lib/MC/MCStreamer.cpp
@@ -752,7 +752,7 @@ void MCStreamer::emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
                                        SMLoc Loc) {
   MCSymbol *Label = emitCFILabel();
   MCCFIInstruction Instruction =
-      MCCFIInstruction::createLLVMSetRAState(Label, State, PACSym, Loc);
+      MCCFIInstruction::createSetRAState(Label, State, PACSym, Loc);
   MCDwarfFrameInfo *CurFrame = getCurrentDwarfFrameInfo();
   if (!CurFrame)
     return;
@@ -763,7 +763,7 @@ void MCStreamer::emitCFILLVMSetRAState(unsigned State, int64_t Offset,
                                        SMLoc Loc) {
   MCSymbol *Label = emitCFILabel();
   MCCFIInstruction Instruction =
-      MCCFIInstruction::createLLVMSetRAState(Label, State, Offset, Loc);
+      MCCFIInstruction::createSetRAState(Label, State, Offset, Loc);
   MCDwarfFrameInfo *CurFrame = getCurrentDwarfFrameInfo();
   if (!CurFrame)
     return;

>From 9bc821a1b56d91f07f939d097f2b7c19773459a1 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Mon, 6 Jul 2026 16:25:38 -0700
Subject: [PATCH 39/45] comment -> var names

---
 .../llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h        | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h b/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h
index 6e4aca5c0a8fb..529cbcb2a88bf 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h
@@ -123,10 +123,9 @@ class CFIProgram {
         addInstruction(Opcode);
         break;
       case DW_CFA_AARCH64_set_ra_state: {
-        // Operands: ULEB128 ra_state, SLEB128 offset
-        uint64_t Op1 = Data.getULEB128(C);
-        uint64_t Op2 = (uint64_t)Data.getSLEB128(C);
-        addInstruction(Opcode, Op1, Op2);
+        uint64_t RAState = Data.getULEB128(C);
+        uint64_t FactoredOffset = (uint64_t)Data.getSLEB128(C);
+        addInstruction(Opcode, RAState, FactoredOffset);
         break;
       }
       case DW_CFA_set_loc:

>From 8af03bbbb3f1fd62c44b7bc43ebe6e91834c543e Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Mon, 6 Jul 2026 16:27:03 -0700
Subject: [PATCH 40/45] clarify that zero offset's are okay

---
 llvm/include/llvm/MC/MCDwarf.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/llvm/include/llvm/MC/MCDwarf.h b/llvm/include/llvm/MC/MCDwarf.h
index efb32acd919e2..3534a4f349331 100644
--- a/llvm/include/llvm/MC/MCDwarf.h
+++ b/llvm/include/llvm/MC/MCDwarf.h
@@ -601,10 +601,10 @@ class MCCFIInstruction {
     /// or DW_AARCH64_RA_SIGNED_SP_PC).
     unsigned State;
     /// Symbol pointing to the signing instruction.
-    /// Precisely one of \p PACSym xor \p Offset should be non-zero.
+    /// Precisely one of \p PACSym xor \p Offset should be set.
     MCSymbol *PACSym;
     /// Factored offset to the signing instruction.
-    /// Precisely one of \p PACSym xor \p Offset should be non-zero.
+    /// Precisely one of \p PACSym xor \p Offset should be set.
     int64_t Offset;
   };
 

>From 9d748a462296e8fcd0d06f7be9f6f601ebaaa0f5 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Mon, 6 Jul 2026 16:28:25 -0700
Subject: [PATCH 41/45] clarify pronoun

---
 llvm/lib/Target/AArch64/AArch64PointerAuth.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index e345bd168a5b7..718a135285636 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -37,7 +37,8 @@ namespace {
 ///
 /// Since .cfi_negate_ra_state is still sufficient for describing
 /// ptrauth-returns=pauth, we default to using the new CFI only for PAuth_LR, as
-/// it is a smaller encoding than DW_CFA_AARCH64_set_ra_state.
+/// DW_CFA_AARCH64_negate_ra_state has a smaller encoding than
+/// DW_CFA_AARCH64_set_ra_state.
 ///
 /// 1: https://github.com/ARM-software/abi-aa/pull/346
 /// 2: https://github.com/ARM-software/abi-aa/issues/327

>From 9fe6ee2cef1093ab8a0d5be2844a9362f1ca8f0e Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 7 Jul 2026 14:09:43 -0700
Subject: [PATCH 42/45] refactor emitPACCFI into decoratePACWithCFI. NFC

---
 .../lib/Target/AArch64/AArch64PointerAuth.cpp | 59 +++++++++++++------
 1 file changed, 41 insertions(+), 18 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index 718a135285636..a2b2753a9d04a 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -110,10 +110,18 @@ static void emitEpiloguePACSymOffsetIntoReg(const TargetInstrInfo &TII,
       .setMIFlag(MachineInstr::FrameDestroy);
 }
 
-static void emitPACCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
-                       bool EmitCFI, MCSymbol *PACSym) {
-  if (!EmitCFI)
+// Wrap a given PAC instruction in CFI that describes it.
+// Depending on the type of CFI required, we may need to emit the directive
+// either before or after the instruction, so that unwinders can correctly
+// interpret the location of the signing instruction.
+template <typename BuildPACMIFn>
+static void decoratePACWithCFI(MachineBasicBlock &MBB,
+                               MachineBasicBlock::iterator MBBI, bool EmitCFI,
+                               BuildPACMIFn BuildPACMI) {
+  if (!EmitCFI) {
+    BuildPACMI();
     return;
+  }
 
   auto &MF = *MBB.getParent();
   auto &MFnI = *MF.getInfo<AArch64FunctionInfo>();
@@ -123,21 +131,36 @@ static void emitPACCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
   if (MFnI.branchProtectionPAuthLR()) {
     switch (CFILLVMSetRASignStateMode) {
     case SetRAStateMode::Never:
+      // .cfi_negate_ra_state_with_pc always comes before the paci[ab]sppc,
+      // since the unwinder uses the location of the CFI itself to derive the
+      // address of the signing instruction.
       CFIBuilder.buildNegateRAStateWithPC();
+      BuildPACMI();
       break;
     case SetRAStateMode::PAuthLR:
-    case SetRAStateMode::Always:
+    case SetRAStateMode::Always: {
+      MCSymbol *PACSym = MFnI.getSigningInstrLabel();
       assert(PACSym && "No PAC instruction to refer to");
       CFIBuilder.buildSetRAState(2, PACSym);
+      BuildPACMI();
       break;
     }
-  } else if (!TT.isOSBinFormatMachO()) {
+    }
+  } else {
     switch (CFILLVMSetRASignStateMode) {
     case SetRAStateMode::Never:
     case SetRAStateMode::PAuthLR:
-      CFIBuilder.buildNegateRAState();
+      // .cfi_negate_ra_state always comes after the paci[ab]sp, following the
+      // normal conventions for DWARF CFI opcodes, which describe how to
+      // recover the current register state, given the PC of an instruction
+      // that has not yet retired.
+      BuildPACMI();
+      if (!TT.isOSBinFormatMachO()) {
+        CFIBuilder.buildNegateRAState();
+      }
       break;
     case SetRAStateMode::Always:
+      BuildPACMI();
       CFIBuilder.buildSetRAState(1, nullptr);
       break;
     }
@@ -236,23 +259,23 @@ void AArch64PointerAuthImpl::signLR(MachineFunction &MF,
   // No SEH opcode for this one; it doesn't materialize into an
   // instruction on Windows.
   if (MFnI.branchProtectionPAuthLR() && Subtarget->hasPAuthLR()) {
-    emitPACCFI(MBB, MBBI, EmitCFI, MFnI.getSigningInstrLabel());
-    BuildMI(MBB, MBBI, DL,
-            TII->get(UseBKey ? AArch64::PACIBSPPC : AArch64::PACIASPPC))
-        .setMIFlag(MachineInstr::FrameSetup)
-        ->setPreInstrSymbol(MF, MFnI.getSigningInstrLabel());
+    decoratePACWithCFI(MBB, MBBI, EmitCFI, [&](){
+      BuildMI(MBB, MBBI, DL,
+              TII->get(UseBKey ? AArch64::PACIBSPPC : AArch64::PACIASPPC))
+          .setMIFlag(MachineInstr::FrameSetup)
+          ->setPreInstrSymbol(MF, MFnI.getSigningInstrLabel());
+    });
   } else {
     if (MFnI.branchProtectionPAuthLR()) {
       BuildMI(MBB, MBBI, DL, TII->get(AArch64::PACM))
           .setMIFlag(MachineInstr::FrameSetup);
-      emitPACCFI(MBB, MBBI, EmitCFI, MFnI.getSigningInstrLabel());
     }
-    BuildMI(MBB, MBBI, DL,
-            TII->get(UseBKey ? AArch64::PACIBSP : AArch64::PACIASP))
-        .setMIFlag(MachineInstr::FrameSetup)
-        ->setPreInstrSymbol(MF, MFnI.getSigningInstrLabel());
-    if (!MFnI.branchProtectionPAuthLR())
-      emitPACCFI(MBB, MBBI, EmitCFI, nullptr);
+    decoratePACWithCFI(MBB, MBBI, EmitCFI, [&](){
+      BuildMI(MBB, MBBI, DL,
+              TII->get(UseBKey ? AArch64::PACIBSP : AArch64::PACIASP))
+          .setMIFlag(MachineInstr::FrameSetup)
+          ->setPreInstrSymbol(MF, MFnI.getSigningInstrLabel());
+    });
   }
 
   if (!EmitCFI && NeedsWinCFI) {

>From 4daa788cd43f98db90c3522eb6732a3ddf2cbf81 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 7 Jul 2026 14:45:59 -0700
Subject: [PATCH 43/45] move .cfi_set_ra_state _after_ the paci[ab]sppc

---
 .../lib/Target/AArch64/AArch64PointerAuth.cpp | 17 ++---
 .../AArch64/pauth-lr-tail-call-fpdiff.ll      | 48 ++++++-------
 .../sign-return-address-pauth-lr-mir.ll       | 68 +++++++++---------
 .../AArch64/sign-return-address-pauth-lr.ll   | 70 +++++++++----------
 .../sign-return-address-pauthlr-slh.ll        |  8 +--
 .../test/CodeGen/AArch64/swifttail-ptrauth.ll | 18 ++---
 .../MC/AArch64/cfi_set_ra_state-shrinkwrap.s  | 10 +--
 7 files changed, 120 insertions(+), 119 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index a2b2753a9d04a..3f79eb7bbe7f4 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -111,9 +111,17 @@ static void emitEpiloguePACSymOffsetIntoReg(const TargetInstrInfo &TII,
 }
 
 // Wrap a given PAC instruction in CFI that describes it.
+//
 // Depending on the type of CFI required, we may need to emit the directive
 // either before or after the instruction, so that unwinders can correctly
 // interpret the location of the signing instruction.
+//
+// As a general rule, CFI opcodes describe the actions needed to recover the
+// register state leading up to a not-yet-retired instruction, with one
+// exception: .cfi_negate_ra_state_with_pc always comes before the paci[ab]sppc,
+// since the unwinder uses the location of the CFI itself to derive the address
+// of the signing instruction [1].
+// 1: https://github.com/llvm/llvm-project/pull/137795#issuecomment-2838779129
 template <typename BuildPACMIFn>
 static void decoratePACWithCFI(MachineBasicBlock &MBB,
                                MachineBasicBlock::iterator MBBI, bool EmitCFI,
@@ -131,18 +139,15 @@ static void decoratePACWithCFI(MachineBasicBlock &MBB,
   if (MFnI.branchProtectionPAuthLR()) {
     switch (CFILLVMSetRASignStateMode) {
     case SetRAStateMode::Never:
-      // .cfi_negate_ra_state_with_pc always comes before the paci[ab]sppc,
-      // since the unwinder uses the location of the CFI itself to derive the
-      // address of the signing instruction.
       CFIBuilder.buildNegateRAStateWithPC();
       BuildPACMI();
       break;
     case SetRAStateMode::PAuthLR:
     case SetRAStateMode::Always: {
+      BuildPACMI();
       MCSymbol *PACSym = MFnI.getSigningInstrLabel();
       assert(PACSym && "No PAC instruction to refer to");
       CFIBuilder.buildSetRAState(2, PACSym);
-      BuildPACMI();
       break;
     }
     }
@@ -150,10 +155,6 @@ static void decoratePACWithCFI(MachineBasicBlock &MBB,
     switch (CFILLVMSetRASignStateMode) {
     case SetRAStateMode::Never:
     case SetRAStateMode::PAuthLR:
-      // .cfi_negate_ra_state always comes after the paci[ab]sp, following the
-      // normal conventions for DWARF CFI opcodes, which describe how to
-      // recover the current register state, given the PC of an instruction
-      // that has not yet retired.
       BuildPACMI();
       if (!TT.isOSBinFormatMachO()) {
         CFIBuilder.buildNegateRAState();
diff --git a/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll b/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
index e1aa437195e90..758220afb0260 100644
--- a/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
+++ b/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
@@ -18,18 +18,18 @@ define swifttailcc void @tail_call_fpdiff_a_key(ptr swiftasync %ctx) "branch-pro
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp0
 ; COMPAT-NEXT: .Ltmp0:
 ; COMPAT-NEXT:   hint #25
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp0
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp0
 ; V83A-NEXT:   .Ltmp0:
 ; V83A-NEXT:     paciasp
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp0
 
-; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp0
 ; V9A-NEXT:    .Ltmp0:
 ; V9A-NEXT:      paciasppc
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp0
 
 ; PAUTH-NEXT:    paciasp
 ; PAUTH-NEXT:    .cfi_negate_ra_state
@@ -96,18 +96,18 @@ define swifttailcc void @tail_call_fpdiff_b_key(ptr swiftasync %ctx) "branch-pro
 ; CHECK-NEXT:    .cfi_b_key_frame
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp1
 ; COMPAT-NEXT: .Ltmp1:
 ; COMPAT-NEXT:   hint #27
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp1
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp1
 ; V83A-NEXT:   .Ltmp1:
 ; V83A-NEXT:     pacibsp
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp1
 
-; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp1
 ; V9A-NEXT:    .Ltmp1:
 ; V9A-NEXT:      pacibsppc
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp1
 
 ; PAUTH-NEXT:    pacibsp
 ; PAUTH-NEXT:    .cfi_negate_ra_state
@@ -173,18 +173,18 @@ define swifttailcc void @tail_call_no_fpdiff_a_key(ptr swiftasync %ctx) "branch-
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp2
 ; COMPAT-NEXT: .Ltmp2:
 ; COMPAT-NEXT:   hint #25
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp2
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp2
 ; V83A-NEXT:   .Ltmp2:
 ; V83A-NEXT:     paciasp
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp2
 
-; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp2
 ; V9A-NEXT:    .Ltmp2:
 ; V9A-NEXT:      paciasppc
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp2
 
 ; PAUTH-NEXT:    paciasp
 ; PAUTH-NEXT:    .cfi_negate_ra_state
@@ -236,18 +236,18 @@ define swifttailcc void @tail_call_no_fpdiff_b_key(ptr swiftasync %ctx) "branch-
 ; CHECK-NEXT:    .cfi_b_key_frame
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp3
 ; COMPAT-NEXT: .Ltmp3:
 ; COMPAT-NEXT:   hint #27
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp3
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp3
 ; V83A-NEXT:   .Ltmp3:
 ; V83A-NEXT:     pacibsp
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp3
 
-; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp3
 ; V9A-NEXT:    .Ltmp3:
 ; V9A-NEXT:      pacibsppc
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp3
 
 ; PAUTH-NEXT:    pacibsp
 ; PAUTH-NEXT:    .cfi_negate_ra_state
@@ -298,18 +298,18 @@ define swifttailcc void @indirect_tail_call_fpdiff_a_key(ptr swiftasync %ctx, pt
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp4
 ; COMPAT-NEXT: .Ltmp4:
 ; COMPAT-NEXT:   hint #25
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp4
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp4
 ; V83A-NEXT:   .Ltmp4:
 ; V83A-NEXT:     paciasp
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp4
 
-; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp4
 ; V9A-NEXT:    .Ltmp4:
 ; V9A-NEXT:      paciasppc
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp4
 
 ; PAUTH-NEXT:    paciasp
 ; PAUTH-NEXT:    .cfi_negate_ra_state
@@ -377,18 +377,18 @@ define swifttailcc void @indirect_tail_call_fpdiff_b_key(ptr swiftasync %ctx, pt
 ; CHECK-NEXT:    .cfi_b_key_frame
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp5
 ; COMPAT-NEXT: .Ltmp5:
 ; COMPAT-NEXT:   hint #27
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp5
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp5
 ; V83A-NEXT:   .Ltmp5:
 ; V83A-NEXT:     pacibsp
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp5
 
-; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp5
 ; V9A-NEXT:    .Ltmp5:
 ; V9A-NEXT:      pacibsppc
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp5
 
 ; PAUTH-NEXT:    pacibsp
 ; PAUTH-NEXT:    .cfi_negate_ra_state
@@ -455,18 +455,18 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_a_key(ptr swiftasync %ctx,
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp6
 ; COMPAT-NEXT: .Ltmp6:
 ; COMPAT-NEXT:   hint #25
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp6
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp6
 ; V83A-NEXT:   .Ltmp6:
 ; V83A-NEXT:     paciasp
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp6
 
-; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp6
 ; V9A-NEXT:    .Ltmp6:
 ; V9A-NEXT:      paciasppc
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp6
 
 ; PAUTH-NEXT:    paciasp
 ; PAUTH-NEXT:    .cfi_negate_ra_state
@@ -518,18 +518,18 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_b_key(ptr swiftasync %ctx,
 ; CHECK-NEXT:    .cfi_b_key_frame
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp7
 ; COMPAT-NEXT: .Ltmp7:
 ; COMPAT-NEXT:   hint #27
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp7
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp7
 ; V83A-NEXT:   .Ltmp7:
 ; V83A-NEXT:     pacibsp
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp7
 
-; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp7
 ; V9A-NEXT:    .Ltmp7:
 ; V9A-NEXT:      pacibsppc
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp7
 
 ; PAUTH-NEXT:    pacibsp
 ; PAUTH-NEXT:    .cfi_negate_ra_state
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll
index 684c8565cd8b4..d975350b1e9e6 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll
@@ -57,8 +57,8 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
   ; COMPAT-MIR-NEXT:   liveins: $w0
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
   ; COMPAT-MIR-NEXT:   frame-destroy PACM
@@ -70,8 +70,8 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
   ; V83A-MIR-NEXT:   liveins: $w0
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
   ; V83A-MIR-NEXT:   frame-destroy PACM
@@ -81,8 +81,8 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
 }
@@ -93,8 +93,8 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
   ; COMPAT-MIR-NEXT:   liveins: $x0, $lr
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
   ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -111,8 +111,8 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
   ; V83A-MIR-NEXT:   liveins: $x0, $lr
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
   ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -127,8 +127,8 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $x0, $lr
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
   ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -147,8 +147,8 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
   ; COMPAT-MIR-NEXT:   liveins: $w0, $lr
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
   ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -165,8 +165,8 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
   ; V83A-MIR-NEXT:   liveins: $w0, $lr
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
   ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -181,8 +181,8 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $w0, $lr
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
   ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -199,8 +199,8 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
   ; COMPAT-MIR-NEXT:   liveins: $w0, $lr
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
   ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -217,8 +217,8 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
   ; V83A-MIR-NEXT:   liveins: $w0, $lr
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
   ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -233,8 +233,8 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $w0, $lr
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
   ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -251,8 +251,8 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
   ; CHECK-MIR-NEXT:   liveins: $w0, $lr, $x18
   ; CHECK-MIR-NEXT: {{  $}}
   ; CHECK-MIR-NEXT:   frame-setup PACM
-  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; CHECK-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; CHECK-MIR-NEXT:   early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
   ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
   ; CHECK-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
@@ -271,8 +271,8 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $w0, $lr, $x18
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
   ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
   ; PAUTHLR-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
@@ -293,8 +293,8 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
   ; CHECK-MIR-NEXT:   liveins: $w0
   ; CHECK-MIR-NEXT: {{  $}}
   ; CHECK-MIR-NEXT:   frame-setup PACM
-  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; CHECK-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; CHECK-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; CHECK-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
   ; CHECK-MIR-NEXT:   frame-destroy PACM
@@ -304,8 +304,8 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
 }
@@ -318,8 +318,8 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
   ; CHECK-MIR-NEXT:   liveins: $x0, $lr
   ; CHECK-MIR-NEXT: {{  $}}
   ; CHECK-MIR-NEXT:   frame-setup PACM
-  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; CHECK-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; CHECK-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
   ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -335,8 +335,8 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $x0, $lr
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
   ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION def_cfa_offset 16
   ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -355,8 +355,8 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
   ; COMPAT-MIR-NEXT:   liveins: $w0
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
   ; COMPAT-MIR-NEXT:   frame-destroy PACM
@@ -368,8 +368,8 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
   ; V83A-MIR-NEXT:   liveins: $w0
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
   ; V83A-MIR-NEXT:   frame-destroy PACM
@@ -379,8 +379,8 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
 }
@@ -392,8 +392,8 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup EMITBKEY
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
   ; COMPAT-MIR-NEXT:   frame-destroy PACM
@@ -406,8 +406,8 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup EMITBKEY
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
   ; V83A-MIR-NEXT:   frame-destroy PACM
@@ -418,8 +418,8 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
   ; PAUTHLR-MIR-NEXT:   frame-setup EMITBKEY
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
 }
@@ -431,8 +431,8 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; CHECK-MIR-NEXT: {{  $}}
   ; CHECK-MIR-NEXT:   frame-setup EMITBKEY
   ; CHECK-MIR-NEXT:   frame-setup PACM
-  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; CHECK-MIR-NEXT:   frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; CHECK-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; CHECK-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
   ; CHECK-MIR-NEXT:   frame-destroy PACM
@@ -443,8 +443,8 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
   ; PAUTHLR-MIR-NEXT:   frame-setup EMITBKEY
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
 }
@@ -455,8 +455,8 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; COMPAT-MIR-NEXT:   liveins: $w0
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
   ; COMPAT-MIR-NEXT:   frame-destroy PACM
@@ -468,8 +468,8 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; V83A-MIR-NEXT:   liveins: $w0
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
   ; V83A-MIR-NEXT:   frame-destroy PACM
@@ -479,8 +479,8 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; PAUTHLR-MIR: bb.0 (%ir-block.0):
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
 }
@@ -492,8 +492,8 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; COMPAT-MIR-NEXT: {{  $}}
   ; COMPAT-MIR-NEXT:   frame-setup EMITBKEY
   ; COMPAT-MIR-NEXT:   frame-setup PACM
-  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; COMPAT-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; COMPAT-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
   ; COMPAT-MIR-NEXT:   frame-destroy PACM
@@ -506,8 +506,8 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; V83A-MIR-NEXT: {{  $}}
   ; V83A-MIR-NEXT:   frame-setup EMITBKEY
   ; V83A-MIR-NEXT:   frame-setup PACM
-  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; V83A-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; V83A-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
   ; V83A-MIR-NEXT:   frame-destroy PACM
@@ -518,8 +518,8 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
   ; PAUTHLR-MIR-NEXT:   frame-setup EMITBKEY
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
 }
@@ -531,8 +531,8 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
   ; CHECK-MIR-NEXT: {{  $}}
   ; CHECK-MIR-NEXT:   frame-setup EMITBKEY
   ; CHECK-MIR-NEXT:   frame-setup PACM
-  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; CHECK-MIR-NEXT:   frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; CHECK-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; CHECK-MIR-NEXT:   $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
   ; CHECK-MIR-NEXT:   $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
   ; CHECK-MIR-NEXT:   frame-destroy PACM
@@ -543,8 +543,8 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
   ; PAUTHLR-MIR-NEXT:   liveins: $w0
   ; PAUTHLR-MIR-NEXT: {{  $}}
   ; PAUTHLR-MIR-NEXT:   frame-setup EMITBKEY
-  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+  ; PAUTHLR-MIR-NEXT:   frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
   ; PAUTHLR-MIR-NEXT:   frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
   ret i32 %x
 }
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
index 02bebc85a8f60..b0051a9a26f0d 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
@@ -89,9 +89,9 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
 ; COMPAT-LABEL: leaf_sign_all:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; COMPAT-NEXT:  .Ltmp0:
 ; COMPAT-NEXT:    hint #25
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; COMPAT-NEXT:    adrp x16, .Ltmp0
 ; COMPAT-NEXT:    add x16, x16, :lo12:.Ltmp0
 ; COMPAT-NEXT:    hint #39
@@ -101,9 +101,9 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
 ; V83A-LABEL: leaf_sign_all:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; V83A-NEXT:  .Ltmp0:
 ; V83A-NEXT:    paciasp
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; V83A-NEXT:    adrp x16, .Ltmp0
 ; V83A-NEXT:    add x16, x16, :lo12:.Ltmp0
 ; V83A-NEXT:    hint #39
@@ -111,9 +111,9 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
 ;
 ; PAUTHLR-LABEL: leaf_sign_all:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; PAUTHLR-NEXT:  .Ltmp0:
 ; PAUTHLR-NEXT:    paciasppc
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; PAUTHLR-NEXT:    retaasppc .Ltmp0
 ;
 ; NEGATE-COMPAT-LABEL: leaf_sign_all:
@@ -152,9 +152,9 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
 ; COMPAT-LABEL: leaf_clobbers_lr:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp1
 ; COMPAT-NEXT:  .Ltmp1:
 ; COMPAT-NEXT:    hint #25
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp1
 ; COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; COMPAT-NEXT:    .cfi_def_cfa_offset 16
 ; COMPAT-NEXT:    .cfi_offset w30, -16
@@ -171,9 +171,9 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
 ; V83A-LABEL: leaf_clobbers_lr:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp1
 ; V83A-NEXT:  .Ltmp1:
 ; V83A-NEXT:    paciasp
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp1
 ; V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; V83A-NEXT:    .cfi_def_cfa_offset 16
 ; V83A-NEXT:    .cfi_offset w30, -16
@@ -188,9 +188,9 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
 ;
 ; PAUTHLR-LABEL: leaf_clobbers_lr:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp1
 ; PAUTHLR-NEXT:  .Ltmp1:
 ; PAUTHLR-NEXT:    paciasppc
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp1
 ; PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; PAUTHLR-NEXT:    .cfi_def_cfa_offset 16
 ; PAUTHLR-NEXT:    .cfi_offset w30, -16
@@ -260,9 +260,9 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ; COMPAT-LABEL: non_leaf_sign_all:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp2
 ; COMPAT-NEXT:  .Ltmp2:
 ; COMPAT-NEXT:    hint #25
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp2
 ; COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; COMPAT-NEXT:    .cfi_def_cfa_offset 16
 ; COMPAT-NEXT:    .cfi_offset w30, -16
@@ -277,9 +277,9 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ; V83A-LABEL: non_leaf_sign_all:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp2
 ; V83A-NEXT:  .Ltmp2:
 ; V83A-NEXT:    paciasp
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp2
 ; V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; V83A-NEXT:    .cfi_def_cfa_offset 16
 ; V83A-NEXT:    .cfi_offset w30, -16
@@ -292,9 +292,9 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ;
 ; PAUTHLR-LABEL: non_leaf_sign_all:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp2
 ; PAUTHLR-NEXT:  .Ltmp2:
 ; PAUTHLR-NEXT:    paciasppc
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp2
 ; PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; PAUTHLR-NEXT:    .cfi_def_cfa_offset 16
 ; PAUTHLR-NEXT:    .cfi_offset w30, -16
@@ -354,9 +354,9 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
 ; COMPAT-LABEL: non_leaf_sign_non_leaf:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp3
 ; COMPAT-NEXT:  .Ltmp3:
 ; COMPAT-NEXT:    hint #25
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp3
 ; COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; COMPAT-NEXT:    .cfi_def_cfa_offset 16
 ; COMPAT-NEXT:    .cfi_offset w30, -16
@@ -371,9 +371,9 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
 ; V83A-LABEL: non_leaf_sign_non_leaf:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp3
 ; V83A-NEXT:  .Ltmp3:
 ; V83A-NEXT:    paciasp
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp3
 ; V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; V83A-NEXT:    .cfi_def_cfa_offset 16
 ; V83A-NEXT:    .cfi_offset w30, -16
@@ -386,9 +386,9 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
 ;
 ; PAUTHLR-LABEL: non_leaf_sign_non_leaf:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp3
 ; PAUTHLR-NEXT:  .Ltmp3:
 ; PAUTHLR-NEXT:    paciasppc
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp3
 ; PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; PAUTHLR-NEXT:    .cfi_def_cfa_offset 16
 ; PAUTHLR-NEXT:    .cfi_offset w30, -16
@@ -449,9 +449,9 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
 ; CHECK-LABEL: non_leaf_scs:
 ; CHECK:       // %bb.0:
 ; CHECK-NEXT:    hint #39
-; CHECK-NEXT:    .cfi_set_ra_state 2, .Ltmp4
 ; CHECK-NEXT:  .Ltmp4:
 ; CHECK-NEXT:    paciasp
+; CHECK-NEXT:    .cfi_set_ra_state 2, .Ltmp4
 ; CHECK-NEXT:    str x30, [x18], #8
 ; CHECK-NEXT:    .cfi_escape 0x16, 0x12, 0x02, 0x82, 0x78 //
 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -468,9 +468,9 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
 ;
 ; PAUTHLR-LABEL: non_leaf_scs:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp4
 ; PAUTHLR-NEXT:  .Ltmp4:
 ; PAUTHLR-NEXT:    paciasppc
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp4
 ; PAUTHLR-NEXT:    str x30, [x18], #8
 ; PAUTHLR-NEXT:    .cfi_escape 0x16, 0x12, 0x02, 0x82, 0x78 //
 ; PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -525,9 +525,9 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ; CHECK-LABEL: leaf_sign_all_v83:
 ; CHECK:       // %bb.0:
 ; CHECK-NEXT:    hint #39
-; CHECK-NEXT:    .cfi_set_ra_state 2, .Ltmp5
 ; CHECK-NEXT:  .Ltmp5:
 ; CHECK-NEXT:    paciasp
+; CHECK-NEXT:    .cfi_set_ra_state 2, .Ltmp5
 ; CHECK-NEXT:    adrp x16, .Ltmp5
 ; CHECK-NEXT:    add x16, x16, :lo12:.Ltmp5
 ; CHECK-NEXT:    hint #39
@@ -535,9 +535,9 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
 ;
 ; PAUTHLR-LABEL: leaf_sign_all_v83:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp5
 ; PAUTHLR-NEXT:  .Ltmp5:
 ; PAUTHLR-NEXT:    paciasppc
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp5
 ; PAUTHLR-NEXT:    retaasppc .Ltmp5
 ;
 ; NEGATE-CHECK-LABEL: leaf_sign_all_v83:
@@ -566,9 +566,9 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
 ; COMPAT-LABEL: spill_lr_and_tail_call:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp6
 ; COMPAT-NEXT:  .Ltmp6:
 ; COMPAT-NEXT:    hint #25
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp6
 ; COMPAT-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; COMPAT-NEXT:    .cfi_def_cfa_offset 16
 ; COMPAT-NEXT:    .cfi_offset w30, -16
@@ -585,9 +585,9 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
 ; V83A-LABEL: spill_lr_and_tail_call:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp6
 ; V83A-NEXT:  .Ltmp6:
 ; V83A-NEXT:    paciasp
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp6
 ; V83A-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; V83A-NEXT:    .cfi_def_cfa_offset 16
 ; V83A-NEXT:    .cfi_offset w30, -16
@@ -603,9 +603,9 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
 ;
 ; PAUTHLR-LABEL: spill_lr_and_tail_call:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp6
 ; PAUTHLR-NEXT:  .Ltmp6:
 ; PAUTHLR-NEXT:    paciasppc
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp6
 ; PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; PAUTHLR-NEXT:    .cfi_def_cfa_offset 16
 ; PAUTHLR-NEXT:    .cfi_offset w30, -16
@@ -677,9 +677,9 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ; COMPAT-LABEL: leaf_sign_all_a_key:
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp7
 ; COMPAT-NEXT:  .Ltmp7:
 ; COMPAT-NEXT:    hint #25
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp7
 ; COMPAT-NEXT:    adrp x16, .Ltmp7
 ; COMPAT-NEXT:    add x16, x16, :lo12:.Ltmp7
 ; COMPAT-NEXT:    hint #39
@@ -689,9 +689,9 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ; V83A-LABEL: leaf_sign_all_a_key:
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp7
 ; V83A-NEXT:  .Ltmp7:
 ; V83A-NEXT:    paciasp
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp7
 ; V83A-NEXT:    adrp x16, .Ltmp7
 ; V83A-NEXT:    add x16, x16, :lo12:.Ltmp7
 ; V83A-NEXT:    hint #39
@@ -699,9 +699,9 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ;
 ; PAUTHLR-LABEL: leaf_sign_all_a_key:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp7
 ; PAUTHLR-NEXT:  .Ltmp7:
 ; PAUTHLR-NEXT:    paciasppc
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp7
 ; PAUTHLR-NEXT:    retaasppc .Ltmp7
 ;
 ; NEGATE-COMPAT-LABEL: leaf_sign_all_a_key:
@@ -741,9 +741,9 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    .cfi_b_key_frame
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp8
 ; COMPAT-NEXT:  .Ltmp8:
 ; COMPAT-NEXT:    hint #27
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp8
 ; COMPAT-NEXT:    adrp x16, .Ltmp8
 ; COMPAT-NEXT:    add x16, x16, :lo12:.Ltmp8
 ; COMPAT-NEXT:    hint #39
@@ -754,9 +754,9 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    .cfi_b_key_frame
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp8
 ; V83A-NEXT:  .Ltmp8:
 ; V83A-NEXT:    pacibsp
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp8
 ; V83A-NEXT:    adrp x16, .Ltmp8
 ; V83A-NEXT:    add x16, x16, :lo12:.Ltmp8
 ; V83A-NEXT:    hint #39
@@ -765,9 +765,9 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
 ; PAUTHLR-LABEL: leaf_sign_all_b_key:
 ; PAUTHLR:       // %bb.0:
 ; PAUTHLR-NEXT:    .cfi_b_key_frame
-; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp8
 ; PAUTHLR-NEXT:  .Ltmp8:
 ; PAUTHLR-NEXT:    pacibsppc
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp8
 ; PAUTHLR-NEXT:    retabsppc .Ltmp8
 ;
 ; NEGATE-COMPAT-LABEL: leaf_sign_all_b_key:
@@ -810,9 +810,9 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; CHECK:       // %bb.0:
 ; CHECK-NEXT:    .cfi_b_key_frame
 ; CHECK-NEXT:    hint #39
-; CHECK-NEXT:    .cfi_set_ra_state 2, .Ltmp9
 ; CHECK-NEXT:  .Ltmp9:
 ; CHECK-NEXT:    pacibsp
+; CHECK-NEXT:    .cfi_set_ra_state 2, .Ltmp9
 ; CHECK-NEXT:    adrp x16, .Ltmp9
 ; CHECK-NEXT:    add x16, x16, :lo12:.Ltmp9
 ; CHECK-NEXT:    hint #39
@@ -821,9 +821,9 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; PAUTHLR-LABEL: leaf_sign_all_v83_b_key:
 ; PAUTHLR:       // %bb.0:
 ; PAUTHLR-NEXT:    .cfi_b_key_frame
-; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp9
 ; PAUTHLR-NEXT:  .Ltmp9:
 ; PAUTHLR-NEXT:    pacibsppc
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp9
 ; PAUTHLR-NEXT:    retabsppc .Ltmp9
 ;
 ; NEGATE-CHECK-LABEL: leaf_sign_all_v83_b_key:
@@ -854,9 +854,9 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; COMPAT:       // %bb.0:
 ; COMPAT-NEXT:    hint #34
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp10
 ; COMPAT-NEXT:  .Ltmp10:
 ; COMPAT-NEXT:    hint #25
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp10
 ; COMPAT-NEXT:    adrp x16, .Ltmp10
 ; COMPAT-NEXT:    add x16, x16, :lo12:.Ltmp10
 ; COMPAT-NEXT:    hint #39
@@ -867,9 +867,9 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; V83A:       // %bb.0:
 ; V83A-NEXT:    hint #34
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp10
 ; V83A-NEXT:  .Ltmp10:
 ; V83A-NEXT:    paciasp
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp10
 ; V83A-NEXT:    adrp x16, .Ltmp10
 ; V83A-NEXT:    add x16, x16, :lo12:.Ltmp10
 ; V83A-NEXT:    hint #39
@@ -877,10 +877,10 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ;
 ; PAUTHLR-LABEL: leaf_sign_all_a_key_bti:
 ; PAUTHLR:       // %bb.0:
-; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp10
 ; PAUTHLR-NEXT:    bti c
 ; PAUTHLR-NEXT:  .Ltmp10:
 ; PAUTHLR-NEXT:    paciasppc
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp10
 ; PAUTHLR-NEXT:    retaasppc .Ltmp10
 ;
 ; NEGATE-COMPAT-LABEL: leaf_sign_all_a_key_bti:
@@ -925,9 +925,9 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; COMPAT-NEXT:    .cfi_b_key_frame
 ; COMPAT-NEXT:    hint #34
 ; COMPAT-NEXT:    hint #39
-; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp11
 ; COMPAT-NEXT:  .Ltmp11:
 ; COMPAT-NEXT:    hint #27
+; COMPAT-NEXT:    .cfi_set_ra_state 2, .Ltmp11
 ; COMPAT-NEXT:    adrp x16, .Ltmp11
 ; COMPAT-NEXT:    add x16, x16, :lo12:.Ltmp11
 ; COMPAT-NEXT:    hint #39
@@ -939,9 +939,9 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; V83A-NEXT:    .cfi_b_key_frame
 ; V83A-NEXT:    hint #34
 ; V83A-NEXT:    hint #39
-; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp11
 ; V83A-NEXT:  .Ltmp11:
 ; V83A-NEXT:    pacibsp
+; V83A-NEXT:    .cfi_set_ra_state 2, .Ltmp11
 ; V83A-NEXT:    adrp x16, .Ltmp11
 ; V83A-NEXT:    add x16, x16, :lo12:.Ltmp11
 ; V83A-NEXT:    hint #39
@@ -950,10 +950,10 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
 ; PAUTHLR-LABEL: leaf_sign_all_b_key_bti:
 ; PAUTHLR:       // %bb.0:
 ; PAUTHLR-NEXT:    .cfi_b_key_frame
-; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp11
 ; PAUTHLR-NEXT:    bti c
 ; PAUTHLR-NEXT:  .Ltmp11:
 ; PAUTHLR-NEXT:    pacibsppc
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp11
 ; PAUTHLR-NEXT:    retabsppc .Ltmp11
 ;
 ; NEGATE-COMPAT-LABEL: leaf_sign_all_b_key_bti:
@@ -1001,9 +1001,9 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
 ; CHECK-NEXT:    .cfi_b_key_frame
 ; CHECK-NEXT:    hint #34
 ; CHECK-NEXT:    hint #39
-; CHECK-NEXT:    .cfi_set_ra_state 2, .Ltmp12
 ; CHECK-NEXT:  .Ltmp12:
 ; CHECK-NEXT:    pacibsp
+; CHECK-NEXT:    .cfi_set_ra_state 2, .Ltmp12
 ; CHECK-NEXT:    adrp x16, .Ltmp12
 ; CHECK-NEXT:    add x16, x16, :lo12:.Ltmp12
 ; CHECK-NEXT:    hint #39
@@ -1012,10 +1012,10 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
 ; PAUTHLR-LABEL: leaf_sign_all_v83_b_key_bti:
 ; PAUTHLR:       // %bb.0:
 ; PAUTHLR-NEXT:    .cfi_b_key_frame
-; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp12
 ; PAUTHLR-NEXT:    bti c
 ; PAUTHLR-NEXT:  .Ltmp12:
 ; PAUTHLR-NEXT:    pacibsppc
+; PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp12
 ; PAUTHLR-NEXT:    retabsppc .Ltmp12
 ;
 ; NEGATE-CHECK-LABEL: leaf_sign_all_v83_b_key_bti:
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
index 956f481fb2df7..fa3ebf3474291 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
@@ -10,9 +10,9 @@ define i32 @f() #0 {
 ; CHECK-NO-PAUTH-NEXT:    dsb sy
 ; CHECK-NO-PAUTH-NEXT:    isb
 ; CHECK-NO-PAUTH-NEXT:    hint #39
-; CHECK-NO-PAUTH-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; CHECK-NO-PAUTH-NEXT:  .Ltmp0:
 ; CHECK-NO-PAUTH-NEXT:    hint #25
+; CHECK-NO-PAUTH-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; CHECK-NO-PAUTH-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; CHECK-NO-PAUTH-NEXT:    .cfi_def_cfa_offset 16
 ; CHECK-NO-PAUTH-NEXT:    .cfi_offset w30, -16
@@ -32,9 +32,9 @@ define i32 @f() #0 {
 ; CHECK-PAUTH-NEXT:    dsb sy
 ; CHECK-PAUTH-NEXT:    isb
 ; CHECK-PAUTH-NEXT:    hint #39
-; CHECK-PAUTH-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; CHECK-PAUTH-NEXT:  .Ltmp0:
 ; CHECK-PAUTH-NEXT:    paciasp
+; CHECK-PAUTH-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; CHECK-PAUTH-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; CHECK-PAUTH-NEXT:    .cfi_def_cfa_offset 16
 ; CHECK-PAUTH-NEXT:    .cfi_offset w30, -16
@@ -52,9 +52,9 @@ define i32 @f() #0 {
 ; CHECK-PAUTHLR:       // %bb.0: // %entry
 ; CHECK-PAUTHLR-NEXT:    cmp sp, #0
 ; CHECK-PAUTHLR-NEXT:    csetm x16, ne
-; CHECK-PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; CHECK-PAUTHLR-NEXT:  .Ltmp0:
 ; CHECK-PAUTHLR-NEXT:    paciasppc
+; CHECK-PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; CHECK-PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; CHECK-PAUTHLR-NEXT:    .cfi_def_cfa_offset 16
 ; CHECK-PAUTHLR-NEXT:    .cfi_offset w30, -16
@@ -75,9 +75,9 @@ define i32 @f() #0 {
 ; CHECK-PAUTH-PAUTHLR:       // %bb.0: // %entry
 ; CHECK-PAUTH-PAUTHLR-NEXT:    cmp sp, #0
 ; CHECK-PAUTH-PAUTHLR-NEXT:    csetm x16, ne
-; CHECK-PAUTH-PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; CHECK-PAUTH-PAUTHLR-NEXT:  .Ltmp0:
 ; CHECK-PAUTH-PAUTHLR-NEXT:    paciasppc
+; CHECK-PAUTH-PAUTHLR-NEXT:    .cfi_set_ra_state 2, .Ltmp0
 ; CHECK-PAUTH-PAUTHLR-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
 ; CHECK-PAUTH-PAUTHLR-NEXT:    .cfi_def_cfa_offset 16
 ; CHECK-PAUTH-PAUTHLR-NEXT:    .cfi_offset w30, -16
diff --git a/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll b/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
index 3f5a435a8c3a0..bd67746d7f96f 100644
--- a/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
+++ b/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
@@ -20,18 +20,18 @@ define swifttailcc void @caller_to0_from0() "branch-protection-pauth-lr" "sign-r
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp0
 ; COMPAT-NEXT: .Ltmp0:
 ; COMPAT-NEXT:   hint #25
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp0
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp0
 ; V83A-NEXT:   .Ltmp0:
 ; V83A-NEXT:     paciasp
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp0
 
-; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp0
 ; V9A-NEXT:    .Ltmp0:
 ; V9A-NEXT:      paciasppc
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp0
 
 ; PAUTH-NEXT:    paciasp
 ; PAUTH-NEXT:    .cfi_negate_ra_state
@@ -83,18 +83,18 @@ define swifttailcc void @caller_to0_from8([8 x i64], i64) "branch-protection-pau
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp1
 ; COMPAT-NEXT: .Ltmp1:
 ; COMPAT-NEXT:   hint #25
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp1
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp1
 ; V83A-NEXT:   .Ltmp1:
 ; V83A-NEXT:     paciasp
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp1
 
-; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp1
 ; V9A-NEXT:    .Ltmp1:
 ; V9A-NEXT:      paciasppc
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp1
 
 ; PAUTH-NEXT:    paciasp
 ; PAUTH-NEXT:    .cfi_negate_ra_state
@@ -143,18 +143,18 @@ define swifttailcc void @caller_to8_from0() "branch-protection-pauth-lr" "sign-r
 ; CHECK:       // %bb.0:
 
 ; COMPAT-NEXT:   hint #39
-; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp2
 ; COMPAT-NEXT: .Ltmp2:
 ; COMPAT-NEXT:   hint #25
+; COMPAT-NEXT:   .cfi_set_ra_state 2, .Ltmp2
 
 ; V83A-NEXT:     hint #39
-; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp2
 ; V83A-NEXT:   .Ltmp2:
 ; V83A-NEXT:     paciasp
+; V83A-NEXT:     .cfi_set_ra_state 2, .Ltmp2
 
-; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp2
 ; V9A-NEXT:    .Ltmp2:
 ; V9A-NEXT:      paciasppc
+; V9A-NEXT:      .cfi_set_ra_state 2, .Ltmp2
 
 ; PAUTH-NEXT:    paciasp
 ; PAUTH-NEXT:    .cfi_negate_ra_state
diff --git a/llvm/test/MC/AArch64/cfi_set_ra_state-shrinkwrap.s b/llvm/test/MC/AArch64/cfi_set_ra_state-shrinkwrap.s
index 67c12461c9fd6..49354febaf538 100644
--- a/llvm/test/MC/AArch64/cfi_set_ra_state-shrinkwrap.s
+++ b/llvm/test/MC/AArch64/cfi_set_ra_state-shrinkwrap.s
@@ -51,8 +51,8 @@ LBB1:
   ret
 
 LBB0:
-  .cfi_set_ra_state 2, 0
   pacibsppc
+  .cfi_set_ra_state 2, LBB0
 
   stp x29, x30, [sp, #-16]!
   .cfi_def_cfa_offset 16
@@ -125,9 +125,9 @@ LBB0:
 # CHECK-NEXT:     DW_CFA_restore: reg30
 # CHECK-NEXT:     DW_CFA_advance_loc: 8 to 0xb8
 # CHECK-NEXT:     DW_CFA_AARCH64_set_ra_state: 0 16
-# CHECK-NEXT:     DW_CFA_advance_loc: 12 to 0xc4
-# CHECK-NEXT:     DW_CFA_AARCH64_set_ra_state: 2 0
-# CHECK-NEXT:     DW_CFA_advance_loc: 8 to 0xcc
+# CHECK-NEXT:     DW_CFA_advance_loc: 16 to 0xc8
+# CHECK-NEXT:     DW_CFA_AARCH64_set_ra_state: 2 -4
+# CHECK-NEXT:     DW_CFA_advance_loc: 4 to 0xcc
 # CHECK-NEXT:     DW_CFA_def_cfa_offset: +16
 # CHECK-NEXT:     DW_CFA_offset: reg29 -16
 # CHECK-NEXT:     DW_CFA_offset: reg30 -8
@@ -138,5 +138,5 @@ LBB0:
 # CHECK-NEXT:     0xa0: CFA=reg31
 # CHECK-NEXT:     0xb0: CFA=reg31
 # CHECK-NEXT:     0xb8: CFA=reg31: reg34=0
-# CHECK-NEXT:     0xc4: CFA=reg31: reg34=2
+# CHECK-NEXT:     0xc8: CFA=reg31: reg34=2
 # CHECK-NEXT:     0xcc: CFA=reg31+16: reg29=[CFA-16], reg30=[CFA-8], reg34=2

>From 863fbf8679d613ab5234a60255501dc76fa95d5d Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 9 Jul 2026 15:59:28 -0700
Subject: [PATCH 44/45] fixup the mir test broken in
 4daa788cd43f98db90c3522eb6732a3ddf2cbf81

---
 llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir b/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir
index 8048a4680e5bc..049a2ef013c2f 100644
--- a/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir
+++ b/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir
@@ -59,8 +59,8 @@ tracksRegLiveness: true
 frameInfo:
   maxCallFrameSize: 0
 #CHECK:    frame-setup PACM
-#CHECK:    frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
 #CHECK:    frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+#CHECK:    frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
 #CHECK:    frame-destroy PACM
 #CHECK:    frame-destroy AUTIASP implicit-def $lr, implicit $lr, implicit $sp
 body:             |

>From b2536fa4155010029aedbce2b19c43b5b17d02de Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 10 Jul 2026 09:35:37 -0700
Subject: [PATCH 45/45] .cfi_set_ra_state must move UNW_AARCH64_RA_SIGN_STATE
 to kRegisterIsPseudo

---
 libunwind/src/DwarfParser.hpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libunwind/src/DwarfParser.hpp b/libunwind/src/DwarfParser.hpp
index 72c0504bb472f..1a4a4d43ec1f9 100644
--- a/libunwind/src/DwarfParser.hpp
+++ b/libunwind/src/DwarfParser.hpp
@@ -869,8 +869,8 @@ bool CFI_Parser<A>::parseFDEInstructions(
         }
         offset = addressSpace.getSLEB128(p, instructionsEnd) *
                  cieInfo.codeAlignFactor;
-        results->setRegisterValue(UNW_AARCH64_RA_SIGN_STATE, value,
-                                  initialState);
+        results->setRegister(UNW_AARCH64_RA_SIGN_STATE, kRegisterIsPseudo,
+                             value, initialState);
         results->ptrAuthDiversifier = fdeInfo.pcStart + codeOffset + offset;
         _LIBUNWIND_TRACE_DWARF(
             "DW_CFA_AARCH64_set_ra_state(state=%" PRId64 ",pc=0x%" PRIx64 ")\n",



More information about the cfe-commits mailing list