@@ -1169,6 +1169,7 @@ enum FPEncodingWrap {
11691169 BF16 = FPEncoding::FPEncodingBFloat16KHR,
11701170 E4M3 = FPEncoding::FPEncodingFloat8E4M3EXT,
11711171 E5M2 = FPEncoding::FPEncodingFloat8E5M2EXT,
1172+ E2M1 = internal::FPEncodingFloat4E2M1INTEL,
11721173};
11731174
11741175// Structure describing non-trivial conversions (FP8 and int4)
@@ -1198,36 +1199,117 @@ typedef SPIRVMap<llvm::StringRef, FPConversionDesc> FPConvertToEncodingMap;
11981199
11991200// clang-format off
12001201template <> inline void FPConvertToEncodingMap::init () {
1201- // 8-bit conversions
1202- add (" ConvertE4M3ToFP16EXT" ,
1203- {FPEncodingWrap::E4M3, FPEncodingWrap::IEEE754, OpFConvert});
1204- add (" ConvertE5M2ToFP16EXT" ,
1205- {FPEncodingWrap::E5M2, FPEncodingWrap::IEEE754, OpFConvert});
1206- add (" ConvertE4M3ToBF16EXT" ,
1207- {FPEncodingWrap::E4M3, FPEncodingWrap::BF16, OpFConvert});
1208- add (" ConvertE5M2ToBF16EXT" ,
1209- {FPEncodingWrap::E5M2, FPEncodingWrap::BF16, OpFConvert});
1210- add (" ConvertFP16ToE4M3EXT" ,
1211- {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3, OpFConvert});
1212- add (" ConvertFP16ToE5M2EXT" ,
1213- {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2, OpFConvert});
1214- add (" ConvertBF16ToE4M3EXT" ,
1215- {FPEncodingWrap::BF16, FPEncodingWrap::E4M3, OpFConvert});
1216- add (" ConvertBF16ToE5M2EXT" ,
1217- {FPEncodingWrap::BF16, FPEncodingWrap::E5M2, OpFConvert});
1218-
1219- add (" ConvertInt4ToE4M3INTEL" ,
1220- {FPEncodingWrap::Integer, FPEncodingWrap::E4M3, OpConvertSToF});
1221- add (" ConvertInt4ToE5M2INTEL" ,
1222- {FPEncodingWrap::Integer, FPEncodingWrap::E5M2, OpConvertSToF});
1223- add (" ConvertInt4ToFP16INTEL" ,
1224- {FPEncodingWrap::Integer, FPEncodingWrap::IEEE754, OpConvertSToF});
1225- add (" ConvertInt4ToBF16INTEL" ,
1226- {FPEncodingWrap::Integer, FPEncodingWrap::BF16, OpConvertSToF});
1227- add (" ConvertFP16ToInt4INTEL" ,
1228- {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer, OpConvertFToS});
1229- add (" ConvertBF16ToInt4INTEL" ,
1230- {FPEncodingWrap::BF16, FPEncodingWrap::Integer, OpConvertFToS});
1202+ // 4-bit conversions
1203+ add (" ConvertE2M1ToE4M3INTEL" ,
1204+ {FPEncodingWrap::E2M1, FPEncodingWrap::E4M3, OpFConvert});
1205+ add (" ConvertE2M1ToE5M2INTEL" ,
1206+ {FPEncodingWrap::E2M1, FPEncodingWrap::E5M2, OpFConvert});
1207+ add (" ConvertE2M1ToFP16INTEL" ,
1208+ {FPEncodingWrap::E2M1, FPEncodingWrap::IEEE754, OpFConvert});
1209+ add (" ConvertE2M1ToBF16INTEL" ,
1210+ {FPEncodingWrap::E2M1, FPEncodingWrap::BF16, OpFConvert});
1211+
1212+ add (" ConvertInt4ToE4M3INTEL" ,
1213+ {FPEncodingWrap::Integer, FPEncodingWrap::E4M3, OpConvertSToF});
1214+ add (" ConvertInt4ToE5M2INTEL" ,
1215+ {FPEncodingWrap::Integer, FPEncodingWrap::E5M2, OpConvertSToF});
1216+ add (" ConvertInt4ToFP16INTEL" ,
1217+ {FPEncodingWrap::Integer, FPEncodingWrap::IEEE754, OpConvertSToF});
1218+ add (" ConvertInt4ToBF16INTEL" ,
1219+ {FPEncodingWrap::Integer, FPEncodingWrap::BF16, OpConvertSToF});
1220+ add (" ConvertInt4ToInt8INTEL" ,
1221+ {FPEncodingWrap::Integer, FPEncodingWrap::Integer, OpSConvert});
1222+
1223+ add (" ConvertFP16ToE2M1INTEL" ,
1224+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E2M1, OpFConvert});
1225+ add (" ConvertBF16ToE2M1INTEL" ,
1226+ {FPEncodingWrap::BF16, FPEncodingWrap::E2M1, OpFConvert});
1227+ add (" ConvertFP16ToInt4INTEL" ,
1228+ {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer, OpConvertFToS});
1229+ add (" ConvertBF16ToInt4INTEL" ,
1230+ {FPEncodingWrap::BF16, FPEncodingWrap::Integer, OpConvertFToS});
1231+
1232+ // 8-bit conversions
1233+ add (" ConvertE4M3ToFP16EXT" ,
1234+ {FPEncodingWrap::E4M3, FPEncodingWrap::IEEE754, OpFConvert});
1235+ add (" ConvertE5M2ToFP16EXT" ,
1236+ {FPEncodingWrap::E5M2, FPEncodingWrap::IEEE754, OpFConvert});
1237+ add (" ConvertE4M3ToBF16EXT" ,
1238+ {FPEncodingWrap::E4M3, FPEncodingWrap::BF16, OpFConvert});
1239+ add (" ConvertE5M2ToBF16EXT" ,
1240+ {FPEncodingWrap::E5M2, FPEncodingWrap::BF16, OpFConvert});
1241+ add (" ConvertFP16ToE4M3EXT" ,
1242+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3, OpFConvert});
1243+ add (" ConvertFP16ToE5M2EXT" ,
1244+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2, OpFConvert});
1245+ add (" ConvertBF16ToE4M3EXT" ,
1246+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3, OpFConvert});
1247+ add (" ConvertBF16ToE5M2EXT" ,
1248+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2, OpFConvert});
1249+
1250+ // SPV_INTEL_fp_conversions
1251+ add (" ClampConvertFP16ToE2M1INTEL" ,
1252+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E2M1,
1253+ internal::OpClampConvertFToFINTEL});
1254+ add (" ClampConvertBF16ToE2M1INTEL" ,
1255+ {FPEncodingWrap::BF16, FPEncodingWrap::E2M1,
1256+ internal::OpClampConvertFToFINTEL});
1257+ add (" ClampConvertFP16ToE4M3INTEL" ,
1258+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3,
1259+ internal::OpClampConvertFToFINTEL});
1260+ add (" ClampConvertBF16ToE4M3INTEL" ,
1261+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3,
1262+ internal::OpClampConvertFToFINTEL});
1263+ add (" ClampConvertFP16ToE5M2INTEL" ,
1264+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2,
1265+ internal::OpClampConvertFToFINTEL});
1266+ add (" ClampConvertBF16ToE5M2INTEL" ,
1267+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2,
1268+ internal::OpClampConvertFToFINTEL});
1269+ add (" ClampConvertFP16ToInt4INTEL" ,
1270+ {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer,
1271+ internal::OpClampConvertFToSINTEL});
1272+ add (" ClampConvertBF16ToInt4INTEL" ,
1273+ {FPEncodingWrap::BF16, FPEncodingWrap::Integer,
1274+ internal::OpClampConvertFToSINTEL});
1275+
1276+ add (" StochasticRoundFP16ToE5M2INTEL" ,
1277+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2,
1278+ internal::OpStochasticRoundFToFINTEL});
1279+ add (" StochasticRoundFP16ToE4M3INTEL" ,
1280+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3,
1281+ internal::OpStochasticRoundFToFINTEL});
1282+ add (" StochasticRoundBF16ToE5M2INTEL" ,
1283+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2,
1284+ internal::OpStochasticRoundFToFINTEL});
1285+ add (" StochasticRoundBF16ToE4M3INTEL" ,
1286+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3,
1287+ internal::OpStochasticRoundFToFINTEL});
1288+ add (" StochasticRoundFP16ToE2M1INTEL" ,
1289+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E2M1,
1290+ internal::OpStochasticRoundFToFINTEL});
1291+ add (" StochasticRoundBF16ToE2M1INTEL" ,
1292+ {FPEncodingWrap::BF16, FPEncodingWrap::E2M1,
1293+ internal::OpStochasticRoundFToFINTEL});
1294+ add (" ClampStochasticRoundFP16ToInt4INTEL" ,
1295+ {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer,
1296+ internal::OpClampStochasticRoundFToSINTEL});
1297+ add (" ClampStochasticRoundBF16ToInt4INTEL" ,
1298+ {FPEncodingWrap::BF16, FPEncodingWrap::Integer,
1299+ internal::OpClampStochasticRoundFToSINTEL});
1300+
1301+ add (" ClampStochasticRoundFP16ToE5M2INTEL" ,
1302+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2,
1303+ internal::OpClampStochasticRoundFToFINTEL});
1304+ add (" ClampStochasticRoundFP16ToE4M3INTEL" ,
1305+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3,
1306+ internal::OpClampStochasticRoundFToFINTEL});
1307+ add (" ClampStochasticRoundBF16ToE5M2INTEL" ,
1308+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2,
1309+ internal::OpClampStochasticRoundFToFINTEL});
1310+ add (" ClampStochasticRoundBF16ToE4M3INTEL" ,
1311+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3,
1312+ internal::OpClampStochasticRoundFToFINTEL});
12311313}
12321314
12331315// clang-format on
0 commit comments