diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.td b/llvm/lib/Target/AMDGPU/SIInstrInfo.td index 247e3c66be072..8265faadd3a9f 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.td +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.td @@ -1008,6 +1008,12 @@ class NamedOperandBit : Operand { let ParserMatchClass = MatchClass; } +class NamedOperandBit_0 : + OperandWithDefaultOps { + let PrintMethod = "print"#Name; + let ParserMatchClass = MatchClass; +} + class NamedOperandU8 : Operand { let PrintMethod = "print"#Name; let ParserMatchClass = MatchClass; @@ -1023,6 +1029,12 @@ class NamedOperandU32 : Operand { let ParserMatchClass = MatchClass; } +class NamedOperandU32_0 : + OperandWithDefaultOps { + let PrintMethod = "print"#Name; + let ParserMatchClass = MatchClass; +} + class NamedOperandU32Default0 : OperandWithDefaultOps { let PrintMethod = "print"#Name; @@ -1043,7 +1055,13 @@ def offset1 : NamedOperandU8<"Offset1", NamedMatchClass<"Offset1">>; def gds : NamedOperandBit<"GDS", NamedMatchClass<"GDS">>; def omod : NamedOperandU32<"OModSI", NamedMatchClass<"OModSI">>; +def omod0 : NamedOperandU32_0<"OModSI", NamedMatchClass<"OModSI">>; + +// We need to make the cases with a default of 0 distinct from no +// default to help deal with some cases where the operand appears +// before a mandatory operand. def clampmod : NamedOperandBit<"ClampSI", NamedMatchClass<"ClampSI">>; +def clampmod0 : NamedOperandBit_0<"ClampSI", NamedMatchClass<"ClampSI">>; def highmod : NamedOperandBit<"High", NamedMatchClass<"High">>; def DLC : NamedOperandBit<"DLC", NamedMatchClass<"DLC">>; @@ -1599,11 +1617,11 @@ class getIns64