https://github.com/jthackray updated 
https://github.com/llvm/llvm-project/pull/179435

>From 912bc3370f8294347079b49320ef326d39f866ad Mon Sep 17 00:00:00 2001
From: Jonathan Thackray <[email protected]>
Date: Mon, 2 Feb 2026 15:56:06 +0000
Subject: [PATCH] [AArch64][llvm] Remove `+xs` gating for `tlbip *nxs`
 instructions

A recent specification update has removed FEAT_XS gating for `tlbip *nxs`
instructions. It remains gated on FEAT_XS for `tlbi *nxs` instructions.
---
 .../Target/AArch64/AArch64SystemOperands.td   |  3 +--
 .../AArch64/AsmParser/AArch64AsmParser.cpp    | 24 ++++++-------------
 .../MCTargetDesc/AArch64InstPrinter.cpp       |  8 -------
 llvm/test/MC/AArch64/armv9a-tlbip.s           | 17 +++++++------
 llvm/test/MC/AArch64/tlbip-tlbid-or-d128.s    |  4 ++--
 5 files changed, 18 insertions(+), 38 deletions(-)

diff --git a/llvm/lib/Target/AArch64/AArch64SystemOperands.td 
b/llvm/lib/Target/AArch64/AArch64SystemOperands.td
index cbdd8d9f0e215..9e66b776eaf04 100644
--- a/llvm/lib/Target/AArch64/AArch64SystemOperands.td
+++ b/llvm/lib/Target/AArch64/AArch64SystemOperands.td
@@ -902,7 +902,6 @@ multiclass TLBI<string name, bit hasTLBIP, bits<3> op1, 
bits<4> crn, bits<4> crm
   defvar TLBIPRequires = !if(allowTLBID,
                              ["AArch64::FeatureD128", "AArch64::FeatureTLBID"],
                              ["AArch64::FeatureD128"]);
-  defvar TLBIPRequiresNXS = !listconcat(TLBIPRequires, ["AArch64::FeatureXS"]);
   def : TLBIEntry<name, op1, crn, crm, op2, needsreg, optionalreg>;
   def : TLBIEntry<!strconcat(name, "nXS"), op1, crn, crm, op2, needsreg, 
optionalreg> {
     let Encoding{7} = 1;
@@ -914,7 +913,7 @@ multiclass TLBI<string name, bit hasTLBIP, bits<3> op1, 
bits<4> crn, bits<4> crm
     }
     def : TLBIPEntry<!strconcat(name, "nXS"), op1, crn, crm, op2, needsreg, 
optionalreg> {
       let Encoding{7} = 1;
-      let ExtraRequires = TLBIPRequiresNXS;
+      let ExtraRequires = TLBIPRequires;
     }
   }
 }
diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp 
b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index b0e860b0da85a..1439e46ed014d 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -4260,27 +4260,17 @@ bool AArch64AsmParser::parseSyspAlias(StringRef Name, 
SMLoc NameLoc,
   SMLoc S = Tok.getLoc();
 
   if (Mnemonic == "tlbip") {
-    bool HasnXSQualifier = Op.ends_with_insensitive("nXS");
-    if (HasnXSQualifier) {
-      Op = Op.drop_back(3);
-    }
-    const AArch64TLBIP::TLBIP *TLBIPorig = AArch64TLBIP::lookupTLBIPByName(Op);
-    if (!TLBIPorig)
+    const AArch64TLBIP::TLBIP *TLBIP = AArch64TLBIP::lookupTLBIPByName(Op);
+    if (!TLBIP)
       return TokError("invalid operand for TLBIP instruction");
-    const AArch64TLBIP::TLBIP TLBIP(
-        TLBIPorig->Name, TLBIPorig->Encoding | (HasnXSQualifier ? (1 << 7) : 
0),
-        TLBIPorig->NeedsReg, TLBIPorig->OptionalReg,
-        HasnXSQualifier
-            ? TLBIPorig->FeaturesRequired | FeatureBitset({AArch64::FeatureXS})
-            : TLBIPorig->FeaturesRequired);
-    if (!TLBIP.haveFeatures(getSTI().getFeatureBits())) {
+    if (!TLBIP->haveFeatures(getSTI().getFeatureBits())) {
       std::string Str("instruction requires: ");
       FeatureBitset Active = getSTI().getFeatureBits();
-      FeatureBitset Missing = TLBIP.getRequiredFeatures() & ~Active;
+      FeatureBitset Missing = TLBIP->getRequiredFeatures() & ~Active;
       bool HasEither =
           Active[AArch64::FeatureD128] || Active[AArch64::FeatureTLBID];
-      bool NeedOrTLBID = TLBIP.allowTLBID() && !HasEither;
-      if (TLBIP.allowTLBID()) {
+      bool NeedOrTLBID = TLBIP->allowTLBID() && !HasEither;
+      if (TLBIP->allowTLBID()) {
         Missing.reset(AArch64::FeatureD128);
         Missing.reset(AArch64::FeatureTLBID);
       }
@@ -4293,7 +4283,7 @@ bool AArch64AsmParser::parseSyspAlias(StringRef Name, 
SMLoc NameLoc,
         Str += ", tlbid or d128";
       return TokError(Str);
     }
-    createSysAlias(TLBIP.Encoding, Operands, S);
+    createSysAlias(TLBIP->Encoding, Operands, S);
   }
 
   Lex(); // Eat operand.
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp 
b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp
index 3e4c1101fb8e1..2fe162f930fdf 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp
@@ -1163,12 +1163,6 @@ bool AArch64InstPrinter::printSyspAlias(const MCInst *MI,
   if (CnVal == 8 || CnVal == 9) {
     // TLBIP aliases
 
-    if (CnVal == 9) {
-      if (!STI.hasFeature(AArch64::FeatureXS))
-        return false;
-      Encoding &= ~(1 << 7);
-    }
-
     const AArch64TLBIP::TLBIP *TLBIP =
         AArch64TLBIP::lookupTLBIPByEncoding(Encoding);
     if (!TLBIP || !TLBIP->haveFeatures(STI.getFeatureBits()))
@@ -1176,8 +1170,6 @@ bool AArch64InstPrinter::printSyspAlias(const MCInst *MI,
 
     Ins = "tlbip\t";
     Name = std::string(TLBIP->Name);
-    if (CnVal == 9)
-      Name += "nXS";
   } else
     return false;
 
diff --git a/llvm/test/MC/AArch64/armv9a-tlbip.s 
b/llvm/test/MC/AArch64/armv9a-tlbip.s
index ad6d754cefddf..edd2788f97301 100644
--- a/llvm/test/MC/AArch64/armv9a-tlbip.s
+++ b/llvm/test/MC/AArch64/armv9a-tlbip.s
@@ -1,20 +1,19 @@
-// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+d128,+tlb-rmi,+xs < %s \
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+d128,+tlb-rmi < %s \
 // RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
-// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+tlb-rmi,+xs < %s 
2>&1 \
+// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+tlb-rmi < %s 2>&1 \
 // RUN:        | FileCheck %s --check-prefixes=CHECK-ERROR
-// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+d128,+tlb-rmi,+xs < %s \
-// RUN:        | llvm-objdump -d --mattr=+d128,+tlb-rmi,+xs --no-print-imm-hex 
- | FileCheck %s --check-prefix=CHECK-INST
-// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+d128,+tlb-rmi,+xs < %s \
-// RUN:   | llvm-objdump -d --mattr=-d128,+tlb-rmi,+xs --no-print-imm-hex - | 
FileCheck %s --check-prefix=CHECK-UNKNOWN
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+d128,+tlb-rmi < %s \
+// RUN:        | llvm-objdump -d --mattr=+d128,+tlb-rmi --no-print-imm-hex - | 
FileCheck %s --check-prefix=CHECK-INST
+// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+d128,+tlb-rmi < %s \
+// RUN:   | llvm-objdump -d --mattr=-d128,+tlb-rmi --no-print-imm-hex - | 
FileCheck %s --check-prefix=CHECK-UNKNOWN
 // Disassemble encoding and check the re-encoding (-show-encoding) matches.
-// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+d128,+tlb-rmi,+xs < %s \
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+d128,+tlb-rmi < %s \
 // RUN:        | sed '/.text/d' | sed 's/.*encoding: //g' \
-// RUN:        | llvm-mc -triple=aarch64 -mattr=+d128,+tlb-rmi,+xs 
-disassemble -show-encoding \
+// RUN:        | llvm-mc -triple=aarch64 -mattr=+d128,+tlb-rmi -disassemble 
-show-encoding \
 // RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
 
 // +d128 required for tlbip
 // +tbl-rmi required for RIPA*/RVA*
-// +xs required for *NXS
 
 tlbip IPAS2E1, x4, x5
 // CHECK-INST: tlbip ipas2e1, x4, x5
diff --git a/llvm/test/MC/AArch64/tlbip-tlbid-or-d128.s 
b/llvm/test/MC/AArch64/tlbip-tlbid-or-d128.s
index 0361fbcc73d4b..2baeda54bb0a7 100644
--- a/llvm/test/MC/AArch64/tlbip-tlbid-or-d128.s
+++ b/llvm/test/MC/AArch64/tlbip-tlbid-or-d128.s
@@ -1,6 +1,6 @@
 // NOTE: These TLBIP forms are valid with either +tlbid or +d128.
-// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+tlbid,+tlb-rmi,+xs < %s 
| FileCheck %s --check-prefix=TLBID
-// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+d128,+tlb-rmi,+xs < %s 
| FileCheck %s --check-prefix=D128
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+tlbid,+tlb-rmi < %s | 
FileCheck %s --check-prefix=TLBID
+// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+d128,+tlb-rmi < %s | 
FileCheck %s --check-prefix=D128
 
 tlbip VAE1OS, x0, x1
 // TLBID: tlbip vae1os, x0, x1

_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to