@@ -1145,6 +1145,7 @@ enum FPEncodingWrap {
11451145 BF16 = FPEncoding::FPEncodingBFloat16KHR,
11461146 E4M3 = FPEncoding::FPEncodingFloat8E4M3EXT,
11471147 E5M2 = FPEncoding::FPEncodingFloat8E5M2EXT,
1148+ E2M1 = internal::FPEncodingFloat4E2M1INTEL,
11481149};
11491150
11501151// Structure describing non-trivial conversions (FP8 and int4)
@@ -1173,36 +1174,117 @@ typedef SPIRVMap<llvm::StringRef, FPConversionDesc> FPConvertToEncodingMap;
11731174
11741175// clang-format off
11751176template <> inline void FPConvertToEncodingMap::init () {
1176- // 8-bit conversions
1177- add (" ConvertE4M3ToFP16EXT" ,
1178- {FPEncodingWrap::E4M3, FPEncodingWrap::IEEE754, OpFConvert});
1179- add (" ConvertE5M2ToFP16EXT" ,
1180- {FPEncodingWrap::E5M2, FPEncodingWrap::IEEE754, OpFConvert});
1181- add (" ConvertE4M3ToBF16EXT" ,
1182- {FPEncodingWrap::E4M3, FPEncodingWrap::BF16, OpFConvert});
1183- add (" ConvertE5M2ToBF16EXT" ,
1184- {FPEncodingWrap::E5M2, FPEncodingWrap::BF16, OpFConvert});
1185- add (" ConvertFP16ToE4M3EXT" ,
1186- {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3, OpFConvert});
1187- add (" ConvertFP16ToE5M2EXT" ,
1188- {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2, OpFConvert});
1189- add (" ConvertBF16ToE4M3EXT" ,
1190- {FPEncodingWrap::BF16, FPEncodingWrap::E4M3, OpFConvert});
1191- add (" ConvertBF16ToE5M2EXT" ,
1192- {FPEncodingWrap::BF16, FPEncodingWrap::E5M2, OpFConvert});
1193-
1194- add (" ConvertInt4ToE4M3INTEL" ,
1195- {FPEncodingWrap::Integer, FPEncodingWrap::E4M3, OpConvertSToF});
1196- add (" ConvertInt4ToE5M2INTEL" ,
1197- {FPEncodingWrap::Integer, FPEncodingWrap::E5M2, OpConvertSToF});
1198- add (" ConvertInt4ToFP16INTEL" ,
1199- {FPEncodingWrap::Integer, FPEncodingWrap::IEEE754, OpConvertSToF});
1200- add (" ConvertInt4ToBF16INTEL" ,
1201- {FPEncodingWrap::Integer, FPEncodingWrap::BF16, OpConvertSToF});
1202- add (" ConvertFP16ToInt4INTEL" ,
1203- {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer, OpConvertFToS});
1204- add (" ConvertBF16ToInt4INTEL" ,
1205- {FPEncodingWrap::BF16, FPEncodingWrap::Integer, OpConvertFToS});
1177+ // 4-bit conversions
1178+ add (" ConvertE2M1ToE4M3INTEL" ,
1179+ {FPEncodingWrap::E2M1, FPEncodingWrap::E4M3, OpFConvert});
1180+ add (" ConvertE2M1ToE5M2INTEL" ,
1181+ {FPEncodingWrap::E2M1, FPEncodingWrap::E5M2, OpFConvert});
1182+ add (" ConvertE2M1ToFP16INTEL" ,
1183+ {FPEncodingWrap::E2M1, FPEncodingWrap::IEEE754, OpFConvert});
1184+ add (" ConvertE2M1ToBF16INTEL" ,
1185+ {FPEncodingWrap::E2M1, FPEncodingWrap::BF16, OpFConvert});
1186+
1187+ add (" ConvertInt4ToE4M3INTEL" ,
1188+ {FPEncodingWrap::Integer, FPEncodingWrap::E4M3, OpConvertSToF});
1189+ add (" ConvertInt4ToE5M2INTEL" ,
1190+ {FPEncodingWrap::Integer, FPEncodingWrap::E5M2, OpConvertSToF});
1191+ add (" ConvertInt4ToFP16INTEL" ,
1192+ {FPEncodingWrap::Integer, FPEncodingWrap::IEEE754, OpConvertSToF});
1193+ add (" ConvertInt4ToBF16INTEL" ,
1194+ {FPEncodingWrap::Integer, FPEncodingWrap::BF16, OpConvertSToF});
1195+ add (" ConvertInt4ToInt8INTEL" ,
1196+ {FPEncodingWrap::Integer, FPEncodingWrap::Integer, OpSConvert});
1197+
1198+ add (" ConvertFP16ToE2M1INTEL" ,
1199+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E2M1, OpFConvert});
1200+ add (" ConvertBF16ToE2M1INTEL" ,
1201+ {FPEncodingWrap::BF16, FPEncodingWrap::E2M1, OpFConvert});
1202+ add (" ConvertFP16ToInt4INTEL" ,
1203+ {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer, OpConvertFToS});
1204+ add (" ConvertBF16ToInt4INTEL" ,
1205+ {FPEncodingWrap::BF16, FPEncodingWrap::Integer, OpConvertFToS});
1206+
1207+ // 8-bit conversions
1208+ add (" ConvertE4M3ToFP16EXT" ,
1209+ {FPEncodingWrap::E4M3, FPEncodingWrap::IEEE754, OpFConvert});
1210+ add (" ConvertE5M2ToFP16EXT" ,
1211+ {FPEncodingWrap::E5M2, FPEncodingWrap::IEEE754, OpFConvert});
1212+ add (" ConvertE4M3ToBF16EXT" ,
1213+ {FPEncodingWrap::E4M3, FPEncodingWrap::BF16, OpFConvert});
1214+ add (" ConvertE5M2ToBF16EXT" ,
1215+ {FPEncodingWrap::E5M2, FPEncodingWrap::BF16, OpFConvert});
1216+ add (" ConvertFP16ToE4M3EXT" ,
1217+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3, OpFConvert});
1218+ add (" ConvertFP16ToE5M2EXT" ,
1219+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2, OpFConvert});
1220+ add (" ConvertBF16ToE4M3EXT" ,
1221+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3, OpFConvert});
1222+ add (" ConvertBF16ToE5M2EXT" ,
1223+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2, OpFConvert});
1224+
1225+ // SPV_INTEL_fp_conversions
1226+ add (" ClampConvertFP16ToE2M1INTEL" ,
1227+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E2M1,
1228+ internal::OpClampConvertFToFINTEL});
1229+ add (" ClampConvertBF16ToE2M1INTEL" ,
1230+ {FPEncodingWrap::BF16, FPEncodingWrap::E2M1,
1231+ internal::OpClampConvertFToFINTEL});
1232+ add (" ClampConvertFP16ToE4M3INTEL" ,
1233+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3,
1234+ internal::OpClampConvertFToFINTEL});
1235+ add (" ClampConvertBF16ToE4M3INTEL" ,
1236+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3,
1237+ internal::OpClampConvertFToFINTEL});
1238+ add (" ClampConvertFP16ToE5M2INTEL" ,
1239+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2,
1240+ internal::OpClampConvertFToFINTEL});
1241+ add (" ClampConvertBF16ToE5M2INTEL" ,
1242+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2,
1243+ internal::OpClampConvertFToFINTEL});
1244+ add (" ClampConvertFP16ToInt4INTEL" ,
1245+ {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer,
1246+ internal::OpClampConvertFToSINTEL});
1247+ add (" ClampConvertBF16ToInt4INTEL" ,
1248+ {FPEncodingWrap::BF16, FPEncodingWrap::Integer,
1249+ internal::OpClampConvertFToSINTEL});
1250+
1251+ add (" StochasticRoundFP16ToE5M2INTEL" ,
1252+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2,
1253+ internal::OpStochasticRoundFToFINTEL});
1254+ add (" StochasticRoundFP16ToE4M3INTEL" ,
1255+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3,
1256+ internal::OpStochasticRoundFToFINTEL});
1257+ add (" StochasticRoundBF16ToE5M2INTEL" ,
1258+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2,
1259+ internal::OpStochasticRoundFToFINTEL});
1260+ add (" StochasticRoundBF16ToE4M3INTEL" ,
1261+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3,
1262+ internal::OpStochasticRoundFToFINTEL});
1263+ add (" StochasticRoundFP16ToE2M1INTEL" ,
1264+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E2M1,
1265+ internal::OpStochasticRoundFToFINTEL});
1266+ add (" StochasticRoundBF16ToE2M1INTEL" ,
1267+ {FPEncodingWrap::BF16, FPEncodingWrap::E2M1,
1268+ internal::OpStochasticRoundFToFINTEL});
1269+ add (" ClampStochasticRoundFP16ToInt4INTEL" ,
1270+ {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer,
1271+ internal::OpClampStochasticRoundFToSINTEL});
1272+ add (" ClampStochasticRoundBF16ToInt4INTEL" ,
1273+ {FPEncodingWrap::BF16, FPEncodingWrap::Integer,
1274+ internal::OpClampStochasticRoundFToSINTEL});
1275+
1276+ add (" ClampStochasticRoundFP16ToE5M2INTEL" ,
1277+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2,
1278+ internal::OpClampStochasticRoundFToFINTEL});
1279+ add (" ClampStochasticRoundFP16ToE4M3INTEL" ,
1280+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3,
1281+ internal::OpClampStochasticRoundFToFINTEL});
1282+ add (" ClampStochasticRoundBF16ToE5M2INTEL" ,
1283+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2,
1284+ internal::OpClampStochasticRoundFToFINTEL});
1285+ add (" ClampStochasticRoundBF16ToE4M3INTEL" ,
1286+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3,
1287+ internal::OpClampStochasticRoundFToFINTEL});
12061288}
12071289
12081290// clang-format on
0 commit comments