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