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