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