@@ -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
176
177
//===----------------------------------------------------------------------===//
177
178
// Multiclass used to define Extesions enum values and at the same time
@@ -1743,3 +1744,93 @@ defm MatrixAAndBTF32ComponentsINTEL : CooperativeMatrixOperandsOperand<0x20, [SP
1743
1744
defm MatrixAAndBBFloat16ComponentsINTEL : CooperativeMatrixOperandsOperand<0x40, [SPV_INTEL_joint_matrix], [CooperativeMatrixBFloat16ComponentTypeINTEL]>;
1744
1745
defm MatrixCBFloat16ComponentsINTEL : CooperativeMatrixOperandsOperand<0x80, [SPV_INTEL_joint_matrix], [CooperativeMatrixBFloat16ComponentTypeINTEL]>;
1745
1746
defm 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