@@ -1035,6 +1035,7 @@ enum FPEncodingWrap {
10351035 BF16 = FPEncoding::FPEncodingBFloat16KHR,
10361036 E4M3 = FPEncoding::FPEncodingFloat8E4M3EXT,
10371037 E5M2 = FPEncoding::FPEncodingFloat8E5M2EXT,
1038+ E2M1 = internal::FPEncodingFloat4E2M1INTEL,
10381039};
10391040
10401041// Structure describing non-trivial conversions (FP8 and int4)
@@ -1063,36 +1064,117 @@ typedef SPIRVMap<llvm::StringRef, FPConversionDesc> FPConvertToEncodingMap;
10631064
10641065// clang-format off
10651066template <> inline void FPConvertToEncodingMap::init () {
1066- // 8-bit conversions
1067- add (" ConvertE4M3ToFP16EXT" ,
1068- {FPEncodingWrap::E4M3, FPEncodingWrap::IEEE754, OpFConvert});
1069- add (" ConvertE5M2ToFP16EXT" ,
1070- {FPEncodingWrap::E5M2, FPEncodingWrap::IEEE754, OpFConvert});
1071- add (" ConvertE4M3ToBF16EXT" ,
1072- {FPEncodingWrap::E4M3, FPEncodingWrap::BF16, OpFConvert});
1073- add (" ConvertE5M2ToBF16EXT" ,
1074- {FPEncodingWrap::E5M2, FPEncodingWrap::BF16, OpFConvert});
1075- add (" ConvertFP16ToE4M3EXT" ,
1076- {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3, OpFConvert});
1077- add (" ConvertFP16ToE5M2EXT" ,
1078- {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2, OpFConvert});
1079- add (" ConvertBF16ToE4M3EXT" ,
1080- {FPEncodingWrap::BF16, FPEncodingWrap::E4M3, OpFConvert});
1081- add (" ConvertBF16ToE5M2EXT" ,
1082- {FPEncodingWrap::BF16, FPEncodingWrap::E5M2, OpFConvert});
1083-
1084- add (" ConvertInt4ToE4M3INTEL" ,
1085- {FPEncodingWrap::Integer, FPEncodingWrap::E4M3, OpConvertSToF});
1086- add (" ConvertInt4ToE5M2INTEL" ,
1087- {FPEncodingWrap::Integer, FPEncodingWrap::E5M2, OpConvertSToF});
1088- add (" ConvertInt4ToFP16INTEL" ,
1089- {FPEncodingWrap::Integer, FPEncodingWrap::IEEE754, OpConvertSToF});
1090- add (" ConvertInt4ToBF16INTEL" ,
1091- {FPEncodingWrap::Integer, FPEncodingWrap::BF16, OpConvertSToF});
1092- add (" ConvertFP16ToInt4INTEL" ,
1093- {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer, OpConvertFToS});
1094- add (" ConvertBF16ToInt4INTEL" ,
1095- {FPEncodingWrap::BF16, FPEncodingWrap::Integer, OpConvertFToS});
1067+ // 4-bit conversions
1068+ add (" ConvertE2M1ToE4M3INTEL" ,
1069+ {FPEncodingWrap::E2M1, FPEncodingWrap::E4M3, OpFConvert});
1070+ add (" ConvertE2M1ToE5M2INTEL" ,
1071+ {FPEncodingWrap::E2M1, FPEncodingWrap::E5M2, OpFConvert});
1072+ add (" ConvertE2M1ToFP16INTEL" ,
1073+ {FPEncodingWrap::E2M1, FPEncodingWrap::IEEE754, OpFConvert});
1074+ add (" ConvertE2M1ToBF16INTEL" ,
1075+ {FPEncodingWrap::E2M1, FPEncodingWrap::BF16, OpFConvert});
1076+
1077+ add (" ConvertInt4ToE4M3INTEL" ,
1078+ {FPEncodingWrap::Integer, FPEncodingWrap::E4M3, OpConvertSToF});
1079+ add (" ConvertInt4ToE5M2INTEL" ,
1080+ {FPEncodingWrap::Integer, FPEncodingWrap::E5M2, OpConvertSToF});
1081+ add (" ConvertInt4ToFP16INTEL" ,
1082+ {FPEncodingWrap::Integer, FPEncodingWrap::IEEE754, OpConvertSToF});
1083+ add (" ConvertInt4ToBF16INTEL" ,
1084+ {FPEncodingWrap::Integer, FPEncodingWrap::BF16, OpConvertSToF});
1085+ add (" ConvertInt4ToInt8INTEL" ,
1086+ {FPEncodingWrap::Integer, FPEncodingWrap::Integer, OpSConvert});
1087+
1088+ add (" ConvertFP16ToE2M1INTEL" ,
1089+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E2M1, OpFConvert});
1090+ add (" ConvertBF16ToE2M1INTEL" ,
1091+ {FPEncodingWrap::BF16, FPEncodingWrap::E2M1, OpFConvert});
1092+ add (" ConvertFP16ToInt4INTEL" ,
1093+ {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer, OpConvertFToS});
1094+ add (" ConvertBF16ToInt4INTEL" ,
1095+ {FPEncodingWrap::BF16, FPEncodingWrap::Integer, OpConvertFToS});
1096+
1097+ // 8-bit conversions
1098+ add (" ConvertE4M3ToFP16EXT" ,
1099+ {FPEncodingWrap::E4M3, FPEncodingWrap::IEEE754, OpFConvert});
1100+ add (" ConvertE5M2ToFP16EXT" ,
1101+ {FPEncodingWrap::E5M2, FPEncodingWrap::IEEE754, OpFConvert});
1102+ add (" ConvertE4M3ToBF16EXT" ,
1103+ {FPEncodingWrap::E4M3, FPEncodingWrap::BF16, OpFConvert});
1104+ add (" ConvertE5M2ToBF16EXT" ,
1105+ {FPEncodingWrap::E5M2, FPEncodingWrap::BF16, OpFConvert});
1106+ add (" ConvertFP16ToE4M3EXT" ,
1107+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3, OpFConvert});
1108+ add (" ConvertFP16ToE5M2EXT" ,
1109+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2, OpFConvert});
1110+ add (" ConvertBF16ToE4M3EXT" ,
1111+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3, OpFConvert});
1112+ add (" ConvertBF16ToE5M2EXT" ,
1113+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2, OpFConvert});
1114+
1115+ // SPV_INTEL_fp_conversions
1116+ add (" ClampConvertFP16ToE2M1INTEL" ,
1117+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E2M1,
1118+ internal::OpClampConvertFToFINTEL});
1119+ add (" ClampConvertBF16ToE2M1INTEL" ,
1120+ {FPEncodingWrap::BF16, FPEncodingWrap::E2M1,
1121+ internal::OpClampConvertFToFINTEL});
1122+ add (" ClampConvertFP16ToE4M3INTEL" ,
1123+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3,
1124+ internal::OpClampConvertFToFINTEL});
1125+ add (" ClampConvertBF16ToE4M3INTEL" ,
1126+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3,
1127+ internal::OpClampConvertFToFINTEL});
1128+ add (" ClampConvertFP16ToE5M2INTEL" ,
1129+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2,
1130+ internal::OpClampConvertFToFINTEL});
1131+ add (" ClampConvertBF16ToE5M2INTEL" ,
1132+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2,
1133+ internal::OpClampConvertFToFINTEL});
1134+ add (" ClampConvertFP16ToInt4INTEL" ,
1135+ {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer,
1136+ internal::OpClampConvertFToSINTEL});
1137+ add (" ClampConvertBF16ToInt4INTEL" ,
1138+ {FPEncodingWrap::BF16, FPEncodingWrap::Integer,
1139+ internal::OpClampConvertFToSINTEL});
1140+
1141+ add (" StochasticRoundFP16ToE5M2INTEL" ,
1142+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2,
1143+ internal::OpStochasticRoundFToFINTEL});
1144+ add (" StochasticRoundFP16ToE4M3INTEL" ,
1145+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3,
1146+ internal::OpStochasticRoundFToFINTEL});
1147+ add (" StochasticRoundBF16ToE5M2INTEL" ,
1148+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2,
1149+ internal::OpStochasticRoundFToFINTEL});
1150+ add (" StochasticRoundBF16ToE4M3INTEL" ,
1151+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3,
1152+ internal::OpStochasticRoundFToFINTEL});
1153+ add (" StochasticRoundFP16ToE2M1INTEL" ,
1154+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E2M1,
1155+ internal::OpStochasticRoundFToFINTEL});
1156+ add (" StochasticRoundBF16ToE2M1INTEL" ,
1157+ {FPEncodingWrap::BF16, FPEncodingWrap::E2M1,
1158+ internal::OpStochasticRoundFToFINTEL});
1159+ add (" ClampStochasticRoundFP16ToInt4INTEL" ,
1160+ {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer,
1161+ internal::OpClampStochasticRoundFToSINTEL});
1162+ add (" ClampStochasticRoundBF16ToInt4INTEL" ,
1163+ {FPEncodingWrap::BF16, FPEncodingWrap::Integer,
1164+ internal::OpClampStochasticRoundFToSINTEL});
1165+
1166+ add (" ClampStochasticRoundFP16ToE5M2INTEL" ,
1167+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2,
1168+ internal::OpClampStochasticRoundFToFINTEL});
1169+ add (" ClampStochasticRoundFP16ToE4M3INTEL" ,
1170+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3,
1171+ internal::OpClampStochasticRoundFToFINTEL});
1172+ add (" ClampStochasticRoundBF16ToE5M2INTEL" ,
1173+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2,
1174+ internal::OpClampStochasticRoundFToFINTEL});
1175+ add (" ClampStochasticRoundBF16ToE4M3INTEL" ,
1176+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3,
1177+ internal::OpClampStochasticRoundFToFINTEL});
10961178}
10971179
10981180// clang-format on
0 commit comments