diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h index c65b512187725..92f405b5f6acb 100644 --- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h +++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h @@ -297,7 +297,8 @@ enum OperandType : unsigned { OPERAND_RVKRNUM_0_7, OPERAND_RVKRNUM_1_10, OPERAND_RVKRNUM_2_14, - OPERAND_LAST_RISCV_IMM = OPERAND_RVKRNUM_2_14, + OPERAND_SPIMM, + OPERAND_LAST_RISCV_IMM = OPERAND_SPIMM, // Operand is either a register or uimm5, this is used by V extension pseudo // instructions to represent a value that be passed as AVL to either vsetvli // or vsetivli. diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp index 14c2d41e80f15..5582de51b17d1 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp +++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp @@ -2050,6 +2050,9 @@ bool RISCVInstrInfo::verifyInstruction(const MachineInstr &MI, case RISCVOp::OPERAND_RVKRNUM_2_14: Ok = Imm >= 2 && Imm <= 14; break; + case RISCVOp::OPERAND_SPIMM: + Ok = (Imm & 0xf) == 0; + break; } if (!Ok) { ErrInfo = "Invalid immediate"; diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoZc.td b/llvm/lib/Target/RISCV/RISCVInstrInfoZc.td index a327bd3d0c28a..2a4448d7881fb 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoZc.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoZc.td @@ -71,10 +71,11 @@ def rlist : Operand { }]; } -def stackadj : Operand { +def stackadj : RISCVOp { let ParserMatchClass = StackAdjAsmOperand; let PrintMethod = "printStackAdj"; let DecoderMethod = "decodeZcmpSpimm"; + let OperandType = "OPERAND_SPIMM"; let MCOperandPredicate = [{ int64_t Imm; if (!MCOp.evaluateAsConstantImm(Imm)) @@ -83,10 +84,11 @@ def stackadj : Operand { }]; } -def negstackadj : Operand { +def negstackadj : RISCVOp { let ParserMatchClass = NegStackAdjAsmOperand; let PrintMethod = "printNegStackAdj"; let DecoderMethod = "decodeZcmpSpimm"; + let OperandType = "OPERAND_SPIMM"; let MCOperandPredicate = [{ int64_t Imm; if (!MCOp.evaluateAsConstantImm(Imm))