@@ -172,6 +172,7 @@ def KernelProfilingInfoOperand : OperandCategory;
172
172
def OpcodeOperand : OperandCategory;
173
173
def CooperativeMatrixLayoutOperand : OperandCategory;
174
174
def CooperativeMatrixOperandsOperand : OperandCategory;
175
+ def SpecConstantOpOperandsOperand : OperandCategory;
175
176
def MatrixMultiplyAccumulateOperandsOperand : OperandCategory;
176
177
177
178
//===----------------------------------------------------------------------===//
@@ -1755,6 +1756,95 @@ defm MatrixAAndBBFloat16ComponentsINTEL : CooperativeMatrixOperandsOperand<0x40,
1755
1756
defm MatrixCBFloat16ComponentsINTEL : CooperativeMatrixOperandsOperand<0x80, [SPV_INTEL_joint_matrix], [CooperativeMatrixBFloat16ComponentTypeINTEL]>;
1756
1757
defm MatrixResultBFloat16ComponentsINTEL : CooperativeMatrixOperandsOperand<0x100, [SPV_INTEL_joint_matrix], [CooperativeMatrixBFloat16ComponentTypeINTEL]>;
1757
1758
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
+
1758
1848
//===----------------------------------------------------------------------===//
1759
1849
// Multiclass used to define Matrix Multiply Accumulate Operands enum values and at the same time
1760
1850
// SymbolicOperand entries with string mnemonics and capabilities.
0 commit comments