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