[llvm] [RISCV] Use decodeVMaskReg for VMaskCarryInOp. NFC (PR #177742)

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Sat Jan 24 16:10:13 PST 2026


https://github.com/topperc updated https://github.com/llvm/llvm-project/pull/177742

>From ffb77cbf54bee6efc35dc453c4c4538df810af25 Mon Sep 17 00:00:00 2001
From: Craig Topper <craig.topper at sifive.com>
Date: Fri, 23 Jan 2026 23:33:52 -0800
Subject: [PATCH 1/3] [RISCV] Use decodeVMaskReg for VMaskCarryInOp. NFC

After #177678 we don't need DecodeVMV0RegisterClass to reject
vm=1 cases. All instructions that use VMaskCarryInOp have set vm=0
in their tablegen classes.
---
 .../Target/RISCV/Disassembler/RISCVDisassembler.cpp    | 10 ----------
 llvm/lib/Target/RISCV/RISCVInstrInfoV.td               |  1 +
 2 files changed, 1 insertion(+), 10 deletions(-)

diff --git a/llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp b/llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp
index b0a6524fca828..834e639026257 100644
--- a/llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp
+++ b/llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp
@@ -231,16 +231,6 @@ static DecodeStatus DecodeVectorRegisterClass(MCInst &Inst, uint32_t RegNo,
   return MCDisassembler::Success;
 }
 
-static DecodeStatus DecodeVMV0RegisterClass(MCInst &Inst, uint32_t RegNo,
-                                            uint64_t Address,
-                                            const MCDisassembler *Decoder) {
-  if (RegNo)
-    return MCDisassembler::Fail;
-
-  Inst.addOperand(MCOperand::createReg(RISCV::V0));
-  return MCDisassembler::Success;
-}
-
 static DecodeStatus DecodeTRM2RegisterClass(MCInst &Inst, uint32_t RegNo,
                                             uint64_t Address,
                                             const MCDisassembler *Decoder) {
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td
index 3d3eff4588bea..226674f69c0df 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td
@@ -69,6 +69,7 @@ def VMaskOp : RegisterOperand<VMV0> {
 def VMaskCarryInOp : RegisterOperand<VMV0> {
   let ParserMatchClass = VMaskCarryInAsmOperand;
   let EncoderMethod = "getVMaskReg";
+  let DecoderMethod = "decodeVMaskReg";
 }
 
 def simm5 : RISCVSImmLeafOp<5> {

>From 35cd7befc4005d80af2d9781b0e1b6b0ce095c04 Mon Sep 17 00:00:00 2001
From: Craig Topper <craig.topper at sifive.com>
Date: Sat, 24 Jan 2026 11:22:16 -0800
Subject: [PATCH 2/3] fixup! Add comments

---
 llvm/lib/Target/RISCV/RISCVInstrInfoV.td | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td
index 226674f69c0df..b13f3894bef25 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td
@@ -57,6 +57,7 @@ def VMaskCarryInAsmOperand : AsmOperandClass {
   let DiagnosticString = "operand must be v0";
 }
 
+// An optional v0.t operand encoded in vm..
 def VMaskOp : RegisterOperand<VMV0> {
   let ParserMatchClass = VMaskAsmOperand;
   let PrintMethod = "printVMaskReg";
@@ -66,6 +67,8 @@ def VMaskOp : RegisterOperand<VMV0> {
   let OperandType = "OPERAND_VMASK";
 }
 
+// An always present v0 operand encoded with vm=0. Classes that use this must
+// set the vm field in RVInstV* to 0.
 def VMaskCarryInOp : RegisterOperand<VMV0> {
   let ParserMatchClass = VMaskCarryInAsmOperand;
   let EncoderMethod = "getVMaskReg";

>From 6b866e2918bc62328879792036f86dfb74a6df8a Mon Sep 17 00:00:00 2001
From: Craig Topper <craig.topper at sifive.com>
Date: Sat, 24 Jan 2026 16:10:05 -0800
Subject: [PATCH 3/3] Update llvm/lib/Target/RISCV/RISCVInstrInfoV.td

---
 llvm/lib/Target/RISCV/RISCVInstrInfoV.td | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td
index b13f3894bef25..cace8b14af720 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td
@@ -57,7 +57,7 @@ def VMaskCarryInAsmOperand : AsmOperandClass {
   let DiagnosticString = "operand must be v0";
 }
 
-// An optional v0.t operand encoded in vm..
+// An optional v0.t operand encoded in vm.
 def VMaskOp : RegisterOperand<VMV0> {
   let ParserMatchClass = VMaskAsmOperand;
   let PrintMethod = "printVMaskReg";



More information about the llvm-commits mailing list