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