[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