[llvm-branch-commits] [llvm] [AArch64][llvm] Armv9.8-A: Add support for FEAT_RLCS (release consistency scoping) (PR #229364)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Oct 6 03:04:42 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-aarch64

Author: Jonathan Thackray (jthackray)

<details>
<summary>Changes</summary>

Add support for FEAT_RLCS (release consistency scoping) instructions:
  - SRLS
  - SLBND

---

<sub>Stack created with <a href="https://github.com/github/gh-stack">GitHub Stacks CLI</a> • <a href="https://gh.io/stacks-feedback">Give Feedback 💬</a></sub>

---
Full diff: https://github.com/llvm/llvm-project/pull/229364.diff


4 Files Affected:

- (modified) llvm/lib/Target/AArch64/AArch64InstrInfo.td (+3) 
- (modified) llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp (+3-1) 
- (added) llvm/test/MC/AArch64/armv9.8a-rlcs-diagnostics.s (+27) 
- (added) llvm/test/MC/AArch64/armv9.8a-rlcs.s (+33) 


``````````diff
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.td b/llvm/lib/Target/AArch64/AArch64InstrInfo.td
index 8e64d275f9e35..f96414d84df95 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.td
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.td
@@ -1621,6 +1621,9 @@ def : InstAlias<"stshh strm", (HINT 49), 1>;
 def : InstAlias<"shuh", (HINT 50), 1>;
 def : InstAlias<"shuh ph", (HINT 51), 1>;
 def : InstAlias<"stcph", (HINT 52), 1>;
+def : InstAlias<"srls", (HINT 54)>;
+def : InstAlias<"srls stshstrm", (HINT 55)>;
+def : InstAlias<"slbnd", (HINT 56)>;
 
 // In order to be able to write readable assembly, LLVM should accept assembly
 // inputs that use Branch Target Identification mnemonics, even with BTI disabled.
diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index 24800fe1f09b7..85d77cb799f18 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -4933,6 +4933,7 @@ bool AArch64AsmParser::parseKeywordOperand(OperandVector &Operands) {
                 .Case("ph", "ph")
                 .Case("r", "r")
                 .Case("sm", "sm")
+                .Case("stshstrm", "stshstrm")
                 .Case("strm", "strm")
                 .Case("za", "za")
                 .Default(Keyword);
@@ -5046,7 +5047,8 @@ bool AArch64AsmParser::parseOperand(OperandVector &Operands, bool isCondCode,
     // operand as an identifier.
     if (Mnemonic == "brb" || Mnemonic == "smstart" || Mnemonic == "smstop" ||
         Mnemonic == "gcsb" || Mnemonic == "bti" || Mnemonic == "stshh" ||
-        Mnemonic == "psb" || Mnemonic == "tsb" || Mnemonic == "shuh")
+        Mnemonic == "psb" || Mnemonic == "tsb" || Mnemonic == "shuh" ||
+        Mnemonic == "srls")
       return parseKeywordOperand(Operands);
 
     // This was not a register so parse other operands that start with an
diff --git a/llvm/test/MC/AArch64/armv9.8a-rlcs-diagnostics.s b/llvm/test/MC/AArch64/armv9.8a-rlcs-diagnostics.s
new file mode 100644
index 0000000000000..086edf26d78fb
--- /dev/null
+++ b/llvm/test/MC/AArch64/armv9.8a-rlcs-diagnostics.s
@@ -0,0 +1,27 @@
+// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 | FileCheck %s
+
+srls x0
+srls inj
+srls #0
+srls 0
+srls stshstrm, x0
+slbnd x0
+
+// CHECK:      error: invalid operand for instruction
+// CHECK-NEXT: srls x0
+// CHECK-NEXT:      ^
+// CHECK:      error: invalid operand for instruction
+// CHECK-NEXT: srls inj
+// CHECK-NEXT:      ^
+// CHECK:      error: invalid operand for instruction
+// CHECK-NEXT: srls #0
+// CHECK-NEXT:      ^
+// CHECK:      error: invalid operand for instruction
+// CHECK-NEXT: srls 0
+// CHECK-NEXT:      ^
+// CHECK:      error: invalid operand for instruction
+// CHECK-NEXT: srls stshstrm, x0
+// CHECK-NEXT:                ^
+// CHECK:      error: invalid operand for instruction
+// CHECK-NEXT: slbnd x0
+// CHECK-NEXT:       ^
diff --git a/llvm/test/MC/AArch64/armv9.8a-rlcs.s b/llvm/test/MC/AArch64/armv9.8a-rlcs.s
new file mode 100644
index 0000000000000..11a4e08a27e27
--- /dev/null
+++ b/llvm/test/MC/AArch64/armv9.8a-rlcs.s
@@ -0,0 +1,33 @@
+// RUN: llvm-mc -triple=aarch64 -show-encoding < %s \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj < %s \
+// RUN:        | llvm-objdump -d --no-print-imm-hex - | FileCheck %s --check-prefix=CHECK-INST
+// Disassemble encoding and check the re-encoding (-show-encoding) matches.
+// RUN: llvm-mc -triple=aarch64 -show-encoding < %s \
+// RUN:        | sed '/.text/d' | sed 's/.*encoding: //g' \
+// RUN:        | llvm-mc -triple=aarch64 -disassemble -show-encoding \
+// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+
+srls
+// CHECK-INST: srls
+// CHECK-ENCODING: encoding: [0xdf,0x26,0x03,0xd5]
+
+srls stshstrm
+// CHECK-INST: srls stshstrm
+// CHECK-ENCODING: encoding: [0xff,0x26,0x03,0xd5]
+
+slbnd
+// CHECK-INST: slbnd
+// CHECK-ENCODING: encoding: [0x1f,0x27,0x03,0xd5]
+
+hint #54
+// CHECK-INST: srls
+// CHECK-ENCODING: encoding: [0xdf,0x26,0x03,0xd5]
+
+hint #55
+// CHECK-INST: srls stshstrm
+// CHECK-ENCODING: encoding: [0xff,0x26,0x03,0xd5]
+
+hint #56
+// CHECK-INST: slbnd
+// CHECK-ENCODING: encoding: [0x1f,0x27,0x03,0xd5]

``````````

</details>


https://github.com/llvm/llvm-project/pull/229364


More information about the llvm-branch-commits mailing list