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