@@ -172,6 +172,7 @@ def KernelProfilingInfoOperand : OperandCategory;
172172def OpcodeOperand : OperandCategory;
173173def CooperativeMatrixLayoutOperand : OperandCategory;
174174def CooperativeMatrixOperandsOperand : OperandCategory;
175+ def SpecConstantOpOperandsOperand : OperandCategory;
175176
176177//===----------------------------------------------------------------------===//
177178// Multiclass used to define Extesions enum values and at the same time
@@ -1743,3 +1744,93 @@ defm MatrixAAndBTF32ComponentsINTEL : CooperativeMatrixOperandsOperand<0x20, [SP
17431744defm MatrixAAndBBFloat16ComponentsINTEL : CooperativeMatrixOperandsOperand<0x40, [SPV_INTEL_joint_matrix], [CooperativeMatrixBFloat16ComponentTypeINTEL]>;
17441745defm MatrixCBFloat16ComponentsINTEL : CooperativeMatrixOperandsOperand<0x80, [SPV_INTEL_joint_matrix], [CooperativeMatrixBFloat16ComponentTypeINTEL]>;
17451746defm MatrixResultBFloat16ComponentsINTEL : CooperativeMatrixOperandsOperand<0x100, [SPV_INTEL_joint_matrix], [CooperativeMatrixBFloat16ComponentTypeINTEL]>;
1747+
1748+ //===----------------------------------------------------------------------===//
1749+ // Multiclass used to define SpecConstant Operands enum values and at the
1750+ // same time SymbolicOperand entries with string mnemonics, extensions and
1751+ // capabilities.
1752+ //===----------------------------------------------------------------------===//
1753+
1754+ def SpecConstantOpOperands : GenericEnum, Operand<i32> {
1755+ let FilterClass = "SpecConstantOpOperands";
1756+ let NameField = "Name";
1757+ let ValueField = "Value";
1758+ let PrintMethod = !strconcat("printSymbolicOperand<OperandCategory::", FilterClass, "Operand>");
1759+ }
1760+
1761+ class SpecConstantOpOperands<string name, bits<32> value> {
1762+ string Name = name;
1763+ bits<32> Value = value;
1764+ }
1765+
1766+ multiclass SpecConstantOpOperandsOperand<bits<32> value, list<Extension> reqExtensions, list<Capability> reqCapabilities> {
1767+ def : SpecConstantOpOperands<NAME, value>;
1768+ defm : SymbolicOperandWithRequirements<SpecConstantOpOperandsOperand, value, NAME, 0, 0, reqExtensions, reqCapabilities>;
1769+ }
1770+
1771+ // Conversion
1772+ defm SConvert : SpecConstantOpOperandsOperand<114, [], []>;
1773+ defm FConvert : SpecConstantOpOperandsOperand<115, [], []>;
1774+ defm ConvertFToS : SpecConstantOpOperandsOperand<110, [], [Kernel]>;
1775+ defm ConvertSToF : SpecConstantOpOperandsOperand<111, [], [Kernel]>;
1776+ defm ConvertFToU : SpecConstantOpOperandsOperand<109, [], [Kernel]>;
1777+ defm ConvertUToF : SpecConstantOpOperandsOperand<112, [], [Kernel]>;
1778+ defm UConvert : SpecConstantOpOperandsOperand<113, [], [Kernel]>;
1779+ defm ConvertPtrToU : SpecConstantOpOperandsOperand<117, [], [Kernel]>;
1780+ defm ConvertUToPtr : SpecConstantOpOperandsOperand<120, [], [Kernel]>;
1781+ defm GenericCastToPtr : SpecConstantOpOperandsOperand<122, [], [Kernel]>;
1782+ defm PtrCastToGeneric : SpecConstantOpOperandsOperand<121, [], [Kernel]>;
1783+ defm Bitcast : SpecConstantOpOperandsOperand<124, [], []>;
1784+ defm QuantizeToF16 : SpecConstantOpOperandsOperand<116, [], [Shader]>;
1785+ // Arithmetic
1786+ defm SNegate : SpecConstantOpOperandsOperand<126, [], []>;
1787+ defm Not : SpecConstantOpOperandsOperand<200, [], []>;
1788+ defm IAdd : SpecConstantOpOperandsOperand<128, [], []>;
1789+ defm ISub : SpecConstantOpOperandsOperand<130, [], []>;
1790+ defm IMul : SpecConstantOpOperandsOperand<132, [], []>;
1791+ defm UDiv : SpecConstantOpOperandsOperand<134, [], []>;
1792+ defm SDiv : SpecConstantOpOperandsOperand<135, [], []>;
1793+ defm UMod : SpecConstantOpOperandsOperand<137, [], []>;
1794+ defm SRem : SpecConstantOpOperandsOperand<138, [], []>;
1795+ defm SMod : SpecConstantOpOperandsOperand<139, [], []>;
1796+ defm ShiftRightLogical : SpecConstantOpOperandsOperand<194, [], []>;
1797+ defm ShiftRightArithmetic : SpecConstantOpOperandsOperand<195, [], []>;
1798+ defm ShiftLeftLogical : SpecConstantOpOperandsOperand<196, [], []>;
1799+ defm BitwiseOr : SpecConstantOpOperandsOperand<197, [], []>;
1800+ defm BitwiseAnd : SpecConstantOpOperandsOperand<199, [], []>;
1801+ defm BitwiseXor : SpecConstantOpOperandsOperand<198, [], []>;
1802+ defm FNegate : SpecConstantOpOperandsOperand<127, [], [Kernel]>;
1803+ defm FAdd : SpecConstantOpOperandsOperand<129, [], [Kernel]>;
1804+ defm FSub : SpecConstantOpOperandsOperand<131, [], [Kernel]>;
1805+ defm FMul : SpecConstantOpOperandsOperand<133, [], [Kernel]>;
1806+ defm FDiv : SpecConstantOpOperandsOperand<136, [], [Kernel]>;
1807+ defm FRem : SpecConstantOpOperandsOperand<140, [], [Kernel]>;
1808+ defm FMod : SpecConstantOpOperandsOperand<141, [], [Kernel]>;
1809+ // Composite;
1810+ defm VectorShuffle : SpecConstantOpOperandsOperand<79, [], []>;
1811+ defm CompositeExtract : SpecConstantOpOperandsOperand<81, [], []>;
1812+ defm CompositeInsert : SpecConstantOpOperandsOperand<82, [], []>;
1813+ // Logical;
1814+ defm LogicalOr : SpecConstantOpOperandsOperand<166, [], []>;
1815+ defm LogicalAnd : SpecConstantOpOperandsOperand<167, [], []>;
1816+ defm LogicalNot : SpecConstantOpOperandsOperand<168, [], []>;
1817+ defm LogicalEqual : SpecConstantOpOperandsOperand<164, [], []>;
1818+ defm LogicalNotEqual : SpecConstantOpOperandsOperand<165, [], []>;
1819+ defm Select : SpecConstantOpOperandsOperand<169, [], []>;
1820+ // Comparison;
1821+ defm IEqual : SpecConstantOpOperandsOperand<170, [], []>;
1822+ defm INotEqual : SpecConstantOpOperandsOperand<171, [], []>;
1823+ defm ULessThan : SpecConstantOpOperandsOperand<176, [], []>;
1824+ defm SLessThan : SpecConstantOpOperandsOperand<177, [], []>;
1825+ defm UGreaterThan : SpecConstantOpOperandsOperand<172, [], []>;
1826+ defm SGreaterThan : SpecConstantOpOperandsOperand<173, [], []>;
1827+ defm ULessThanEqual : SpecConstantOpOperandsOperand<176, [], []>;
1828+ defm SLessThanEqual : SpecConstantOpOperandsOperand<178, [], []>;
1829+ defm UGreaterThanEqual : SpecConstantOpOperandsOperand<174, [], []>;
1830+ defm SGreaterThanEqual : SpecConstantOpOperandsOperand<175, [], []>;
1831+ // Memory SpecConstantOpOperandsOperand<0, [], []>;
1832+ defm AccessChain : SpecConstantOpOperandsOperand<65, [], [Kernel]>;
1833+ defm InBoundsAccessChain : SpecConstantOpOperandsOperand<66, [], [Kernel]>;
1834+ defm PtrAccessChain : SpecConstantOpOperandsOperand<67, [], [Kernel]>;
1835+ defm InBoundsPtrAccessChain : SpecConstantOpOperandsOperand<70, [], [Kernel]>;
1836+ defm CooperativeMatrixLengthKHR : SpecConstantOpOperandsOperand<4460, [], []>;
0 commit comments