diff --git a/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td b/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td --- a/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td +++ b/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td @@ -123,34 +123,31 @@ def InstFlag : OperandWithDefaultOps ; -class CustomOperandClass : AsmOperandClass { +class CustomOperandClass + : AsmOperandClass { let Name = name; let PredicateMethod = "is"#name; - let ParserMethod = "parse"#name; + let ParserMethod = parserMethod; let RenderMethod = "addImmOperands"; let IsOptional = optional; let DefaultMethod = "default"#name; } -class CustomOperandProps> { +class CustomOperandProps { + string ParserMethod = "parse"#name; string PrintMethod = "print"#name; - AsmOperandClass ParserMatchClass = opClass; + AsmOperandClass ParserMatchClass = + CustomOperandClass; string OperandType = "OPERAND_IMMEDIATE"; } -class CustomOperand> - : Operand, CustomOperandProps; - -class ImmOperandClass - : CustomOperandClass { - let ParserMethod = ""; -} +class CustomOperand + : Operand, CustomOperandProps; class ImmOperand - : CustomOperand> { + : CustomOperand { + let ParserMethod = ""; let PrintMethod = printer; } diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.td b/llvm/lib/Target/AMDGPU/SIInstrInfo.td --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.td +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.td @@ -1121,8 +1121,9 @@ let PrintMethod = "printVOPDst"; } -class NamedIntOperandClass - : CustomOperandClass { +class NamedIntOperand + : CustomOperand { string ImmTy = "AMDGPUOperand::ImmTy"#Name; let ParserMethod = "[this](OperandVector &Operands) -> OperandMatchResultTy { "# @@ -1130,48 +1131,37 @@ ConvertMethod#"); }"; } -class NamedIntOperand - : CustomOperand>; - -class BitOperandClass - : CustomOperandClass { +class NamedBitOperand + : CustomOperand { string ImmTy = "AMDGPUOperand::ImmTy"#Name; let ParserMethod = "[this](OperandVector &Operands) -> OperandMatchResultTy { "# "return parseNamedBit(\""#Id#"\", Operands, "#ImmTy#"); }"; } -class NamedBitOperand - : CustomOperand>; - class DefaultOperand : OperandWithDefaultOps, - CustomOperandProps<1, Op.ParserMatchClass.Name, Op.ParserMatchClass>; + CustomOperandProps<1, Op.ParserMatchClass.Name> { + let ParserMethod = Op.ParserMatchClass.ParserMethod; +} -class SDWAOperandClass - : CustomOperandClass { +class SDWAOperand + : CustomOperand { string ImmTy = "AMDGPUOperand::ImmTy"#Name; let ParserMethod = "[this](OperandVector &Operands) -> OperandMatchResultTy { "# "return parseSDWASel(Operands, \""#Id#"\", "#ImmTy#"); }"; } -class SDWAOperand - : CustomOperand>; - -class ArrayOperandClass - : CustomOperandClass { +class ArrayOperand0 + : OperandWithDefaultOps, + CustomOperandProps<1, Name> { string ImmTy = "AMDGPUOperand::ImmTy"#Name; let ParserMethod = "[this](OperandVector &Operands) -> OperandMatchResultTy { "# "return parseOperandArrayWithPrefix(\""#Id#"\", Operands, "#ImmTy#"); }"; } -class ArrayOperand0 - : OperandWithDefaultOps, - CustomOperandProps<1, Name, ArrayOperandClass>; - def flat_offset : CustomOperand; def offset : NamedIntOperand; def offset0 : NamedIntOperand;