diff --git a/llvm/lib/Target/RISCV/RISCVInstrFormats.td b/llvm/lib/Target/RISCV/RISCVInstrFormats.td --- a/llvm/lib/Target/RISCV/RISCVInstrFormats.td +++ b/llvm/lib/Target/RISCV/RISCVInstrFormats.td @@ -156,9 +156,15 @@ def OPC_OP_P : RISCVOpcode<"OP_P", 0b1110111>; def OPC_CUSTOM_3 : RISCVOpcode<"CUSTOM_3", 0b1111011>; -class RVInstCommon : Instruction { +class RVInstCommon pattern, InstFormat format> : Instruction { let Namespace = "RISCV"; + dag OutOperandList = outs; + dag InOperandList = ins; + let AsmString = opcodestr # "\t" # argstr; + let Pattern = pattern; + let TSFlags{4-0} = format.Value; // Defaults @@ -210,7 +216,7 @@ class RVInst pattern, InstFormat format> - : RVInstCommon { + : RVInstCommon { field bits<32> Inst; // SoftFail is a field the disassembler can use to provide a way for // instructions to not match without killing the whole decode process. It is @@ -222,11 +228,6 @@ bits<7> Opcode = 0; let Inst{6-0} = Opcode; - - dag OutOperandList = outs; - dag InOperandList = ins; - let AsmString = opcodestr # "\t" # argstr; - let Pattern = pattern; } // Pseudo instructions diff --git a/llvm/lib/Target/RISCV/RISCVInstrFormatsC.td b/llvm/lib/Target/RISCV/RISCVInstrFormatsC.td --- a/llvm/lib/Target/RISCV/RISCVInstrFormatsC.td +++ b/llvm/lib/Target/RISCV/RISCVInstrFormatsC.td @@ -12,7 +12,7 @@ class RVInst16 pattern, InstFormat format> - : RVInstCommon { + : RVInstCommon { field bits<16> Inst; // SoftFail is a field the disassembler can use to provide a way for // instructions to not match without killing the whole decode process. It is @@ -22,11 +22,6 @@ let Size = 2; bits<2> Opcode = 0; - - dag OutOperandList = outs; - dag InOperandList = ins; - let AsmString = opcodestr # "\t" # argstr; - let Pattern = pattern; } class RVInst16CR funct4, bits<2> opcode, dag outs, dag ins,