@@ -1050,6 +1050,7 @@ enum FPEncodingWrap {
10501050 BF16 = FPEncoding::FPEncodingBFloat16KHR,
10511051 E4M3 = FPEncoding::FPEncodingFloat8E4M3EXT,
10521052 E5M2 = FPEncoding::FPEncodingFloat8E5M2EXT,
1053+ E2M1 = internal::FPEncodingFloat4E2M1INTEL,
10531054};
10541055
10551056// Structure describing non-trivial conversions (FP8 and int4)
@@ -1078,36 +1079,117 @@ typedef SPIRVMap<llvm::StringRef, FPConversionDesc> FPConvertToEncodingMap;
10781079
10791080// clang-format off
10801081template <> inline void FPConvertToEncodingMap::init () {
1081- // 8-bit conversions
1082- add (" ConvertE4M3ToFP16EXT" ,
1083- {FPEncodingWrap::E4M3, FPEncodingWrap::IEEE754, OpFConvert});
1084- add (" ConvertE5M2ToFP16EXT" ,
1085- {FPEncodingWrap::E5M2, FPEncodingWrap::IEEE754, OpFConvert});
1086- add (" ConvertE4M3ToBF16EXT" ,
1087- {FPEncodingWrap::E4M3, FPEncodingWrap::BF16, OpFConvert});
1088- add (" ConvertE5M2ToBF16EXT" ,
1089- {FPEncodingWrap::E5M2, FPEncodingWrap::BF16, OpFConvert});
1090- add (" ConvertFP16ToE4M3EXT" ,
1091- {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3, OpFConvert});
1092- add (" ConvertFP16ToE5M2EXT" ,
1093- {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2, OpFConvert});
1094- add (" ConvertBF16ToE4M3EXT" ,
1095- {FPEncodingWrap::BF16, FPEncodingWrap::E4M3, OpFConvert});
1096- add (" ConvertBF16ToE5M2EXT" ,
1097- {FPEncodingWrap::BF16, FPEncodingWrap::E5M2, OpFConvert});
1098-
1099- add (" ConvertInt4ToE4M3INTEL" ,
1100- {FPEncodingWrap::Integer, FPEncodingWrap::E4M3, OpConvertSToF});
1101- add (" ConvertInt4ToE5M2INTEL" ,
1102- {FPEncodingWrap::Integer, FPEncodingWrap::E5M2, OpConvertSToF});
1103- add (" ConvertInt4ToFP16INTEL" ,
1104- {FPEncodingWrap::Integer, FPEncodingWrap::IEEE754, OpConvertSToF});
1105- add (" ConvertInt4ToBF16INTEL" ,
1106- {FPEncodingWrap::Integer, FPEncodingWrap::BF16, OpConvertSToF});
1107- add (" ConvertFP16ToInt4INTEL" ,
1108- {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer, OpConvertFToS});
1109- add (" ConvertBF16ToInt4INTEL" ,
1110- {FPEncodingWrap::BF16, FPEncodingWrap::Integer, OpConvertFToS});
1082+ // 4-bit conversions
1083+ add (" ConvertE2M1ToE4M3INTEL" ,
1084+ {FPEncodingWrap::E2M1, FPEncodingWrap::E4M3, OpFConvert});
1085+ add (" ConvertE2M1ToE5M2INTEL" ,
1086+ {FPEncodingWrap::E2M1, FPEncodingWrap::E5M2, OpFConvert});
1087+ add (" ConvertE2M1ToFP16INTEL" ,
1088+ {FPEncodingWrap::E2M1, FPEncodingWrap::IEEE754, OpFConvert});
1089+ add (" ConvertE2M1ToBF16INTEL" ,
1090+ {FPEncodingWrap::E2M1, FPEncodingWrap::BF16, OpFConvert});
1091+
1092+ add (" ConvertInt4ToE4M3INTEL" ,
1093+ {FPEncodingWrap::Integer, FPEncodingWrap::E4M3, OpConvertSToF});
1094+ add (" ConvertInt4ToE5M2INTEL" ,
1095+ {FPEncodingWrap::Integer, FPEncodingWrap::E5M2, OpConvertSToF});
1096+ add (" ConvertInt4ToFP16INTEL" ,
1097+ {FPEncodingWrap::Integer, FPEncodingWrap::IEEE754, OpConvertSToF});
1098+ add (" ConvertInt4ToBF16INTEL" ,
1099+ {FPEncodingWrap::Integer, FPEncodingWrap::BF16, OpConvertSToF});
1100+ add (" ConvertInt4ToInt8INTEL" ,
1101+ {FPEncodingWrap::Integer, FPEncodingWrap::Integer, OpSConvert});
1102+
1103+ add (" ConvertFP16ToE2M1INTEL" ,
1104+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E2M1, OpFConvert});
1105+ add (" ConvertBF16ToE2M1INTEL" ,
1106+ {FPEncodingWrap::BF16, FPEncodingWrap::E2M1, OpFConvert});
1107+ add (" ConvertFP16ToInt4INTEL" ,
1108+ {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer, OpConvertFToS});
1109+ add (" ConvertBF16ToInt4INTEL" ,
1110+ {FPEncodingWrap::BF16, FPEncodingWrap::Integer, OpConvertFToS});
1111+
1112+ // 8-bit conversions
1113+ add (" ConvertE4M3ToFP16EXT" ,
1114+ {FPEncodingWrap::E4M3, FPEncodingWrap::IEEE754, OpFConvert});
1115+ add (" ConvertE5M2ToFP16EXT" ,
1116+ {FPEncodingWrap::E5M2, FPEncodingWrap::IEEE754, OpFConvert});
1117+ add (" ConvertE4M3ToBF16EXT" ,
1118+ {FPEncodingWrap::E4M3, FPEncodingWrap::BF16, OpFConvert});
1119+ add (" ConvertE5M2ToBF16EXT" ,
1120+ {FPEncodingWrap::E5M2, FPEncodingWrap::BF16, OpFConvert});
1121+ add (" ConvertFP16ToE4M3EXT" ,
1122+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3, OpFConvert});
1123+ add (" ConvertFP16ToE5M2EXT" ,
1124+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2, OpFConvert});
1125+ add (" ConvertBF16ToE4M3EXT" ,
1126+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3, OpFConvert});
1127+ add (" ConvertBF16ToE5M2EXT" ,
1128+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2, OpFConvert});
1129+
1130+ // SPV_INTEL_fp_conversions
1131+ add (" ClampConvertFP16ToE2M1INTEL" ,
1132+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E2M1,
1133+ internal::OpClampConvertFToFINTEL});
1134+ add (" ClampConvertBF16ToE2M1INTEL" ,
1135+ {FPEncodingWrap::BF16, FPEncodingWrap::E2M1,
1136+ internal::OpClampConvertFToFINTEL});
1137+ add (" ClampConvertFP16ToE4M3INTEL" ,
1138+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3,
1139+ internal::OpClampConvertFToFINTEL});
1140+ add (" ClampConvertBF16ToE4M3INTEL" ,
1141+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3,
1142+ internal::OpClampConvertFToFINTEL});
1143+ add (" ClampConvertFP16ToE5M2INTEL" ,
1144+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2,
1145+ internal::OpClampConvertFToFINTEL});
1146+ add (" ClampConvertBF16ToE5M2INTEL" ,
1147+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2,
1148+ internal::OpClampConvertFToFINTEL});
1149+ add (" ClampConvertFP16ToInt4INTEL" ,
1150+ {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer,
1151+ internal::OpClampConvertFToSINTEL});
1152+ add (" ClampConvertBF16ToInt4INTEL" ,
1153+ {FPEncodingWrap::BF16, FPEncodingWrap::Integer,
1154+ internal::OpClampConvertFToSINTEL});
1155+
1156+ add (" StochasticRoundFP16ToE5M2INTEL" ,
1157+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2,
1158+ internal::OpStochasticRoundFToFINTEL});
1159+ add (" StochasticRoundFP16ToE4M3INTEL" ,
1160+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3,
1161+ internal::OpStochasticRoundFToFINTEL});
1162+ add (" StochasticRoundBF16ToE5M2INTEL" ,
1163+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2,
1164+ internal::OpStochasticRoundFToFINTEL});
1165+ add (" StochasticRoundBF16ToE4M3INTEL" ,
1166+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3,
1167+ internal::OpStochasticRoundFToFINTEL});
1168+ add (" StochasticRoundFP16ToE2M1INTEL" ,
1169+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E2M1,
1170+ internal::OpStochasticRoundFToFINTEL});
1171+ add (" StochasticRoundBF16ToE2M1INTEL" ,
1172+ {FPEncodingWrap::BF16, FPEncodingWrap::E2M1,
1173+ internal::OpStochasticRoundFToFINTEL});
1174+ add (" ClampStochasticRoundFP16ToInt4INTEL" ,
1175+ {FPEncodingWrap::IEEE754, FPEncodingWrap::Integer,
1176+ internal::OpClampStochasticRoundFToSINTEL});
1177+ add (" ClampStochasticRoundBF16ToInt4INTEL" ,
1178+ {FPEncodingWrap::BF16, FPEncodingWrap::Integer,
1179+ internal::OpClampStochasticRoundFToSINTEL});
1180+
1181+ add (" ClampStochasticRoundFP16ToE5M2INTEL" ,
1182+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E5M2,
1183+ internal::OpClampStochasticRoundFToFINTEL});
1184+ add (" ClampStochasticRoundFP16ToE4M3INTEL" ,
1185+ {FPEncodingWrap::IEEE754, FPEncodingWrap::E4M3,
1186+ internal::OpClampStochasticRoundFToFINTEL});
1187+ add (" ClampStochasticRoundBF16ToE5M2INTEL" ,
1188+ {FPEncodingWrap::BF16, FPEncodingWrap::E5M2,
1189+ internal::OpClampStochasticRoundFToFINTEL});
1190+ add (" ClampStochasticRoundBF16ToE4M3INTEL" ,
1191+ {FPEncodingWrap::BF16, FPEncodingWrap::E4M3,
1192+ internal::OpClampStochasticRoundFToFINTEL});
11111193}
11121194
11131195// clang-format on
0 commit comments