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